////////// Replication of functions from AOWebAPI.dll
function QueryString(locationString)
{
	QueryString.prototype.ItemByName = _itemByName;
	QueryString.prototype.Items = _items;
	var locationHash = new Array();
	__QueryString(locationString);
	function __QueryString(locationString)
	{
		var str=locationString.substr(locationString.indexOf("?")+1);
		var strArr=str.split("&");
		var val = "";
		
		for(var index=0;index<strArr.length;index++)
		{
			locationHash[strArr[index].split("=")[0]] = strArr[index].split("=")[1];
		}
	}
	function _itemByName(name)
	{
		return locationHash[name];
	}
	
	function _items()
	{
	    return locationHash;
	}
}

function ParamsBuilder(locationString)
{
	this.queryString = __GetQueryString(locationString)
	this.pageName = _GetPageName(locationString)
	this.keyValuePairs = this.queryString.split("&")
	this.macroName = this._GetMacroName()
	if(this.macroName.toLowerCase() == "retrieve")
	{
		if(!(typeof(m_lockEnabled) == "undefined" || m_lockEnabled))
			this.macroName = this.macroName + "#DISABLELOCK"
	}
	this.macroParams = this._GetMacroParams()
	this.queryString =	new QueryString(locationString);
}

ParamsBuilder.prototype._GetMacroName = function ()
{
	try
	{
		if(this.keyValuePairs[0].split("=")[0] == 'action')
			return this.keyValuePairs[0].split("=")[1]
		else
			return ""
	}
	catch(e)
	{
		return ""
	}
}

ParamsBuilder.prototype._GetMacroParams = function ()
{
	var macroParams
	
	if(this.macroName.indexOf("retrieve") != -1)
	{
		macroParams = this._BuildParamsForRetrieve()	
	}
	else if(this.macroName.substr(0,String("newwithparams").length).toLowerCase() == "newwithparams")
	{
		macroParams = this._BuildParamsForNewWithParams()
	}
	else
	{
		macroParams = this._BuildParamsGeneral();
	}
	
	if(!macroParams.length)
		macroParams = Array("")

	return macroParams
}


ParamsBuilder.prototype._BuildParamsForRetrieve = function ()
{
	var macroParams = new Array()
	var paramsIndex = 0
	var strWhereCond, strArrayWhereCond;
	for(var i = 1; i < this.keyValuePairs.length; i++){
		var paramName, paramValue;	
		strWhereCond="";
		
		if(this.keyValuePairs[i].indexOf('=') > 0){
			paramName = this.keyValuePairs[i].split("=")[0];
			strArrayWhereCond=this.keyValuePairs[i].split("=")
			for (var j=1;j<strArrayWhereCond.length;j++)
			{
				if (j!=1)strWhereCond+="=";
				strWhereCond+=strArrayWhereCond[j];				
			}
			paramValue = URLDecode(strWhereCond);
		}
		else
		{
			paramName = "where_cond"
			paramValue = this.keyValuePairs[i]
		}
			
		if(!this._IsWebVar(paramName))
		{
			macroParams[paramsIndex++] = paramValue
		}
	}	
	
	return macroParams
}


ParamsBuilder.prototype._BuildParamsForNewWithParams = function ()
{
	var macroParams = new Array(2)
	var paramKeys = new Array()
	var paramValues = new Array()
	var paramsIndex = 0
	
	for(var i = 1; i < this.keyValuePairs.length; i++)
	{
		var paramName = this.keyValuePairs[i].split("=")[0]
		var paramValue = this.keyValuePairs[i].split("=")[1]
			
		if(!this._IsWebVar(paramName))
		{
			paramKeys[paramsIndex] = paramName
			paramValues[paramsIndex++] = URLDecode(paramValue);
		}
	}	
	
	macroParams[0] = paramKeys
	macroParams[1] = paramValues
	
	return macroParams
}


ParamsBuilder.prototype._BuildParamsGeneral = function ()
{
	var macroParams = new Array()
	var paramsIndex = 0
	
	for(var i = 1; i < this.keyValuePairs.length; i++)
	{
		var paramName = this.keyValuePairs[i].split("=")[0]
		var paramValue = this.keyValuePairs[i].split("=")[1]
		paramName=paramName.replace("amp;","");
		if(!this._IsWebVar(paramName))
		{
			macroParams[paramsIndex++] = paramName
			macroParams[paramsIndex++] = URLDecode(paramValue);
		}
	}	
	
	return macroParams
}

ParamsBuilder.prototype._IsWebVar = function (varName)
{
	return (varName.substr(0,7) == "WebVar_") 
}

ParamsBuilder.prototype._SetWebVar = function (varName, varValue)
{
 varValue=varValue.replace(/\"/g,"\\\"");
 eval("window." + varName + ' = "' + varValue + '"')
}


