  var PAGE_SERVLET_URL = "pageServlet";
  
  var request = new Array(4);
  var counter = 0;
  var reqDiv = new Array(4);
  var finCallback = new Array(4);
  var queryStr = new Array(4);
    
  function getXMLHttp()
  {
	  var req;
	  
	  if (window.XMLHttpRequest){ 
		  req = new XMLHttpRequest(); 
	  } 
	  else if (window.ActiveXObject){ 
		  req = new ActiveXObject("Microsoft.XMLHTTP"); 
	  }
	  
	  return req;
	  
  }
  
  function getPageWithHistory(page, queryString, requestType, div, newLocation, historyData, finalcallback, disableLoadingMsg)
  {	  	  	  
	  if (newLocation != "")
	  {		  		  
		  //alert("Hist:" + newLocation);
		  window.dhtmlHistory.add(newLocation,historyData);
	  }
	  
	  if (div)
	  {
		  if (!disableLoadingMsg)
		  {
			  var main = $(div);	 	  
			  main.innerHTML = "<div style='color:#C8C8C8; margin-left:100px;margin-right:100px;margin-top:300px;margin-bottom:0px;'><p><h2>Loading...</p></h2></div>";
		  }
	  }
	  
	  // temp solution to handle simultaneous requests	  
	  counter = counter + 1;
	  var x = (counter % 4);
	  
	  var curCallBack;
	  
	  if (x == 0)
	  {		  
		 curCallBack = callback0;		    
	  }
	  else if (x == 1)
	  {				 
		  curCallBack = callback1;
	  }
	  else if (x == 2)
	  {				
		  curCallBack = callback2;
	  }
	  else if (x == 3)
	  {				  
		  curCallBack = callback3;
	  }
	
	  reqDiv[x] = div;
	  queryStr[x] = queryString;
	  finCallback[x] = finalcallback;
	  	  	  	  
	  request[x] = getXMLHttp();
	  var url = PAGE_SERVLET_URL+"?page=" + page+"&"+queryString;
	  request[x].open(requestType,url,true); 
	  request[x].onreadystatechange = curCallBack;		 
	  request[x].send(null);
	  	  	 
  }    
  
  function getPage(page, queryString, requestType, div, finalcallback,disableLoadingMsg)
  {     
	  var obj;
	  
	  if (div)
	  {
		  obj = $(div);
		  if (obj)
		  {
			  obj.innerHTML = "";
		  } 
	  }
	  getPageWithHistory(page, queryString, requestType, div, "", "", finalcallback,disableLoadingMsg);
  }
    
  function getPageSynch(page, queryString, requestType, div, finalcallback)
  {       	  	  
	  var obj;
	  
	  if (div)
	  {
		  obj = $(div);
		  if (obj)
		  {
			  obj.innerHTML = "";
		  } 
	  }
	  getPageWithHistorySynch(page, queryString, requestType, div, "", "", finalcallback);
  } 
    
  
  function getPageWithHistorySynch(page, queryString, requestType, div, newLocation, historyData, finalcallback)
  {
	  var req = getXMLHttp();	  
	  var url = PAGE_SERVLET_URL+"?page=" + page+"&"+queryString;
	  req.open(requestType,url,false); 	   	   
	  req.send(null);	    
	  if (newLocation != "")
      {        			   
		//alert("HistSynch:" + newLocation);  
      	window.dhtmlHistory.add(newLocation,historyData);
      }
      	
	  if (div)
	  {
		  var main = $(div);
		  setInnerHtml(req.responseText, main);
	  }
	  
      if (finalcallback)
    	  finalcallback(queryString);
      
      //repositionChart();
  }
  
  function getDataXMLHttp(page, queryString, requestType)
  {
	  var req = getXMLHttp();	  
	  var url = PAGE_SERVLET_URL+"?page=" + page+"&"+queryString;
	  req.open(requestType,url,false); 	   	   
	  req.send(null);	    	        	
	  return req.responseText.replace(/^\s+|\s+$/g,"");
 
  }

  function callback0()
  { 
	  callback(0);
  }
  
  function callback1()
  { 
	  callback(1);
  }
  
  function callback2()
  { 
	  callback(2);
  }
  
  function callback3()
  { 
	  callback(3);
  }
    
  
  function callback(curCounter)
  {
	  if (request[curCounter].readyState==4)
	    { 
		  var main = $(reqDiv[curCounter]);
		  if (main == null)
		  {
			  return;
			  //alert('Unknown div in setInnerHtml(): ' + div);
		  }
		  
	      if (request[curCounter].status == 200)
	      {     	  	    	  
	          setInnerHtml(request[curCounter].responseText,main);
	          if (finCallback[curCounter])
	        	  finCallback[curCounter](queryStr[curCounter]);
	      } 
	      else
	      {	    	  
	    	  main.innerHTML = "<div style='margin:200px; width:300px'><p><h2>Error: Status code = " + request[curCounter].status + "</p></h2></div>";
	      }
	      //repositionChart();
	    }
	    
  }
  
  function setInnerHtml(responseText,main,win)
  {      	       	  
	  
	  if (main == null)
	  {
		  return;
		  //alert('Unknown div in setInnerHtml(): ' + div);
	  }
	  
	  DeleteChildren(main);  
      main.innerHTML = responseText;	        
      
	  // When loading a partial document using XMLHttp (AJAX), any Javascript code (not triggered by events such as onclick) 
	  // in the HTML will not automatically be evaluated. Parsing of Javascript must be done here to be explicitely evaluated.
	  
	  evalJavascript(responseText);
	  	  
      	       	     
  
  }
  
  function evalJavascript(responseText)
  {	  
	  var index = 0;
	  
	  while (index >=0)
	  {
		  var pos = index;
		  index = responseText.indexOf("<script type=\"text/javascript\">", pos);
		  if (index == -1)
			  index = responseText.indexOf("<script type='text/javascript'>", pos);
		  
		  if (index >=0)
	      {		  
			  var endIndex = responseText.indexOf("</script>",index);
			  if (endIndex > 0)
			  {
				  var x = responseText.substring(index+31,endIndex);				  
			      eval(x);
			      index = endIndex+9;
			  }
			  else
			  {
				  index = -1;
			  }
	      }
	  }
  }
  
  function DeleteChildren(node){

	  
	  if(node){

	  for(var x = node.childNodes.length - 1; x >= 0; x = x -1){

	  var childNode = node.childNodes[x];
	   if(childNode.hasChildNodes()){

	  DeleteChildren(childNode);

	  }
	  node.removeChild(childNode);

	  /*
	  if(childNode.outerHTML){

	  childNode.outerHTML = "";

	  }
	  */
	  
	  childNode=null;   

	  }
	  node=null;

	  }
	  

	  }


  function getFormValue(searchform, name)
  {
	  var obj = $(searchform);	  
      var getstr = "";
      for (i=0; i<obj.childNodes.length; i = i + 1) 
      {    	
    	 
    	  //alert(obj.childNodes[i].tagName); 
         if (obj.childNodes[i].tagName == "INPUT") 
         {
        	 if (obj.childNodes[i].name == name)
        		 return obj.childNodes[i].value;
         }
      }
      
      return "";
  }
  
  function setFormValue(searchform, name, value)
  {
		  var obj = $(searchform);	  
	      var getstr = "";
	      for (i=0; i<obj.childNodes.length; i = i + 1) 
	      {    	
	    	 
	    	  //alert(obj.childNodes[i].tagName); 
	         if (obj.childNodes[i].tagName == "INPUT") 
	         {
	        	 if (obj.childNodes[i].name == name)
	        	 {
	        		 obj.childNodes[i].value = value;
	        		 break;
	        	 }
	         }
	      }	      	      	  
  }
  
  
    
  function getFormQueryString(searchform) 
  {	  	 
	  var obj = $(searchform);	  
      var getstr = getFormQueryStringR(obj);        
      
      if (getstr.length > 0)
    	  getstr = getstr.substring(0, getstr.length-1);
      
      return getstr;
   }
  
   function getFormQueryStringR(object)
   {
	   var getstr = "";
	   var obj;	   
	   
	   for (var i=0; i<object.childNodes.length; i = i + 1) 
	   {    		    	 
		   obj = object.childNodes[i];	        	   
	   
		   //alert(obj.childNodes[i].tagName); 
		   if (obj.tagName == "INPUT") 
		   {
			   if (obj.type == "text" || obj.type == "hidden" || obj.type == "password") 
			   {
				   getstr += obj.name + "=" + c_urlencode(obj.value) + "&";
			   }
			   if (obj.type == "checkbox") 
			   {
				   if (obj.checked) 
				   {
					   getstr += obj.name + "=" + c_urlencode(obj.value) + "&";
				   } 
				   else 
				   {
					   getstr += obj.name + "=&";
				   }
			   }
			   if (obj.type == "radio") 
			   {
				   if (obj.checked) 
				   {
					   getstr += obj.name + "=" + c_urlencode(obj.value) + "&";
				   }
			   }
		   }   
		   else if (obj.tagName == "SELECT") 
		   {			   
			   if (obj.selectedIndex >= 0)
				   getstr += obj.name + "=" + c_urlencode(obj.options[obj.selectedIndex].value) + "&";
		   }		   		  
		   else 
		   {			   
			   getstr += getFormQueryStringR(obj);
		   } 		   
	   }
       return getstr;

   }
        
   function setDivVisible(div, visible)
   {	  
	  var e = $(div);
      e.style.display = visible == true ? 'block' : 'none';    
   }
   
   function isDivDisible(div)
   {
	   var e = $(div);
	   return  e.style.display == 'block';
   }
   
   function copyvalue(obj, text)
   {	   
	  var e = $(obj);
	  e.focus();
      e.value = text;      
   }
   
   
   function getQueryVariable(query,variable) { 	   
	   var vars = query.split("&"); 
	   for (var i=0;i<vars.length;i = i +1) { 
	     var pair = vars[i].split("="); 
	     if (pair[0] == variable) { 
	       return pair[1]; 
	     } 
	   } 
	   return null; 
	 }
                  
   function c_urlencode(str)
   {		
	   	if (encodeURIComponent) {
	   	    return encodeURIComponent(str);
	   	} 
	   	else 
	   	{
	   	    return escape(str).replace("+","%2B");
	   	}	   
   }
	
   

