

// Globals (hate them)
var xmlhttp;



function fetchXML(url){
   AJAXRequest("GET", url, "");
}

function AJAXRequest(method, url, body){
   // ESCAPE THE URL !!!!!!
   //alert("fetchXML(" + url + ")");
   
   
   if(window.XMLHttpRequest){
      try{
         xmlhttp = new XMLHttpRequest();
      }catch(e){
         xmlhttp = false;
      }
   }else if(window.ActiveXObject){
      try{
         xmlhttp = new ActiveXObject("Msxlm2.XMLHTTP");
      }catch(e){
         try{
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
         }catch(e){
            xmlhttp = false;
         }
      }
   }else if(window.createRequest){
      try{
         xmlhttp = window.createRequest();
      }catch(e){
         xmlhttp = false;
      }
   }
   
   if(xmlhttp){
      //alert("method: " + method + "\nURL: " + url);
      xmlhttp.onreadystatechange = MessageHandler;
      xmlhttp.open(method, url, true);
      xmlhttp.setRequestHeader("User-Agent", "JackJillAJAX/1.0");
      if(method == "POST"){
         xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      }
      xmlhttp.send(body);
   }else{
      fetchError("Error: no http request object avalable");
   }
}

function MessageHandler(){
   //alert("state:" + xmlhttp.readyState + "  status: " + xmlhttp.status);
   
   if(xmlhttp.readyState == 0){
      // uninitialized
   }else if(xmlhttp.readyState == 1){
      // loading
   }else if(xmlhttp.readyState == 2){
      // loaded
   }else if(xmlhttp.readyState == 3){
      // interactive
   }else if(xmlhttp.readyState == 4){
      // complete
      if(xmlhttp.status == 200){
         HandleResponce(xmlhttp);
      }else{
         HandleRecvError();
      }
   }
}

function HandleRecvError(){
   fetchError("HandleRecvError()\n\n" + xmlhttp.statusText + " (" + xmlhttp.status + ")");
}

function AbortRequest(){   
   xmlhttp.abort();
}

function fetchError(note){
   //alert(note);
   overlayAlert(note);
}


//------------------------------------------------------------------------------
function HandleResponce(xmlhttp){
   var xmlDoc = xmlhttp.responseXML;
   
   //alert(xmlhttp.responseText);
   
   //setStatusBarText(xmlhttp.responseText);
   
   
   // clear for error case
   setStatusBarText("");
   setInputboxText("StatusInputbox", "");
   
   if(xmlDoc != null){
      if(xmlDoc.childNodes.length > 0){
         
         //overlayAlert("we got here\n\n" + xmlDoc.childNodes[0].childNodes[0].data);
         
         // set it up..
         setStatusBarText(xmlDoc.childNodes[0].childNodes[0].data);
         setInputboxText("StatusInputbox", xmlDoc.childNodes[0].childNodes[0].data);
         
      }else{
         fetchError("HandleResponce: document has no children (or parser error)");
      }
   }else{
      fetchError("HandleResponce: invalid xmlDoc\n" + xmlhttp.responseText);
   }
   
}

//------------------------------------------------------------------------------



function periodic_task(){
   //fetchXML(".xml");
}


function pageinit(){
   //setInterval("periodic_task()",  1000 * 20);
   fetchXML("status.xml");
   
   /*
   var info = "Info:\n";
   info += "Hash:" + (location.hash?location.hash:"<null>") + "\n";
   info += "Host:" + (location.host?location.host:"<null>") + "\n";
   info += "Hostname:" + (location.hostname?location.hostname:"<null>") + "\n";
   info += "Href:" + (location.href?location.href:"<null>") + "\n";
   info += "Pathname:" + (location.pathname?location.pathname:"<null>") + "\n";
   info += "Port:" + (location.port?location.port:"80") + "\n";
   info += "Protocal:" + (location.protocol?location.protocol:"<null>") + "\n";
   info += "Search:" + (location.search?location.search:"<null>") + "\n";
   
   alert(info);   
   */
   
   
   //Announce("Now Enrolling for Summer Programs");
   //Announce("Join Us Now for Our  Programs");
   //Announce("Thursday, January 29: J&J will be open for normal business hours.");
   //Announce("Now Enrolling");
   
   var value = getSearchParam("content");  
   if(value){
      loadContent(value);
   }
   
   
}



