//v5_dining.js
//Author: R. Buck
//This script facilitates an AJAX representation of menu data
//02-24-09
//NEEDS CODE REFINEMENT!!

//The global XMLHttpRequest variable
var xhr;

//Global array for storing nutritional data
var nutri = new Array();

//Global array for storing Recipe Names
var recNames = new Array();

//Global array for storing portion data
var portions = new Array();

function createXMLHttpRequest() {
    //Call the right constructor for the browser
    if (window.ActiveXObject) {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    } 
    else if (window.XMLHttpRequest) {
        xhr = new XMLHttpRequest();
    }
    else {
	alert("Your browser does not support AJAX");
    }
}

function setDate(){
    var d = new Date();
    var curr_date = new String(d.getDate());
    if (curr_date<10)
    {
        curr_date = (0+curr_date);
    }
    var curr_month = new String(d.getMonth()+1);
    if (curr_month<10)
    {
        curr_month = (0+curr_month);
    }
    var curr_year = new String(d.getFullYear());
    var num_date= new String(curr_year+curr_month+curr_date);
    
    var menuDate = document.getElementById("menuDate");
    menuDate.innerHTML = d;

return num_date

}

//Initializes the script when the html doc is loaded 
function startRequest() {
    createXMLHttpRequest();
    xhr.onreadystatechange = handleMenuStateChange; 
    var file= setDate(); 
    var f1=("menu_xml2/"+file+".xml"); 
    xhr.open("GET", f1, true);
    xhr.send(null);
}

//Handles date changes and loads new menu
function changeDate(i){
    var date = new String();
    var path = new String();
    var p1 = path.concat("menu_xml2/", i);
    var file = date.concat(p1, ".xml");
    createXMLHttpRequest();
    xhr.onreadystatechange = handleMenuStateChange;    
    xhr.open("GET", file, true);
    xhr.send(null);
}

//Verifies the state has changed and proceeds with display method    
function handleMenuStateChange() {
    if(xhr.readyState == 4) {
        if(xhr.status == 200) {
             determineNumberOfMenus();
        }
    }
}

//Determines how many meals are on the menu 2 or 3
function determineNumberOfMenus() {
    var xmlDoc = xhr.responseXML;

    var menuNumber = xmlDoc.getElementsByTagName("RECIPES");
    var i = menuNumber.length;
    if(i==2){
        var mealTitle1 = document.getElementById("MealTitle1");
        mealTitle1.innerHTML="BRUNCH:";
        var mealTitle2 = document.getElementById("MealTitle2");
        mealTitle2.innerHTML="DINNER:";
        var mealTitle3 = document.getElementById("MealTitle3");
        mealTitle3.innerHTML=""; 	
        display2Menus();
    }
    else if(i==3){
    	var breakfast = document.getElementById("BREAKFAST");
    	var mealTitle1 = document.getElementById("MealTitle1");     
    	mealTitle1.innerHTML="BREAKFAST:";    
    	var mealTitle2 = document.getElementById("MealTitle2");      
    	mealTitle2.innerHTML="LUNCH:";
    	var mealTitle3 = document.getElementById("MealTitle3");    
    	mealTitle3.innerHTML="DINNER:";     	
    	display3Menus();
    }

}

//Breaks menu.xml info into 2 arrays -- Brunch and Dinner 
function display2Menus() {
    var xmlDoc = xhr.responseXML;

    var mealNode1 = xmlDoc.getElementsByTagName("RECIPES")[0];
    var meals1 = mealNode1.getElementsByTagName("RECIPE");

    var mealNode2 = xmlDoc.getElementsByTagName("RECIPES")[1];
    var meals2 = mealNode2.getElementsByTagName("RECIPE");

    output2Meals(meals1, meals2);

}

