

// this is the id of the default content to load 
// when the page inits itself (or load errors happen)
var DEFAULT_CONTENT_ID = "Splash";
var MAX_MENU_PRICE = 20.00;
var AI_RUNAWAY_MAX = 20;

/******************************************************************************/
function pageinit(initparam){
   
      
   var value = getSearchParam("content");  
   if(value){
      LoadAndSelect(value);
   }else if(initparam){
      LoadAndSelect(initparam);
   }else{
      LoadAndSelect(DEFAULT_CONTENT_ID);
   }
   
   /*
   var cal_contanors = document.getElementsByClassName("cal_contanor");
   for(i = 0; i < cal_contanors.length; i++){
      alert(cal_contanors[i]);
   }
   */
   
}


/******************************************************************************/
function getBrowserWH() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  return [myWidth, myHeight];
}


/******************************************************************************/
function showLogin(){
   var WH = getBrowserWH();   
   var thebox = document.getElementById("TheBox");
   
   thebox.style.top = 0;
   thebox.style.left = (WH[0] - thebox.clientWidth) / 2;
}


/******************************************************************************/

function getSearchParam(name){
   var search = location.search;
   
   var start = search.indexOf("?" + name + "=");
   if(start < 0){ start = search.indexOf("&" + name + "="); }
   if(start < 0){ }else{
      var end = search.indexOf("&", start + 1);
      if(end < 0){ end = search.length; }
      
      var subsearch = search.substr(start + 1, end - (start + 1));
      var kvp = subsearch.split("=");
      if(kvp.length = 2){
         var value = kvp[1];
         
         // convert output text to safe text
         var result = '';
         for(var i = 0;i <= value.length;i++){
            var c = value.charAt(i);
            result = result + (c=='+'?' ':c);
         }
         return unescape(result);
      }
   }
   return null;
}


/******************************************************************************/
//if(!document.getElementsByClassName){ }

function getElementsByClassName(node, classname){
   //if(!node){ node = document; }
   
	if(node.getElementsByClassName){
		return node.getElementsByClassName(classname);
	}else{
		// your custom function
      /*var testClass = new RegExp("(^|\\s)" + classname + "(\\s|$)");
	   var tag = tag || "*";
   	var elm = elm || document;
   	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
   	var returnElements = [];
   	var current;
   	var length = elements.length;
   	for(var i=0; i<length; i++){
    		current = elements[i];
   		if(testClass.test(current.className)){
   			returnElements.push(current);
   		}
   	}
	   return returnElements;*/
      
      var a = [];
      var re = new RegExp('\\b' + classname + '\\b');
      var els = node.getElementsByTagName("*");
      for(var i=0,j=els.length; i<j; i++){
         if(re.test(els[i].className))a.push(els[i]);
      }
      return a;
	}
}

/*function getElementsByClassName(classname, node)  {
    if(!node) node = document.getElementsByTagName("body")[0];
    
}*/


/******************************************************************************/

function getNodeAttr(n, attr){
   var v = n.getAttribute(attr);
   if(v == null){
      v = n[attr]; // For IE?
   }
   return v;
}

function setNodeAttr(n, attr, v){
   n.setAttribute(attr, v);
   n[attr] = v; // For IE
}


function getCSSStyle(elem){
   var style = elem.getAttribute("class");
   if(style == null){
      style = elem['className']; // For IE?
   }
   return style;
}

function setCSSStyle(elem, style){
   elem.setAttribute("class", style);
   elem['className'] = style;  // For IE
   
   //elem.className = style; // does this work for everyone?
   
}


/******************************************************************************/

/*function doit(){
     try{
        var results = document.evaluate("//div[@class='content']", document, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
        
        var r = results.iterateNext();
        if(r){
           while(r){
              alert(r.id);
              r = results.iterateNext();
           }
         }else{
            alert("no results of query");
         }
     }catch(e){
        alert("exception:" + e.name + "\n" + e.description);
     }
}*/



