 /*!
  * AJAX Communication
  *
  * Version: 0.2.0
  * Build: 1
  * Date: February 24, 2010
  */

/*****************************************************	
	Standard AJAX object 
******************************************************/	
function HttpObject(url, callbackFunction, callbackTriggered) {
	//alert(url);
  var that=this;      
  this.updating = false;
  this.trigger = callbackTriggered;
  this.abort = function() {
    if (that.updating) {
      that.updating=false;
      that.AJAX.abort();
      that.AJAX=null;
    }
  }
  this.update = function(passData,postMethod) { 
    if (that.updating) { return false; }
    that.AJAX = null;                          
    if (window.XMLHttpRequest) {              
      that.AJAX=new XMLHttpRequest();              
    } else {                                  
      that.AJAX=new ActiveXObject("Microsoft.XMLHTTP");
    }                                             
    if (that.AJAX==null) {                             
      return false;                               
    } else {
      that.AJAX.onreadystatechange = function() {  
        if (that.AJAX.readyState==4) {             
          that.updating=false;                
		
		//alert("File was last modified on - " + that.AJAX.getResponseHeader("Last-Modified"));
		//alert(that.AJAX.getResponseHeader("Content-Type"));
	  
          that.callback(that.AJAX.responseText,that.AJAX.status,that.AJAX.getResponseHeader("Content-Type"));       	  
          that.AJAX=null;                                         
        }                                                      
      }                                                        
      that.updating = new Date();                              
	  
	  	//FILE WITH EXTENSION
		if (url.indexOf("http") == -1) { 			
			var uri=urlCall;					
			that.AJAX.open("GET", uri, true);   
			that.AJAX.setRequestHeader("Accept-Charset","UTF-8");			
			that.AJAX.setRequestHeader("Accept", "application/json");
			that.AJAX.setRequestHeader("Content-Type", "application/json; charset=utf-8");
			
			that.AJAX.send(null);                    
		} else {
	  
			  if (/post/i.test(postMethod)) {	//POST method
				var uri=urlCall+'?'+that.updating.getTime();				
				that.AJAX.open("POST", uri, true);
				that.AJAX.setRequestHeader("Content-Length", passData.length);
				that.AJAX.setRequestHeader("Accept-Charset","UTF-8");			
				that.AJAX.setRequestHeader("Accept", "application/json");
				that.AJAX.setRequestHeader("Content-Type", "application/json; charset=utf-8");
				that.AJAX.send(passData);
			  } else {							//GET method
				//var uri=urlCall+'&timestamp='+(that.updating.getTime()); 
				var uri=urlCall;
				that.AJAX.open("GET", uri, true);   
				that.AJAX.setRequestHeader("Accept-Charset","UTF-8");			
				that.AJAX.setRequestHeader("Accept", "application/json");
				that.AJAX.setRequestHeader("Content-Type", "application/json; charset=utf-8");
				that.AJAX.send(null);      			
			  }              
		}
      return true;                                             
    }                                                                           
  }
  var urlCall = url;        
  this.callback = callbackFunction || function () { };
}

/*****************************************************	
	Standard parsing method for JSON objects.
******************************************************/	
function parseJSON(json) {
   
    try {
		if(/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(json)){
			var j = eval('(' + json + ')');   
			return j;   
		}
    } catch(e) {}
   
	throw new SyntaxError("parseJSON");
}

/*****************************************************	
	Get error from xml back end response
******************************************************/	
function getErrorFromXML(responseXml) {
	var errorMessage = "";

	if (responseXml == null) return "";	

	if (navigator.appVersion.indexOf("MSIE") != -1) {

		var items = responseXml.getElementsByTagName('actionResponse')[0];//grab the first item node
		if ((items != null) || (items == "[object]")) {
				
			for (i=0; i<items.childNodes.length; i++) {
				//IF WE HAVE AN ERROR THEN GET VALUE FROM XML
				if (items.childNodes[i].nodeName == "errorMessage") {
					errorMessage = items.childNodes[i].firstChild.nodeValue;
				}
			}		
		}
		errorMessage = "";		
	
	} else {
		if (responseXml.documentElement.nodeName == "actionResponse") {
			//we have xml response
			var element = responseXml.getElementsByTagName('errorMessage').item(0);   // Read the first element			
			if (element != null) {
				errorMessage = element.textContent;
			}
		}
	}

	//addLogEntry("ResponseXml error: '" + errorMessage + "'");	
	return stCap(errorMessage);
}

/*****************************************************	
	Get error from text response back end response
******************************************************/	
function getErrorFromResponse(responseText) {
	var errorMessage = "";
	
	if (responseText == null) return "";						
		
	var xmlDoc;
	if (window.DOMParser) {
		parser=new DOMParser();
		xmlDoc=parser.parseFromString(responseText,"text/xml");
	} else {  // Internet Explorer 
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(responseText);
	} 
	 
	var items = xmlDoc.getElementsByTagName('actionResponse')[0];//grab the first item node
	if ((items != null) || (items == "[object]")) {
		
		for (i=0; i<items.childNodes.length; i++) {
			//IF WE HAVE AN ERROR THEN GET VALUE FROM XML
			if (items.childNodes[i].nodeName == "errorMessage") {
				errorMessage = items.childNodes[i].firstChild.nodeValue;						
			}
		}		
	}
	
	//addLogEntry("ResponseText error: '" + errorMessage + "'");	
	return stCap(errorMessage);
}

/*****************************************************	
	Get rid of stuff in response from server.
******************************************************/	
function cleanResponse(responseText) {
	//replace all @ for loading in IE!
	responseText = responseText.replace(/@/g,"");
			
	//get rid of the NULL callback name in front of JSON object (and also the brackets), 
	//its the callback function we don't need
	if (responseText.substring(0,4) == "null") {
		responseText = responseText.replace("null","");			
		responseText = responseText.substring(1, responseText.length-1);
	}						
		
	return responseText;
}

/*****************************************************	
	Get parsed JSON object. Parsing can throw an error.
******************************************************/	
function getParsedJsonFrom(responseText) { 

	var JSONData = null;
	try { 
		JSONData = parseJSON(responseText);		
	} catch (e) { 
		//addLogEntry("Error parsing JSON object: " + e.name + " " + e.message);		
	} 
			
	return JSONData;
}

/*****************************************************	
******************************************************/	
function stCap(strObj){
	return(strObj.charAt(0).toUpperCase()+strObj.substr(1).toLowerCase());
}
