///----------------------------------------------------------------
/// Copyright (C) 2004 NisTech (http://www.nt-net.com)
/// This class written by Thang Dang Minh, (mailto:thangdm@gmail.com;atomic_thang@yahoo.com)
/// Last update : 10 / 8 / 2004
/// The file use only for NisTech projects
/// All rights reserved.
/// You should use this class for only NisTech projects. But if you use this class for other purpose
/// please agree the following requirement:
/// 
///		1 - Not to remove any copyright notices from the NisTech Company and author. 
///		2 - That the patent rights, if any, licensed hereunder only apply to the 
///			Software, not to any derivative works you make. 
///		3 - That if you distribute the Software in source code form you do so only 
///			under this License (i.e. you must include a complete copy of this License 
///			with your distribution), and if you distribute the Software solely in 
///			object form you only do so under a license that complies with this License. 
///		4 - All the distribution and copying you must have the agreement of the author, you can contact with me as I wrote above.
///----------------------------------------------------------------

var g_chCOL_DELIMITER = '\x12';
var g_chROW_DELIMITER = '\x11';
var g_NTVariables = null;
var g_sBrowser = null;
var GlobalEnable = true;
var SystemImagePath;

function Random(nSize)
{
	return Math.floor(Math.random() * (nSize - 1));
}

function NTLoadFile(strFile, bJS)
{			
	var fileref;
	if (bJS)
	{
		var arr = document.getElementsByTagName('script');		
		for (var i = 0; i < arr.length; i++)
		{
			// the script file name is located at the end of the src property
			var j = arr[i].src.indexOf(strFile);
			if (j >=0 && j == arr[i].src.length - strFile.length)
			{	
				return null;
			}
		}
		
		fileref=document.createElement('script')
		fileref.setAttribute("type","text/javascript");
		fileref.setAttribute("src", strFile);
	}
	else
	{
		var arr = document.getElementsByTagName('link');
		for (var i = 0; i < arr.length; i++)
		{
			var j = arr[i].href.indexOf(strFile);
			// the script file name is located at the end of the src property
			if (j >= 0 && j == arr[i].href.length - strFile.length)
				return null;
		}
			
		fileref=document.createElement("link")
		fileref.setAttribute("rel", "stylesheet");
		fileref.setAttribute("type", "text/css");
		fileref.setAttribute("href", strFile);		
	}
	
	document.getElementsByTagName("head")[0].appendChild(fileref);
	return fileref;
}

function NTCancelEvent(h)
{
	if (!h)
		return; 
	h.returnValue= false; 
	h.cancelBubble= true; 
	if (h.stopPropagation)
	{
		h.stopPropagation(); 
	}
	if (h.preventDefault)
	{
		h.preventDefault(); 
	}
	return false; 
}

function HandleKeyDown(nKeyCode, strFunction, evtEvent)
{
	if (evtEvent == null)
		evtEvent = window.event;

	if (evtEvent.keyCode == nKeyCode || evtEvent.which == nKeyCode)
	{
		if (!eval(unescape(strFunction)))
		{
			return NTCancelEvent(evtEvent);
		}
	}
}

function NTEnableControlRescursive(obj, nEnable)
{
	if (obj)
	{
		switch (obj.nodeName)
		{
			case "TEXTAREA":
			case "INPUT":
			case "SELECT":
			case "SPAN":
			case "TD":
			case "DIV":		
				if (nEnable == 0)	// Disable
				{
					obj.lastDisabled = obj.disabled;
					obj.disabled = true;
				}
				else if (nEnable == 2) // Restore
				{
					obj.disabled = obj.lastDisabled;
				}
				else // Enable
					obj.disabled = false;
				break;
		}
		
		for (var i = 0; i < obj.childNodes.length; i++)
		{
			NTEnableControlRescursive(obj.childNodes[i], nEnable);
		}
	}
}


function NTSetFormAction(furl)
{
	var ctlForm = document.forms[0];
	ctlForm.action = furl;
}

function NTGetVars()
{
	if (g_NTVariables == null)
	{
		var ctlVars = document.getElementById("PVars");
		g_NTVariables = new Array();
		if (ctlVars != null)
		{
			var Items = ctlVars.value.split(g_chROW_DELIMITER);
			for (i = 0; i < Items.length; i++)
			{
				var Item = Items[i].split(g_chCOL_DELIMITER);
				
				if (Item.length == 2)
					g_NTVariables[Item[0]] = Item[1];
			}			
		}
	}	
	
	return g_NTVariables;	
}

function NTGetVar(strKey)
{
	return NTGetVars()[strKey];
}

function NTSetVar(strKey, strValue)
{
	if (g_NTVariables == null)
		NTGetVars();
		
	g_NTVariables[strKey] = strValue;
	var ctlVars = document.getElementById("PVars");
	
	if (ctlVars == null)
	{
		ctlVars = document.createElement('input');
		ctlVars.type = 'hidden';
		ctlVars.id = 'PVars';		
		document.appendChild(document.getElementsByTagName('body')[0], ctlVars);
	}
	
	var strValues = '';
	var strValue;
	
	for (strKey in g_NTVariables)
	{
		strValue = g_NTVariables[strKey];
		if (strValue != null)
			strValues += g_chROW_DELIMITER + strKey + g_chCOL_DELIMITER + strValue;
	}
	
	ctlVars.value = strValues;
}

function NTSetHiddenInputValue(ctlForm, strName, strValue)
{
    if (ctlForm[strName])
        ctlForm[strName].value = strValue;
    else
    {
        var input = document.createElement("input");
        input.setAttribute("name", strName);
        input.setAttribute("type", "hidden");
        input.setAttribute("value", strValue);
        ctlForm.appendChild(input);
        ctlForm[strName] = input;
    }
}

function NTSetFocus(id)
{
	var obj = document.getElementById(typeof(id) == "string" ? id : FocusID);
	
	if (!obj || obj.disabled)
		return;
		
	var p = obj.parentNode;
	while (p != document.body)
	{
		if (p.style && p.style.display == 'none' || p.style.visibility == 'hidden')
		{			
			return;
		}
		p = p.parentNode;
	}
	obj.focus();
}

function NTAddEvents(ctlObject, evtEventypes, fnHandler)
{
	for (i=0; i<evtEventypes.length; i++) NTAddEvent(ctlObject, evtEventypes[i], fnHandler);
}

function NTAddEvent(ctlObject, evtEventype, fnHandler)
{
	if (ctlObject.attachEvent)
	{
		var r = ctlObject.attachEvent('on'+evtEventype, fnHandler);
		return r;
	}
	else if (ctlObject.addEventListener)
	{
		ctlObject.addEventListener(evtEventype, fnHandler, true);
		return true;
	}
	else
	{
		return false;
	}
}