function sliderMovePage(dir, slidername){
   //alert(slidername);
   var viewport = document.getElementById(slidername);
   //var slider = document.getElementById("Slider");
   //var sliders = viewport.getElementsByClassName("slider");
   var sliders = getElementsByClassName(viewport, "slider");
   
   var slider = sliders[0];
   
   var page_width = viewport.clientWidth;
   
   var totalnumpages = 0;
   var totalwidth = 0;
   var index = 0;
   for(index = 0; index < slider.childNodes.length; index++){
      if(slider.childNodes[index].nodeName.charAt(0) != "#"){
         // this is the wrong way to add up total width
         // of the underlineing views.  the client width
         // is effected by the border, however offsets are
         // not, thus client width is smaller then the total
         // width of the viewport
         totalwidth += slider.childNodes[index].clientWidth;
         totalnumpages++;
       }
   }
   

   
   var tmpstr = slider.style.left;
   if(slider.style.left == ""){
      tmpstr = "0";
   }
   var psindex = slider.style.left.indexOf("px");
   if(psindex >= 0){
      tmpstr = slider.style.left.substr(0, psindex);
   }
   var intcurvalue = parseInt(tmpstr);

   
   
   if(dir == "next"){
      if(Math.abs(intcurvalue) == (totalwidth - page_width - page_width)){
         //next.style.visibility = "hidden";
         sliderHideNext(slidername);
         intcurvalue -= page_width;
      }else{
         intcurvalue -= page_width;
      }
   }else if(dir == "prev"){
      if(Math.abs(intcurvalue) == totalwidth - page_width){
         //next.style.visibility = "visible";
         sliderShowNext(slidername);
      }
      if(intcurvalue == 0){
         // would cause a move past the beging
         // make sure prev was disabled?
         //prev.style.visibility = "hidden";
         sliderHidePrev(slidername);
      }else{
         intcurvalue += page_width;
      }
   }else{
      // error ?
   }
   
   if(intcurvalue == 0){
      // call disable prev page button(s)
      //prev.style.visibility = "hidden";
      sliderHidePrev(slidername);
   }else{
      //prev.style.visibility = "visible";
      sliderShowPrev(slidername);
   }
   
   var curpagenum = (Math.abs(intcurvalue) / page_width) + 1;
   
   sliderSetPageNumber(slidername, curpagenum, totalnumpages);
   
   slider.style.left = "" + intcurvalue + "px";
}


function sliderToggleNav(slidername, visibility, navname){
   var next = document.getElementById(slidername + "-" + navname);
   var index = 0;
   while((next != null) && (index < 10)){
      //next.style.visibility = visibility;
      next.style.display = ((visibility == "hidden")?"none":"block");
      next = document.getElementById(slidername + "-" + navname + "-" + index);
      index++;
   }

}

function sliderSetPageNumber(slidername, current, total){
   var pageelem = document.getElementById(slidername + "-" + "PageCount");
   if(pageelem){
      pageelem.innerHTML = "" + current + "/" + total;
   }
}

function sliderHideNext(slidername){ sliderToggleNav(slidername, "hidden", "Next"); }
function sliderShowNext(slidername){ sliderToggleNav(slidername, "visible", "Next"); }
function sliderHidePrev(slidername){ sliderToggleNav(slidername, "hidden", "Prev"); }
function sliderShowPrev(slidername){ sliderToggleNav(slidername, "visible", "Prev"); }


/******************************************************************************/

function CalanderSelectDay(data_str){
   var months_long = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
   var months_short = [ "Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"];
   
   var yy = 1977;
   var mm = 10;
   var dd = 23;
   
   var date = new Date();
   date.setFullYear(yy, mm - 1, dd);
   
   alert(date.getMonth() + 1 + "/" + date.getDate() + "/" + date.getFullYear());
}



/******************************************************************************/

function LoadAndSelect(name){
   SelectTabByName(name);
   load_content(name, true);
   
   // Hook into google analytics
   if(pageTracker){
      pageTracker._trackEvent('LoadContent', name);
   }
}

function SelectTabByName(name){
   var navlist = document.getElementById("NavList").childNodes;
   var index = 0;
   for(index = 0; index < navlist.length; index++){
      if(navlist[index].nodeName.charAt(0) != "#"){
         //my divs.
         if(navlist[index].innerHTML == name){
            selectTab(navlist[index]);
         }
         
      }
   }
}


function clearTabSelected(){
   var navlist = document.getElementById("NavList").childNodes;
   var index = 0;
   for(index = 0; index < navlist.length; index++){
      if(navlist[index].nodeName.charAt(0) != "#"){
         //alert("item: " + navlist[index] + "\nStyle: " + navlist[index].style + "\nname: " + navlist[index].nodeName);
         var style = getCSSStyle(navlist[index]);
         if(style){
            if(style.indexOf("selected") >= 0){
               //alert(index);
               var newstyle = style.replace("selected", "");
               //alert(newstyle);
               setCSSStyle(navlist[index], newstyle);
            }
         }
      }
   }   
}