//Breaks menu.xml info into 3 arrays -- Breakfast, Lunch, and Dinner
function display3Menus() {
    var xmlDoc = xhr.responseXML; 

    var mealNode1 = xmlDoc.getElementsByTagName("RECIPES")[0];
    var meals1 = mealNode1.getElementsByTagName("RECIPE");
    
    var mealNode2 = xmlDoc.getElementsByTagName("RECIPES")[1];
    var meals2 = mealNode2.getElementsByTagName("RECIPE");

    var mealNode3 = xmlDoc.getElementsByTagName("RECIPES")[2];
    var meals3 = mealNode3.getElementsByTagName("RECIPE");

    output3Meals(meals1, meals2, meals3);

}

function output2Meals(meals1, meals2) {
    var currentMeal=null;
    var breakfast = document.getElementById("BREAKFAST");
    breakfast.innerHTML="";
    var lunch = document.getElementById("LUNCH");
    lunch.innerHTML="";
    var dinner = document.getElementById("DINNER");
    dinner.innerHTML="";

    for(var i = 0; i < meals1.length; i++) {
        currentMeal = meals1[i];
        //Start building the links for nutritional info
        var v1 = new String("<a href=\"javascript:nutrition\(");
        //Recipe id
        var v2 = currentMeal.attributes.getNamedItem("id").value;
        var v2a = v2.split("-");
        var nid = v2a[0];
        nutri[nid] = currentMeal.attributes.getNamedItem("nutrients").value;
        portions[nid] = currentMeal.attributes.getNamedItem("portion").value;
        var v3 = (v1 + v2a[0]);
        var v4 = new String("\)\">");
        var v5 = (v3+v4);
        //Recipe name
        var v6 = currentMeal.childNodes[0].nodeValue;
        recNames[nid]= v6;
        var v7 = (v5+v6);
        breakfast.innerHTML += v7;
        breakfast.innerHTML += "</a>";
        breakfast.innerHTML += "<br />";
    }

    for(var i = 0; i < meals2.length; i++) {
        currentMeal = meals2[i];
        //Start building the links for nutritional info
        var v1 = new String("<a href=\"javascript:nutrition\(");
        //Recipe id
        var v2 = currentMeal.attributes.getNamedItem("id").value;
        var v2a = v2.split("-");
        var nid = v2a[0];
        nutri[nid] = currentMeal.attributes.getNamedItem("nutrients").value;
        portions[nid] = currentMeal.attributes.getNamedItem("portion").value;
        var v3 = (v1 + v2a[0]);
        var v4 = new String("\)\">");
        var v5 = (v3+v4);
        //Recipe name
        var v6 = currentMeal.childNodes[0].nodeValue;
        recNames[nid]= v6;
        var v7 = (v5+v6);
        lunch.innerHTML += v7;
        lunch.innerHTML += "</a>";
        lunch.innerHTML += "<br />";
    }

   return true;
}