function Announce(atext){
   var announce_text_span = document.getElementById("announce_text");
   announce_text_span.innerHTML = atext;
   
   var announce_div = document.getElementById("Announce");
   announce_div.style.visibility="visible";
}

function closeAnnounce(){
   var announce_div = document.getElementById("Announce");
   announce_div.style.visibility="hidden";
   
}




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;
}




function InputboxEditMode(id){
   var textbox = document.getElementById(id);
   var index = 0;
   for(index = 0; index < textbox.childNodes.length; index++){
      if(textbox.childNodes[index].nodeName == "DIV"){
         
         if(textbox.childNodes[index].getAttribute("class") == "editmode"){
            return textbox.childNodes[index];
         }
      }
   }
   return null;
}

function InputboxViewMode(id){
   var textbox = document.getElementById(id);
   var index = 0;
   for(index = 0; index < textbox.childNodes.length; index++){
      if(textbox.childNodes[index].nodeName == "DIV"){
         
         if(textbox.childNodes[index].getAttribute("class") == "viewmode"){
            return textbox.childNodes[index];
         }
      }
   }
   return null;
}


function setInputboxText(id, text){
   
   var textbox = document.getElementById(id);
   var eElem = InputboxEditMode(id);
   var vElem = InputboxViewMode(id);
   
   
   var input_box_text = document.getElementById("InputBoxText");
   input_box_text.innerHTML = text;
   
   var status_input_box = document.getElementById("statusInput");
   text = text.replace("\n", "");
   
   
   
   status_input_box.value =  text;
}

function viewInputbox(id){
   var eElem = InputboxEditMode(id);
   var vElem = InputboxViewMode(id);
   vElem.style.visibility="visible";
   eElem.style.visibility="hidden";
}

function editInputbox(id){
   var eElem = InputboxEditMode(id);
   var vElem = InputboxViewMode(id);
   vElem.style.visibility="hidden";
   eElem.style.visibility="visible";
}


function setStatusFromInput(){
   var status_input_box = document.getElementById("statusInput");
   setStatusBarText(status_input_box.value);
   
   AJAXRequest("POST", "update_status.php", "status=" + status_input_box.value);
}

function setStatusBarText(text){
   var statusbar = document.getElementById("statusBar");
   statusbar.innerHTML = text;
   
}





function setCSSStyle(elem, style){
   elem.setAttribute("class", style);
   elem['className'] = style;  // For IE
   
}





function toggleMark(){
   var mark = document.getElementById("KidMark");
   
   if(mark.style.visibility=="visible"){
      mark.style.visibility="hidden";
   }else{
      mark.style.visibility="visible";
   }
}






function overlayAlert(alerttext){
   var alert_text_span = document.getElementById("alert_text");
   alert_text_span.innerHTML = alerttext;
   
   showOverlay("Alert");
   
}


function showOverlay(overlay_id){
   // remove any content window
   loadContent("");
   
   // close any existing overlay
   closeOverlay();
   
   
   // show the overlay
   var overlay_div = document.getElementById("TheOverlay");
   overlay_div.style.visibility="visible";
   
   var overlay_content = document.getElementById(overlay_id);
   overlay_content.style.visibility="visible";
}

function closeOverlay(){
   var overlay_div = document.getElementById("TheOverlay");
   overlay_div.style.visibility="hidden";
   
   // hide all sub divs of the overlay 
   var div_list = overlay_div.childNodes;
   var index = 0;
   for(index = 0; index < div_list.length; index++){
      
      //alert(div_list[index]);
      if(div_list[index].nodeName == "DIV"){
         div_list[index].style.visibility="hidden";
      }
   }
   
   //viewInputbox("StatusInputbox");
}


function selectTab(tabid){
   /*
   var tab = document.getElementById(tabid);
   tab.setAttribute("class", "selected");
   tab['className'] = "selected";  // For IE
   */
}