function selectTab(elem){
   clearTabSelected();
   
   var style = getCSSStyle(elem);
   setCSSStyle(elem, style + " selected");
}


function hideContent(){
   var congroup = document.getElementById("ContentGroup").childNodes;
   //alert(congroup.length);
   var index = 0;
   for(index = 0; index < congroup.length; index++){
      if(congroup[index].nodeName.charAt(0) != "#"){
         //alert("item: " + congroup[index] + "\nStyle: " + congroup[index].style + "\nname: " + congroup[index].nodeName);
         congroup[index].style.display="none";
      }
   }
}


function load_content(name, dodynam){
   /*var reply = confirm("Stop load_content - " + name + "  " + dodynam);if(reply){ return; }*/
   
   hideContent();
   
   //clearTabSelected();
   
   var info = document.getElementById(name);
   if(info){
      info.style.display = "block";
   }else{
      if((dodynam == null) || (dodynam == true)){
         load_content("loading_ajax_content", false);
         //AJAXRequest("GET", "dynamic.xml.php", "");
         alert("Dynamic Loading of content not enabled");
         load_content(DEFAULT_CONTENT_ID, false);
      }else{
         alert("dynamic load not active this time.. .error ?");
      }
   }
   
}


/******************************************************************************/
function menu_remove_existing_screen(){
   var existing_screen = document.getElementById("menu_screen");
   if(existing_screen){
      existing_screen.parentNode.removeChild(existing_screen);
   }
}

/******************************************************************************/
function menu_add_entry_screen(menu_entry){
   var entry_screen = document.createElement("DIV");
   setCSSStyle(entry_screen, "menu_entry_delete_screen");
   entry_screen.id="menu_screen";
   entry_screen.innerHTML = "<img src=\"images/ui/loading3.gif\" alt=\"\" class=\"centered\" style=\"height:30px;width:30px;\" />";
   menu_entry.appendChild(entry_screen);

}

/******************************************************************************/
function menu_move_common(ctrl, item_id, dir){
   function menu_move_error(msg){ alert(msg); }
   
   var menu_entry = false;
   
   var node = ctrl;
   while(node){
      if(node.className.indexOf("menu_entry") != -1){
         menu_entry = node;
         break;
      }
      node = node.parentNode;
   }
   
   var prev_menu_entry = false;
   var next_menu_entry = false;
   
   if(menu_entry){
      // find the previous/next menu_entry
      var node = menu_entry.previousSibling;
      while(node){
         if((node.nodeType === Node.ELEMENT_NODE) && node.className.indexOf("menu_entry") != -1){
            prev_menu_entry = node;
            break;
         }
         node = node.previousSibling;
      }
      
      // next menu_entry
      node = menu_entry.nextSibling;
      while(node){
         if((node.nodeType === Node.ELEMENT_NODE) && node.className.indexOf("menu_entry") != -1){
            next_menu_entry = node;
            break;
         }
         node = node.nextSibling;
      }
   }
   
   if((dir == "up") && (!prev_menu_entry)){
      //menu_move_error("Item at begining of list");
      return;
   }
   if((dir == "down") && (!next_menu_entry)){
      //menu_move_error("Item at end of list");
      return;
   }
   
   
   var myAJAXParams = {
      method: "POST",
      url: "php/ajax/menu_item_ctrl.php",
      timeout_secs: 2,
      headers: [ 
      ],
      body: "action=Move" +
        "&" + "item_id" + "=" + escape(encodeURI(item_id)) + 
        "&" + "dir" + "=" + escape(encodeURI(dir)),
      onrequest: function myRequest(ajax){
         // Add screen to the item we are about to deal with
         menu_remove_existing_screen();
         
         if(menu_entry){
            menu_add_entry_screen(menu_entry);
         }
      
      },
      onload: function myLoad(ajax){
         //alert(ajax.response.Text);
         
         if(ajax.response.JSON){
            var json = ajax.response.JSON;
            
            if(json.status){
               
               switch(dir){
               case "up":
                  if(prev_menu_entry){
                     menu_entry.parentNode.insertBefore(menu_entry, prev_menu_entry);
                  }else{
                     // ERROR - how did we get here?
                     menu_move_error("inited move up, but prev entry null");
                  }
                  break;
               case "down":
                  if(next_menu_entry){
                     //menu_entry.parentNode.insertAfter(menu_entry, next_menu_entry);
                     menu_entry.parentNode.insertBefore(menu_entry, next_menu_entry.nextSibling);
                  }else{
                     // ERROR - how did we get here?
                     menu_move_error("inited move down, but next item null");
                  } 
                  break;
               default:
                  menu_move_error("unknown move direction (" + dir + ") - but valid server response");
                  break;
               }
               
               
            }else{
               // ERROR
               menu_move_error(json.statusstr);
            }
         }else if(ajax.response.XML){
            // Dont support this any more ERROR
            menu_move_error("we don't support XML responses from the server");
         }else{
            // ERROR?
            menu_move_error("unknown ajax response");
         }
         
         // whatever happend, remove the item screen
         menu_remove_existing_screen();
      },
      ontimeout: function myTimout(ajax){
         // ERROR
         menu_move_error("Request timed out, try again.");
         menu_remove_existing_screen();
      },
      onerror: function myError(ajax, infostr){
         if(ajax.response.StatusCode == 404){
            // file not found? ERROR
            menu_move_error("File not found on server!");
         }else{
            // ERROR
            menu_move_error("Server error (" + ajax.response.StatusCode + ")");
         }
         menu_remove_existing_screen();
      }
   };
   
   (new AJAXRequest()).request(myAJAXParams);

   
}

