//-----------------------------------Global-------------------------------------//
var actionName = "controller";
/*at client get server toURL */
var arrStr = window.location.href.split('/');

if (arrStr.length < 5) var strServer = arrStr[0] + "//" + arrStr[2] + "/";
else	               var strServer = arrStr[0] + "//" + arrStr[2] + "/" + arrStr[3] + "/";


//------------------------------------------------------------------------------//

//------------------------------------------------------------------------------//
//Function: send a message by asynchronize for getting text of http, using global variable 'strServer', 'actionName'
//Author: Hellin
//Date: Apr. first, 2005
//Develop Tool: Jbuilder 9 EN 
//------------------------------------------------------------------------------//
function sendAsynMessage(Event, params, xmlString, aFunc)
{
	var xmlhttp;
	var strHtml;
	
	// This commented stuff is wrong: JavaScript does not see it as comments...
	// This is why the whole function is working. Otherwise "if (!xmlhttp && typeof...)" would never be reached
	// I am leaving it as is since I don't have a good understanding of what is going on, expecially with "@" characters
	// And don't want to break something that is already working all over WebForm and WebFormExp projects
	// GVP 04_03_07
	
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
  		try {
  			xmlhttp=new ActiveXObject("Msxml2.XMLHTTP")
 		} catch (e) {
  			try {
   		 		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
  			} catch (E) {
  				 xmlhttp=false
  			}
 		}
        @else
 		xmlhttp=false
        @end @*/
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') 
	{		
 		try 
 		{
  			xmlhttp = new XMLHttpRequest();
 		}
 		catch (e) 
 		{ 		
 		    alert(e);
  			xmlhttp = false;
 		}
	}
			
	//Prepare to request the server
    var strURL = strServer + actionName;
	var toURL  = strURL + "/" + Event + params;		
		
	//xmlhttp.open("GET", "code.html",true);
	xmlhttp.open("POST", toURL, true);
		
	if (window.ActiveXObject) xmlhttp.onreadystatechange = aFunc;	
	else	                  xmlhttp.onload             = aFunc;	
	
	xmlhttp.send(xmlString);
				
	return xmlhttp;
}

//------------------------------------------------------------------------------//
//Function: send a message for getting text of http,using global variable 'strServer', 'actionName'
//Author: Hellin. modified by domenic
//Date: Apr. first, 2005
//Develop Tool: Jbuilder 9 EN 
//------------------------------------------------------------------------------//
function sendHttpMessage(Event, params, xmlString)
{
	var xmlhttp;
	var strHtml;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
  		try {
  			xmlhttp=new ActiveXObject("Msxml2.XMLHTTP")
 		} catch (e) {
  			try {
   		 		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
  			} catch (E) {
  				 xmlhttp=false
  			}
 		}
        @else
 		xmlhttp=false
        @end @*/
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') 
	{
 		try 
 		{
  			xmlhttp = new XMLHttpRequest();
 		}
 		catch (e) 
 		{
 		    alert(e);
  			xmlhttp = false;
 		}
	}
		
	//Prepare to request the server		
    var strURL = strServer + actionName;    
	var toURL  = strURL + "/" + Event + params;	
		
	//xmlhttp.open("GET", "code.html",true);
	xmlhttp.open("POST", toURL, false);
	xmlhttp.send(xmlString);
	strHtml = xmlhttp.responseText;
  	if (strHtml != null&& strHtml != '')
  	{
   		if (strHtml.indexOf("MessageException:") > -1)
   		{
      		var no = strHtml.indexOf(":") + 1;
			alert(strHtml.substring(no));
      		return false;
    	}
 	}
 	else
 	{
		alert("No response from the server, return null.");
		return false;
 	} 	 	
	return xmlhttp;
}