function NTRemoveEvent(ctlObject, evtEventype, fnHandler)
{
	if (ctlObject.detachEvent)
	{
		ctlObject.detachEvent('on'+evtEventype, fnHandler);
		return true;
	}
	else if (ctlObject.removeEventListener)
	{
		ctlObject.removeEventListener(evtEventype, fnHandler, true);
		return true;
	}	
	else
		return false;
}

function NTGetKeyCode(evtEvent)
{	
	return evtEvent.keyCode ? evtEvent.keyCode : evtEvent.which;
}

function NTToggle(id)
{
	var ctlObject = document.getElementById(id);
	if (ctlObject.style.display == 'none')
		ctlObject.style.display = '';
	else
		ctlObject.style.display = 'none';		
}

function NTCheckAllCheckBoxes(strarrBoxesName, bCheck)
{
	var arrBoxes = document.getElementsByName(strarrBoxesName);
	
	for (i = 0; i < arrBoxes.length; i++)
		arrBoxes[i].checked = bCheck;
		
	return arrBoxes;
}

function NTGridCheckAll(ctlObject, strName)
{ 	
	var str = ctlObject.src;
	var i = str.lastIndexOf('/');
	if (str.substr(i + 1,1) == 'u')	// unchecked.gif
	{ 
		ctlObject.src = str.replace('unchecked.gif', 'checked.gif');
		return NTCheckAllCheckBoxes(strName, false);	
	}
	else
	{
		ctlObject.src = str.replace('checked.gif', 'unchecked.gif');
		return NTCheckAllCheckBoxes(strName, true);	
	}
}

function NTGridUncheckAll(ctlObject, strName)
{ 
	ctlObject.src = ctlObject.src.replace('unchecked.gif', 'checked.gif');
	return NTCheckAllCheckBoxes(strName, false);
}

function NTGenerateCheckedIDs(strName)
{
	var arrBoxes = document.getElementsByName(strName);
	strIDs = null; 
	for (i = 0; i < arrBoxes.length; i++)
	{ 
		if (arrBoxes[i].checked) 
			if (strIDs == null) 
				strIDs = arrBoxes[i].id; 
			else strIDs += '|' + arrBoxes[i].id;
	} 
	
	NTSetVar(strName + '_IDs', strIDs); 
	return strIDs;
}

function NTGetCheckedList(strName, ch, nLimit)
{
	var arrBoxes = document.getElementsByName(strName);
	var nChecked = 0;
	strIDs = null; 
	for (i = 0; i < arrBoxes.length; i++)
	{ 
		if (arrBoxes[i].checked) 
		{
			if (nChecked == nLimit)
			{
				strIDs += ch + "...";
				break;
			}
			
			if (strIDs == null) 
				strIDs = arrBoxes[i].id; 
			else strIDs += ch + arrBoxes[i].id;
			nChecked++;
		}
	} 	
	return strIDs;
}

function NTCheckBoxClick(ctlObject)
{
	var strName = ctlObject.getAttribute("name");
	var arrBoxes = document.getElementsByName(strName);
	var ctlObjectImg = document.getElementById(strName + "_chkimg");
	var bAllChecked = true;	
	
	for (i = 0; i < arrBoxes.length; i++)
		if (!arrBoxes[i].checked)
			bAllChecked = false;
		
	if (bAllChecked)
		ctlObjectImg.src = ctlObjectImg.src.replace('checked.gif', 'unchecked.gif');
	else
		ctlObjectImg.src = ctlObjectImg.src.replace('unchecked.gif', 'checked.gif');
}

function NTDoAction(strCode, strID, strAgr)
{
	eval("function action(){" + unescape(strCode) + "}");
	if (action())
		__doPostBack(strID, strAgr);
}

function OpenImage(strLink, nWidth, nHeight)
{
	var strLink = (typeof(strLink.href) == 'undefined') ? strLink : strLink.href;
	var objNewWin;

	if (strLink == '')
	{
		return false;
	}

	var strWinDef = 'status=no,resizable=no,scrollbars=no,toolbar=no,location=no,fullscreen=no,titlebar=yes,height='.concat(nHeight).concat(',').concat('width=').concat(nWidth).concat(',');
	strWinDef = strWinDef.concat('top=').concat((screen.height - nHeight)/2).concat(',');
	strWinDef = strWinDef.concat('left=').concat((screen.width - nWidth)/2);
	objNewWin = open('', '_blank', strWinDef);

	objNewWin.document.writeln('<body topmargin="0" leftmargin="0" marginheight="0" marginwidth="0">');
	objNewWin.document.writeln('<a href="" onClick="window.close(); return false;"><img src="', strLink, '" alt="&#272;&#243;ng l&#7841;i" border=0></a>');
	objNewWin.document.writeln('</body>');

	if (typeof(strLink.href) != 'undefined')
	{
		return false;
	}
}

function OpenUrl(strUrl, nWidth, nHeight, strFeatures, strTitle)
{
	var objNewWin;
	var strWinDef = strFeatures + ',height='.concat(nHeight).concat(',').concat('width=').concat(nWidth).concat(',');
	
	if (strTitle)
	{
		strWinDef = strWinDef.concat('top=').concat((document.body.clientHeight - nHeight)/2 + document.body.scrollTop).concat(',');
		strWinDef = strWinDef.concat('left=').concat((document.body.clientWidth - nWidth)/2 + document.body.scrollLeft);		
		
		objNewWin = g_WindowMan.Open(strUrl, '', strWinDef, strTitle);		
	}
	else
	{
		strWinDef = strWinDef.concat('top=').concat((screen.height - nHeight)/2).concat(',');
		strWinDef = strWinDef.concat('left=').concat((screen.width - nWidth)/2);		
	
		objNewWin = open(strUrl, '', strWinDef);
	}
	return objNewWin;
}

function NTGetElementOverlapScore(oDims1, oDims2)
{		
	var iLeftScore = 0;
	var iTopScore = 0;
	if (oDims1.Left <= oDims2.Left && oDims2.Left <= oDims1.Right)	//if left of content fits between panel borders
		iLeftScore += (oDims1.Right < oDims2.Right ? oDims1.Right : oDims2.Right) - oDims2.Left;	//set score based off left of content to closest right border
	if (oDims2.Left <= oDims1.Left && oDims1.Left <= oDims2.Right)	//if left of panel fits between content borders
		iLeftScore += (oDims2.Right < oDims1.Right ? oDims2.Right : oDims1.Right) - oDims1.Left; //set score based off left of panel to closest right border
	if (oDims1.Top <= oDims2.Top && oDims2.Top <= oDims1.Bottom)	//if top of content fits between panel borders
		iTopScore += (oDims1.Bottom < oDims2.Bottom ? oDims1.Bottom : oDims2.Bottom) - oDims2.Top;	//set score based off top of content to closest bottom border
	if (oDims2.Top <= oDims1.Top && oDims1.Top <= oDims2.Bottom)	//if top of panel fits between content borders
		iTopScore += (oDims2.Bottom < oDims1.Bottom ? oDims2.Bottom : oDims1.Bottom) - oDims1.Top; //set score based off top of panel to closest bottom border
	
	return iLeftScore * iTopScore;
}