/******************************************************************************/
function menu_delete_common(ctrl, item_id){
   
   var menu_entry = false;
   var node = ctrl;
   while(node){
      if(node.className.indexOf("menu_entry") != -1){
         menu_entry = node;
         break;
      }
      node = node.parentNode;
   } 
   
   if(menu_entry){
      menu_remove_existing_screen();
      
      menu_add_entry_screen(menu_entry);
   }
   
   var doit = window.confirm("Are you sure you wish to delete this item?\n\nThis can not be undone!\n");
   if(!doit){
      menu_remove_existing_screen();
      return;
   }
   
   
   
   
   // We  need to do something about the coloring of the rows

   
   
   var myAJAXParams = {
      method: "POST",
      url: "php/ajax/menu_item_ctrl.php",
      timeout_secs: 2,
      headers: [ 
      ],
      body: "action=Delete" +
        "&" + "item_id" + "=" + escape(encodeURI(item_id)),
      onrequest: function myRequest(ajax){
         
      },
      onload: function myLoad(ajax){
         //alert(ajax.response.Text);
         //alert(ajax.response.XML);
         
         if(ajax.response.JSON){
            var json = ajax.response.JSON;
            if(json.status){
               if(menu_entry){
                  menu_entry.style.display = "none";
                  menu_entry.parentNode.removeChild(menu_entry);
               }
               menu_remove_existing_screen();
            }else{
               // ERROR
            }
         }else if(ajax.response.XML){
            // Dont support this any more ERROR
         }else{
            // ERROR?
         }
      },
      ontimeout: function myTimout(ajax){
         menu_remove_existing_screen();
      },
      onerror: function myError(ajax, infostr){
         if(ajax.response.StatusCode == 404){
            // file not found? ERROR
         }else{
            // ERROR
         }
         menu_remove_existing_screen();
      }
   };
   
   (new AJAXRequest()).request(myAJAXParams);



      
}

