var ajax = new ajaxObject();

function ajaxObject()
{
		var urlStr = "";
		var methodType = "POST";
		var requestXMLStr;
		var callbackMethod = "";
		var headerMap = new map();
		var requestMap = new map();

		var http;
		
		
		init();
		

		
		this.url=setURL;
		this.method =setMethod;
		this.headerParam = getHeaderParameters;
		this.requestParam = getRequestParameters;
		this.requestXML = setRequestXML;
		this.callbackHandler=setCallbackHandler;
		this.execute = executeRequest ;
		this.responseHeader = getResponseHeader;

		//Method
		this.execute = executeRequest ;

		function setURL(urlVal)
		{
			urlStr = urlVal;
		}


		function setMethod(methodVal)
		{
			methodType = methodVal;
		}
		
		function setRequestXML(requestXMLVal)
		{
			requestXMLStr = requestXMLVal;
		}

		function setCallbackHandler(callbackHandlerVal)
		{
			callbackMethod = callbackHandlerVal;
		}


		function getHeaderParameters()
		{
			return headerMap;
		}

		function getRequestParameters()
		{
			return requestMap;
		}

		
		
/* ======================================================================
	Function	: init
	Input		: 
	Explanation : Responsible to create object of HTTP REQUEST
	========================================================================== */
		function init() 
		{
				
				try
				{
					
					if (window.XMLHttpRequest) 
					{				
						http = new XMLHttpRequest(); // Firefox, Safari

						if(http.overrideMimeType)
							http.overrideMimeType('text/xml');
						//alert("window.XMLHttpRequest created successfully");

					}
					else if (window.ActiveXObject) 
					{
						http = new ActiveXObject("Microsoft.XMLHTTP"); // Internet Explorer 
						//alert("window.ActiveXObject created successfully");
					}
				}
				catch(Exception)
				{
					//alert("Error Came over Here");
					throw new Error('Error : Error while initializing ajax for application');
				}

				
				//return xmlhttp;
		}
		
/* ======================================================================
	Function	: executeRequest
	Input		: 
	Explanation : Responsible for sending request to server
	========================================================================== */
		function executeRequest()
		{
					try
					{
						
						http.open(methodType,urlStr, true);
						
						setRequestHeader();

						http.onreadystatechange = handleHttpResponse;
						
						var request = setRequestParameter();
						
						http.send(request);

						setTimeout("doNothing()", 1000);
						
					}
					catch(Exception)
					{
						throw new Error('Error : Error while invoking request');
					}
		}

        function doNothing()
        {
        }
         

		
		function setRequestHeader()
		{
			for(var i=0;i<headerMap.size;i++)
			{
					http.setRequestHeader(headerMap.keys[i] , headerMap.keys[i] );
			}
		}

/* ======================================================================
	Function	: setRequestParameter
	Input		: 
	Explanation : Responsible to  set request parameter
	========================================================================== */


		function setRequestParameter()
		{
			var request ="";

			if(requestXMLStr!=null)
			{
					request = requestXMLStr;
					return request;
			}
			
			for(var i=0;i<requestMap.size;i++)
			{

				request  = request  + "" + requestMap.keys[i] + "=" + requestMap.values[i] + "&";
					
			}
			
			if(request!="")
			{
					request = request.substring(0,request.length-1);
			}
			else
			{
					request = null;
			}
			
			return request;
		}

/* ======================================================================
	Function	: map
	Input		: 
	Explanation : responsible for setting key value pair for request
	========================================================================== */
		
		function map()
		{
			var gKeys = new Array();
			var gValues = new Array();
			
			
			this.keys = gKeys;
			this.values = gValues;
			this.size = 0;
			this.put = setMapEntry;
			this.get = getMapEntry;

			function setMapEntry(key , value)
			{
					gKeys[gKeys.length]  = key;
					gValues[gValues.length] = value;
					this.size++;
			}
			
			function getMapEntry(keyParam)
			{
				
				for(var i=0;i<this.size;i++)
				{
					if(gKeys[i]==keyParam)
					return gValues[i];
				}

				return "";
			}
		
		}
		

/* ======================================================================
	Function	: handleHttpResponse
	Input		: 
	Explanation : Responsible for  handle response that will come from server 
	========================================================================== */

		function handleHttpResponse() 
		{
			try
			{
				if (http.readyState == 4) 
				{
					if (http.status == 200) 
					{  
						var responseText = "";
						var contentType = http.getResponseHeader("Content-Type");
						var message = http.responseXML;
						var headers = http.getAllResponseHeaders();
                        //alert(headers); 
						if(contentType!=null && contentType.indexOf("xml")!=-1)
						{
						    responseText = message.xml;
							alert("message.xml :"+responseText); 
						}
						//else if(message!=null && message.xml!="")
                        //{
						//	responseText = message.xml;
						//	alert("message.xml1 :"+responseText); 
						//}	
						else if(contentType!=null && contentType.indexOf("html")!=-1)
						{
							responseText= http.responseText;
							//alert("Undefined Value :"+responseText); 
						}
						else
						{
							responseText= http.responseText;
							//alert("Undefined Value1 :"+responseText); 
						}
                        //alert("responseText :"+responseText);
						responseText = escape(responseText);
						var responseHeaders = escape(headers);
							
						eval(""+callbackMethod+"(\""+responseText+"\",\""+responseHeaders+"\")");
					} 
					else
					{
						alert("ERROR getting response Text");
						throw new Error('Error : Not able to retrieve response from Specified url');
					}
				} 
			}
			catch (e)
			{
				alert("ERROR getting response Text1");
				throw new Error('Error : Not able to retrieve response from Specified url');
			}
		}


		function getResponseHeader(headers)
		{
			headers = unescape(headers);
			var responseHeaderMap = new map();

			var obj=headers.split("\n");
			
			for(var i=0;i<obj.length;i++)
			{
				var headerStr = obj[i];
				var index = headerStr.indexOf(":");	
				if(index!=-1)
				{
					var key = headerStr.substring(0,index);
					var val = headerStr.substring(index+1,headerStr.length);
					responseHeaderMap.put(key,val);
				}
			}

			return responseHeaderMap;
		}
}