function output3Meals(meals1, meals2, meals3) {  
    var currentMeal=null;
    var breakfast = document.getElementById("BREAKFAST");
    breakfast.innerHTML="";
    var lunch = document.getElementById("LUNCH");    
    lunch.innerHTML="";
    var dinner = document.getElementById("DINNER");
    dinner.innerHTML="";    

    for(var i = 0; i < meals1.length; i++) {
        currentMeal = meals1[i];
        //Start building the links for nutritional info
        var v1 = new String("<a href=\"javascript:nutrition\(");
        //Recipe id
        var v2 = currentMeal.attributes.getNamedItem("id").value;
        var v2a = v2.split("-");
        var nid = v2a[0];
        nutri[nid] = currentMeal.attributes.getNamedItem("nutrients").value;
        portions[nid] = currentMeal.attributes.getNamedItem("portion").value; 
	var v3 = (v1 + v2a[0]);
        var v4 = new String("\)\">");
        var v5 = (v3+v4);
        //Recipe name   
        var v6 = currentMeal.childNodes[0].nodeValue; 
        recNames[nid]= v6;
        var v7 = (v5+v6);
        breakfast.innerHTML += v7;
        breakfast.innerHTML += "</a>";  
        breakfast.innerHTML += "<br />";        
    }

    for(var i = 0; i < meals2.length; i++) {
        currentMeal = meals2[i];
        //Start building the links for nutritional info
        var v1 = new String("<a href=\"javascript:nutrition\(");
        //Recipe id
        var v2 = currentMeal.attributes.getNamedItem("id").value;
        var v2a = v2.split("-");
        var nid = v2a[0];
        nutri[nid] = currentMeal.attributes.getNamedItem("nutrients").value;
        portions[nid] = currentMeal.attributes.getNamedItem("portion").value;  
	var v3 = (v1 + v2a[0]);
        var v4 = new String("\)\">");
        var v5 = (v3+v4);
        //Recipe name   
        var v6 = currentMeal.childNodes[0].nodeValue; 
        recNames[nid]= v6;        
        var v7 = (v5+v6);
        lunch.innerHTML += v7;
        lunch.innerHTML += "</a>";  
        lunch.innerHTML += "<br />"; 
    }

    for(var i = 0; i < meals3.length; i++) {
        currentMeal = meals3[i];
        //Start building the links for nutritional info
        var v1 = new String("<a href=\"javascript:nutrition\(");
        //Recipe id
        var v2 = currentMeal.attributes.getNamedItem("id").value;
        var v2a = v2.split("-");
        var nid = v2a[0];        
        nutri[nid] = currentMeal.attributes.getNamedItem("nutrients").value;
        portions[nid] = currentMeal.attributes.getNamedItem("portion").value;  
	var v3 = (v1 + v2a[0]);
        var v4 = new String("\)\">");
        var v5 = (v3+v4);
        //Recipe name   
        var v6 = currentMeal.childNodes[0].nodeValue; 
        recNames[nid]= v6;        
        var v7 = (v5+v6);
        dinner.innerHTML += v7;
        dinner.innerHTML += "</a>";  
        dinner.innerHTML += "<br />"; 
    }

return true;

}