/******************************************************************************/
function menu_edit_item(ctrl, item_id){
   // get the selected tab and cache it
   // get the menu item tab
   // populate the menu item tab with item id info
   // update tab form with update button, not add button
   // select the menu item tab
   
   
   var myAJAXParams = {
      method: "POST",
      url: "php/ajax/menu_item_ctrl.php",
      onrequest: function myRequest(ajax){
         show_form_output("menu_item_form", "LOAD", "Loading:");
         hide_form("menu_item_form");
         LoadAndSelect("MenuItemEditAdd");
      },
      onload: function myLoad(ajax){
         
         //alert(ajax.response.Text);
         //alert(ajax.response.XML);
         
         
         var input_name = document.getElementById("menu_item_name");
         var input_desc = document.getElementById("menu_item_desc");
         var input_price = document.getElementById("menu_item_price_us");
         var input_quantity = document.getElementById("menu_item_quantity");
         var input_special = document.getElementById("menu_item_special");
         var input_group = document.getElementById("menu_item_group");
         var input_group_new = document.getElementById("menu_item_group_new");
               
         
         
         if(ajax.response.JSON){
            var json = ajax.response.JSON;
            
            
            
            // just in case something goes wrong
            // we don't want leftover data
            clear_menu_form();
            
            input_name.value = json.name;
            input_desc.value = json.desc;
            input_price.value = json.price_us;
            input_quantity.value = json.quantity;
            input_special.checked = json.special;
            
            set_select_by_id(input_group, json.group_id);
            
            
            // update AI
            
            // set the form action to now be Update instead of Add
            set_form_action("menu_item_form", "Update");
            
            var input_item_id = document.getElementById("menu_item_id");
            input_item_id.value = item_id;
            
            
            hide_form_output("menu_item_form");
            show_form("menu_item_form");
            
            update_example();
            
         }else if(ajax.response.XML){
            var xml = ajax.response.XML;
            var root = xml.childNodes[0];
            var ok = (root.attributes.getNamedItem("status").value == "true")?true:false;
            if(ok){
               hide_form_output("menu_item_form");
               
               
            }else{
               show_form_output("menu_item_form", "ERROR", "Failed to properly fetch info (status error)");
            }
         }else{
            // ERROR?
            show_form_output("menu_item_form", "ERROR", "Response was invalid (JSON or XML)");
         }
         
         
         
         
         
      },
      ontimeout: function myTimout(ajax){
         show_form_output("menu_item_form", "ERROR", "Request Timed Out, please try again");
      },
      onerror: function myError(ajax, infostr){
         if(ajax.response.StatusCode == 404){
            // file not found?
            show_form_output("menu_item_form", "ERROR", "File \"" + myAJAXParams.url + "\" was not found on the server<br />\n(" + infostr + ")");
         }else{
            show_form_output("menu_item_form", "ERROR", "Error: " + infostr + "(" + ajax.response.StatusCode + ")");
         }
      },
      timeout_secs: 2,
      body: "action=Info" +
        "&" + "item_id" + "=" + escape(encodeURI(item_id)),        
      headers: [
         // X-Requested-With
         // X-Ajax-Engine
         // X-Is-Ajax: true
         "X-Foo", "Bar",
         "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8",
         //"Content-Type", "application/x-www-form-urlencoded",
         //"Content-Length", "10", // unsafe set 
         //"Connection", "close", // unsafe set  
         
      ]
   };
   
   (new AJAXRequest()).request(myAJAXParams);


   
   
}

/******************************************************************************/
function get_ai_listing(){
   var ail_group = document.getElementById("AdditionalItemListing");
   //var ail_entrys = ail_group.getElementsByClassName("menu_ai_listing_entry");
   var ail_entrys = getElementsByClassName(ail_group, "menu_ai_listing_entry");
   
   var listing = [];
   
   for(i = 0; i < ail_entrys.length; i++){
      //var names = ail_entrys[i].getElementsByClassName("menu_ai_listing_name");
      //var prices = ail_entrys[i].getElementsByClassName("menu_ai_listing_price");
      var names = getElementsByClassName(ail_entrys[i], "menu_ai_listing_name");
      var prices = getElementsByClassName(ail_entrys[i], "menu_ai_listing_price");
      
      listing[i] = [names[0].innerHTML, prices[0].innerHTML.replace("$", "")];
   }
   
   return listing;
}

/******************************************************************************/
function additional_item_add(){
   // if we are editing a menu item, then we should actually
   // do the addition
   
   // if this is a new menu item, then we should add it to a hidden
   // field
   
   var input_name = document.getElementById("menu_additional_item_name");
   var input_price = document.getElementById("menu_additional_item_price_us");
   
   var ai_name = input_name.value;
   var ai_price = parseFloat(input_price.value);
   
   
   var valid_input = true;
   
   // validate_nonempty
   if(!ai_name){
      show_form_input_invalid(input_name.parentNode, false, "");
      valid_input = false;
   }
   
   if(isNaN(ai_price) || (ai_price <= 0) || (ai_price > MAX_MENU_PRICE)){
      show_form_input_invalid(input_price.parentNode, false, "");
      valid_input = false;
   }
   
   if(!valid_input){
      return;
   }
   
   // blank out the input boxxes
   input_name.value = "";
   input_price.value = "";
   
   var ail_group = document.getElementById("AdditionalItemListing");
   
   var ail_entry = document.createElement("DIV");
   setCSSStyle(ail_entry, "menu_ai_listing_entry");
   
   
   var inner = "";
   inner += "<span class=\"menu_ai_listing_name\">" + ai_name + "</span>\n";
   inner += "<span class=\"menu_ai_listing_control clickable\" onclick=\"additional_item_remove(this);\">Remove</span>\n";
   inner += "<span class=\"menu_ai_listing_control clickable\" style=\"color:grey\">Edit</span>\n";
   inner += "<span class=\"menu_ai_listing_price\">$ " + ai_price.toFixed(2) + "</span>\n";
   
   ail_entry.innerHTML = inner;
   
   ail_group.appendChild(ail_entry);
   
   update_example_ai();
}

