// Class for Asynchronous Request 
/////////////////////////////////////////////////////////////////////////////////////
var dummy =
{
	httpRequest : null,
	onErrorResponse : function(request)
	{
		alert("´يخَ: " + this.httpRequest.statusText);
	},
	
	onReceiveResponse : function(request)
	{
		alert("Request get response : \n" + this.httpRequest.responseText);
	}
}

// constructor of AysnPoster
function AsyncPoster(url, postData)
{
	this._url = url;
	this._postData = postData;
	this._method = "post";
	this._error = "";
	this.callbackProc = null;
	this.onErrorResponse = null;
	this.onReceiveResponse = null;

	// Default asynchronous handler
	this.callbackProc = function() 
	{
		if (dummy.httpRequest.readyState == 4) 
		{ // Complete
			if (dummy.httpRequest.status == 200) 
			{ // OK response
				dummy.onReceiveResponse(dummy.httpRequest);
			} 
			else 
			{
				dummy.onErrorResponse(dummy.httpRequest);
			}
		}	
	} // End of processStateChange function
	
	this.post = function (){
		// Set the handlers that will call in the callback procedure
		if (this.onErrorResponse != null)
		{
			dummy.onErrorResponse = this.onErrorResponse;
		}
		
		if (this.onReceiveResponse!= null)
		{
			dummy.onReceiveResponse = this.onReceiveResponse;
		}
		
		if (window.XMLHttpRequest){ // Non-IE browsers
			dummy.httpRequest = new XMLHttpRequest();
			dummy.httpRequest.onreadystatechange = this.callbackProc;
			try {
				dummy.httpRequest.open(this._method, this._url, true);
			} 
			catch (e) {
				 this._error = e;
			}
			
			dummy.httpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
			dummy.httpRequest.send(this._postData);
		}
		else if (window.ActiveXObject) { // IE
			dummy.httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			if (AsyncPoster) {
				dummy.httpRequest.onreadystatechange = this.callbackProc; // Set the asynchronous handler
				dummy.httpRequest.open(this._method, this._url, true);

				dummy.httpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
				dummy.httpRequest.send(this._postData);
			}
		}
		return dummy.httpRequest;
	} // End of post function	

}
// End of AsyncPoster class
///////////////////////////////////////////////////////////////////////////////////////////////

function RetrieveURL(url, method){
	var httpRequest;
	
	if (window.XMLHttpRequest){ // Non-IE browsers
	
		httpRequest = new XMLHttpRequest();

		try {
			httpRequest.open(method, url, false);
		} 
		catch (e) {
			alert(e);
		}
	
		httpRequest.send(null);
	}
	else if (window.ActiveXObject) { // IE
		httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
		if (httpRequest) {
			httpRequest.open(method, url, false);
			httpRequest.send();
		}
	}
	
	return httpRequest;
} // End of retrieveURL function

//------------------------------------------------------
// PostData class for storing data sent with POST request
//------------------------------------------------------
function PostData()
{
    var data;
    
	this.data = "";        

	this.add  = function(field)
    {
	    // AddField2(field.name, field.value); // this will cause error, don't know why yet
    	
	    if (this.data !="")
	    {
		    this.data +="&"
	    }

	    this.data += (field.name + "=" + field.value);
	
	}

    this.add2 = function (name, value)
    {
	    if (this.data !="")
	    {
		    this.data +="&"
	    }

	    this.data += (name + "=" + value);

    }
}