//--------------------
function sendHttpMessageText(Event, params, xmlString)
{
	var xmlhttp;
	var strHtml;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
  		try {
  			xmlhttp=new ActiveXObject("Msxml2.XMLHTTP")
 		} catch (e) {
  			try {
   		 		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
  			} catch (E) {
  				 xmlhttp=false
  			}
 		}
        @else
 		xmlhttp=false
        @end @*/
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') 
	{
 		try 
 		{
  			xmlhttp = new XMLHttpRequest();
 		}
 		catch (e) 
 		{
 		    alert(e);
  			xmlhttp = false;
 		}
	}
		
	//Prepare to request the server		
    var strURL = strServer + actionName;    
	var toURL  = strURL + "/" + Event + params;	
		
	//xmlhttp.open("GET", "code.html",true);
	xmlhttp.open("POST", toURL, false);
	xmlhttp.send(xmlString);
	strHtml = xmlhttp.responseText;
  	if (strHtml != null&& strHtml != '')
  	{
   		if (strHtml.indexOf("MessageException:") > -1)
   		{
      		var no = strHtml.indexOf(":") + 1;
			alert(strHtml.substring(no));
      		return false;
    	}
 	}
 	else
 	{
		alert("No response from the server, return null.");
		return false;
 	} 	 	
	return strHtml;
}
//-----------------

//------------------------------------------------------------------------------//
//Function: send a message for getting a xmldom obj,using global variable 'strServer', 'actionName'
//Author: Hellin
//Date: Apr. first, 2005
//Develop Tool: Jbuilder 9 EN
//------------------------------------------------------------------------------//
function sendXMLMessage(Event, params, xmlString)
{
	var xmlDoc;
	try
	{
		var strURL = strServer + actionName;
		var toURL  = strURL + "/" + Event + params;
		try
		{
 			xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
    	}
    	catch(e)
    	{
			try
			{
    			xmlDoc = document.implementation.createDocument("", "", null);
			}
			catch(e)
			{
				alert("Error occur: sendXMLMessage, Failed!");
				return false;
			}
		}
		xmlDoc.async = false;
		xmlDoc.resolveExternals = false;
		//alert("toURL: "+toURL);
		xmlDoc.load(toURL);
	}
	catch(e)
	{
		alert("Error occur: sendXMLMessage, Failed!");
		return false;
	}
	return xmlDoc;
}

function getXMLMessage(params)
{
	var xmlDoc;
	var ua = navigator.userAgent.toLowerCase();
	if (ua.indexOf('safari') == - 1)
	{
		try
		{
			var toURL = strServer + params;//strServer="http://localhost:8080/MetaIndexer/";
			try
			{
 				xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
	    	}
	    	catch(e)
	    	{
				try
				{
    				xmlDoc = document.implementation.createDocument("", "", null);
				}
				catch(e)
				{
					alert("Error occur: sendXMLMessage, Failed!");
					return false;
				}
			}
    		xmlDoc.async            = false;
    		xmlDoc.resolveExternals = false;
    		if (params)
    		{
    			xmlDoc.load(toURL);
    		}
		}
		catch(e)
		{
			alert("Error occur: sendXMLMessage, Failed!");
			return false;
		}
	}
	else
	{
		xmlDoc = importXML(toURL, 'runThis', false, 2000);
	}
	return xmlDoc;
}