function NTGetElementHeight(ctlObject)
{	
	if (ctlObject.offsetHeight == null || ctlObject.offsetHeight == 0)
	{
		if (ctlObject.offsetParent.offsetHeight == null || ctlObject.offsetParent.offsetHeight == 0)
		{
			if (ctlObject.offsetParent.offsetParent != null)
				return ctlObject.offsetParent.offsetParent.offsetHeight; //needed for Konqueror
			else
				return 0;
		}
		else
			return ctlObject.offsetParent.offsetHeight;
	}
	else
		return ctlObject.offsetHeight;
}

function NTGetElementWidth(ctlObject)
{
	if (ctlObject.offsetWidth == null || ctlObject.offsetWidth == 0)
	{
		if (ctlObject.offsetParent.offsetWidth == null || ctlObject.offsetParent.offsetWidth == 0)
		{
			if (ctlObject.offsetParent.offsetParent != null)
				return ctlObject.offsetParent.offsetParent.offsetWidth; //needed for Konqueror
			else
				return 0;
		}
		else
			return ctlObject.offsetParent.offsetWidth

	}
	else
		return ctlObject.offsetWidth;
}	

function NTGetViewPortWidth()
{
	// supported in Mozilla, Opera, and Safari
	if(window.innerWidth)
			return window.innerWidth;
	// supported in standards mode of IE, but not in any other mode
	if(window.document.documentElement.clientWidth)
			return document.documentElement.clientWidth;

	// supported in quirks mode, older versions of IE, and mac IE (anything else).
	return window.document.body.clientWidth;
}

function NTScrollToObject(strID)
{
	var ctlObject = document.getElementById(strID);	
	var nTop = NTGetElementTop(ctlObject);	
	var nLeft = NTGetElementLeft(ctlObject);
	
	if ((nTop > document.body.scrollTop + document.body.clientHeight - 30) || (nTop < document.body.scrollTop))
		document.body.scrollTop = nTop - 30;
	if ((nLeft > document.body.scrollLeft + document.body.clientWidth - 30) || (nLeft < document.body.scrollLeft))
		document.body.scrollLeft = nLeft - 30;
}

function NTScrollToObjectByObject(ctlObject)
{
	var nTop = NTGetElementTop(ctlObject);
	var nLeft = NTGetElementLeft(ctlObject);
	
	if ((nTop > document.body.scrollTop + document.body.clientHeight - 30) || (nTop < document.body.scrollTop))
		document.body.scrollTop = nTop - 30;
	if ((nLeft > document.body.scrollLeft + document.body.clientWidth - 30) || (nLeft < document.body.scrollLeft))
		document.body.scrollLeft = nLeft - 30;
}
	
function NTGetBodyScrollTop()
{
	if ('|ie|op|mo|ns|'.indexOf('|' + NTBrowserType() + '|') != -1)
	{
		if (document.body.scrollTop != null)
			return document.body.scrollTop;
	}
	return 0;
}

function NTGetBodyScrollLeft(bOverride)
{
	if ('|op|'.indexOf('|' + NTBrowserType() + '|') != -1 || bOverride == true)
	{
		if (document.body.scrollLeft != null)
		{
			return document.body.scrollLeft;
		}
	}
	return 0;
}
	
function NTGetViewPortHeight()
{
	// supported in Mozilla, Opera, and Safari
	if(window.innerHeight)
			return window.innerHeight;
	// supported in standards mode of IE, but not in any other mode
	if(window.document.documentElement.clientHeight)
			return document.documentElement.clientHeight;

	// supported in quirks mode, older versions of IE, and mac IE (anything else).
	return window.document.body.clientHeight;
}
	
	
function NTGetElementTop(ctlObject, bIncludeBody)
{	
	var iTop = 0;

	while (ctlObject.tagName.toUpperCase() != "BODY")
	{
		//Safari incorrectly calculates the TR tag to be at the top of the table, so try and get child TD tag to use for measurement
		//if (NTBrowserType() == 'safari' && ctlObject.tagName.toUpperCase() == 'TR' && NTGetTags('TD', ctlObject).length)
		//	ctlObject = NTGetTags('TD', ctlObject)[0];

		iTop += ctlObject.offsetTop;

		ctlObject = ctlObject.offsetParent;
		if (ctlObject == null)
			break;
	}
	if (bIncludeBody != null && ctlObject != null && (NTBrowserType() == 'safari' || NTBrowserType() == 'kq')) 
		iTop += ctlObject.offsetTop;	
	
	return iTop;
}

function NTGetElementLeft(ctlObject, bIncludeBody)
{	
	var iLeft = 0;
	
	while (ctlObject.tagName.toUpperCase() != "BODY")
	{
		//if (spm_isMac() && NTBrowserType() == 'ie')
		//	iLeft += ctlObject.clientLeft;
		//else
			iLeft += ctlObject.offsetLeft;

		ctlObject = ctlObject.offsetParent;
		if (ctlObject == null)
			break;
	}
	if (bIncludeBody != null && ctlObject != null && (NTBrowserType() == 'safari' || NTBrowserType() == 'kq'))
		iLeft += ctlObject.offsetLeft;
	
	return iLeft;
}

function NTGetElementDims(ctlObject, bIncludeBody)
{
	var bHidden = ctlObject.style && ctlObject.style.display == 'none';
	
	if (bHidden)
		ctlObject.style.display = "";
	this.Top = NTGetElementTop(ctlObject, bIncludeBody);
	this.Left = NTGetElementLeft(ctlObject, bIncludeBody);
	//ctlObject.style.top = 0;
	//ctlObject.style.left = 0;
	this.Width = NTGetElementWidth(ctlObject);
	this.Height = NTGetElementHeight(ctlObject);
	this.Right = this.Left + this.Width;
	this.Bottom = this.Top + this.Height;
	ctlObject.style.top = this.Top;
	ctlObject.style.left = this.Left;
	if (bHidden)
		ctlObject.style.display = "none";
}