/******************************************************************************/
function additional_item_remove(control){
   
   var ail_group = document.getElementById("AdditionalItemListing");
   //ail_group.removeChild(control.parentNode);
   control.parentNode.parentNode.removeChild(control.parentNode);
   
   update_example_ai();
}

/******************************************************************************/
function additional_item_remove_all(){
   var ail_group = document.getElementById("AdditionalItemListing");
   
   
   //var ail_entries = ail_group.getElementsByClassName("menu_ai_listing_entry");
   var ail_entries = getElementsByClassName(ail_group, "menu_ai_listing_entry");
   
   var runaway = 0;
   while(ail_entries.length > 0 && (runaway < AI_RUNAWAY_MAX)){
      //ai_group[0].removeChild(ai_example_entrys[0]);
      ail_entries[0].parentNode.removeChild(ail_entries[0]);
      runaway++;
   }
   
   
   update_example_ai();
}

/******************************************************************************/
function additional_item_update(){

}

/******************************************************************************/
function update_example(){
   var example = document.getElementById("MenuItemExample");
   //var name = example.getElementsByClassName("menu_item_name");
   //var price = example.getElementsByClassName("menu_item_price");
   //var desc = example.getElementsByClassName("menu_item_desc");
   //var group = example.getElementsByClassName("menu_column_title");
   var name = getElementsByClassName(example, "menu_item_name");
   var price = getElementsByClassName(example, "menu_item_price");
   var desc = getElementsByClassName(example, "menu_item_desc");
   var group = getElementsByClassName(example, "menu_column_title");
   
   
   var input_name = document.getElementById("menu_item_name");
   var input_desc = document.getElementById("menu_item_desc");
   var input_price = document.getElementById("menu_item_price_us");
   var input_quantity = document.getElementById("menu_item_quantity");
   var input_special = document.getElementById("menu_item_special");
   var input_group = document.getElementById("menu_item_group");
   var input_group_new = document.getElementById("menu_item_group_new");
   
   var quantity = parseInt(input_quantity.value);
   var special = false;
   if(input_special.checked){
      special = true;
   }
   
   //alert("checked: " + input_special.checked + "\nvalue: " + input_special.value);
   
   if(special){
      // if we already are set special no need to update it
      var curstyle = getCSSStyle(name[0]);
      if(curstyle.indexOf("menu_special") != -1){
         // we are already special
      }else{
         setCSSStyle(name[0], curstyle + " menu_special");
      }
   }else{
      setCSSStyle(name[0], getCSSStyle(name[0]).replace("menu_special", ""));
   }
   
   var title = (input_name.value)?input_name.value:"unset";
   if(quantity > 1){
      title += " (" + quantity + ")";
   }
   
   name[0].innerHTML = title;
   price[0].innerHTML = (input_price.value)?"$" + parseFloat(input_price.value).toFixed(2):"unset";
   desc[0].innerHTML = (input_desc.value)?input_desc.value + "<br />":"";
   
   if(input_group.value == "other"){
      group[0].innerHTML = input_group_new.value;
   }else if(input_group.value == "seperator"){
      group[0].innerHTML = "";
   }else{
      group[0].innerHTML = input_group.options[input_group.selectedIndex].text;
   }
   
   
}

/******************************************************************************/
function update_example_ai(){
   var ail_group = document.getElementById("AdditionalItemListing");
   
   var example = document.getElementById("MenuItemExample");
   //var ai_group = example.getElementsByClassName("menu_item_ai_group");
   var ai_group = getElementsByClassName(example, "menu_item_ai_group");
   
   // now update the aditional items part
   var ailisting = get_ai_listing();
   
   
   // this remove all the entries from the example group
   //var ai_example_entrys = ai_group[0].getElementsByClassName("menu_ai_entry");
   var ai_example_entrys = getElementsByClassName(ai_group[0], "menu_ai_entry");
   var runaway = 0;
   while(ai_example_entrys.length > 0 && (runaway < AI_RUNAWAY_MAX)){
      //ai_group[0].removeChild(ai_example_entrys[0]);
      ai_example_entrys[0].parentNode.removeChild(ai_example_entrys[0]);
      runaway++;
   }
   
   if(ailisting.length <= 0){
      //ail_group.innerHTML = "<span style=\"color:grey;margin-left: 20px;\">No Items listed</span>";   
   }else{   
      for(i = 0; i < ailisting.length; i++){
         var ai_name = ailisting[i][0];
         var ai_price = ailisting[i][1];
         
         var nu_ai_entry = document.createElement("DIV");
         setCSSStyle(nu_ai_entry, "menu_ai_entry");
         ai_group[0].appendChild(nu_ai_entry);
         nu_ai_entry.innerHTML = "<span class=\"menu_ai_entry_name\">" + ai_name + "</span><span class=\"menu_ai_entry_price\">" + ai_price + "</span>";
      }      
   }  
}






