/*
 *  Default Ajax Handler for use by all scripts
 *
 *  Author: Len Lyle
 *  Date: 4/11/07
 *  Version: 0.1
 */
/*  ======================================================================
 *  Ajax functions
 *  ====================================================================*/
// setup XmlHttprequest
function GetXmlHttpObject(){
  var xmlHttp=null;
  try{
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
  }
  catch (e){
    // Internet Explorer
    try{
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e){
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  return xmlHttp;
}

/*
 *  Run remote script as GET.  Specify objectId to catch return value
 *  args MUST be associative array
 */ 
function runAjaxGet(url, args, objId){  
  url = buildGetURL(url, args);
  var x = GetXmlHttpObject();  
  if (x){
    x.onreadystatechange = function(){     
      if (x.readyState == 4 && x.status == 200){
        if(objId != ''){
          evaluateJs(x.responseText, objId);
        }
        return true;
      }
    }
  }        
  x.open("GET",  url, true);
  x.send(null);
}

function evaluateJs(result, objId){
    document.getElementById(objId).innerHTML = result;
    jsDiv = document.getElementById(objId);
    scripts = jsDiv.getElementsByTagName("script");
    for(i=0;i<scripts.length;i++){     
        eval(scripts[i].innerHTML) ;
    }      

}
/*
 *  Run remote script as POST.  Specify objectId to catch return value
 *  args MUST be associative array
 */ 
function runAjaxPost(url, args){  
  var parameters = processPostArgs(args);
  var x = GetXmlHttpObject();  
  if (x){
    x.onreadystatechange = function(){     
       if (x.readyState == 4 && x.status == 200){
         return true;
      }
    }
  }        
  x.open("POST",  url, true);
  x.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  x.setRequestHeader("Content-length", parameters.length);
  x.setRequestHeader("Connection", "close");
  x.send(parameters);
}

//  build the full url string
function buildGetURL(url, args){
  var c = 0;
  for(keyVar in args){
    joinChar = (c == 0) ? "?" : "&"; 
    url = url + joinChar + keyVar + "=" + args[keyVar];
    c++;
  }  
  return url;
}

function processPostArgs(args){
  var argString;
  var i = 0;
  argBits = Array();
  for(keyVar in args){
    argBits[i] = keyVar + "=" + args[keyVar];
    i++;
  }
  return argBits.join("&");
}

function getAjaxStatus(){
  return ajaxDone;
}

/*  ======================================================================
 *  Miscellaneous layer functions
 *  ====================================================================*/
//hide div
function hideLayer(layerId){
  thisLayer = document.getElementById(layerId);
  thisLayer.style.visibility = "hidden";
}

//show div
function showLayer(layerId){
  thisLayer = document.getElementById(layerId);
  thisLayer.style.visibility = "visible";
}

function createDiv(divId, width, height){
  var d = document;
  var b = d.getElementsByTagName('body')[0]
  var myDiv = d.createElement('div');
  b.appendChild(myDiv);

  myDiv.setAttribute('id',divId);  
  myDiv.style.position = 'absolute';
  myDiv.style.top = -1000+'px';
  myDiv.style.width = width+'px';
  myDiv.style.height = height+'px';
  myDiv.style.zIndex = 999;
  return myDiv;
}

function killDiv(divId) {
  var d = document.getElementById(divId);
  d.parentNode.removeChild(d);
}

function popUp (divId, w, h) {
  if(document.getElementById(divId)){   killDiv(divId); }
  myDiv = createDiv(divId, w, h); 
  if(selector = document.getElementById('productFilter')){ hideLayer('productFilter'); }
  showLoading(myDiv, w, h);
  centerLayer(divId);  
}

//split out this to allow for fancier loading screen addition later.  CSS styles can be used later
function showLoading(myDiv, w, h){
  myDiv.innerHTML = '<div style="width: '+w+'; height: '+h+'; padding-top: 50px; text-align: center; font-family: arial; font-size: 16px; font-weight: bold; color: #999999;">Loading<br /><br /></div>';
}

function centerLayer(layerId){
  myLayer = document.getElementById(layerId);
  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;
  }
  
  myLayer.style.left = (( myWidth / 2 ) - (parseInt(myLayer.style.width) / 2) ) + 'px';
  if (window.pageYOffset) {
    myLayer.style.top = window.pageYOffset + ((myHeight / 2) - (parseInt(myLayer.style.height) / 2)) + 'px';
  } 
  else {
    myLayer.style.top = document.documentElement.scrollTop + document.body.scrollTop +((myHeight / 2) - (parseInt(myLayer.style.height) / 2)) +  'px';
  }
}