/*TITLE: Client-Side Request Object for javascript by Andrew Urquhart (UK)
HOME: http://www.andrewu.co.uk/tools/request/?ref=CSJSsrc
COPYRIGHT: You are free to use this script for any use you wish, the only
thing I ask you do is keep this copyright message intact with the script.
Please don't pass it off as your own work, but feel free to enhance it and send
me the updated version. Please don't redistribute - it makes it harder to distribute
new versions of the script. This script is provided as is, with no warranty of any
kind. Use it at your own risk. Copyright Andrew R Urquhart
VERSION: #1.1 2003-03-16 01:19 UTC*/
function RObj(ea) 
{
	var LS = "";
	var QS = new Object();
	var un = "undefined";
	var f  = "function";
	var n  = "number";
	var r  = "string";
	var e1 = "ERROR: Index out of range in\r\nRequest.QueryString";
	var e2 = "ERROR: Wrong number of arguments or invalid property assignment\r\nRequest.QueryString";
	var e3 = "ERROR: Object doesn't support this property or method\r\nRequest.QueryString.Key";
	
	function Err(arg) 
	{
		if (ea) alert("Request Object:\r\n" + arg);
	}
	
	function URID(t) 
	{
		var d = "";
		if (t) 
		{
			for (var i = 0; i < t.length; ++i) 
			{
				var c = t.charAt(i);
				d += (c == "+" ? " " : c);
			}
		}
		return unescape(d);
	}
	
	function OL(o) 
	{
		var l = 0;
		for (var i in o) 
		{
			if (typeof(o[i]) != f)
			l++;
		}
		return l;
	}
	
	function AK(key) 
	{
		var auk = true;
		for (var u in QS) 
		{
			if (typeof(QS[u]) != f && u.toString().toLowerCase() == key.toLowerCase()) 
			{
				auk = false;
				return u;
			}
		}
		if (auk) 
		{
			QS[key] = new Object();
			QS[key].toString=function() 
			{
				return TS(QS[key])
			}
			QS[key].Count = function() 
			{
				return OL(QS[key])
			}
			QS[key].Count.toString = function() 
			{
				return OL(QS[key]).toString();
			}
			QS[key].Item = function(e) 
			{
				if (typeof(e)==un)
				{
					return QS[key];
				}
				else 
				{
					if (typeof(e)==n) 
					{
						var a=QS[key][Math.ceil(e)];
						if (typeof(a)==un)
						{
							Err(e1 +"(\""+key+"\").Item("+e+")");
						}
						return a;
					}
					else
					{
						Err("ERROR: Expecting numeric input in\r\nRequest.QueryString(\""+key+"\").Item(\""+e+"\")");
					}
				}
			}
			QS[key].Item.toString = function(e) 
			{
				if (typeof(e) == un)
				{
					return QS[key].toString();
				}
				else
				{
					var a = QS[key][e];
					if (typeof(a) == un)
					{
						Err(e1 + "(\"" + key + "\").Item(" + e + ")");
					}
					return a.toString();
				}
			}
			QS[key].Key = function(e) 
			{
				var t = typeof(e);
				if (t == r) 
				{
					var a = QS[key][e];
					return (typeof(a) != un && a && a.toString() ? e : "");
				}
				else
				{
					Err(e3 + "(" + (e?e:"") + ")");
				}
			}
			QS[key].Key.toString = function() 
			{
				return un
			}
		}
		return key
	}
	
	function AVTK(key, val) 
	{
		if (key != "") 
		{
			var key        = AK(key);
			var l          = OL(QS[key]);
			QS[key][l + 1] = val;
		}
	}
	
	function TS(o) 
	{
		var s = "";
		for (var i in o)
		{
			var ty = typeof(o[i]);
			if (ty == "object")
			{
				s += TS(o[i]);
			}
			else if (ty != f)
			{
				s += o[i] + ", ";
			}
		}
		var l = s.length;
		if (l > 1)
		{
			return(s.substring(0, l - 2));
		}
		return (s == "" ? un : s);
	}
	
	function KM(k, o) 
	{
		var k = k.toLowerCase();
		for (var u in o) 
		{
			if (typeof(o[u]) != f && u.toString().toLowerCase() == k)
			{
				return u;
			}
		}
	}
	
	if (window.location && window.location.search) 
	{
		LS = window.location.search;
		var l = LS.length;
		if (l > 0) 
		{
			LS = LS.substring(1, l);
			var preAmpAt = 0;
			var ampAt = -1;
			var eqAt  = -1;
			var k = 0;
			var skip = false;
			for (var i = 0; i < l; ++i) 
			{
				var c = LS.charAt(i);
				if (LS.charAt(preAmpAt) == "=" || (preAmpAt == 0 && i == 0 && c == "="))
				{
					skip = true;
				}
				if (c == "=" && eqAt == -1 && !skip)
				{
					eqAt=i;
				}
				if (c == "&" && ampAt == -1) 
				{
					if (eqAt != -1) ampAt = i;
					if (skip) preAmpAt = i + 1;
					skip = false;
				}
				if (ampAt>eqAt) 
				{
					AVTK(URID(LS.substring(preAmpAt,eqAt)),URID(LS.substring(eqAt+1,ampAt)));
					preAmpAt=ampAt+1;eqAt=ampAt=-1;++k;
				}
			}
			if (LS.charAt(preAmpAt) != "=" && (preAmpAt != 0 || i != 0 || c != "=")) 
			{
				if (preAmpAt != l) 
				{
					if (eqAt != -1)
					{
						AVTK(URID(LS.substring(preAmpAt,eqAt)),URID(LS.substring(eqAt+1,l)));
					}
					else if (preAmpAt != l - 1)
					{
						AVTK(URID(LS.substring(preAmpAt,l)),"");
					}
				}
				if (l == 1)
				{
					AVTK(LS.substring(0, 1), "");
				}
			}
		}
	}
	var TC = OL(QS);
	if (!TC) 
	{
		TC = 0;
	}
	
	QS.toString = function() 
	{
		return LS.toString()
	}
	
	QS.Count = function() 
	{
		return (TC ? TC : 0)
	}
	
	QS.Count.toString = function() 
	{
		return (TC ? TC.toString() : "0")
	}
	
	QS.Item = function(e) 
	{
		if (typeof(e) == un)
		{
			return LS;
		}
		else 
		{
			if (typeof(e) == n) 
			{
				var e = Math.ceil(e);
				var c = 0;
				for (var i in QS) 
				{
					if (typeof(QS[i]) != f && ++c == e)
					return QS[i];
				}
				Err(e1 + "().Item(" + e + ")");
			}
			else
			{
				return QS[KM(e, QS)];
			}
		}
		return un;
	}
	
	QS.Item.toString = function() 
	{
		return LS.toString()
	}
	
	QS.Key = function(e) 
	{
		var t = typeof(e);
		if (t == n)
		{
			var e = Math.ceil(e);
			var c = 0;
			for (var i in QS) 
			{
				if (typeof(QS[i]) != f && ++c == e)
				{
					return i;
				}
			}
		}
		else if (t == r) 
		{
			var e = KM(e, QS);
			var a = QS[e];
			return (typeof(a) != un && a && a.toString() ? e : "");
		}
		else
		{
			Err(e2 + "().Key(" + (e ? e : "") + ")");
		}
		Err(e1 + "().Item(" + e + ")");
	}
	QS.Key.toString = function() 
	{
		Err(e2 + "().Key");
	}
	this.QueryString = function(k) 
	{
		if (typeof(k) == un)
		{
			return QS;
		}
		else 
		{
			var k = KM(k, QS);
			if (typeof(QS[k]) == un) 
			{
				t = new Object();
				t.Count = function() 
				{
					return 0
				}
				t.Count.toString = function() 
				{
					return "0"
				}
				t.toString = function() 
				{
					return un
				}
				t.Item=function(e) 
				{
					return un
				}
				t.Item.toString = function() 
				{
					return un
				}
				t.Key = function(e) 
				{
					Err(e3 + "(" + (e ? e : "") + ")");
				}
				t.Key.toString = function() 
				{
					return un
				}
				return t;
			}
			if (typeof(k) == n)
			{
				return QS.Item(k);
			}
			else
			{
				return QS[k];
			}
		}
	}
	this.QueryString.toString = function() 
	{
		return LS.toString();
	}
	this.QueryString.Count = function() 
	{
		return (TC ? TC : 0)
	}
	this.QueryString.Count.toString = function() 
	{
		return (TC ? TC.toString() : "0")
	}
	this.QueryString.Item = function(e)
	{
		if (typeof(e) == un)
		{
			return LS.toString();
		}
		else 
		{
			if (typeof(e) == n) 
			{
				var e = Math.ceil(e);
				var c = 0;
				for (var i in QS) 
				{
					if (typeof(QS[i]) != f && ++c == e)
					{
						return QS[i];
					}
				}
				Err(e1 + ".Item(" + e + ")");
			}
			else
			{
				return QS[KM(e, QS)];
			}
		}
		if (typeof(e) == (n))
		{
			Err(e1 + ".Item(" + e + ")");
		}
		return un;
	}
	this.QueryString.Item.toString = function() 
	{
		return LS.toString()
	}
	this.QueryString.Key = function(e) 
	{
		var t = typeof(e);
		if (t == n)
		{
			var e = Math.ceil(e);
			var c = 0;
			for (var i in QS) 
			{
				if (typeof(QS[i]) == "object" && (++c == e)) 
				{
					return i;
				}
			}
		}
		else if (t == r) 
		{
			var e = KM(e, QS);
			var a = QS[e];
			return (typeof(a) != un && a && a.toString() ? e : "");
		}
		else
		{
			Err(e2 + ".Key(" + (e ? e : "") + ")");
		}
		Err(e1 + ".Item(" + e + ")");
	}
	this.QueryString.Key.toString = function() 
	{
		Err(e2 + ".Key");
	}
	this.Version = 1.1;
	this.Author  = "Andrew Urquhart (www.andrewu.co.uk)";
}