/******************************************************************************/




/******************************************************************************/
function clear_menu_form(){
   var input_name = document.getElementById("menu_item_name");
   var input_desc = document.getElementById("menu_item_desc");
   var input_price = document.getElementById("menu_item_price_us");
   var input_quantity = document.getElementById("menu_item_quantity");
   var input_special = document.getElementById("menu_item_special");
   var input_group = document.getElementById("menu_item_group");
   var input_group_new = document.getElementById("menu_item_group_new");
   
   input_name.value = "";
   input_desc.value = "";
   input_price.value = "";
   input_quantity.value = 1;
   input_special.checked = false;
   //input_group.selectedIndex = 0;
   input_group_new.value = "";
   
   // clear all the additioanl items - chain calls update_ai_exmaple
   additional_item_remove_all();
   
   // update the example
   update_example();
   
}

/******************************************************************************/
function validate_menu_item_form(form){
   // fetch all the relivent data from the form
   var input_name = document.getElementById("menu_item_name");
   var input_desc = document.getElementById("menu_item_desc");
   var input_price = document.getElementById("menu_item_price_us");
   var input_quantity = document.getElementById("menu_item_quantity");
   var input_special = document.getElementById("menu_item_special");
   var input_group = document.getElementById("menu_item_group");
   var input_group_new = document.getElementById("menu_item_group_new");
   
   var input_action = getElementsByClassName(form, "form_action");
   var form_action = escape(encodeURI(input_action[0].value));
   //alert(input_action[0].value);
   
   var input_item_id = document.getElementById("menu_item_id");
   
   var quantity = parseInt(input_quantity.value);
   var special = false;
   if(input_special.checked){
      special = true;
   }
   
   var do_new_group = false;
   if(input_group.value == "other"){
      // use new group creation
      do_new_group = true;
   }

   
   var ailisting = get_ai_listing();
   var ai_str = "";
   for(i = 0; i < ailisting.length; i++){
      var entry = ailisting[i];
      //alert(entry[0] + "  " + entry[1]);
      ai_str += "&" + "ai[" + i + "][name]" + "=" + escape(encodeURI(entry[0]));
      ai_str += "&" + "ai[" + i + "][price]" + "=" + escape(encodeURI(entry[1]));
   }
   //alert(ai_str);
   
   
   var valid_input = true;
   
   if(!input_name.value){
      show_form_input_invalid(input_name.parentNode, false, "");
      valid_input = false;
   }
   
   if(do_new_group && !input_group_new.value){
      // ERROR
      show_form_input_invalid(input_group_new.parentNode, false, "");
      valid_input = false;
   }
   
   var price = parseFloat(input_price.value).toFixed(2);
   if(isNaN(price)){
      // ERROR
      show_form_input_invalid(input_price.parentNode, false, "");
      valid_input = false;
   }
   
   if(!valid_input){
      return false;
   }
   
   // if item name name empty
   // and if group is other, then new_group not empty
   // if price exits, it must be valid
   
   // if any of the other fields exits they must be semi valid
   
   
   var myAJAXParams = {
      method: "POST",
      url: form.action,
      timeout_secs: 2,
      headers: [
      ],
      body: "action=" + form_action + 
        "&" + "name" + "=" + escape(encodeURI(input_name.value)) +
        "&" + "desc" + "=" + escape(encodeURI(input_desc.value)) +
        "&" + "quantity" + "=" + escape(encodeURI(quantity)) +
        "&" + "price_us" + "=" + escape(encodeURI(price)) +
        "&" + "special" + "=" + escape(encodeURI((special)?"true":"false")) +
        "&" + "group" + "=" + escape(encodeURI(input_group.value)) +
        "&" + "new_group_name" + "=" + escape(encodeURI(input_group_new.value)) +
        "&" + "item_id" + "=" + escape(encodeURI(input_item_id.value)) +
        ai_str,
      onrequest: function myRequest(ajax){
         //show_form_output("menu_item_form", "LOAD", "Loading:");
      },
      onload: function myLoad(ajax){
         var xml = ajax.response.XML;
         //alert(ajax.response.Text);
         //alert(ajax.response.XML);
         
         if(ajax.response.JSON){
            var json = ajax.response.JSON;
            if(json.status){
               hide_form("menu_item_form");
               show_form_output("menu_item_form", "NOTICE", "Menu Item has been added/updated");
            }else{
               show_form_output("menu_item_form", "ERROR", "Internal error (status error)");
            }
         }else if(ajax.response.XML){
            var xml = ajax.response.XML;
            var root = xml.childNodes[0];
            var ok = (root.attributes.getNamedItem("status").value == "true")?true:false;
            if(ok){
               hide_form("menu_item_form");
               show_form_output("menu_item_form", "NOTICE", "Menu Item has been added/updated");
               
            }else{
               show_form_output("menu_item_form", "ERROR", "Failed to properly fetch info (status error)");
            }
         }else{
            // ERROR?
            show_form_output("menu_item_form", "ERROR", "Response was invalid (JSON nor XML)");
         }
         
         
         
         
      },
      ontimeout: function myTimout(ajax){
         show_form_output("menu_item_form", "ERROR", "Request Timed Out, please try again");
      },
      onerror: function myError(ajax, infostr){
         if(ajax.response.StatusCode == 404){
            // file not found?
            show_form_output("menu_item_form", "ERROR", "File \"" + myAJAXParams.url + "\" was not found on the server<br />\n(" + infostr + ")");
         }else{
            show_form_output("menu_item_form", "ERROR", "Error: " + infostr + "(" + ajax.response.StatusCode + ")");
         }
      }
   };
   
   (new AJAXRequest()).request(myAJAXParams);


   
   return false;
}



