//AJax
function AJax()
{
	this.req 			= null;
	this.url 			= null;
	this.status 		= null;
	this.statusText 	= '';
	this.method 		= 'GET';
	this.async 			= true;
	this.dataPayload 	= null;
	this.readyState 	= null;
	this.responseText 	= null;
	this.responseXML 	= null;
	this.handleResp 	= null;
	this.responseFormat = 'text'; // 'text', 'xml', 'object'
	this.mimeType 		= null;
	this.headers 		= [];

	this.init = function()
	{
		var i = 0;
		var reqTry = [
			function() { return new XMLHttpRequest(); },
			function() { return new ActiveXObject('Msxml2.XMLHTTP') },
			function() { return new ActiveXObject('Microsoft.XMLHTTP' )} ];

		while (!this.req && (i < reqTry.length))
	 	{
			try 
			{ 
				this.req = reqTry[i++]();
			} 
			catch(e) {}
		}

		return true;
	};

	this.doGet = function(url, hand , format) 
	{
		this.url = url;
		this.handleResp = hand;
		this.responseFormat = format || 'text';
		this.doReq();
	};

	this.doPost = function(url, dataPayload, hand, format) 
	{
		this.url = url;
		this.dataPayload = dataPayload;
		this.handleResp = hand;
		this.responseFormat = format || 'text';
		this.method = 'POST';
		this.doReq();
	};
	
	this.doReq = function() 
	{
		var self = null;
		var req = null;
		var headArr = [];

		if (!this.init()) 
		{
			displayErrorMessage('<?echo $strErrCreateXmlHttp; ?>');
			return;
		}
		
		req = this.req;
		req.open(this.method , this.url , this.async);
		if (this.method == "POST") 
		{
			this.req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		}
		
		self = this;
		req.onreadystatechange = function() 
		{
			var resp = null;
			self.readyState = req.readyState;
			if (req.readyState == 4) 
			{
				self.status 		= req.status;
				self.statusText 	= req.statusText;
				self.responseText 	= req.responseText;
				self.responseXML 	= req.responseXML;

				switch(self.responseFormat) 
				{
					case 'text':
						resp = self.responseText;
						break;
					case 'xml':
						resp = self.responseXML;
						break;
					case 'object':
						resp = req;
						break;
				}

				if (self.status > 199 && self.status < 300) 
				{
					if (!self.handleResp) 
					{
						displayErrorMessage('No response handler defined for this XMLHttpRequest object.');
						return;
					}
					else 
					{
						self.handleResp(resp);
					}
				}
				else 
				{
					self.handleErr(resp);
				}
			}
		}
	
		req.send(this.dataPayload);
	};

	this.abort = function() 
	{
		if (this.req) 
		{
			this.req.onreadystatechange = function() { };
			this.req.abort();
			this.req = null;
		}
	};
	
	this.handleErr = function() 
	{
		// Create new window and display error
		try 
		{
			displayErrorMessage(this.responseText);
		}
			// If pop-up gets blocked, inform user
		catch(e) 
		{
			displayErrorMessage('An error occurred, but the error message cannot be' +
			' displayed because of your browser\'s pop-up blocker.\n' +
			'Please allow pop-ups from this Web site.');
		}
	};

	this.setMimeType = function(mimeType) 
	{
		this.mimeType = mimeType;
	};

	this.setHandlerResp = function(funcRef) 
	{
		this.handleResp = funcRef;
	};
	
	this.setHandlerErr = function(funcRef) 
	{
		this.handleErr = funcRef; 
	};
	
	this.setHandlerBoth = function(funcRef) 
	{
		this.handleResp = funcRef;
		this.handleErr = funcRef;
	};
	
	this.setRequestHeader = function(headerName, headerValue) 
	{
		this.headers.push(headerName + ': ' + headerValue);
	};
}
/*
function CreateAJaxObject()
{
	if (window.XMLHttpRequest)
	{
		// code for IE7+, Firefox, Chrome, Opera, Safari
		return new XMLHttpRequest();
	}
	
	if (window.ActiveXObject)
	{
		// code for IE6, IE5
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	return null;
}
*/
//Cookie
function setCookie(c_name , value , expiredays)
{
	var exdate = new Date();
	exdate.setDate(exdate.getDate() + expiredays);
	document.cookie = c_name + "=" + escape(value) + ((expiredays==null) ? "" : ";expires=" + exdate.toGMTString());
}

function getCookie(c_name)
{
	if (document.cookie.length > 0)
	{
		c_start = document.cookie.indexOf(c_name + "=");
		
		if (c_start != -1)
		{
			c_start	= c_start + c_name.length + 1;
			c_end	= document.cookie.indexOf(";" , c_start);
			
			if (c_end == -1) 
				c_end = document.cookie.length;
			
			return unescape(document.cookie.substring(c_start , c_end));
		}
	}

	return "";
}

//errDisplay
function displayErrorMessage(msg)
{
	$("#errMsg").html(msg);
	$("#errdlg").dialog('open');
}
function _displayErrorMessageAndFocus(msg, id)
{
//	$("#errMsg").html(msg);
//	$("#errdlg").dialog('open');
	alert(msg);
	$(id).focus();
	
}