function PostURL(url, postData)
{
	var httpRequest = null;

	if (window.XMLHttpRequest)
	{ // Non-IE browsers
	
		httpRequest = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	 { // IE
		httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
	}
	else
	{
	    alert("Error occurs when create XMLHttpRequest object");
	}

	if (httpRequest != null)
	{
		// MUST to set the Content-Type in the request header before call the HTTP POST command 
		httpRequest.open("POST", url, false);
		httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
       
        //httpRequest.setRequestHeader("Content-Type", "text/xml");
		httpRequest.send(postData);				
	}

	return httpRequest;
} // End of postURL function

// QueryParam class for storing parameters sent with GET request 
function QueryParam()
{	
	this.params = "";
	this.add2 = function (name, value){
		if (this.params == "")
		{
			this.params = "?"
			this.params += (name + "=" + value);
		}
		else
		{
			this.params += ("&" + name + "=" + value);
		}
	}
	
	this.add = function (inputElem){
		if (this.params == "")
		{
			this.params = "?"
			this.params += (inputElem.name + "=" + inputElem.value);
		}
		else
		{
			this.params += ("&" + inputElem.name + "=" + inputElem.value);
		}
	}
}

function GetURL(url, params){
	var httpRequest;
	url += params; // constructs a query URL
	
	if (window.XMLHttpRequest){ // Non-IE browsers
		httpRequest = new XMLHttpRequest();
		try {
			httpRequest.open("get", url, false);
		} 
		catch (e) {
			alert(e);
		}
	
		httpRequest.send(null);
	}
	else if (window.ActiveXObject) { // IE
		httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
		if (httpRequest) {
			httpRequest.open("get", url, false);
			httpRequest.send();
		}
	}
	
	return httpRequest;
} // End of retrieveURL function


//------------------------------------------------------------------------------------------
function getCookie(name) {
   var search = name + "="
   if(document.cookie.length > 0) {
      offset = document.cookie.indexOf(search)
      if(offset != -1) {
         offset += search.length
         end = document.cookie.indexOf(";", offset)
         if(end == -1) end = document.cookie.length
         return unescape(document.cookie.substring(offset, end))
      }
      else return ""
   }
}
function setCookie(name, value, domain) {
		document.cookie = name + "=" + escape(value) + ";" + domain;
} 

//--------------------------------------------------------------------------------
function Cookie( document, name, domain )
{
	this._document = document;
	this._name = name;
	this._expiration = new Date(2099,12,31);
	this._domain = domain;
	this.data = null;
}

Cookie.prototype.store = function()
{
	var cookieval = "";
	if( this.data != null)
	{
		for( var i=0; i<this.data.length;i++)
		{
			cookieval += this.data[i].join(":") + "&";
		}
	}
	
	if( cookieval != "" && cookieval.charAt( cookieval.length-1) == "&" )
	{
		cookieval = cookieval.substring( 0,cookieval.length-1);
	}
	
	var cookie = this._name + "=" + cookieval + ";expires=" + this._expiration.toGMTString() + ";domain=" + this._domain;
	window.document.cookie = cookie;
}

// Load cookie from the document
Cookie.prototype.load = function()
{
	var allcookies = this._document.cookie;
	if( allcookies == "") return false;
	
	var start = allcookies.indexOf( this._name + "=" );
	if( start == -1) return false;
	
	start += this._name.length +1;
	var end = allcookies.indexOf( ";", start );
	if( end == -1) end = allcookies.length;
	
	var cookieval= allcookies.substring( start, end );
	var a = cookieval.split("&");
	for( var i=0;i<a.length; i++)
	{
		a[i] = a[i].split(':');
	}
	
	this.data = a;
	return true;
}

Cookie.prototype.setVals = function( a, flag )
{
	if( this.data == null)
	{
		if( flag )
		{	
			this.data = [];
			this.data[0] = a;
		}
	}
	else
	{
		this.data[0][0] = a[0];
		if( flag)
			return;
		else
			this.data = null;
	}
}

//----------------------------------------------------------------------
function showLayer(layerId)
{
	var oLayer = document.getElementById(layerId);
	if (oLayer != null)
	{
		oLayer.style.display = "block";
	}
}

function hideLayer(layerId)
{
	var oLayer = document.getElementById(layerId);
	if (oLayer != null)
	{
		oLayer.style.display = "none";

	}
}