/******************************************************************************/
function toggle_admin_menu(on){
   var admin_nav = document.getElementById("AdminNavList");
   var nav = document.getElementById("NavList");
   
   if(on){
      admin_nav.style.display = "block";
      nav.style.display = "none";
   }else{
      admin_nav.style.display = "none";
      nav.style.display = "block";
   }
}

/******************************************************************************/

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}



/******************************************************************************/


function mouse_down(evt){
   //evt = (evt) ? evt : event;
   evt = (evt) ? evt : window.event;
   var elem = (evt.target) ? evt.target : evt.srcElement;
   
   
   return true;
}

function mouse_up(evt){
   evt = (evt) ? evt : window.event;
   var elem = (evt.target) ? evt.target : evt.srcElement;
   
   
   /*
   var tmpe = elem;
   while((tmpe != null) && (tmpe.id != "cal1")){
      //console.log(tmpe);
      tmpe = tmpe.parentNode;
   } 
   if(tmpe == null){
      // didn't find cal in our list
      // if cal open, close call
      var cal = document.getElementById("cal1");
      if(cal){
         cal.style.display = "none";
      }
   }
   */
   
   
   return true;
}



var key_buffer = "";
var CODEPHRASE = "sundown";

function key_press(evt){
   evt = (evt) ? evt : window.event;
   var elem = (evt.target) ? evt.target : evt.srcElement;
   
   /*var out = "Object properties:\n";
   for(prop in evt){
      if(prop.substring(0,3) != "DOM" ){
         out += prop + ": " + evt[prop] + "\n";
      }
   }
   alert(out);*/
   
   /*
   if(evt.altKey){ alert("alt"); }
   if(evt.ctrlKey){ alert("ctrl"); }
   if(evt.metaKey){ alert("meta"); }
   if(evt.shiftKey){ alert("shift"); }*/
   
   if(key_buffer.length == CODEPHRASE.length){
      key_buffer = key_buffer.substring(1, key_buffer.length);
   }
   key_buffer += String.fromCharCode(evt.which);
   
   
   if(key_buffer == CODEPHRASE){
      toggle_admin_menu(true);
   }
   
   //console.log(key_buffer);
   
   return true;
}


// if (!e) var e = window.event;
//	var tg = (window.event) ? e.srcElement : e.target;

// mouse over 
//var relTarg = e.relatedTarget || e.fromElement;

// mouse out
// var relTarg = e.relatedTarget || e.toElement;


