var ajax = new ajaxObject();
//alert("ajax");
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;
		this.divId;

		//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
					{
						methodType = "GET";
						//alert(methodType+" "+urlStr);
						http.open(methodType,urlStr, true);

						setRequestHeader();
						http.onreadystatechange = handleHttpResponse;

						var request = setRequestParameter();

						//http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
						http.send(request);

						//setTimeout("doNothing()", 1000);

					}
					catch(Exception)
					{
						alert(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();

                        if(contentType!=null && contentType.indexOf("xml")!=-1)
						{
						    responseText = message.xml;
							alert("message.xml :"+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 = window.escape(responseText);
						var responseHeaders = window.escape(headers);
						var scripts = getScripts();
		
						eval("" + callbackMethod + "(\"" + responseText + "\",\"" + responseHeaders + "\")");
						//alert(contentType+"---script--->>"+scripts);
						if (contentType.match("html") == "html")
						{
							//alert("scripts-->"+scripts);

							findAndLoadScript(scripts);
							//setTimeout("findAndLoadScript("+oldScriptLength+");",1000);
						}
					}
					else
					{
						alert("ERROR getting response Text ["+http.status+"]");
						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;
		}
}
function invoke()
{
	document.getElementById(arguments[1]).innerHTML='<img src="http://www.naaptol.com/usr/local/csp/staticContent/images/loading.gif" /> <span style="font-family: Tahoma; font-size: 13px; color: #2D96E7; font-weight: bold;">Requesting content...</span>'
	if(!arguments[0])
	return;

	if(!arguments[1])
	return;
	var ajax = new ajaxObject();
	ajax.url(arguments[0]+"&div_id="+arguments[1])
	this.divId = arguments[1];
	ajax.callbackHandler("callback")
	ajax.execute();
}

function cleanString(divid)
{

   var allChars="abcdefghijklmnopqrstuvwxyzABCEDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
   var retString = "";
   var workString= "";
   var tempString= "";
   var len = divid.length;
   for(j = 0 ; j < len ; j++)
   {
       workString = divid;
	   tempString = workString.substring(j,j+1);
	   var index = allChars.indexOf(tempString);
	   if (index > -1 )
	      retString = retString + tempString;

   }
   return retString;
}

var newdiv ="";
function callback(res,headers)
{

	 res = unescape(res);
	var div_id = ajax.responseHeader(headers).get("div_id");
	//alert("div_id-->"+div_id);
	try
	{
	     div_id =  cleanString(div_id);
	     var divobject= document.getElementById(div_id);
	     //alert(divobject );
		 if( divobject != null ){
		 //alert("res --- >"+res);
			  divobject.innerHTML = res;

			 //newdiv=res;
			// setTimeout("callPageScript()",500);

		 }
	}
	catch(Exception)
	{
		alert(Exception);
	}

}

/*
 * NOT IN USE............Removed
 */
function callPageScript(){
	pos=newdiv.lastIndexOf("<script".toLowerCase())
	newdiv=newdiv.substring(pos,newdiv.length);
	a=newdiv.indexOf(">");
	b=newdiv.lastIndexOf("</script>".toLowerCase())
	script="";
	if(a && b)
	{
		var script = "";
	 	for(var i=a+1;i<b-1;i++)
	    {
			script= script+newdiv.substring(i,i+1);

		}
		 eval(script);
	 }
}
/*
 * Following function is used for to load js from jsp which is call through url
 *
 */
function loadExternalJavascript(filename)
	{
		//alert("filename-->"+filename);
		var body = document.getElementsByTagName('body').item(0);
		var script = document.createElement('script');
		script.src = filename;
		script.type = 'text/javascript';
		body.appendChild(script);
	}
/*
 * Following function is used for to count how many js is include in jsp
 *
 */
	function findAndLoadScript(oldScripts)
	{
		
		if(oldScripts==null)
		oldScripts = [];
		var newScripts = document.getElementsByTagName('script');
		if(newScripts==null)
		newScripts = [];

		var loadedScript = [];

		for(var i=0;i<newScripts.length;i++)
		{
			var currscript = newScripts[i];
			var existJS = false;
			for(var j=0;j<oldScripts.length;j++)
			{
				if(currscript.src)
					{

						if(oldScripts[j].src  == currscript.src )
						{
							existJS = true;
							break;
						}
					}
					else
					{
						if(oldScripts[j].innerHTML  == currscript.innerHTML )
						{
							existJS = true;
							break;
						}
					}
			}

			if(!existJS)
			{
				loadedScript[loadedScript.length] = newScripts[i];
			}

		}


		 var newArray  = new Array();
		 newArray = uniqueArray(loadedScript);

			for(var i=0;i<newArray.length;i++)
			{

				var unloadedscript = newArray[i];

				if (unloadedscript.src)
				{
					//alert("ss-->"+unloadedscript.src);
					loadExternalJavascript(unloadedscript.src);
					
				}
				else
				{
					var contentScript = unloadedscript.innerHTML;
					//alert("contentScript-->"+contentScript);
					eval(contentScript);
				}
			}

	}

function uniqueArray(oldArray)
{

	for(var i =0;i<oldArray.length;i++){

		for(var j=i+1;j<oldArray.length;j++){

			if(oldArray[i] != ""){

				if(oldArray[i].src == oldArray[j].src){
					oldArray[j] = "";
				}
				else if(oldArray[i].innerHTML && oldArray[j].innerHTML){
					if(oldArray[i].innerHTML == oldArray[j].innerHTML){
					oldArray[j] = "";
				}
				}

			}

		}

	}

	return oldArray;
}
/*
 * Following functon is used for to load javascript from jsp
 *
 */
	function getScripts()
	{
		var scripts = document.getElementsByTagName('script');
		var scriptsTemp = [scripts.length];
		for(var i=0; i<scripts.length; i++)
		{
			scriptsTemp[i]=scripts[i];
		}
		return scriptsTemp;
	}