//Handles nutrition info clicks
function nutrition(i){
    var temp = new String(nutri[i]);
    var v2a = temp.split("|"); 
    
    var rname = document.getElementById("rname");
    var portion = document.getElementById("portion");
    var cal = document.getElementById("cal");
    var fcal = document.getElementById("fcal");
    var fat = document.getElementById("fat");
    var pfat = document.getElementById("pfat");
    var sfat = document.getElementById("sfat");
    var psfat = document.getElementById("psfat");
    var transfat = document.getElementById("transfat");
    var chol = document.getElementById("chol");
    var pchol = document.getElementById("pchol");
    var na = document.getElementById("na");
    var pna = document.getElementById("pna");
    var carbs = document.getElementById("carbs");
    var pcarbs = document.getElementById("pcarbs");
    var df = document.getElementById("df");    
    var pdf = document.getElementById("pdf");
    var sug = document.getElementById("sug");
    var pro = document.getElementById("pro");
    var vita = document.getElementById("vita");
    var vitc = document.getElementById("vitc");
    var  calcium = document.getElementById("calcium");
    var  iron = document.getElementById("iron");
    var  vb1 = document.getElementById("vb1");
    var  vb2 = document.getElementById("vb2");
    var  vb3 = document.getElementById("vb3");
    var  vb6 = document.getElementById("vb6");
    var  folacin = document.getElementById("folacin");
    var  vb12 = document.getElementById("vb12");
    var  phos = document.getElementById("phos");
    var  zinc = document.getElementById("zinc");

    rname.innerHTML=recNames[i];
    portion.innerHTML=portions[i];
    cal.innerHTML=v2a[0];
    
    fcal.innerHTML=v2a[1];
    if (v2a[2] == "")
    {
        fat.innerHTML="--";
        pfat.innerHTML="--";
    }
    else{ 
    fat.innerHTML=Math.round(v2a[2]);
    pfat.innerHTML=(Math.round((v2a[2]/65)*100));
    }

    if (v2a[3] == "")
    {
  	sfat.innerHTML="--";
        psfat.innerHTML="--";
    }
    else{
    	sfat.innerHTML=Math.round(v2a[3]);
    	psfat.innerHTML=(Math.round((v2a[3]/20)*100));
    }

    if (v2a[4] == "")
    {
    	transfat.innerHTML="--";
    }
    else{ 
    	transfat.innerHTML=Math.round(v2a[4]);
    } 
    
    if (v2a[7] == "")
    { 
    	chol.innerHTML="--";
    	pchol.innerHTML="--";
    }
    else{
    	chol.innerHTML=v2a[7];
    	pchol.innerHTML=(Math.round((v2a[7]/300)*100));
    }

    if (v2a[8] == "")
    {
     	na.innerHTML="--";
        pna.innerHTML="--";
    } 
    else{ 
    	na.innerHTML=v2a[8];
    	pna.innerHTML=(Math.round((v2a[8]/2400)*100));
    }

   if (v2a[10] == "")
    {
    	carbs.innerHTML="--";
    	pcarbs.innerHTML="--";
    }
    else{
  	carbs.innerHTML=Math.round(v2a[10]);
        pcarbs.innerHTML=(Math.round((v2a[10]/300)*100));    
    } 

   if (v2a[11] == "")
    {
    	df.innerHTML="--";    
    	pdf.innerHTML="--";
    }
    else{
 	df.innerHTML=Math.round(v2a[11]);
    	pdf.innerHTML=(Math.round((v2a[11]/25)*100));
    }

    if (v2a[12] == "")
    { 
    	sug.innerHTML="--";
    }
    else{
        sug.innerHTML=Math.round(v2a[12]);
    }

    if (v2a[13] == "")
    {
    	pro.innerHTML="--";
    }
    else{
        pro.innerHTML=Math.round(v2a[13]);
    }

    vita.innerHTML=(Math.round((v2a[14]/5000)*100));

    vitc.innerHTML=(Math.round((v2a[15]/60)*100));

    calcium.innerHTML=(Math.round((v2a[16]/1000)*100));

    iron.innerHTML=(Math.round((v2a[17]/18)*100));
 
    vb1.innerHTML=(Math.round((v2a[18]/1.5)*100));

    vb2.innerHTML=(Math.round((v2a[19]/1.7)*100));
 
    vb3.innerHTML=(Math.round((v2a[20]/20)*100));

    vb6.innerHTML=(Math.round((v2a[21]/2)*100));
 
    folacin.innerHTML=(Math.round((v2a[22]/400)*100));

    vb12.innerHTML=(Math.round((v2a[23]/6)*100));
 
    phos.innerHTML=(Math.round((v2a[24]/1000)*100));

    zinc.innerHTML=(Math.round((v2a[25]/15)*100));

}

var cal1;

function init() {
    cal1 = new YAHOO.widget.Calendar("cal1","cal1Container");
    cal1.selectEvent.subscribe(mySelectHandler, cal1, true);
    cal1.cfg.setProperty("mindate","08/29/2009",false);  
    cal1.cfg.setProperty("maxdate","12/06/2009",false);

    cal1.render();
}

function dateToLocaleString(dt, cal) {
   var wStr = cal.cfg.getProperty("WEEKDAYS_LONG")[dt.getDay()];
   var dStr = dt.getDate();
   var mStr = cal.cfg.getProperty("MONTHS_LONG")[dt.getMonth()];
   var yStr = dt.getFullYear();
   return (wStr + ", " + dStr + " " + mStr + " " + yStr);
}

function mySelectHandler(type,args,obj) {

   var selected = args[0];
   var selDate = this.toDate(selected[0]);
   var selDay = new String(selDate.getDate());
    if (selDay<10)
    {
        selDay = (0+selDay);
    }
    var selMonth = new String(selDate.getMonth()+1);
    if (selMonth<10)
    {
        selMonth = (0+selMonth);
    }
    var selYear = new String(selDate.getFullYear());
    var numDate= new String(selYear+selMonth+selDay);
    changeDate(numDate);
    var menuDate = document.getElementById("menuDate");
    menuDate.innerHTML = dateToLocaleString(selDate, this);

};

YAHOO.util.Event.addListener(window, 'load', init);