function loadContent(content_id){
   // remove any overlay window
   closeOverlay();
   
   var content_frame = document.getElementById("content_frame");
   var content = document.getElementById(content_id);
   //var submenu = document.getElementById("SubMenu");
   
   
   // hide all other contents that may be open
   var div_list = content_frame.getElementsByTagName("DIV");
   var index = 0;
   for(index = 0; index < div_list.length; index++){
      div_list[index].style.visibility="hidden";
   }
   
   if(content != null){
      var submenu = content.parentNode;
      
      
      content_frame.style.visibility="visible";
      content.style.visibility="visible";
      submenu.style.visibility="visible";
      
      //debug_writeln("scrolling");
      content.scrollIntoView(true);
      
      /*
      var temp = document.getElementById("foo");
      temp.setAttribute("class", "selected");
      temp['className'] = "selected";  // For IE
      */
      
   }else{
      if(content_id != ""){
         //alert("Undefined content");
         overlayAlert("Content Error - undefined content.");
      }
      content_frame.style.visibility="hidden";
      //submenu.style.visibility="hidden";
   }
}



function debug_writeln(text){
  var outdiv = document.getElementById("bellowfold");
  outdiv.innerHTML = text + "<br/>" + outdiv.innerHTML;
}


/*
function mouse_event(evt){
   evt = (evt) ? evt : event;
   var elem = (evt.target) ? evt.target : evt.srcElement;
   
}*/

// are we gona track some events here or what






var points = [];

function showmouseoverlay(){
   var tmp = document.getElementById("mouse_overlay");
   
   var outtmp = "";
   
   var ix = 0;
   for(ix = 0; ix < points.length; ix++){
      if(ix != 0){
         outtmp += "&";
      }
      outtmp += "points[" + ix + "][x]=" + points[ix].x;
      outtmp += "&";
      outtmp += "points[" + ix + "][y]=" + points[ix].y;
      outtmp += "&";
      outtmp += "points[" + ix + "][count]=" + points[ix].count;
   }
   
   //alert(outtmp);
   
   tmp.style.backgroundImage = "url(mouse_overlay.php?" + outtmp + "&cache=" + Math.random() + ")";
   
   if(tmp.style.visibility=="visible"){
      tmp.style.visibility="hidden";
   }else{
      tmp.style.visibility="visible";
   }
}







  
function mouse_down(evt){
   evt = (evt) ? evt : event;
   var elem = (evt.target) ? evt.target : evt.srcElement;
   
   //debug_writeln("mouse_down");
   
   /*
   var index = -1;
   var dist = 1000;
   var ix = 0;
   var maxdist = 20;
   
   for(ix = 0; ix < points.length; ix++){
      var tmpdist = Math.round(Math.sqrt(((points[ix].x - evt.clientX) * (points[ix].x - evt.clientX)) + ((points[ix].y - evt.clientY) * (points[ix].y - evt.clientY))));
      if(tmpdist > maxdist){
         // too far away, assume not valid
      }else if(tmpdist < dist){
         // closest to this point
         index = ix;
      }
   }
   
   if(index >= 0){
      // found a point
      points[index].count++;
      debug_writeln("Close to point: " + index + " (count: " + points[index].count + ")");
   }else{
      // we found no point close
      var len = points.length;
      points[len] = new Object();
      points[len].x = evt.clientX;
      points[len].y = evt.clientY;
      points[len].count = 0;
      
      debug_writeln("Add Point: " + len + "  (" + points[len].x + ", " + points[len].y + ")");
   }
   */
   
   
   
   //debug_writeln("distance: " + dist);
   
   /*
   debug_writeln(elem);
   
   // find the containing A elem
   var max = 15;
   var tmpout = "Search Path: ";
   while((elem) && (max-- > 0)){
      if(elem.nodeName == "A"){
         tmpout += " Found A";
         break;
      }
      if(elem.hasAttributes() && elem.hasAttribute("onclick")){
         tmpout += " Has Click";
         break;
      }
         
      tmpout += elem.nodeName + "\\";
      elem = elem.parentNode;
   }
   debug_writeln(tmpout);
   
   
   debug_writeln(elem);
   */
   
   //debug_writeln("Mouse Event (" + evt.clientX + ", " + evt.clientY + ")");
   
}

function mouse_up(evt){
   evt = (evt) ? evt : event;
   var elem = (evt.target) ? evt.target : evt.srcElement;

}