var Request = new RObj(false);
var MWJ_ldD = [];
function importXML(oURL, oFunct, oNoRand, oDelay) 
{
	//note: in XML importing event handlers, 'this' refers to window
	if (!oNoRand) 
	{
		oURL += (( oURL.indexOf('?') + 1 ) ? '&' : '?' ) + ( new Date()).getTime(); 
	} //prevent cache
	if (window.XMLHttpRequest) 
	{
		//alternate XMLHTTP request - Gecko, Safari 1.2+ and Opera 7.6+
		MWJ_ldD[MWJ_ldD.length] = new XMLHttpRequest();
		MWJ_ldD[MWJ_ldD.length-1].onreadystatechange = new Function( 'if( MWJ_ldD['+(MWJ_ldD.length-1)+'].readyState == 4 && MWJ_ldD['+(MWJ_ldD.length-1)+'].status < 300 ) { '+oFunct+'(MWJ_ldD['+(MWJ_ldD.length-1)+'].responseXML); }' );
		MWJ_ldD[MWJ_ldD.length-1].open("GET", oURL, true);
		MWJ_ldD[MWJ_ldD.length-1].send(null);
		return true;
	}
	if (!navigator.__ice_version && window.ActiveXObject) 
	{
		//the Microsoft way - IE 5+/Win (ICE produces errors and fails to use try-catch correctly)
		try 
		{ //IE Mac has the property window.ActiveXObject but produces errors if you try and use it
			try 
			{
				var tho = new ActiveXObject('Microsoft.XMLDOM'); //newer
			} 
			catch(e) 
			{ 
				var tho = new ActiveXObject('Msxml2.XMLHTTP'); 
			} //older
			MWJ_ldD[MWJ_ldD.length] = tho;
			MWJ_ldD[MWJ_ldD.length - 1].onreadystatechange = new Function( 'if( MWJ_ldD['+(MWJ_ldD.length-1)+'].readyState == 4 ) { '+oFunct+'(MWJ_ldD['+(MWJ_ldD.length-1)+']); }' );
			MWJ_ldD[MWJ_ldD.length - 1].load(oURL);
			return true;
		} 
		catch(e) 
		{}
	}
	if (document.createElement && document.childNodes) 
	{
		//load the XML in an iframe
		var ifr = document.createElement('DIV');
		ifr.style.visibility = 'hidden'; ifr.style.position = 'absolute'; ifr.style.top = '0px'; ifr.style.left = '0px';
		//onload only fires in Opera so I use a timer for all
		if (!window.MWJ_XML_timer) { window.MWJ_XML_timer = window.setInterval('MWJ_checkXMLLoad();',100); }
		ifr.innerHTML = '<iframe src="' + oURL + '" name="MWJ_XML_loader_' + MWJ_ldD.length + '" height="0" width="0"><\/iframe>';
		MWJ_ldD[MWJ_ldD.length] = oFunct + 'MWJ_SPLIT' + (oDelay?oDelay:1) + '';
		document.body.appendChild(ifr);
		return true;
	}
	return false;
}

function MWJ_checkXMLLoad() 
{
	//check if each imported file is available (huge files may not have loaded completely - nothing I can do - use the delay to help)
	for (var x = 0; x < MWJ_ldD.length; x++) 
	{
		if (MWJ_ldD[x] && window.frames['MWJ_XML_loader_' + x]) 
		{
			setTimeout( MWJ_ldD[x].split('MWJ_SPLIT')[0] + '(window.frames.MWJ_XML_loader_' + x + '.window.document);', parseInt(MWJ_ldD[x].split('MWJ_SPLIT')[1]));
			MWJ_ldD[x] = false;
		}
	}
}