function NTSetElementOpacity(obj, nOpacity)
{
    if (obj.style.opacity != undefined)
    {
        obj.style.opacity = nOpacity;
    }
    else if (obj.style.MozOpacity != undefined)
    {
        obj.style.MozOpacity = nOpacity;
    } 
    else if (obj.style.filter != undefined)
    {
		var op = Math.round(nOpacity * 100);
        obj.style.filter="alpha(opacity=" + op + ")";
    }
}

function NTBrowserType()
{
	if (g_sBrowser == null)
	{
		var strAgt=navigator.userAgent.toLowerCase();

		if (strAgt.toLowerCase().indexOf('konqueror') != -1) 
			g_sBrowser = 'kq';
		else if (strAgt.toLowerCase().indexOf('opera') != -1) 
			g_sBrowser = 'op';
		else if (strAgt.toLowerCase().indexOf('netscape') != -1) 
			g_sBrowser = 'ns';
		else if (strAgt.toLowerCase().indexOf('msie') != -1)
			g_sBrowser = 'ie';
		else if (strAgt.toLowerCase().indexOf('safari') != -1)
			g_sBrowser = 'safari';
	  
		if (g_sBrowser == null)
			g_sBrowser = 'mo';  
	}
	
	return g_sBrowser;
}

function NTBrowserVersion()
{
	//Please offer a better solution if you have one!
	var sType = NTBrowserType();
	var iVersion = parseFloat(navigator.appVersion);
	var sAgent = navigator.userAgent.toLowerCase();
	
	if (sType == 'ie')
	{
		var strTemp=navigator.appVersion.split("MSIE");
		iVersion=parseFloat(strTemp[1]);
	}
	if (sType == 'ns')
	{
		var strTemp=sAgent.split("netscape");
		iVersion=parseFloat(strTemp[1].split("/")[1]);	
	}
	
	return iVersion;
}

///----------------------------------------------------------------
/// Begin : NisTech AJAX

var NTAJAXTARGET_METHOD = 0;
var NTAJAXTARGET_PAGEMETHOD = 1;
var NTAJAXTARGET_MASTERPAGEMETHOD = 2;
var NTAJAXTARGET_CONTROLMETHOD = 3;

var NTAJAXWAITCTL_WIDTH = 89;

var AJAXBusy = 0;
var AJAXRenderControls;
var g_ctlAJAXWait;
var g_strRegion;
var g_nModuleID;
var g_nScrollX, g_nScrollY = -1;

function NTAJAXDoAction(strCode, strID, obj, strArg)
{
	eval("function action(){" + unescape(strCode) + "}");
	if (action())
	{
		if (obj == null)
		{
			obj = document.getElementById(strID.replace('$', '_'));
		}
		NTAJAXControl_CommonEvent(obj, strID, strArg, false, true, null, null, null);
	}
}

function ShowAJAXWaitControl(bShow)
{
	if (bShow)
	{
		AJAXBusy++;
		if (!g_ctlAJAXWait)
		{
			/*g_ctlAJAXWait = document.createElement("div");
			g_ctlAJAXWait.style.position = 'absolute';
			g_ctlAJAXWait.style.height = 16;
			g_ctlAJAXWait.style.paddingLeft = "3px";
			g_ctlAJAXWait.style.paddingRight = "3px";
			g_ctlAJAXWait.style.fontSize = "11px";
			g_ctlAJAXWait.style.fontFamily = 'Arial, Verdana, Tahoma';
			g_ctlAJAXWait.style.border = "#9C9C9C 1px solid";//"#000000 1px solid";
			g_ctlAJAXWait.style.backgroundColor = "#F6F6f6";//"DimGray";
			g_ctlAJAXWait.style.color = "#808080";//"#ffffff";
			g_ctlAJAXWait.innerHTML = '&nbsp;Loading...&nbsp;';*/
			
			g_ctlAJAXWait = document.createElement("img");
			g_ctlAJAXWait.src = SystemImagePath + '/AJAXLoading.gif';
			g_ctlAJAXWait.style.position = 'absolute';
			
			document.body.insertBefore(g_ctlAJAXWait, document.body.firstChild);
			
			if (window.attachEvent)
			{
				window.attachEvent('onscroll', MoveAJAXWaitControl);
				window.attachEvent('onresize', MoveAJAXWaitControl);				
			}
			else
			{
				window.addEventListener('scroll', MoveAJAXWaitControl, false);
				window.addEventListener('resize', MoveAJAXWaitControl, false);				
			}
		}
		
		MoveAJAXWaitControl();
		g_ctlAJAXWait.style.visibility = 'visible';
	}
	else
	{
		MoveAJAXWaitControl();
		g_ctlAJAXWait.style.visibility = 'hidden';
		AJAXBusy--;
	}
}

function MoveAJAXWaitControl()
{
	if (g_ctlAJAXWait)
	{
		var nScrollYT, nScrollXT;
		
		nScrollYT = document.body.scrollTop;
		nScrollXT = document.body.scrollLeft;
		
		if (g_nScrollX != nScrollXT || g_nScrollY != nScrollYT)
		{
			//scrollX = nScrollXT;
			//scrollY = nScrollYT;
			var width = document.body.clientWidth;
			g_ctlAJAXWait.style.top = nScrollYT;
			g_ctlAJAXWait.style.left = nScrollXT + width - NTAJAXWAITCTL_WIDTH;
		}
	}
}

