/**

	@author: Addy Osmani
	@date  : 23-05-08
	@filename: ajaxGET.js
	@description: retrieve data through an XML Object
**/

/** Globals **/

var opens = new Array();
var updateStart = false;
var xmlHttp;
var webresponse;
var focusitem;



/** 
	@function: getData(parameter)
	@str: a set of input parameters (&a=1&b=2)
	@description: retrieve data passed back from php
**/  

function getData(str)
{ 


    xmlHttp=GetXmlHttpObject()
    
    if (xmlHttp==null)
     {
         alert ("Sorry. Your browser does not support XMLHttp/Ajax Requests");
         return;
     }
     
    var url="./getData.php";
    url=url+"?q="+str;
    url=url+"&sid="+Math.random();
        
    xmlHttp.onreadystatechange=getStateChanged;
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);


}


/** 
	@function: getStateChanged
	@description: monitors the state of the XML object,
	updates the DOM item set to display the final data.
**/  

function getStateChanged() 
{ 
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
 { 

  
       webresponse =  xmlHttp.responseText;
	   updateFocus();


 } 
}

/** 
	@function: tidyResponse()
	@description: trims carriage data returned
	@returns: a trimmed version of the XML response

**/  

function tidyResponse(){

		var res = webresponse;		
		var trimmed = res.replace(/^\s+|\s+$/g, '') ;
		return trimmed;

}


/** 
	@function: getXmlHttpObject()
	@description: Creates an XML HTTP Request
	@returns: the XMLHTTP object

**/ 
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;
}


/** 
	@function: clearStack()
	@description: empties the XML response holder
**/ 

function clearStack(){

 webresponse =  "";
}

/** 
	@function: setFocus(parameter)
	@objname : the name of the div or object to be updated 
	@description: sets the div or object name to be updated

**/ 
function setFocus(objname){

   focusitem = objname;
}

/** 
	@function: updateFocus()
	@description: updates a pre-set object with the
	XML response. Modify innerHTML if not supported.

**/ 
function updateFocus(){

  	var div;
  	if (document.getElementById(focusitem))
  	{
		
		var fadeBackIn = new Spry.Effect.Fade(focusitem ,{duration:500,from:0,to:100,toggle:false});
		fadeBackIn.start();
	    div = document.getElementById(focusitem);
		div.innerHTML= tidyResponse();
		div.scrollTop=div.scrollHeight;
	}
	else{
	   div.innerHTML+= "";
	  
	}
 
}

function fadeIn(elmentObj , fadeObj){
	var fadeBackIn = new Spry.Effect.Fade(elementObj.id ,{duration:500,from:0,to:100,toggle:false});
	fadeBackIn.start();
}
/** 
	@function: ajaxGet(parameter1,parameter2)
	@description: performs an ajax GET query
	@itemname: The div/obj whose contents are to be updated
	@params  : The parameters to pass to getData.php

**/ 
function ajaxGet(itemname, params)
{

  	var div;
  	if (document.getElementById(itemname))
  	{
		var fadeOut = new Spry.Effect.Fade(itemname,{duration:500,from:100,to:0,toggle:false});
		fadeOut.start();
	    div = document.getElementById(itemname);
		setFocus(itemname);
		getData(params);
  	}
  	else
  	{
		alert("No element defined");


	   
  	}
}



