// AJAX Core help functions
// Andreas Gustafsson
// (C) 2005 Intellicom Innovation AB

var xmlhttp,queryStr,delay;  
var updateFunc=null,errorFunc=null,startFunc=null,completeFunc=null;
var curData;
                  
function SetupRequest(query,dly)
{
	queryStr=query;
	delay=dly;	
}    
            
function SendRequest()
{
	xmlhttp=null;
	if(typeof XMLHttpRequest != 'undefined') 
	{
		xmlhttp = new XMLHttpRequest();
	}
	else 
	{
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	if(xmlhttp==null) return false;	
	xmlhttp.onreadystatechange = OnStateChange; 	
	xmlhttp.open("GET",queryStr+"&dummy="+Date.parse(new Date())+Math.random(),true);
	xmlhttp.send(null);		
	return true;
}

function ConvertDate(timeDateStr)
{
	if(timeDateStr==null) return 0;
	dateStr=timeDateStr.split(" ")[0];
	timeStr=timeDateStr.split(" ")[1];	
	return Date.UTC(dateStr.split("-")[0],parseInt(dateStr.split("-")[1],10)-1,dateStr.split("-")[2],timeStr.split(":")[0],timeStr.split(":")[1],timeStr.split(":")[2]);
}		

function OnStateChange()
{
	var idx,val,time;
	
	switch(xmlhttp.readyState)
	{
		case 0: // uninitialized
			//FrameDebug("request state = uninitialized",true);
		break;
		case 1: // loading
			//FrameDebug("request state = loading",true);
		break;
		case 2: // loaded
			//FrameDebug("request state = loaded",true);
		break;
		case 3: // interactive
			//FrameDebug("request state = interactive",true);
		break;
		case 4: // complete
			try
			{
				statusCode=xmlhttp.status;
			}
			catch(excp)
			{
				statusCode=-1;
			}
			switch(statusCode)
			{
				case 200:
					if(startFunc!=null) startFunc();
					//val=xmlhttp.responseText;
					curTime=ConvertDate(xmlhttp.responseText.split("|")[1]);
					curData=xmlhttp.responseText.split("|")[2];	
					curDataSplit=curData.split(";");					
					for(i=0;i<curDataSplit.length;i++)
					{
						valSplit=curDataSplit[i].split("=");
						if(valSplit.length==2)
						{
							idx=valSplit[0];													
							time=ConvertDate(valSplit[1].split("*")[1]);									
							val=valSplit[1].split("*")[0];
							updateFunc(idx,val,(Math.floor((curTime-time)/1000)));
						}
					}
					if(completeFunc!=null) completeFunc();
		  		break;
		  		default:
		  			// Error
					if(errorFunc!=null) errorFunc(statusCode);
		  		break;
		  	}
 			setTimeout(SendRequest,delay);
		break;
	}
}

function RegisterUpdateCallback(updFunc)
{
	updateFunc=updFunc;
}

function RegisterErrorCallback(errFunc)
{
	errorFunc=errFunc;
}

function RegisterStartCallback(strFunc)
{
	startFunc=strFunc;
}

function RegisterCompleteCallback(cmpFunc)
{
	completeFunc=cmpFunc;
}

function AC_GetXmlHttp()
{
  var xmlhttp = false;
  if (window.XMLHttpRequest)
  {
    xmlhttp = new XMLHttpRequest()
  }
  else if (window.ActiveXObject)// code for IE
  {
    try
    {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP")
    } catch (e) {
      try
      {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
      } catch (E) {
        xmlhttp=false
      }
    }
  }
  return xmlhttp;
}

function AC_RunRawRequest(requrl,cmd,postData,callBackFunc,readyFunc,delay,errorFunc,exceptionFunc,contentType)
{
  	var errPos,xmlhttp=null;
  	
  	xmlhttp=AC_GetXmlHttp();
  	//now we got the XmlHttpRequest object, send the request.
  	if (xmlhttp)
  	{
		xmlhttp.onreadystatechange =
		// Set onreadystate to a local function
		function ()
      {
      	var i,j;
      	
      	if(xmlhttp && xmlhttp.readyState==4)
         {		         			         	
            if(xmlhttp.status==200)
            {
            	// Check for errors
            	errPos=xmlhttp.responseText.indexOf("error=");
            	if(errPos!=-1)
            	{
            		// We have an error message somewhere, report it
            		if((errorFunc!='undefined') && (errorFunc!=null))
            		{
            			str=xmlhttp.responseText;
            			//errorFunc(str.substring(errPos+6,str.length));
            		}
            	}
            	else
            	{
	            	callBackFunc(xmlhttp);
					}
					delete xmlhttp['onreadystatechange'];
					xmlhttp=null;
				}
				else
				{
         		if((errorFunc!='undefined') && (errorFunc!=null))
         		{
						errorFunc("HTTP error: "+xmlhttp.status);
					}
				}
				// Run the function that signals that the request is ready
				// (that function is a good place to retrigger for cyclic behavior)
				if(readyFunc!=null) setTimeout(readyFunc,delay);
			}			
		}
		xmlhttp.open(cmd,requrl+"&command=DUMMY&"+Date.parse(new Date())+Math.random(),true);
		if((contentType!='undefined') && (contentType!=null))
		{
			xmlhttp.setRequestHeader("Content-type",contentType);
		}
		xmlhttp.send(postData);
	}
}

