/* Ajax controller
 Author: Philip Norton
 Version: 2.0

 Changes from 1.0
	1. Ajax Control now written in JSON format.

	Example Of Use:

	var ajax = Http;
	ajax.onLoading = function(element,sMessage){
		var oDiv = document.getElementById('right');
		oDiv.innerHTML = '<p>'+sMessage+'</p>';
	}
	
	ajax.onLoaded = function(element,sMessage){
		var oDiv = document.getElementById('right');
		oDiv.innerHTML = '<p>Complete</p>';
	};
	
	function recordVisitor(submit){
		var sURL = './ajax_form/record_data.php';
		var sParams = " ";
		var contactForm = document.getElementById('contactForm');	
		ajax.post(sURL,sParams,function(){});
	};

*/

// user agent string
var sUserAgent = navigator.userAgent;
// is the user agent Opera?
var isOpera = sUserAgent.indexOf("Opera") > -1;
// if the user agent Internet Explorer?
var isIE = sUserAgent.indexOf("compatible") > -1 
            && sUserAgent.indexOf("MSIE") > -1
            && !isOpera;
// does the browser support XMLHttpRequest?
var bXmlHttpSupport = (typeof XMLHttpRequest == "function" || typeof XMLHttpRequest == "object" || window.ActiveXObject || window.XMLHttpRequest);

// define function for Internet Explorer Http requests
if(!isOpera){
    if(typeof XMLHttpRequest == "undefined" && window.ActiveXObject && typeof ActiveXObject != "undefined"){
        function IEXMLHttpRequest(){      	
        		var arrSignatures = ["MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
        		for(var i=0;i < arrSignatures.length-1;i++){
          		  try{
          				  var oRequest = new ActiveXObject(arrSignatures[i]);
          				  return oRequest;
          			}catch(oError){
          				  // ignore 
          			};
        		};
        		throw new Error("MSXML is not installed on your system.");
      	};  	
    };
};

var Http = {
	// let the object know what sort of data will be returned
	returnType : 'responseText',//responseText or responseXML
	
	// let the object know where to print out the status messages
	messageElement : 'right',

	// function providing loaded information - provided for override
	onLoaded : function(element,sMessage){
	    var o = document.getElementById(element);
	    if(o){
	        o.innerHTML = sMessage;
	    };
	},

	// function providing loading information - provided for override
	onLoading : function(element,sMessage){
	    var o = document.getElementById(element);
	    if(o){
	        o.innerHTML = sMessage;
	    };
	},
	
	// function providing error information - provided for override
	onError : function(element,sMessage){
	    var o = document.getElementById(element);
	    if(o){
	        o.innerHTML = sMessage;
	    };
	},
	
	// Java mechanism for http post commands
	httpPost : function(sURL,sParams){
	  	var oURL = new java.net.URL(sURL);
	  	var oConnection = oURL.openConnection();
	    oConnection.setDoInput(true);
	    oConnection.setDoOutput(true);
	    oConnection.setUseCaches(false);
	    oConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
	  
	    var oOutput = new java.io.DataOutputStream(oConnection.getOutputStream());
	    oOutput.writeBytes(sParams);
	    oOutput.flush();
	    oOutput.close();
	  
	    var sLine = " ";
	  	var sResponseText = " ";
	  
	    var oInput = new java.io.DataInputStream(oConnection.getInputStream());
	    sLine = oInput.readLine();
	    while(sLine!=null){
	        sResponseText += sLine + "\n";
	        sLine= oInput.readLine();
	  	};
	  	oInput.close();
	  	return sResponseText;
	},
	
	// add a parameter to a post parameter string
	addPostParam : function(sParams,sParamName,sParamValue){
	  	if(sParams.length > 0){
	    		sParams +="&";
	    		return sParams + encodeURIComponent(sParamName) + "=" + encodeURIComponent(sParamValue);
	  	};
	},
	
	// http post function
	post : function(sURL,sParams,fnCallback){
	  	var returnData = '';
	  	if(bXmlHttpSupport){
	        if(isIE){
	            var oRequest = new IEXMLHttpRequest();
	        }else{
	            var oRequest = new XMLHttpRequest();
	        };
	    		oRequest.onreadystatechange = function(){ 		
	    				try{
		      			if(oRequest.readyState == 4){
		                if(oRequest){
		                    if(oRequest.status==200){
		                        if(Http.returnType == 'responseText'){
		                        	returnData = fnCallback(oRequest.responseText);
		                        }else{
									returnData = fnCallback(oRequest.responseXML);
								};
		                        Http.onLoaded(Http.messageElement,"");	                        
		                    }else{
		                        Http.onError(Http.messageElement,"Page Not Found!");
		                        oRequest.abort();
		                    };
		                };
		      			}else{
		                Http.onLoading(Http.messageElement,"Loading Data...");	                
		            };
	            }catch(exception){
								// do nothing
							}
	    		};
	    		oRequest.open("post",sURL,true);
	    		oRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	    		oRequest.send(sParams);
	  	}else if(navigator.javaEnabled() && typeof java != "undefined" && typeof java.net != "undefined"){
	  		setTimeout(function(){
	  				returnData = fnCallback(httpPost(sURL,sParams));
	    		}
	  			,10);
	  	}else{
	  			alert("Your browser doesn't support HTTP requests.");
	  	};
	},
	
	// Java mechanism for http post commands
	httpGet : function(sURL){
	  	var oURL = new java.net.URL(sURL);
	  	var oStream = oURL.openStream();
			var oReader = new java.io.BufferedReader(new java.io.InputStreamReader(oStream));
	  	var sResponseText = " ";
	
	    var sLine = oReader.readLine();
	
	    while(sLine != null){
	        sResponseText += sLine + "\n";
	        sLine= oReader.readLine();
	  	};
	  	oReader.close();
	  	return sResponseText;
	},

	// add a parameter to a get URL string
	addURLParam : function (sURL,sParamName,sParamValue){
			sURL += (sURL.indexOf("?") == -1 ? "?":"&");
			sURL += encodeURIComponent(sParamName)+"="+encodeURIComponent(sParamValue);
			return sURL;
	},

	// http post function 
	get : function(sURL,fnCallBack){
	  	var returnData = '';
	  	if(bXmlHttpSupport){
	        if(isIE){
	            var oRequest = new IEXMLHttpRequest();
	        }else{
	            var oRequest = new XMLHttpRequest();
	        };  		
	    		oRequest.onreadystatechange = function(){
	      			try{
								if(oRequest.readyState == 4){
		                if(oRequest){
		                    if(oRequest.status==200){
		                        if(Http.returnType == 'responseText'){
		                        	returnData = fnCallback(oRequest.responseText);
		                        }else{
															returnData = fnCallback(oRequest.responseXML);
														};
		                        Http.onLoaded(Http.messageElement,"");             
		                    }else{
		                        Http.onError(Http.messageElement,"Page Not Found!");                    
		                        oRequest.abort();
		                    };
		                };
		      			}else{
		                Http.onLoading(Http.messageElement,"Loading Data...");
		            };
	            }catch(exception){
								// do nothing!
							};
	    		};
	    		oRequest.open("get",sURL,true);
	    		oRequest.send(null);  		
	  	}else if(navigator.javaEnabled() && typeof java != "undefined" && typeof java.net != "undefined"){
	  		setTimeout(function(){
	  				returnData = fnCallback(this.httpGet(sURL));
	    		}
	  			,10);
	  	}else{
	  			alert("Your browser doesn't support HTTP requests.");
	  	};
	}
}