function NTAJAXGetXMLHttpRequest()
{
	if (window.XMLHttpRequest)
		return new XMLHttpRequest();
	else if (window.NTAJAXXMLHttpRequestID)
		return new ActiveXObject(window.NTAJAXXMLHttpRequestID);
	else
	{
		var arrProgIDs = ["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
		for (i = 0; i < arrProgIDs.length; i++)
		{
			var strProgID = arrProgIDs[i];
			try
			{
				window.NTAJAXXMLHttpRequestID = strProgID;
				return new ActiveXObject(strProgID);
			}
			catch (e) {}
		}
	}
	
	return null;
}

function NTAJAXGetResult(strResponse)
{
	var objResult = { "value": null, "error": "BADRESPONSE" };
	//try
	{
		//TRACE(strResponse);
		objResult = eval("(" + strResponse + ")");		
	}
	/*catch (e)
	{
		if (strResponse.length != 0)		
		{
			document.write(strResponse);
		}				
	}*/
	return objResult;
}

function NTAJAXRegisterClientScriptFile(objResult)
{
	var objLast = null;
	if (objResult.ScriptFile)
	{
		for (var i = 0; i < objResult.ScriptFile.length; i++)
		{
			objLast = NTLoadFile(objResult.ScriptFile[i], true);
		}
	}
	
	return objLast
}

function NTAJAXRegisterClientCssFile(objResult)
{
	var objLast = null;
	if (objResult.CssFile)
	{
		for (var i = 0; i < objResult.CssFile.length; i++)
		{
			objLast = NTLoadFile(objResult.CssFile[i], false);
		}
	}
	
	return objLast;
}

function NTAJAXEvalPreClientSideScript(objResult)
{
	if (objResult.PreScript)
		for (var i = 0; i < objResult.PreScript.length; i++)
		{
			//try
			//{
				//TRACE(objResult.Script[i]);
				eval(objResult.PreScript[i]);
			//}
			//catch (e)
			//{
			//	alert("An Error occured when evaluating client-side script!\n\nScript: " + objResult.Script[i] + "\n\nException: " + e);
			//}
		}
}

function NTAJAXEvalClientSideScript(objResult)
{
	if (objResult.Script)
		for (var i = 0; i < objResult.Script.length; i++)
		{
			//try
			//{
				//TRACE(objResult.Script[i]);
				eval(objResult.Script[i]);
			//}
			//catch (e)
			//{
			//	alert("An Error occured when evaluating client-side script!\n\nScript: " + objResult.Script[i] + "\n\nException: " + e);
			//}
		}
}

function NTAJAXUpdatePage(objResult)
{
	var ctlForm = document.forms[0];
	if (objResult.ViewState)
		NTSetHiddenInputValue(ctlForm, "__VIEWSTATE", objResult.ViewState);
	if (objResult.ViewStateEncrypted)
		NTSetHiddenInputValue(ctlForm, "__VIEWSTATEENCRYPTED", objResult.ViewStateEncrypted);
	if (objResult.EventValidation)
		NTSetHiddenInputValue(ctlForm, "__EVENTVALIDATION", objResult.EventValidation);
	if (objResult.Controls)
		for (var strControlID in objResult.Controls)
		{
			var ctlObject = document.getElementById(strControlID);
			if (ctlObject)
			{	
				if (!objResult.Controls[strControlID])
					ctlObject.style.display = "none";
				else
				{
					ctlObject.innerHTML = objResult.Controls[strControlID];
					ctlObject.style.display = "";
				}
			}
			/*else
			{
				ctlObject = document.getElementById(strControlID);
				.parentNode;
				if (!objResult.Controls[strControlID])
					ctlObject.style.display = "none";
				else
				{
					ctlObject.innerHTML = objResult.Controls[strControlID];
					ctlObject.style.display = "";
				}
			}*/
		}
}

function NTAJAXCallBackObject(bUpdatePageAfterCallBack, fnClientCallBack, strClientCallBackArg)
{
	this.UpdatePageAfterCallBack = bUpdatePageAfterCallBack;
	this.ClientCallBack = fnClientCallBack;
	this.ClientCallBackArg = strClientCallBackArg;
	this.m_bBusy = false;
}

function NTAJAX_OnReadyStateChange(objAJAX)
{
	if (!objAJAX || !objAJAX.XMLHTML)
		return;
	
	if (objAJAX.XMLHTML.readyState != 4)
		return;
		
	objResult = NTAJAXGetResult(objAJAX.XMLHTML.responseText);
	
	delete objAJAX.XMLHTML;
	
	NTAJAXEvalPreClientSideScript(objResult);
	
	if (objAJAX.UpdatePageAfterCallBack)
		NTAJAXUpdatePage(objResult);
		
	var objFile = NTAJAXRegisterClientScriptFile(objResult);
	var objFile2 = NTAJAXRegisterClientCssFile(objResult);
	
	if (objFile2)
		objFile = objFile2;
	if (objFile)
	{
		if (document.all)
			NTAddEvent(objFile, "load", function(){NTAJAXEvalClientSideScript(objResult)});	
		else
			window.setTimeout(function(){NTAJAXEvalClientSideScript(objResult)}, 1);
	}
	else
		NTAJAXEvalClientSideScript(objResult);		
	
	if (objAJAX.ClientCallBack)
		objAJAX.ClientCallBack(objResult, objAJAX.ClientCallBackArg);
		
	ShowAJAXWaitControl(0);
	delete objAJAX;
	
	/*for (var i = 0; i < objAJAX.XMLHTML.length; i++)
	{
		if (objAJAX.XMLHTML[i].readyState != 4)
			return;
	}
	
	if (objAJAX && !objAJAX.m_bBusy)
	{
		objAJAX.m_bBusy = true;
		// All requests have been completed
		var str = '';
		for (i = 0; i < objAJAX.XMLHTML.length; i++)
		{
			str += objAJAX.XMLHTML[i].responseText;
			delete objAJAX.XMLHTML[i];
		}
		
		delete objAJAX.XMLHTML;
			
		objResult = NTAJAXGetResult(str);
		
		NTAJAXEvalPreClientSideScript(objResult);
		
		if (objAJAX.UpdatePageAfterCallBack) 
			NTAJAXUpdatePage(objResult);
			
		NTAJAXRegisterClientScriptFile(objResult);
		NTAJAXEvalClientSideScript(objResult);
		
		if (objAJAX.ClientCallBack) 
			objAJAX.ClientCallBack(objResult, objAJAX.ClientCallBackArg);
			
		ShowAJAXWaitControl(0);
		delete objAJAX;
	}*/
}

function NTAJAXCallBackCallMethod(typeTarget, strID, strMethod, arrAgrs)
{
	var ctlForm = document.forms[0];
	NTAJAXCallBackCallMethodUrl(ctlForm.action, typeTarget, strID, strMethod, arrAgrs);
}

function NTAJAXCallBackCallMethodUrl(strUrl, typeTarget, strID, strMethod, arrAgrs)
{
	ShowAJAXWaitControl(1);	
	var strEncodedData = "AJAXCallBack=1&target=" + typeTarget;
	
	switch (typeTarget)
	{
		case NTAJAXTARGET_METHOD:
			strEncodedData += "&Method=" + strMethod;
			break;
			
		case NTAJAXTARGET_PAGEMETHOD:
			strEncodedData += "&PageMethod=" + strMethod;
			break;
			
		case NTAJAXTARGET_MASTERPAGEMETHOD:
			strEncodedData += "&MasterPageMethod=" + strMethod;
			break;
			
		case NTAJAXTARGET_CONTROLMETHOD:
			strEncodedData += "&ControlID=" + strID.split(":").join("_");
			strEncodedData += "&ControlMethod=" + strMethod;
			break;			
	}
	
	if (arrAgrs)
	{
		for (var nAgrIndex = 0; nAgrIndex < arrAgrs.length; nAgrIndex++)
		{
			if (arrAgrs[nAgrIndex] instanceof Array)
			{
				for (var i = 0; i < arrAgrs[nAgrIndex].length; ++i)
				{
					strEncodedData += "&arg" + nAgrIndex + "=" + encodeURIComponent(arrAgrs[nAgrIndex][i]);
				}
			} 
			else
			{
				strEncodedData += "&arg" + nAgrIndex + "=" + encodeURIComponent(arrAgrs[nAgrIndex]);
			}
		}
	}
	
	var x = NTAJAXGetXMLHttpRequest();
	x.open("POST", strUrl, true);
	x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
	x.onreadystatechange = function ()
							{ 
								if (x.readyState != 4) return;
								ShowAJAXWaitControl(0);	
							}
	x.send(strEncodedData);
}

function NTAJAXCallBack(strUrl, strTarget, strID, strMethod, arrAgrs, fnClientCallBack, strClientCallBackArg, bIncludeControlValuesWithCallBack, bUpdatePageAfterCallBack, nSplits)
{
	/*var x = NTAJAXGetXMLHttpRequest();
	var objResult = null;
	
	if (!x)
	{
		objResult = { "value":null, "error":"NOXMLHTTP" };
		if (fnClientCallBack)
			fnClientCallBack(objResult, strClientCallBackArg);
		return objResult;
	}*/
	
	ShowAJAXWaitControl(1);
	
	var strEncodedData;
	
	/*if (nSplits > 1)
		strEncodedData = "AJAXCallBack=1&split=" + nSplits;
	else*/
		strEncodedData = "AJAXCallBack=1";
		
	if (AJAXRenderControls)
		strEncodedData += "&RenderControls=" + AJAXRenderControls;
		
	/**if (strTarget == "Page") {
        strEncodedData += "&NTAJAXPageMethod=" + strMethod;
    } else if (strTarget == "MasterPage") {
        strEncodedData += "&NTAJAXMasterPageMethod=" + strMethod;
    } else if (strTarget == "Control") {
        strEncodedData += "&NTAJAXControlID=" + strID.split(":").join("_");
        strEncodedData += "&NTAJAXControlMethod=" + strMethod;
    }
	if (arrAgrs) {
		for (var nAgrIndex = 0; nAgrIndex < arrAgrs.length; nAgrIndex++) {
			if (arrAgrs[nAgrIndex] instanceof Array) {
				for (var i = 0; i < arrAgrs[nAgrIndex].length; ++i) {
					strEncodedData += "&NTAJAXCallBackArgument" + nAgrIndex + "=" + encodeURIComponent(arrAgrs[nAgrIndex][i]);
				}
			} else {
				strEncodedData += "&NTAJAXCallBackArgument" + nAgrIndex + "=" + encodeURIComponent(arrAgrs[nAgrIndex]);
			}
		}
	}**/
	
	if (arrAgrs)
	{
		for (var nAgrIndex = 0; nAgrIndex < arrAgrs.length; nAgrIndex+=2)
		{
			/*if (arrAgrs[nAgrIndex] instanceof Array)
			{
				for (var i = 0; i < arrAgrs[nAgrIndex].length; ++i)
				{
					strEncodedData += "&NTAJAXCallBackArgument" + nAgrIndex + "=" + encodeURIComponent(arrAgrs[nAgrIndex][i]);
				}
			} 
			else
			{
				strEncodedData += "&NTAJAXCallBackArgument" + nAgrIndex + "=" + encodeURIComponent(arrAgrs[nAgrIndex]);
			}*/
			strEncodedData += "&" + arrAgrs[nAgrIndex] + "=" + arrAgrs[nAgrIndex + 1];
		}
	}
	
	if (g_strRegion)
	{
		strEncodedData += "&Region=" + g_strRegion;
		strEncodedData += "&ModuleID=" + g_nModuleID;
	}

	if (bUpdatePageAfterCallBack)
		strEncodedData += "&NTAJAXUpdatePage=1";
	if (bIncludeControlValuesWithCallBack)
	{
		var ctlForm = document.forms[0];
			
		for (var nElementIndex = 0; nElementIndex < ctlForm.length; ++nElementIndex)
		{
			var objElement = ctlForm.elements[nElementIndex];
			if (objElement.name)
			{
				var objElementValue = null;
				if (objElement.nodeName == "INPUT")
				{
					var strInputType = objElement.getAttribute("TYPE");
					
					if (!strInputType)
						strInputType = "TEXT";
					else
						strInputType = strInputType.toUpperCase();
						
					if (strInputType == "TEXT" || strInputType == "PASSWORD" || strInputType == "HIDDEN")
						objElementValue = objElement.value;
					else if (strInputType == "CHECKBOX" || strInputType == "RADIO")
					{
						if (objElement.checked)
							objElementValue = objElement.value;
					}
				} else if (objElement.nodeName == "SELECT")
				{
					if (objElement.multiple)
					{
						objElementValue = [];
						for (var i = 0; i < objElement.length; ++i)
						{
							if (objElement.options[i].selected)
								objElementValue.push(objElement.options[i].value);
						}
					} 
					else
					{
						objElementValue = objElement.value;
						if (!objElementValue.length)
							objElementValue = null;
					}
				} 
				else if (objElement.nodeName == "TEXTAREA")
					objElementValue = objElement.value;
					
				if (objElementValue instanceof Array)
				{
					for (var i = 0; i < objElementValue.length; ++i)
						strEncodedData += "&" + objElement.name + "=" + encodeURIComponent(objElementValue[i]);
				} 
				else if (objElementValue != null)
					strEncodedData += "&" + objElement.name + "=" + encodeURIComponent(objElementValue);
			}
		}
		// ASP.NET 1.1 won't fire any events if neither of the following
		// two parameters are not in the request so make sure they're
		// always in the request.
		if (typeof ctlForm.__VIEWSTATE == "undefined")
			strEncodedData += "&__VIEWSTATE=";
		if (typeof ctlForm.__EVENTTARGET == "undefined")
			strEncodedData += "&__EVENTTARGET=";
	}
	
	var objAJAX = new NTAJAXCallBackObject(bUpdatePageAfterCallBack, fnClientCallBack, strClientCallBackArg);
	
	objAJAX.XMLHTML = NTAJAXGetXMLHttpRequest();
	objAJAX.XMLHTML.open("POST", strUrl, true);
	objAJAX.XMLHTML.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
	objAJAX.XMLHTML.onreadystatechange = function() {NTAJAX_OnReadyStateChange(objAJAX)};
	objAJAX.XMLHTML.send(strEncodedData);
	
	/*objAJAX.XMLHTML = new Array();
	objAJAX.XMLHTML[0] = NTAJAXGetXMLHttpRequest();
	objAJAX.XMLHTML[0].open("POST", strUrl, true);
	objAJAX.XMLHTML[0].setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
	objAJAX.XMLHTML[0].onreadystatechange = function() {NTAJAX_OnReadyStateChange(objAJAX)};
	objAJAX.XMLHTML[0].send(strEncodedData);*/
	
	/*// Get AJAX Id
	var strAJAXID = document.getElementsByName('ajaxid')[0].value;    
	//var strAJAXUrl = strUrl.substr(0, strUrl.lastIndexOf('/') + 1).replace(".aspx", "") + "ajax.ashx?tid=" + Math.floor(Math.random() * 1000000) * ((new Date()).getTime() % 1000);
	var strAJAXUrl = SystemImagePath + "/ajax.ashx?tid=" + Math.floor(Math.random() * 1000000) * ((new Date()).getTime() % 1000);	
	
	for (var i = 1; i < nSplits; i++)
	{
		objAJAX.XMLHTML[i] = NTAJAXGetXMLHttpRequest();
		objAJAX.XMLHTML[i].open("GET", strAJAXUrl + "&s=" + i + "&ajaxid=" + strAJAXID, true);
		objAJAX.XMLHTML[i].setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
		objAJAX.XMLHTML[i].onreadystatechange = function() {NTAJAX_OnReadyStateChange(objAJAX)};
		objAJAX.XMLHTML[i].send(null);
	}*/
}

function NTAJAXFireEvent(strEventTarget, strEventArgument, fnClientCallBack, strClientCallBackArg, bIncludeControlValues, bUpdatePage, nSplits)
{	
	var ctlForm = document.forms[0];
	NTSetHiddenInputValue(ctlForm, "__EVENTTARGET", strEventTarget);
	NTSetHiddenInputValue(ctlForm, "__EVENTARGUMENT", strEventArgument);	
	NTAJAXCallBack(ctlForm.action, null, null, null, null, fnClientCallBack, strClientCallBackArg, bIncludeControlValues, bUpdatePage, nSplits);
	ctlForm.__EVENTTARGET.value = "";
	ctlForm.__EVENTARGUMENT.value = "";
}

function NTAJAXControl_LookupRegion(ctlObject)
{
	while (1)
	{
		ctlObject = ctlObject.parentNode;
		if (ctlObject == document.body)
		{
			g_strRegion = null;
			return;
		}
		else
		{
			var strMID = ctlObject.getAttribute("pm");
			if (strMID)
			{
				while (1)
				{
					ctlObject = ctlObject.parentNode;
					if (ctlObject == document.body)
					{
						g_strRegion = null;
						return;
					}
					else if (ctlObject.id.indexOf('Region') > 0)
					{
						g_nModuleID = strMID;
						g_strRegion = ctlObject.id.substr(ctlObject.id.lastIndexOf('_') + 1);
						return;
					}					
				}
			}
		}
	}
}

function NTAJAXControl_CommonEvent(obj, strUniqueID, strArg, bEnabledDuringCallBack, strPreCallBackScript, strPostCallBackScript, strCallBackCancelledScript)
{
	var bResult = true;
	
	if (strPreCallBackScript)
		bResult = eval(strPreCallBackScript);
		
	if (typeof bResult == "undefined" || bResult)
	{
		var bEnabled = !obj.disabled;
		obj.disabled = !bEnabledDuringCallBack;
		NTAJAXControl_LookupRegion(obj);
		NTAJAXFireEvent(strUniqueID, strArg, 
					function (objResult)
					{
						if (strPostCallBackScript)
							eval(strPostCallBackScript);
						obj.disabled = !bEnabled;
					}, 
					null, true, true, 1);
	}
}

function NTAJAXInput_Event(obj, strUniqueID, strArg, strCallBackText, bEnabledDuringCallBack, strPreCallBackScript, strPostCallBackScript, strCallBackCancelledScript)
{
	var bResult = true;
	
	if (strPreCallBackScript)
		bResult = eval(strPreCallBackScript);
		
	if (typeof bResult == "undefined" || bResult)
	{
		var strText = obj.value;
		if (strCallBackText)
			obj.value = strCallBackText;
			
		var bEnabled = !obj.disabled;
		obj.disabled = !bEnabledDuringCallBack;
		NTAJAXControl_LookupRegion(obj);
		NTAJAXFireEvent(strUniqueID, strArg, 
					function (objResult)
					{
						if (strPostCallBackScript)
							eval(strPostCallBackScript);
						obj.disabled = !bEnabled;
						obj.value = strText;
					}, 
					null, true, true, 1);
	}
}

/// End : NisTech AJAX
///----------------------------------------------------------------

///----------------------------------------------------------------
/// Begin : Other Common methods

function SetCookie(strName, strValue, strPath, strExpires)
{
	var strCookie = strName.concat('=').concat(strValue);

	if (strPath=='')
		strPath='/';

	strCookie=strCookie.concat(';path=').concat(strPath);

	if (strExpires=='')
		strExpires=(new Date(2020, 11, 14)).toGMTString();

	document.cookie=strCookie.concat(';expires=').concat(strExpires);
}

function GetCookie(strName, strDefault)
{
	var strCookie = document.cookie;
	var ir = 0, ie = 0, sf = '', i = 0, j = 0;
	strName = strName.toLowerCase();

	if (typeof(strDefault) == 'undefined')
		strDefault = '';

	if (strCookie.length == 0)
		return strDefault;

	if ((ir = strName.indexOf('.')) == -1)
	{
		if (strCookie.substr(0, strName.length + 1).toLowerCase() == strName.concat('='))
		{
			if ((ie = strCookie.indexOf(';')) != -1)
			{
				strCookie = strCookie.substr(0, ie);
			}
		}
		else
		{
			if ((ie = strCookie.toLowerCase().indexOf('; '.concat(strName).concat('='))) == -1)
				return strDefault;

			strCookie = strCookie.substr(ie + 2);

			if ((ie = strCookie.indexOf(';')) != -1)
			{
				strCookie = strCookie.substr(0, ie);
			}
		}
		sf = ';';
	}
	else
	{
		if ((i=strCookie.toLowerCase().indexOf(strName.concat('='))) != -1)
		{
			if ((j = strCookie.indexOf(';', i)) > i + strName.length + 1)
			{
				return ReplaceAll(unescape(strCookie.substr(i + strName.length + 1, j - i - strName.length - 1)), '+', ' ');
			}
			else
			{
				j = strCookie.length;
				return ReplaceAll(unescape(strCookie.substr(i + strName.length + 1, j - i - strName.length - 1)), '+', ' ');
			}
		}

		var strRoot = strName.substr(0, ir);
		strName = strName.substr(ir + 1);

		if (strCookie.substr(0, strRoot.length + 1).toLowerCase() == strRoot.concat('='))
		{
			if ((ie = strCookie.indexOf(';')) != -1)
			{
				strCookie = strCookie.substr(0, ie);
			}
		}
		else
		{
			if ((ie = strCookie.toLowerCase().indexOf('; '.concat(strRoot).concat('='))) == -1)
				return strDefault;

			strCookie = strCookie.substr(ie + 2);

			if ((ie = strCookie.indexOf(';')) != -1)
			{
				strCookie = strCookie.substr(0, ie);
			}
		}

		strCookie = strCookie.substr(strRoot.length + 1);
		sf = '&';
	}

	if (strCookie.substr(0, strName.length + 1).toLowerCase() == strName.concat('='))
	{
		ir = strName.length + 1;
	}
	else
	{
		if ((ir = strCookie.toLowerCase().indexOf('&'.concat(strName).concat('='))) == -1)
			return strDefault;

		ir+=strName.length + 2;
	}

	if ((ie=strCookie.indexOf(sf, ir)) == -1)
	{
		return ReplaceAll(unescape(strCookie.substr(ir)), '+', ' ');
	}
	else
	{
		return ReplaceAll(unescape(strCookie.substring(ir, ie)), '+', ' ');
	}
}
function ReplaceAll(iStr, v1, v2)
{
	var i = 0, oStr = '', j = v1.length;

	while (i < iStr.length)
	{
		if (iStr.substr(i, j) == v1)
		{
			oStr+=v2;
			i+=j
		}
		else
		{
			oStr+=iStr.charAt(i);
			i++;
		}
	}

	return oStr;
}

function LTrim(iStr)
{
	while (iStr.charCodeAt(0) <= 32)
	{
		iStr=iStr.substr(1);
	}
	return iStr;
}

function RTrim(iStr)
{
	while (iStr.charCodeAt(iStr.length - 1) <= 32)
	{
		iStr=iStr.substr(0, iStr.length - 1);
	}
	return iStr;
}

function Trim(iStr)
{
	while (iStr.charCodeAt(0) <= 32)
	{
		iStr=iStr.substr(1);
	}

	while (iStr.charCodeAt(iStr.length - 1) <= 32)
	{
		iStr=iStr.substr(0, iStr.length - 1);
	}

	return iStr;
}

function UnicodeSet(iStr)
{
	for (i=0, oStr=''; i < iStr.length; i++)
	{
		switch ((j=iStr.charCodeAt(i)))
		{
		case 34:
			oStr=oStr.concat('&quot;');
			break;
		case 38:
			oStr=oStr.concat('&amp;');
			break;
		case 39:
			oStr = oStr.concat('&#39;');
			break;
		case 60:
			oStr = oStr.concat('&lt;');
			break;
		case 62:
			oStr = oStr.concat('&gt;');
			break;
		default:
			if (j < 32 || j > 127 || j==34 || j==39)
			{
				oStr=oStr.concat('&#').concat(j).concat(';');
			}
			else
			{
				oStr=oStr.concat(iStr.charAt(i));
			}
			break;
		}
	}

	return oStr;
}

function UnicodeGet(iStr)
{
	for (i=0, oStr=''; i < iStr.length; )
	{
		if (iStr.charCodeAt(i)==38)
		{
			if (iStr.charCodeAt(i + 1)==35)
			{
				p=iStr.indexOf(';', i  + 2);
				if (p!=-1)
				{
					if (p - i <= 7)
					{
						if (isFinite(iStr.substr(i + 2, p - i - 2)))
						{
							oStr = oStr.concat(String.fromCharCode(iStr.substr(i + 2, p - i - 2)));
							i = p + 1;
							continue;
						}
					}
				}
			}
			else
			{
				p=iStr.indexOf(';', i  + 1);
				if (p!=-1)
				{
					switch (iStr.substr(i + 1, p - i - 1))
					{
					case 'amp':
						oStr = oStr.concat('&');
						i = p + 1;
						break;
					case 'quot':
						oStr = oStr.concat('"');
						i = p + 1;
						break;
					case 'lt':
						oStr = oStr.concat('<');
						i = p + 1;
						break;
					case 'gt':
						oStr = oStr.concat('>');
						i = p + 1;
						break;
					}
				}
			}
		}


		oStr=oStr.concat(iStr.charAt(i));
		i++;
	}

	return oStr;
}
function CheckEmail(strEmail)
{
	strEmail = Trim(strEmail);

	while (strEmail != '')
	{
		c = strEmail.charAt(0);
		if (c==' ' || c=='<' || c==39 || c==':' || c=='.')
		{
			strEmail = strEmail.substr(1);
		}
		else
		{
			break;
		}
	}

	i = strEmail.indexOf('>');
	if (i==-1)
	{
		while (strEmail != '')
		{
			c = strEmail.charAt(strEmail.length - 1);
			if (c==' ' || c==39 || c=='.')
			{
				strEmail = strEmail.substr(0, strEmail.length - 1);
			}
			else
			{
				break;
			}
		}
	}
	else
	{
		strEmail = strEmail.substr(0, i);
	}

	if (strEmail.length > 96)
		return '';

	i = strEmail.lastIndexOf('@');
	j = strEmail.lastIndexOf('.');
	if (i < j)
		i = j;

	switch (strEmail.length - i - 1)
	{
	case 2:
		break;
	case 3:
		switch (strEmail.substr(i))
		{
		case '.com':
		case '.net':
		case '.org':
		case '.edu':
		case '.mil':
		case '.gov':
		case '.biz':
		case '.pro':
		case '.int':
			break;
		default:
			return '';
		}
		break;
	default:
		switch (strEmail.substr(i))
		{
		case '.name':
		case '.info':
			break;
		default:
			return '';
		}
		break;
	}

	strEmail = strEmail.toLowerCase();

	if (strEmail == '')
		return '';

	if (strEmail.indexOf(' ') != -1)
		return '';

	if (strEmail.indexOf('..') != -1)
		return '';

	if (strEmail.indexOf('.@') != -1)
		return '';

	if (strEmail.indexOf('@.') != -1)
		return '';

	if (strEmail.indexOf(':') != -1)
		return '';

	for (i=0; i < strEmail.length; i++)
	{
		c = strEmail.charAt(i);

		if (c >= '0' && c <= '9')
			continue;

		if (c >= 'a' && c <= 'z')
			continue;

		if ('`~!#$%^&*-_+=?/\\|@.'.indexOf(c) != -1)
			continue;

		return '';
	}

	if ((i=strEmail.indexOf('@'))==-1)
		return '';

	if (strEmail.substr(i + 1).indexOf('@')!=-1)
		return '';

	if (strEmail.charAt(0)=='.' || strEmail.charAt(strEmail.length - 1)=='.')
		return '';

	return strEmail;
}

/// End : Other Common methods
///----------------------------------------------------------------