ParamsBuilder.prototype.DeclareWebVars = function ()
{
	var strParameters="";
	for(var i = 0; i < this.keyValuePairs.length; i++)
	{
		var paramName = this.keyValuePairs[i].split("=")[0]
		var paramValue = this.keyValuePairs[i].split("=")[1]
		paramName=paramName.replace("amp;","");
		if(this._IsWebVar(paramName))
		{
			this._SetWebVar(paramName, paramValue);
			if(paramName != "WebVar_itemclickedid")
			{
			    continue;
			}
		}
		if (strParameters!="") strParameters+="&";
		strParameters+=paramName+"="+paramValue;
	}
	if (strParameters!="")
	{
		_SetGlobalVar(_GetPageName(document.location.href),(strParameters));
	}
}

/////////////////////////////////////////////////////////////////////////


function _BuildXMLRequest()
{
	var xmlRequest = "<root xmlns:dt='urn:schemas-microsoft-com:datatypes'><GetCurrentState pageName='" + _GetCurrentPageName() + "' stateID='-1'>"
	
	for(var i = 0; i < m_aliases.length; i++){
		if(m_aliases[i].indexOf(":1") > 0 || m_aliases[i].indexOf(":2") > 0)
			continue;
		
		xmlRequest += "<BO alias='" + m_aliases[i] + "'>"
			
		xmlRequest += "</BO>"
	}
	
	xmlRequest += "</GetCurrentState></root>"

	return xmlRequest;
}



function LoadDDLBFromXML(xmlObj){
	if (xmlObj==null) return null;	
	var xmlRoot=xmlObj.selectSingleNode("/root");
	if (xmlRoot==null) return xmlObj;
	var ddlbFound=xmlRoot.selectNodes("ddlb");
	if (ddlbFound.length) return xmlObj;
	var docXSL=document;
//	if (document.frames.length>0)
//		docXSL=document.frames("iXSLLoader");
	

	// V.K. New DDLB maint syntax

	if(typeof(m_DDLBPath) != "undefined")
	{
		var ddlbArr = m_ControlFrame.m_DDLB[m_CurrentPageName]
		var doc = new ActiveXObject("MSXML2.DOMDocument");
		doc.async = false 
        //work around fix when getting reference to the DDLB cache from open window
        //the object presist in the cache is not Array type
		if(typeof(ddlbArr) == "undefined" || !(ddlbArr instanceof Array))
		{
		
			m_ControlFrame.m_DDLB[m_CurrentPageName] = new Array()
			ddlbArr = m_ControlFrame.m_DDLB[m_CurrentPageName]

			for(i=0; i < m_DDLBPath.length; i++)
			{
				doc.load(m_DDLBPath[i])
				if(doc.parseError == 0)
				{
					ddlbArr[m_DDLBPath[i]] = doc.selectSingleNode("/ddlb").cloneNode(true)
				}
				else
				{
					ddlbArr[m_DDLBPath[i]] = null
				}
			}
		}

		for(ddlbPath in ddlbArr)
		{
			if(ddlbPath =="../ddlb_xml/priority_ddlb.xml")
			{
				xmlRoot.appendChild(SOAP_RetrieveDDLBPriority());
			}
			else
			{
				if(ddlbArr[ddlbPath] != null)
					xmlRoot.appendChild(ddlbArr[ddlbPath].cloneNode(true))
			}
		}

		xmlObj=AS_SearchAndLoadDynamicLists(xmlObj);
		return xmlObj
	}
	// V.K. New maint syntax
	
/* Meir 18.02.04 14:55 By Kofman's request
	if (docXSL.all["ddlb_xml"]==null)
	{
		if (window.top.frames.length>0){
			docXSL=window.top.frames("XSLPagesFrame");		
			if (docXSL!=null) docXSL=docXSL.document;
		}
	}
*/	
	var ddlbNodes=docXSL.all["ddlb_xml"];
	if (ddlbNodes==null) return xmlObj;		
	var ddlbXML;
	if (ddlbNodes.length==null){
		if (ddlbNodes.src=="../ddlb_xml/priority_ddlb.xml")
		{
			xmlRoot.appendChild(SOAP_RetrieveDDLBPriority());
			
		}
		else
		{
			ddlbXML=ddlbNodes.XMLDocument.selectSingleNode("/ddlb");
			if (ddlbXML!=null && ddlbXML.xml!="" && ddlbNodes.XMLDocument.parseError==0) xmlRoot.appendChild(ddlbXML.cloneNode(true));
		}
	}
	else{
		for (var i=0;i<ddlbNodes.length;i++){
			if (ddlbNodes[i].src=="../ddlb_xml/priority_ddlb.xml")
			{				
				xmlRoot.appendChild(SOAP_RetrieveDDLBPriority());
				
				
			}
			else
			{
				if (ddlbNodes[i].XMLDocument.parseError!=0)	continue;
				ddlbXML=ddlbNodes[i].XMLDocument.selectSingleNode("/ddlb");
				if (ddlbXML!=null && ddlbXML.xml!="")xmlRoot.appendChild(ddlbXML.cloneNode(true));
			}			
		}
	}	
	xmlObj=AS_SearchAndLoadDynamicLists(xmlObj);
	return xmlObj;
}
