﻿//if (typeof(timesArray)=="undefined") var timesArray=new Array();
//if (typeof(funcsArray)=="undefined") var funcsArray=new Array();
//if (typeof(iTimers)=="undefined") var iTimers=-1;
var block;
var m_ShortcutBar=false;
var menuOut = -5;
var m_links=new Array();
if (typeof(m_ActiveReports)=="undefined")
	var m_ActiveReports=new Array();
var m_upvisible=0,m_downvisible=0;
// astea-trans=text;TXTASP$up_vx;N;
var menuArrowUp = "Up";
// astea-trans=text;TXTASP$down_vx;N;
var menuArrowDown = "Down";
var m_strUp="<img alt='"+menuArrowUp+"' src='../images/obj_up_arrow.gif' onclick='return moveUp()' height='15px' width='15px' style='cursor:hand'>",
	m_strDown="<img alt='"+menuArrowDown+"' src='../images/obj_down_arrow.gif' onclick='return moveDown()' height='15px' width='15px' style='cursor:hand'>";
var m_selectedUnique=null,m_selectedGroup=null,m_selectedPortal=null;
var m_numSections;
var m_menuDelay=0;
//var m_MaintBarTimer;
//var m_
var oMsgXML=null; //Global param for MSXML2.DOMDocument object
//Side menu position (slide menu)
var SIDE_MENU_POS = (-175);
var m_disableElementFilter = ";filter:alpha(opacity=70);color:#3C3C3C;";
var m_CustomError = null;


var m_dateOrder,m_sep,m_YearLength;
m_dateOrder="mdy";
m_YearLength=4; //Should Be 2 or 4
m_sep="-";
var m_numberDecimalPoint=".";
var m_numberGroupSeperator=",";
var m_LockingPerson="";
var m_MenuTimer=null;
var m_TempPageAlias=null;
var m_XSLLayout=null;
var m_handleTabKeyCode = false;
var m_aliasContainerElement = new Array();
var validateObj = new _validate();
var m_executeFinalCommand = null;
var m_RealoadPage = true;
var m_PageIndicator = new PageIndicator();
var m_tabKeyDown = false;
var m_numberFormat = "";
var m_EnforceLooseMsg = true;
var m_SideMenuIFrame = null;
var m_disableAsyncBehaivor = false;
var m_saveOptions = null;
var m_CreatedContextMenu = null;
var m_useSingleInstance = false;
var m_PreserveNodeStatus = null;
var m_barXML = null;
var m_SaveStatusBW = 0;
var m_SaveContextMenu = null;
var m_QuitFlowSequense=false;
// astea-trans=text;TXTASP$vx_query_n_sort_vx;N;
var m_queryNotSortedLbl = "Query not sorted";
var m_progressHandler = null;
//var m_activexObjectOld = null;

var m_msxmlCLASSID = new Array("microsoft.xmldom","msxml.domdocument","msxml2.domdocument","msxml2.domdocument3.0");
var m_filterUrl = {"WEB_framework/ReportViewer.aspx":"OpenReport"};


function ConstructAOSharedFunc()
{
	m_LockingPerson="";
	m_MenuTimer=null;
	m_TempPageAlias=null;
	m_XSLLayout=null;
	m_aliasContainerElement = new Array();
	m_tabKeyDown = false;
	m_EnforceLooseMsg = true;
	m_saveOptions = null;
	m_SaveStatusBW = 0;
	m_CustomError = null;
}

//shows the inner text of specific object as title (yellow tooltip)
function showTitle(obj){
	var lblTitle = obj.innerText;
	obj.title = lblTitle;
}	


function __trim()
{
    var aaa=this.replace(/(^\s*)|(\s*$)/g, "");
    return aaa;
    // Use a regular expression to replace leading and trailing 
    // spaces with the empty string

}

function __IsEqual(str)
{
    str = new String(str);
    
    if (_GetGlobalVar("IsCaseSensitiveDB")=="False")
    {
        return (this.toLowerCase() == str.toLowerCase());
    }
    return (String(this)==str);
}

function __format()
{
	var strToFormat = arguments[0];
	var re = new RegExp();
	var index=1;
	var oArray = arguments;
	var iPosition = 0;
	if(arguments[1] instanceof Array)
	{
	    index=0;
	    oArray = arguments[1];
	}
	for(;index<oArray.length;index++)
	{
		re.compile("\\{"+(iPosition++)+"\\}","gi");
		strToFormat = strToFormat.replace(re,oArray[index]);
	}
	return strToFormat;
}

function __removeEx()
{
	if(typeof(arguments[0])=="undefined" || arguments[0].length==0 || this.length==0) return this;
	var ch = arguments[0];
	var direction = typeof(arguments[1])=="undefined"?0:arguments[1];
	var str = this;
	if( direction == 0 )
	{
		if(str.substr(str.length-ch.length,str.length) == ch )
		{
			str = str.substr(0,str.length-ch.length);
		}
	}
	else if( direction == 1 )
	{
		if(str.substr(0,ch.length) == ch )
		{
			str = str.substr(ch.length,str.length);
		}
	}
	else if( direction == 2 )
	{
		if(str.substr(str.length-ch.length,str.length) == ch )
		{
			str = str.substr(0,str.length-ch.length);
		}
		
		if(str.substr(0,ch.length) == ch )
		{
			str = str.substr(ch.length,str.length);
		}
	}
    return str;
}

//this code section implement new method on the document object
//that fetch element by alias name instead fetching the element
//by seeking in the entire document
document.getElementByAlias = function __getElementByAlias(alias,elmId)
{
	var containerObj = null;
	
	if(m_action=="maint")
	{
		if(alias == null) alias = m_currentAlias;
		if(m_aliasContainerElement[alias]==null)
		{
			m_aliasContainerElement[alias] = document.getElementById(alias);
		}
		
		containerObj = m_aliasContainerElement[alias];
	}
	else if(m_action=="new")
	{
		containerObj = document.getElementById("_WizPageControl");
	}
	
	if( containerObj != null)
	{
		return containerObj.all(elmId);
	}
	else
	{
		if(_TabControl != null)
		{
			return _TabControl.all(elmId);
		}
		else
		{
			return document.getElementById(elmId);
		}
	}
}

//this code implement new method on the document object 
//that return referance to the container object of the current alias
document.currentAlias = function _currentAlias()
{
	var doc = null;
	if(m_action=="maint")
	{
		if(m_aliasContainerElement[m_currentAlias] == null)
		{
			doc = document.getElementById(m_currentAlias);
		}
		else
		{
			doc = m_aliasContainerElement[m_currentAlias];
		}
	}
	else if(m_action=="new")
	{
		doc = document.getElementById("_TabControl");
	}
	else
	{
		doc = document;
	}
	
	if( doc == null ) doc = document
	
	return doc; 
}

String.prototype.trim =__trim;
String.prototype.removeEx = __removeEx;
String.prototype.Format = __format;
String.prototype.IsEqual = __IsEqual;

function StringBuilder()
{
    var oArray = null;
    this.Append = function(str)
    {
        if( oArray == null )
        {
            oArray = new Array();
        }
        oArray.push(str);
    }
    
    this.ToString = function()
    {
        if( oArray == null ) return "";
        return oArray.join("");
    }
}

Number.prototype.IsCor = function _IsCor(value)
{
    var num = this.toString();
    if(value.substr(0,1)==m_numberDecimalPoint) value = "0"+value;
    return (num.split(m_numberDecimalPoint).length==2 && (num.split(m_numberDecimalPoint)[0] != value.split(m_numberDecimalPoint)[0]))
}


//added by eli harel validation object for java script vars
function _validate()
{
	// Naming functions.
	_validate.prototype.FunctionName = FunctionName;
	_validate.prototype.ObjectName = ObjectName;

	// Type identity function.
	_validate.prototype.IsArray = IsArray;
	_validate.prototype.IsDefined = IsDefined;
	_validate.prototype.IsEmpty = IsEmpty;
	_validate.prototype.IsFunction = IsFunction;
	_validate.prototype.IsNull = IsNull;
	_validate.prototype.IsNumeric = IsNumeric;
	_validate.prototype.IsObject = IsObject;
	_validate.prototype.IsString = IsString;
	_validate.prototype.IsNothing = IsNothing;
	_validate.prototype.InvokeHook = InvokeHook;

	// Type identity function.
	
	function IsNothing( obj )
	{
		if( IsNull( obj ) == true || IsDefined( obj ) == false || (IsString (obj) && obj == ""))
			return true;
		return false;
	}

	function IsArray( obj )
	{
		return IsObject( obj ) && obj.constructor == Array;
	}

	function IsDefined( obj )
	{
	    return typeof( obj ) == 'undefined' ? false : true;
	}

	function IsEmpty( obj )
	{
		retval = true;
		if ( IsObject( obj ) )
		{
			for ( var item in obj )
			{
				retval = false;
				break;
            }
        }
        
		return retval;
	}

	function IsFunction( obj )
	{
		return typeof( obj ) == 'function';
	}

	function IsNull( obj )
	{
		return IsObject( obj ) && ( obj == null );
	}

	function IsNumeric( obj )
	{
	    return typeof( obj ) == 'number' && isFinite( obj );
	}

	function IsObject( obj )
	{
		return typeof( obj ) == 'object';
	}

	function IsString( obj )
	{
		return typeof( obj ) == 'string';
	}
	// End of Type identity function.
	
	// Naming functions.
	function ObjectName( obj )
	{
		var objName = null;
		
		if ( IsObject( obj ) )
		{
			var objName = null;
			var strFunc = obj.constructor.toString();
			var reFuncName = new RegExp( /function\s+(\w+).*/g );
			var result = reFuncName.exec( strFunc );
			objName = result[1];
		}		
		
		return objName;
	}

	function FunctionName( func )
	{
		var funcName = null;
		if ( IsFunction( func ) )
		{
			var strFunc = func.toString();
			var reFuncName = new RegExp( /function\s+(\w+).*/g );
			var result = reFuncName.exec( strFunc );
			funcName = result[1];
		}
		
		return funcName;
	}
	//invoke hook function in debug mode or in release mode
	//that handle error differently
	function InvokeHook( funcName )
	{
		var args = new String();
		var funcRtnVal = null;
		for(var i=1;i<arguments.length;i++)
		{
			if( IsDefined(arguments[i]) == false) continue;
			args += "arguments["+i+"],";
		}
		args = args.removeEx(",");
		if( AS_IsDebugMode() )
		{			
			var scriptexpr = "if(typeof("+funcName+")!='undefined'){funcRtnVal="+funcName+"("+args+"); }";
			eval(scriptexpr);
		}
		else
		{
			try
			{
				eval("funcRtnVal="+funcName+"("+args+")");
				funcExec = true;
			}
			catch(err){/*do nothing*/}
		}
		return funcRtnVal;
	}
	// end of Naming functions.
}

function LockManager()
{
	var _keyHolder = new Array();
	
	this.CliamLock = function(key)
	{
		if (_keyHolder[key]!=null) return false;
		_keyHolder[key]= true;
		return true;
	}
	
	this.ReleaseLock = function(key)
	{
		if (_keyHolder[key]==null) return false;
		_keyHolder[key]=null;
		return true;
	}
};

var m_lockManager = new LockManager();

function AS_NoNull(fldValue,fldDefault)
{
	if (fldValue == null)
	{
		if (fldDefault == null)
		{
			fldDefault = "";
		}
		return fldDefault;
	}
	else
	{
		return fldValue;
	}
}


// function which disable Button
// input parameter 
// 1. buttonId - button Id
// 2. toDisable - boolean to disable or not 
// return parameter Boolean - Is function worked properly
function AS_DisableEnableButton(buttonId,toDisable)
{
	var objButton = document.getElementById(buttonId);
	
	if 	(objButton == null) return false;
	
	if (toDisable == null) toDisable = true;
	var res = validateObj.InvokeHook("f_enable_disable_button",buttonId,toDisable);
	if( res != null && !res)
	{
	    return false;
	}
	if (toDisable == true)
	{
	    objButton.setAttribute("oldClassName",objButton.className);
		objButton.className = "clickTranspButtDis";
		objButton.disabled = true;
	}
	else
	{
	    var sClassName = objButton.getAttribute("oldClassName");
		objButton.className = sClassName==null?"clickTranspButt":sClassName;
		objButton.disabled = false;
	}
	return true;	
}


function AS_DemoLibrary()
{
	window.open('../help/DemoLibrary/index.html','','width=900,height=450,status=yes,toolbar=yes,scrollbars=yes,location=yes,menubar=yes,resizable=yes,status=yes',false);
}



function AS_OnlineHelp()
{
	var is_employee=_GetGlobalVar("is_employee");
	if (is_employee=="Y")
		window.open('../help/Employee/Help/Output/wwhelp.htm','','width=900,height=450,status=yes,toolbar=yes,scrollbars=yes,location=yes,menubar=yes,resizable=yes,status=yes',false);
	else
		window.open('../help/Customer/Help/Output/wwhelp.htm','','width=900,height=450,status=yes,toolbar=yes,scrollbars=yes,location=yes,menubar=yes,resizable=yes,status=yes',false);
}

function AS_AllianceLibrary()
{
	var is_employee=_GetGlobalVar("is_employee");
	if (is_employee=="Y")
		window.open('../help/Employee/PDF/index.htm','','width=900,height=450,status=yes,toolbar=yes,scrollbars=yes,location=yes,menubar=yes,resizable=yes,status=yes',false);
	else
		window.open('../help/Customer/PDF/index.htm','','width=900,height=450,status=yes,toolbar=yes,scrollbars=yes,location=yes,menubar=yes,resizable=yes,status=yes',false);
		
}
function FindBOLoc(BOName)
		{
			var BO_location=-1;
			for (var i=0;i<m_aliases.length;i++)
			{
				if 	(m_aliases[i]==BOName)
				{
					BO_location=i;
					break;
				}
			}
			return BO_location;
		}
	
	
	
function GetBO(BOName)
	{
		var BOLoc=FindBOLoc(BOName);
		if (BOLoc!=-1)
		{
			m_pageBOs[BOLoc]=m_aliases[BOLoc]=BOName=BOName.replace(":1","");
			RetrieveOnDemand(BOName,null);
		}
		return BOLoc;
	}


function AS_SetNumberSeperators()
{
	var num=1000;
	var zero="0";
	var nine="9";
	
	var locString=num.toLocaleString();
	var sep1=-1, sep2=-1;
	for (var i=0;i<locString.length;i++)
	{
		if (locString.charAt(i)>=zero && locString.charAt(i)<=nine) continue;
		if (sep1==-1 && i<4) 
		{
			sep1=locString.charAt(i);			
			continue;	
		}
		if (sep2==-1)
		{
			sep2=locString.charAt(i);	
			break;
		}
		
	}
	
	if (sep1!=-1)
	{	
		sep1=String.fromCharCode(sep1.charCodeAt(0)%128);
		m_numberGroupSeperator=sep1;		
	}
	if (sep2!=-1)m_numberDecimalPoint=sep2;
	
	var len = locString.split(m_numberDecimalPoint)[locString.split(m_numberDecimalPoint).length-1].length;
	var strZero = "";
	while(len--) strZero += "0";
	m_numberFormat = "#,##0."+strZero;
}

function AS_GetDecimalPoint()
{
	var num = new String(AS_Num2String(1.1));
	return num.substr(1,1);
}

function AS_CheckIsFloat(val)
{
	return val.indexOf(AS_GetDecimalPoint())>-1;
}

/// <summary>
/// Converts the string that represents the number according to the local regional setting to native number.
/// If the function accepts the native number, the function skips the casting and returns the number.
/// </summary>
/// <param name="num">[required]string represents number</param>
/// <returns>native number</returns>
function AS_String2Num(num)
{
	try{
		if(typeof(num)=="number") return num;
		var zero="0";
		var nine="9";
		var value=num;
		var num1=num;
		num="";
		if ((""+value).trim().length>0)
		{
		/*
			var val1=value.split(m_numberDecimalPoint)[0],val2=value.split(m_numberDecimalPoint)[1];
			var re1=eval("/\\"+m_numberGroupSeperator+"/ig");
			value=val1.replace(re1,',');									
			if (val2!=null) value+="."+val2;
			value=value.replace(/,/g,"");
			var value1=parseFloat(value);
			if (value1!=value) return num;
			return value1;
		*/		
			value=String(value);
			var len=value.length;
			var countDecimal=0;	
			var decimalLength=0;		
			for (var i=len-1;i>=0;i--)	
			{
				if (countDecimal==0) decimalLength++;			 			 				
				if (value.charAt(i)==m_numberDecimalPoint)
				{	
					 countDecimal++;								
					 if (countDecimal>1) throw Number.NaN;	
					 
					 num="."+num;
					 continue;
				}		
				
				if ((value.charCodeAt(i)%128)==m_numberGroupSeperator.charCodeAt(0)%128)
				{
						
					if (i==len-1 || i==0 || isNaN(value.charAt(i-1))|| isNaN(value.charAt(i+1)))throw Number.NaN;
					num1=num.split(".")[0].length;
					if (num1%3!=0) throw Number.NaN;
					continue;
				}

				if (value.charAt(i)>=zero && value.charAt(i)<=nine) num=value.charAt(i)+num;
				else if (value.charAt(i)=="-")
				{
					if (i==0) num=value.charAt(i)+num;
					else throw Number.NaN; 
				}				
				else throw Number.NaN
				
			}
				
					
		}
		if (num=="") return "";
		var rtnVal = Number(num);
		if (isNaN(num) || rtnVal.IsCor(num)) return "A2LOG103";//ASAP #IL0406150088
		return rtnVal;
	}catch(e)
	{
		return "A2LOG103";
		
	}
}

/// <summary>
/// Formats native number to represented string number on the local regional setting.
/// </summary>
/// <param name="value">[required]native number</param>
/// <returns>number as string</returns>
function AS_Num2String(value)
{
	try{
		if ((""+value).trim().length>0)
		{
			return Number(value).toLocaleString();
		}
		return value;
	}catch(e){return Number.NaN}
}
AS_SetNumberSeperators();

function SearchPortal_Jump(elmName){	
	if (elmName=="") return false;	
	var elm=document.all(elmName);	
	if(elm==null) return false;
	
	var Src_select=document.getElementById("SearchPortal_select");
	if (elm.length!=null)	{
		var txt_select=(""+Src_select.options[Src_select.selectedIndex].text).trim();
		var txtElm;
		for (var i=0;i<elm.length;i++){
			txtElm=(""+elm[i].parentElement.title).trim();
			if (txtElm==txt_select){
				elm=elm[i];
				break;
			}
		}
	}
	if (elm.length!=null) return false;
	
	if (typeof(Src_select.options[Src_select.selectedIndex].alias)!="undefined")
	{
		_SetGlobalVar("Module_GroupAlias",Src_select.options[Src_select.selectedIndex].group);
		_SetGlobalVar("Module_PageAlias",Src_select.options[Src_select.selectedIndex].alias);	
	}
	
	elm.click();	
	return false;	
}
function SearchPortalPress(obj,keyCode)
{
	if (keyCode==13) SearchPortal_Jump(obj.value);
}

function AS_GetMenuBarDoc()
{
    if( m_barXML == null )
    {
	    m_barXML=new ActiveXObject("MSXML2.DOMDocument");
	    m_barXML.async=false;
	    // astea-trans=text;TXTVIRTUAL$myfavorites_vx;N;
	    var myFavoriteStr = "My Favorites";
	    // astea-trans=text;TXTVIRTUAL$menu_moduls_vx;N;
	    var MyModulesStr = "My Modules";
	    // astea-trans=text;TXTVIRTUAL$menu_reports_vx;N;
	    var MyReportsStr = "My Reports";
	    // astea-trans=text;TXTVIRTUAL$my_links_vx;N;
	    var MyLinksStr = "My Links";
	    var blnLoaded=m_barXML.loadXML(_GetGlobalVar("MenuBarXML"));	
	    
	    var oSection = m_barXML.selectSingleNode("//Section[@name='MyFavorites']");
	    if(oSection != null )
	    {
	        oSection.setAttribute("title",myFavoriteStr);
	        var oGroup =  oSection.selectSingleNode("//Group[@name = 'MyModules']");
	        if(oGroup!=null) oGroup.setAttribute("title",MyModulesStr);
	        oGroup =  oSection.selectSingleNode("//Group[@name = 'MyReports']");
	        if(oGroup!=null) oGroup.setAttribute("title",MyReportsStr);
	        oGroup =  oSection.selectSingleNode("//Group[@name = 'MyLinks']");
	        if(oGroup!=null) oGroup.setAttribute("title",MyLinksStr);
	    }
	    if (!blnLoaded) return null;
	}
	return m_barXML;
}

function searchMenuBar()
{
	function AddItemToFoundItemsList(title,Src_select,oOption,portalName,GroupName,BCName,dup_Arr,properPlace,optLength,counter,alias,group)
	{			
		for (var j=0;j<optLength;j++)
		{
			if (title>Src_select.options[j].text)
			{	
				properPlace=j+1;
				if ((j!=optLength-1) && (title<Src_select.options[j+1].text))
					break;
			}
			else if (j==0)
			{
				properPlace=0;
				break;
			}
		}
		
		counter++;
		oOption=document.createElement("OPTION");
	//			oOption.text=allTitles[i].parentNode.parentNode.parentNode.getAttribute("title")+"-"+title;
		
		oOption.text=title;
		oOption.value=portalName+"_"+GroupName+"_"+BCName;
		oOption.title=portalName;
		
		if (typeof(alias)!="undefined")
		{
			oOption.alias=alias;
			oOption.group=group;
		}
		
		Src_select.add(oOption,properPlace);
		
		return counter;
	}
   
	var barXML=AS_GetMenuBarDoc();
	if(barXML == null) return false;
		 
	var Src_select=document.getElementById("SearchPortal_select");
	
	for (var i=Src_select.options.length-1;i>=0;i--)
		Src_select.options.remove(i);
		
	var counter=0;	
	var snv=document.getElementById("SearchPortal_input").value;
	document.getElementById("search_results_number").innerText=0;			
	//if (snv=="") return false;
	snv=snv.toLowerCase();
//	var less="(Title $ilt$ '"+snv.substring(0,snv.length-1)+String.fromCharCode(snv.charCodeAt(snv.length-1)+1)+"')";	
//	var allTitles=barXML.selectNodes('//Item[(Title $ige$ "'+snv+'") $and$ '+less+']');
	var allTitles=barXML.selectNodes('//Item');
	var title;
	var oOption ;
	var portalName;
	var GroupName;
	var BCName;
	var dup_Arr=new Array();
	var properPlace,optLength;	
		
	for (var i=0;i<allTitles.length;i++)
	{
		title=allTitles[i].selectSingleNode("Title").text;
		portalName=allTitles[i].parentNode.parentNode.parentNode.getAttribute("name");
		
		if (portalName=="MyFavorites") 
			continue;
		
		GroupName=allTitles[i].parentNode.getAttribute("name");
		BCName=allTitles[i].selectSingleNode("BC");
		
		if (BCName!=null) 
			BCName=BCName.text;
		else 
			BCName="";
		//display outlook sync for none mobile user
		//if( BCName == "sales_outlook_sync" && _GetGlobalVar("IsMobile").toLowerCase() == 'false') continue;
		
		if (title.toLowerCase().indexOf(snv)>-1)
		{
			if (dup_Arr[title]!=null)
				continue;
				
			dup_Arr[title]=true;
			optLength=Src_select.options.length;
			properPlace=optLength;
				
			counter=AddItemToFoundItemsList(title,Src_select,oOption,portalName,GroupName,BCName,dup_Arr,properPlace,optLength,counter)
		}
		
		if (portalName=="iSetup") 
		{			
			var allTabs=allTitles[i].selectNodes("Tabs/Tab");
			
			if (allTabs!=null)
			{
				for (var j=0;j<allTabs.length;j++)
				{
					title=allTabs[j].nodeTypedValue;
					
					if (title.toLowerCase().indexOf(snv)>-1)
					{
						if (dup_Arr[title]!=null)
							continue;
						
						dup_Arr[title]=true;
						optLength=Src_select.options.length;
						properPlace=optLength;
					
						var alias=allTabs[j].selectSingleNode("@alias").nodeValue;
						var group=allTabs[j].selectSingleNode("@group").nodeValue;
						
						counter=AddItemToFoundItemsList(title,Src_select,oOption,portalName,GroupName,BCName,dup_Arr,properPlace,optLength,counter,alias,group);
					}
				}
			}
		}
	}
	
	document.getElementById("search_results_number").innerText=counter;
	
	if (counter==0)
	{
		document.getElementById("SearchPortal_input").focus();
		return false;
	}
	
	Src_select.focus();
}


	
function _CreateShortcuts() {
	var pos, groupAlias,i=0;
	if(window.dialogArguments != null || opener != null ) return false;
	if (typeof(_GetGlobalVar("MenuBarXML"))=="undefined") {
		if (_GetPageFullName(document.location.href).indexOf("portal_asp/")!=-1) return false;
		else{
			 _Get_User_CarmenBar(_GetGlobalVar("PortalUserLogin"));
			 if (typeof(_GetGlobalVar("MenuBarXML"))=="undefined") return false;
		}
	}
	var bcName=(""+m_BCName).toLowerCase().trim();	
	//_CreateShortcutItems(_ShortcutItems);

	barXSL=ShorCutBarXSL.XMLDocument;
	if (barXSL.xml=="") 
	{	
		var barLoadXSL=new ActiveXObject("MSXML2.DOMDocument");
		barLoadXSL.async=false;
		if (barLoadXSL.load("../App_includes/ShortCutMenu/MenuBar.xsl"))	
		{	
			if (barLoadXSL.xml!="")
				barXSL=barLoadXSL;
			else return false;
		}
		else return false;
		 
	}	
	
	var barXML=AS_GetMenuBarDoc();
	if(barXML == null) return false;
	
	_TongueInit();
	//remove side menu if it is customer or laptop area
	//if the application running inside astea browser
	if(_GetGlobalVar("IsAsteaBrowser")==true || _GetGlobalVar("PortalName") == 'iCustomer' || _GetGlobalVar("PortalName") == 'AllianceLaptop'
		|| _GetGlobalVar("PortalName") == 'AllianceTech')
	{
	    document.getElementById('SideMenu').style.display = 'none';
	    return false;
	}
	m_numSections=barXML.selectNodes("//Section").length;
	_ShortcutItems.innerHTML="";
	_ShortcutItems.insertAdjacentHTML("afterBegin",barXML.transformNode(barXSL));
	/*var bodyObj = _ShortcutItems.contentWindow.document.body;
	bodyObj.insertAdjacentHTML("afterBegin",barXML.transformNode(barXSL));*/
//	_ShortcutItems.innerHTML=barXML.transformNode(barXSL);
	var portalName=_GetGlobalVar("top_level");
	
	if (typeof(portalName)=="undefined" )portalName=_GetGlobalVar("PortalName");
	if ("undefined"!=typeof(gPortalName) )portalName=_GetGlobalVar("PortalName");
	if (typeof(m_PortalName)!="undefined") 
	{
		portalName=m_PortalName;
		_SetGlobalVar("PortalName",portalName);			
	}
	groupName=barXML.selectSingleNode("//Section[@name='"+portalName+"']/ShortCuts/Group[0]")
	var numGroups=7;
	if (groupName!=null){
		 groupName=groupName.getAttribute("name")		 
		 numGroups=barXML.selectSingleNode("//Section[@name='"+portalName+"']").getAttribute("groups" );
	}	
	//_SelectShortCutItem_new("iAdmin_Requests");
	if (bcName!=""){
		var sectionNode=barXML.selectSingleNode('//Section[@name $ieq$ "'+portalName+'"]');
		var bcNode=sectionNode.selectNodes('ShortCuts/Group/Item[(BC $ieq$ "'+bcName+'")]');
		var URLAddr,realAddr=""+_GetPageName(document.location.href);
		var QBEAddr="";//ASAP #IL0404200004
		if (typeof(m_NavigateTo)!="undefined" && m_NavigateTo[0]!=null)
		{
			QBEAddr= (""+m_NavigateTo[0]).toLowerCase();
			QBEAddr=QBEAddr.replace("../scrl_asp/","");
			
		}
		if (bcNode.length) {
			for (var i=0;i<bcNode.length;i++){				
				URLAddr=""+bcNode[i].selectSingleNode("URL").text;
				URLAddr=URLAddr.replace(/\"/ig,"");
				URLAddr=URLAddr.replace(/\\/ig,"/");
				URLAddr=URLAddr.split("/")
				URLAddr=URLAddr[URLAddr.length-1];	
				if ((URLAddr==realAddr) && (bcNode[i].parentNode.parentNode.parentNode.getAttribute("name")==portalName)) {					
					numGroups=bcNode[i].parentNode.parentNode.parentNode.getAttribute("groups" );
					break;				
				}
				if (QBEAddr!="" && QBEAddr==URLAddr) 
				{
					numGroups=bcNode[i].parentNode.parentNode.parentNode.getAttribute("groups" );
					break;
				}
								
			}
			if (i==bcNode.length) i=0;
			bcNode=bcNode[i];
			groupName=bcNode.parentNode.getAttribute("name");
			m_selectedPortal=bcNode.parentNode.parentNode.parentNode.getAttribute("name");
			var subCell=document.all(m_selectedPortal+"_"+bcNode.parentNode.getAttribute("name")+"_"+bcName);			
			if (subCell!=null && subCell.length!=null) {
				var ttl=bcNode.selectSingleNode("Title").text;
				for (i=0;i<subCell.length;i++){
					if (subCell(i).parentElement.title==ttl) {
						subCell=subCell(i);
						break;
					}
				}
			}
			if (i==subCell.length) subCell=subCell(0);		
			if (subCell!=null){
				_SelectSection(m_selectedPortal,groupName,numGroups);
				_SelectShortCutItem_new(m_selectedPortal+"_"+bcNode.parentNode.getAttribute("name"),numGroups);
				m_selectedUnique=subCell.parentElement.rowIndex;
				m_selectedGroup=m_selectedPortal+"_"+bcNode.parentNode.getAttribute("name");
				subCell.className="clsShortcutSubItemSelected";
				//document.getElementById(m_selectedPortal+"_"+bcNode.parentNode.getAttribute("name")).className="clsShortcutItem_selected_new";
			}
		}
		else {
			_SelectSection(portalName,groupName,numGroups);	
			
		}
	}else{
		_SelectSection(portalName,groupName,numGroups);		
	}
	barXSL=null;
	barXML=null;	
	return true;

}
function _Get_User_CarmenBar(person_id){
	
	var PortalsXML=SOAP_RetrieveXML(BuildXML4Search("license","person_product_scrl",Array("person_id"),Array(person_id),
		Array("string"),Array("=")));
	if (SOAP_IsError(PortalsXML)) return false;
	else PortalsXML=SOAP_Get_XMLObj(PortalsXML);
	var count,nodes;
	//alert(PortalsXML.xml)
	PortalsXML=PortalsXML.selectNodes("root/row");

	var portal_id,strWhere_portal="(long_text.table_key in ('Search','iCommon'";
	var strPortalName,pos,strPortalTitle;
	var numSelected=0,numPortals=PortalsXML.length;
	var portalsOrder=new Array();
	portalsOrder['MyFavorites']=0;
	portalsOrder['Search']=1;
	portalsOrder['iCommon']=2;
	var str_lang=UI_LANGUAGE;
	if (str_lang=="AST") str_lang="long_text.column_name= 'xml'";
		
	for (var i=0;i<numPortals;i++){		
		strPortalTitle=PortalsXML[i].selectSingleNode("descr").text;
		//pos=strPortalTitle.indexOf(" ");	
		//if (pos==-1) pos=strPortalTitle.length;			
		//if (pos>9) pos=9;
		strPortalName=strPortalTitle;
		//if (pos<strPortalTitle.length) strPortalName=strPortalName+"...";
//		nodes=PortalsXML[i].selectNodes("*");
//		count=nodes.length;		
//		for (var j=0;j<count;j++){
//			m_UserPortals[i][nodes[j].nodeName]=nodes[j].text;	
//		}
		portal_id=PortalsXML[i].selectSingleNode("product_id").text;		
		portalsOrder[portal_id]=i+3;		
		if (portal_id=="iCustomer")strWhere_portal="(long_text.table_key in ('iCustomer'";
		else strWhere_portal+=",'"+portal_id+"'";		


	}
	strWhere_portal+=")and "+str_lang+") or  (long_text.column_name='"+person_id+"')";	
	if (typeof(_GetGlobalVar("MenuBarXML"))=="undefined")
	{

		//PortalsXML=SOAP_RetrieveXML(BuildXML4Search("long_text","get_portals_menu_2",Array("arg_top_level"),Array(strWhere_portal),
		//	Array("argument"),Array("in")));
		PortalsXML=SOAP_GetPortalMenu()		;
		if (SOAP_IsError(PortalsXML)) return false;
		else PortalsXML=SOAP_Get_XMLObj(PortalsXML);					
		var attrs=PortalsXML.selectNodes("//*[@dt:dt]");		
		var nd=null;		
		var rows=PortalsXML.selectNodes("/root/row");
		for (var i=0;i<rows.length;i++){
			nd=rows[i].selectSingleNode("fr_version");
			if (nd!=null) nd.text=portalsOrder[rows[i].selectSingleNode("table_key").text];
	}
		
		for (var i=0;i<attrs.length;i++) attrs[i].removeAttribute("dt:dt");
			
		strWhere_portal=PortalsXML.xml;
		strWhere_portal=strWhere_portal.replace(/&lt;/gi,"<");
		strWhere_portal=strWhere_portal.replace(/&gt;/gi,">");
		
		//strWhere_portal=strWhere_portal.replace(/\<Section/gi,'Section dt:dt="string");
		strWhere_portal=strWhere_portal.replace(/\\\"/ig,"\"");
	
		if (strWhere_portal!="<root/>"){		
			_SetGlobalVar("MenuBarXML",strWhere_portal)	;
		}
	}
}

function _showRow(objName,rowNum,maxRows){
	if (rowNum<maxRows){
		document.all(objName).rows[rowNum].style.display="";
		setTimeout("_showRow('"+String(objName)+"',"+Number(rowNum+1)+","+maxRows +")", 1);
	}
}

function moveDown(){
	//_uparrow.style.visibility="visible";
	var ga=document.all("sci_sub" + m_curShortCutGroupAlias);
	document.all(m_curShortCutGroupAlias + "_arrow" +Number(m_downvisible-1)).innerHTML="";
	ga.rows[m_upvisible++].style.display="none";
	document.all(m_curShortCutGroupAlias + "_arrow" + m_upvisible).innerHTML=m_strUp;
	ga.rows[m_downvisible++].style.display="";	
	if (m_downvisible != ga.rows.length) {
		document.all(m_curShortCutGroupAlias +
			 "_arrow" + Number(m_downvisible-1)).innerHTML=
				m_strDown;	
	}
	if (m_upvisible == 0) 
		document.all(m_curShortCutGroupAlias + "_arrow" +m_upvisible).innerHTML="";
	//alert("m_down="+m_downvisible+";m_up="+m_upvisible);
}

function moveUp(){
	//_downarrow.style.visibility="visible";
	var ga=document.all("sci_sub" + m_curShortCutGroupAlias);
	document.all(m_curShortCutGroupAlias + "_arrow" +m_upvisible).innerHTML="";
	m_upvisible--;m_downvisible--;
	document.all(m_curShortCutGroupAlias + "_arrow" + m_downvisible).innerHTML="";
	document.all(m_curShortCutGroupAlias + "_arrow" +m_upvisible).innerHTML=m_strUp;
	ga.rows[m_upvisible].style.display="";
	ga.rows[m_downvisible].style.display="none";
	if (m_downvisible != ga.rows.length) {
		document.all(m_curShortCutGroupAlias +
			 "_arrow" + Number(m_downvisible-1)).innerHTML=m_strDown;	
	}
	if (m_upvisible == 0) 
		document.all(m_curShortCutGroupAlias + "_arrow" +m_upvisible).innerHTML="";
}		   		   

function _CreatePortalButton(){
	var oTable = document.createElement("TABLE");
	var oTBody = document.createElement("TBODY");
	var oRow = document.createElement("TR");
	oRow.width = "140px";
	oRow.id="_oPortalRow";
	var subCell = document.createElement("TD");
	subCell.width="140px";
	subCell.title="Go to Portal";
// astea-trans=text;TXTVIRTUAL$go_to_portal_vx;N;
	subCell.innerHTML="Go to Portal";
	subCell.className = "clsShortcutSubItem";
	subCell.style.backgroundImage="url(../images/icn_back_to_portal.gif)";
	subCell.noWrap="true";
	subCell.onclick = new Function("return Single_Portal()"); 
	subCell.id="_oPortalCell";
	oRow.appendChild(subCell);
//	oTBody.appendChild(oRow);
//	oTable.appendChild(oTBody);
//	return oTable;
	return oRow;
}						
//var m_strMenuBarXML="";   

function _TongueInit() {
    if( m_SideMenuIFrame == null )
    {
        m_SideMenuIFrame = document.getElementById("SideMenuIframe");
    }
    
if ( ((_GetGlobalVar("IsMobile")=="True")&&(_GetGlobalVar("is_sa")=="Y")) || ((_GetGlobalVar("IsTech")=="True")&&(_GetGlobalVar("is_sa")=="Y")) )
	{
		document.getElementById('SideMenu').style.display = 'none';
	}
	block = SideMenu.style;
	block.posLeft=SIDE_MENU_POS;
	//m_SideMenuIFrame.style.posLeft = block.posLeft;
	//m_SideMenuIFrame.style.width = block.width;
	//m_SideMenuIFrame.style.height = block.height;
	//m_SideMenuIFrame.style.zIndex = block.zIndex-1;
	if (window.dialogArguments==null)
	{
		//block.visibility = "visible";
		block.visibility = "visible";
		block.display = "block";
	}
	//m_SideMenuIFrame.style.posLeft = SideMenu.posLeft;
	//m_SideMenuIFrame.style.offsetTo = SideMenu.offsetTo;
	
	_Tongue.src="../images/Tab_out02.gif";
 
}
function _TongueMoveIt(){
	if (block.posLeft > SIDE_MENU_POS) {			
		_TongueMoveItIn();
		m_ShortcutBar=false;
	} 
	else {		
		_TongueMoveItOut();
		m_ShortcutBar=true;
	}
	if (m_selectedUnique!=null) {
		var ga=document.all("sci_sub" + m_curShortCutGroupAlias);		
		for (;m_selectedUnique+1>m_downvisible && ga.rows.length>m_downvisible;) moveDown();
		//m_selectedUnique=null;
		if (m_selectedGroup!=null) {
			var tmpPortal=m_selectedPortal;	
//			if (tmpPortal=="MyFavorites") tmpPortal="Favorites";
			_SelectSection(tmpPortal,null);
			_SelectShortCutItem_new(m_selectedGroup,document.getElementById(tmpPortal).rows.length);  
		}
	}
}
 
function _TongueMoveItIn()
{
    if(m_SideMenuIFrame!=null && m_SideMenuIFrame.style.display=="block")
    {
        m_SideMenuIFrame.style.display = "none";
    }
	if (block.posLeft > SIDE_MENU_POS) 
	{ 
		if (block.posLeft>-50)	block.posLeft -= 30;
		else block.posLeft -= 7;
		block.left = block.posLeft;
		//m_SideMenuIFrame.style.left = block.left;
		setTimeout("_TongueMoveItIn()", m_menuDelay);
	}else
	{
		block.posLeft =SIDE_MENU_POS;
		
		_Tongue.src="../images/Tab_out02.gif";   
	}  
}
 
function _TongueMoveItOut()
{
 if (block.posLeft < 0) {
	if (block.posLeft<-50)	block.posLeft += 30;
	else block.posLeft += 7;
	block.left = block.posLeft;
	//m_SideMenuIFrame.style.left = block.left;
	setTimeout("_TongueMoveItOut()", m_menuDelay);
  }else
  {  
   block.posLeft=0;
   //m_SideMenuIFrame.style.left = block.left;
   _Tongue.src="../images/Tab_in02.gif";
   	if (m_curSection!=null && m_curSection.toLowerCase()=="search")
	document.getElementById("SearchPortal_input").focus();
  }
   if(m_SideMenuIFrame!=null)
   {
        m_SideMenuIFrame.style.left = block.left;
        m_SideMenuIFrame.width = SideMenu.offsetWidth-15;
        m_SideMenuIFrame.height = SideMenu.offsetHeight;
        m_SideMenuIFrame.style.zIndex = 10;
        m_SideMenuIFrame.style.display = "block";
   }
}

function A2ShowHideSearch(obj)
{
try{ 
	var objImg;
	var innerWindow = document.getElementById("_searchTop");
	if (innerWindow != null)
        innerWindow = innerWindow.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement;
    var menuDiv = document.getElementById("main_application_header");
    var scrollerDiv = document.getElementById("scrollerDiv");
    if (typeof(dataDiv) != "undefined")
	{
        //scrollerDiv.style.height =1;
        //dataDiv.style.height = 1;
    }
	try
	{
	    if( obj == null && document.getElementById("MainDiv")!=null)
	    {
	        obj = document.getElementById("btnShowHide");
	        var sShowMore = MainDiv.getAttribute("ShowMoreLess");
	        if( sShowMore != null && obj!=null)
	        {
	            m_show = sShowMore;
	        }
	        else
	        {
	            return;
	        }
	    }
		objImg=obj.firstChild.firstChild.firstChild.firstChild.nextSibling;
		if (objImg==null) objImg=obj;
		
	}catch(e){return}	
	var count = _searchTable.rows.length;
	if (count==2)
	{
		if (m_show)
		{
			_searchTable.rows(1).style.display = "";
			_TabSelectSearch.style.display = "";
// astea-trans=text;TXTASP$lessqbe_vx;N;
			objImg.innerText="Less";
			
		}
		else
		{
			_searchTable.rows(1).style.display = "none";
			_TabSelectSearch.style.display = "none";
// astea-trans=text;TXTASP$more_vx;N;
			objImg.innerText="More";
			
		}
	}
	else
	{
		if (m_show)
		{
			for (var i = 2; i < count; i++)
			{
				_searchTable.rows(i).style.display = "";
				_TabSelectSearch.style.display = "";
			}
// astea-trans=text;TXTASP$lessqbe_vx;N;
			objImg.innerText="Less";
		}else
		{
			for (var i = 2; i < count; i++)
			{
				_searchTable.rows(i).style.display = "none";
				_TabSelectSearch.style.display = "none";
			}
// astea-trans=text;TXTASP$more_vx;N;
			objImg.innerText="More";
		}
	}
	if(document.getElementById("MainDiv")!=null)
	{
        MainDiv.setAttribute("ShowMoreLess",m_show);
    }
	m_show = !m_show;
	if(document.getElementById("DataGridTable")!=null) document.getElementById("DataGridTable").Resize();
	return;
}catch(e){WriteError(e)}
finally
{
	if (typeof(dataDiv) != "undefined")
	{
        //var oParent = scrollerDiv.parentNode;
       // dataDiv.style.height = oParent.clientHeight-22;
       // scrollerDiv.style.height = oParent.clientHeight-22;
    }
//    var scrollerDiv = document.getElementById("scrollerDiv");
//    scrollerDiv.style.height =   document.getElementById('_TabControl').clientHeight - document.getElementById('_searchTop').clientHeight-20;
//    document.getElementById("mainDivContainer").style.height = scrollerDiv.style.height;
}
}

function AS_IsPaggingEnabled()
{
    try
    {
        if( document.getElementById("EditableGridPagging.js")!=null 
	        && (m_defaultPagingAmount>-1) 
	        && typeof(m_action)!="undefined" && m_action=="maint")
        {
	        return true;
        }
    }
    catch(err)
    {/*do nothing*/}
    return false;
}

function _addIncludes(xslDoc,addonchange){
	try
	{
		function AppendAlertSupport(doc)
		{
			try
			{
				//<script language="javascript" defer="true">
				//	<xsl:eval language="JavaScript">GetAlerts()</xsl:eval>
				//</script>
				var scriptElm = doc.selectSingleNode("//script[@id='xslalerts']");
				if(scriptElm == null )
				{
					scriptElm = doc.createElement("script");
					scriptElm.setAttribute("language","javascript");
					scriptElm.setAttribute("defer","true");
					scriptElm.setAttribute("id","xslalerts");
					var evalObj = scriptElm.appendChild(doc.createElement("xsl:eval"));
					
					evalObj.setAttribute("language","JavaScript");
					evalObj.text = "GetAlerts()";
					
					doc.selectSingleNode("//xsl:template").appendChild(scriptElm);
				}
			}
			catch(err)
			{/*do nothing*/}
		}
		if(AS_IsPaggingEnabled())
		{
			xslDoc = AddPagingInclude(xslDoc);
		}
		xslDoc = AS_FixLongSizeText(xslDoc);
		addonchange=typeof(addonchange)=="undefined"?true:addonchange;
		if (typeof(m_StateID)=="undefined") addonchange=false;
		if (xslDoc==null) return null;
		//AppendAlertSupport(xslDoc);
		var result=xslDoc;
		var ttt,doc,docNode,all,child;		
		var href,tmpScript;
		
		ttt=result.selectNodes("//x:include");	
		//if(ttt.length==0) return;
		doc = new ActiveXObject("MSXML2.DOMDocument");
		doc.async = false;
		var loadTest,loadElm;
		var docIncludes=document;
		var m_IncludesXSL = AO_GetPrimaryWindow().top.control_frame.m_IncludesXSL;
		var params = "";
		while (ttt.length>0){				
			for (i=0;i<ttt.length;i++){
				href=ttt[i].getAttribute("href");
				if (href!=null) href=href.trim();
				loadTest=false
				if(m_IncludesXSL[href] != null)
				{
					docNode = m_IncludesXSL[href];
					loadTest = true;
					if( typeof(docNode.documentElement) == "unknown")
					{
						loadTest=doc.load(href);
						docNode = doc.documentElement	
					}
				}
				else
				{
					loadTest=doc.load(href);
					docNode = doc.documentElement			
				}
                if(ttt[i].getAttribute("params")!=null)
				{
				    params+=ttt[i].getAttribute("params");
				}
				if(ttt[i].getAttribute("alterhref")!=null)
				{
				    var oIncludeNode = docNode.selectSingleNode("//x:include[@const $eq$ 'true']");
				    if( oIncludeNode != null )
				    {
				        oIncludeNode.setAttribute("href",ttt[i].getAttribute("alterhref"));
    			    }
				}
				var sExcludeIncludes = ttt[i].getAttribute("exclude");
                if(sExcludeIncludes!=null)
				{
				    sExcludeIncludes = "../includes_xsl/"+sExcludeIncludes+".xsl";
				    var oNode = docNode.selectSingleNode("//x:include[@href $eq$ '"+sExcludeIncludes+"']");
				    if(oNode!=null)
				    {
				        oNode.parentNode.removeChild(oNode);
				    }
				}
				if (loadTest){
					if(m_IncludesXSL[href] == null && ttt[i].getAttribute("alterhref")==null && params=="")
						m_IncludesXSL[href] = docNode.cloneNode(true);
					
					if (href.indexOf("format_include")>-1)					
					{
						var xslScript=docNode.selectSingleNode("//xsl:script[@id='formartFunctions']");
						if(xslScript!=null)
						{
							var scriptString = xslScript.text;						
							scriptString=scriptString.replace(/var m_dateOrder(.*)/gi,"var m_dateOrder='"+m_dateOrder+"';");
							scriptString=scriptString.replace(/var m_YearLength(.*)/gi,"var m_YearLength="+m_YearLength+";");
							scriptString=scriptString.replace(/var m_PortalName(.*)/gi,"var m_PortalName='"+_GetGlobalVar("PortalName")+"';");
							scriptString=scriptString.replace(/var m_numberFormat(.*)/gi,"var m_numberFormat='"+m_numberFormat+"';");
							scriptString=scriptString.replace(/var m_sep(.*)/gi,"var m_sep='"+m_sep+"';");
							xslScript.text=scriptString;
						}
					}		
					if (params!="" && href.indexOf("ao_includes")>-1)					
					{
					    var xslScript=docNode.selectSingleNode("//xsl:script");
					    var scriptString = xslScript.text;						
					    scriptString+=";"+params;
						xslScript.text=scriptString;
					}		
					if (href.indexOf("button_structure")>-1)
					{
						var text=ttt[i].getAttribute("text");
						if (text!=null)
						{
							var innerTD=docNode.selectSingleNode("//td[@class='imgText']");
							if (innerTD!=null) innerTD.text=text;
						}
						
					}
					all = docNode.childNodes;
					child = all.nextNode();

					while (child) {
						//ttt[i].parentNode.appendChild(child.cloneNode(true));				    
						ttt[i].parentNode.insertBefore(child.cloneNode(true),ttt[i]);				    
						child = all.nextNode();
					}			
					ttt[i].parentNode.removeChild(ttt[i]);
				}
			}
			ttt=result.selectNodes("//x:include");		
		}		
		doc=null;
		AS_SearchAndLoadDynamicListsInXSL(null,result);
		result=AS_ReadGridLayout(result);
		result=AS_ApplyDDLB(result);
		
		if (addonchange==false )return result;
	}
	catch(err)
	{/*do nothing*/}
	return _addOnChange(result,addonchange);
}

function AS_ApplyDDLB(xslDoc)
{	
	function CreateForEachNode(selectXpath,withSelected)
	{
		var forEachNode = xslDoc.createNode("element","xsl:for-each","http://www.w3.org/TR/WD-xsl")
		forEachNode.setAttribute("select",selectXpath);
		var optElm = xslDoc.createElement("option");
		forEachNode.appendChild(optElm);
		
		var attrNode = xslDoc.createNode("element","xsl:attribute","http://www.w3.org/TR/WD-xsl")
		attrNode.setAttribute("name","value");
		optElm.appendChild(attrNode);
		
		var valueOfNode = xslDoc.createNode("element","xsl:value-of","http://www.w3.org/TR/WD-xsl")
		valueOfNode.setAttribute("select","@data_value");
		attrNode.appendChild(valueOfNode);
		
		if( withSelected )
		{
			attrNode = xslDoc.createNode("element","xsl:attribute","http://www.w3.org/TR/WD-xsl")
			attrNode.setAttribute("name","SELECTED");
			optElm.appendChild(attrNode);
		}
		
		valueOfNode = xslDoc.createNode("element","xsl:value-of","http://www.w3.org/TR/WD-xsl")
		valueOfNode.setAttribute("select","@display_value");
		optElm.appendChild(valueOfNode);
		
		return forEachNode;
	}
	var ddlbCollection = xslDoc.selectNodes("//ApplyDDLB");
	if(ddlbCollection.length==0) return xslDoc;
	
	for(var index=0;index<ddlbCollection.length;index++)
	{
		var ddlbObj = ddlbCollection[index];
		var matchName = ddlbObj.getAttribute("name");
		var selectXpath = new String("//ddlb/{0}/entry[@data_value ${1}$ context()]");
		var _parentNode = ddlbObj.parentNode;
		var applyTemplateElm = _parentNode.appendChild(xslDoc.createNode("element","xsl:apply-templates","http://www.w3.org/TR/WD-xsl"));
		applyTemplateElm.setAttribute("select",matchName);
		_parentNode.removeChild(ddlbObj);
		
		var templateElm = xslDoc.createNode("element","xsl:template","http://www.w3.org/TR/WD-xsl");
		templateElm.setAttribute("match",matchName);
		
		templateElm.appendChild(CreateForEachNode(selectXpath.Format(selectXpath,matchName,"eq"),true));
		templateElm.appendChild(CreateForEachNode(selectXpath.Format(selectXpath,matchName,"ne"),false));
		
		xslDoc.documentElement.appendChild(templateElm);
	}
	return xslDoc;
}
//this function fix long text display in scroller xsl
function AS_FixLongSizeText(xslDoc)
{
	try
	{
		if(xslDoc.url.search(/scrl_xsl|portal_xsl/gi)==-1 || xslDoc.documentElement.getAttribute("Fixed")!=null) return xslDoc;
		var tdCollection = xslDoc.selectNodes("//table/xsl:for-each/tr/td[not(xsl:apply-templates) and (@class $eq$ 'readonly_grid_cell')]");
		if(tdCollection.length==0) return xmlDoc;
		var longStringTmpElm = xslDoc.selectSingleNode("//xsl:template/x:include[@href $eq$ '../includes_xsl/long_string.xsl']"); 
		var matchTemplate = (longStringTmpElm!=null&&longStringTmpElm.getAttribute("match")!=null)?longStringTmpElm.getAttribute("match"):"";
		
		for(var index=0;index<tdCollection.length;index++)
		{
			var tdElm = tdCollection[index];
			var rmvNode = tdElm.selectSingleNode("xsl:value-of");
			if(rmvNode==null || rmvNode.getAttribute("select").search(/desc|comment|name/gi)==-1) continue;
			var select = rmvNode.getAttribute("select");
			if(rmvNode!=null) tdElm.removeChild(rmvNode);
			var applyTemplateElm = tdElm.appendChild(xslDoc.createNode("element","xsl:apply-templates","http://www.w3.org/TR/WD-xsl"));
			applyTemplateElm.setAttribute("select",select);
			matchTemplate += (matchTemplate!=""?"|":"")+select;
		}
		
		if( longStringTmpElm == null && matchTemplate!="")
		{
			longStringTmpElm = xslDoc.createNode("element","xsl:template","http://www.w3.org/TR/WD-xsl");
			longStringTmpElm.setAttribute("match","");
			var includeObj = xslDoc.createNode("element","x:include","http://www.w3.org/1999/XML/xinclude");
			includeObj.setAttribute("href","../includes_xsl/long_string.xsl");
			longStringTmpElm.appendChild(includeObj);
			xslDoc.documentElement.appendChild(longStringTmpElm);
		}
		else
		{
			longStringTmpElm = longStringTmpElm.parentNode;
		}
		if(matchTemplate!="")
		{
			if(longStringTmpElm.getAttribute("match")!="")
			{
				matchTemplate = matchTemplate+"|"+longStringTmpElm.getAttribute("match");
			}
			longStringTmpElm.setAttribute("match",matchTemplate);
		}
		var formatInclude = xslDoc.selectSingleNode("//x:include[@href $eq$ '../includes_xsl/format_include.xsl']"); 
		if(formatInclude == null )
		{
			formatInclude = xslDoc.createNode("element","x:include","http://www.w3.org/1999/XML/xinclude");
			formatInclude.setAttribute("href","../includes_xsl/format_include.xsl");
			xslDoc.documentElement.appendChild(formatInclude);
		}
		xslDoc.documentElement.setAttribute("Fixed","true");
	}
	catch(err)
	{/*do nothing*/}
	return xslDoc;
}
function AS_ReadDOMGridLayout(obj)
{
    if(typeof(m_primaryXSL)=="undefined")
    {
        m_primaryXSL = document.all._scrollerXSL;
    }
    if(!AS_CanBeCustomized(m_primaryXSL)) return false;

	var table=obj.parentElement; 
	var tableWidth=table.offsetWidth;
	var tableCells=table.rows[0].cells;
	var elm,smallTableCells;
	var cellsWidth=new Array(),cellsTitles=new Array(),cellsLocation=new Array();
	var count=0, colsWithoutWidth=0;
	for (var i=0;i<tableCells.length;i++)
	{
		if (tableCells[i].width==null || tableCells[i].width=="") 
		{
			colsWithoutWidth++;
			cellsWidth[count]=-1;
		}
		else 
		{
			cellsWidth[count]=tableCells[i].width;
			tableWidth-=cellsWidth[count];
		}
		smallTableCells=tableCells[i].firstChild.rows[0].cells ;// the tr
		for (var j=0;j<smallTableCells.length;j++)
		{
			if (smallTableCells[j].className=="header_for_img_bg")
			{
				cellsLocation[count]=count+1;
				cellsTitles[count++]=smallTableCells[j].innerText;				
				break;
			}
			
			
		}
	}
	if (colsWithoutWidth>0)
	{
		var colsProxWidth=parseInt(tableWidth/colsWithoutWidth);
		for (var i=0;i<count;i++)
		{
			if (cellsWidth[i]==-1) 
				cellsWidth[i]=colsProxWidth;
		}
	}
	var tableArguments=new Array();
	tableArguments[0]=cellsWidth;
	tableArguments[1]=cellsTitles;
	tableArguments[2]=table.offsetWidth;
	
	tableArguments[3]=m_XSLLayout;
	/*
	tableArguments[0]=Array(100,200,300);
	tableArguments[1]=Array("Label 1","Label 2","Label 3");
	tableArguments[2]=600;
*/
	var num=25+Number(table.offsetWidth);
	var result=AO_ShowModalDialog("../includes/ResizableGrid.htm",tableArguments,"unadorned:yes;scroll:no;status:no;resizable:no;dialogWidth:"+num+"px;dialogHeight:160px;dialogLeft:140px");
	
	var str="";
	if (result==null) return;
	if (typeof(result)!="object")
		AS_WriteGridLayout(null,null)
	else
	{
		for (var i=0;i<cellsWidth.length;i++)
		{
			cellsWidth[i]=result[0][i];
			cellsLocation[i]=result[1][i];
		}
		//alert("AS_ReadDOMGridLayout:"+cellsLocation.join(","));
		//alert(cellsWidth.join(";"));
		AS_WriteGridLayout(cellsWidth,cellsLocation)
	}
	try
	{
		if (typeof(m_WindowType)!="undefined" && m_WindowType=="lookup")
		{
			
			_scrollerXSL.XMLDocument=AS_ReadGridLayout(_scrollerXSL.XMLDocument,true);			
			var strHTML = m_scrollerXML.transformNode(document.all._scrollerXSL.XMLDocument);
			
			//if (strHTML.length > 0) document.all._scroller.innerHTML = "<table width=100% height=100%><tr><td width=10px></td><td>"+strHTML+"</td></tr></table>";
			document.all._scroller.innerHTML=strHTML;		
		}
		else if ((typeof(m_StateID)=="undefined") && (typeof (m_BCName)!="undefined"))		
		{	
			//document.location.reload(true);	
			AO_GetPrimaryWindow().top.location.reload(true);			
	    }
		else	
		{
		    AO_ClearXSLCache();
			AO_GetPrimaryWindow().top.location.reload(true);
	    }
	}
	catch(e){
		document.location.reload(true);	
	}
}


// Floating Toolbar Functions - START
function AS_ReadDOMGridLayoutToolbar(tableHeaderNo,tableUniqueID)
{
	var i = 0;
	var tblObject  ;
	if (tableUniqueID!=null)
		tblObject=document.getElementById(tableUniqueID);
	else
		tblObject= document.getElementsByTagName("TABLE");
	
	if(tblObject.length > 1)
	{
		for(i=0; i<tblObject.length; i++)
		{
			if (tblObject[i].rows==null || tblObject[i].rows.length==0) break;
			if(tblObject[i].rows(0).className == "tr_grid_header")
			{
				if(parseInt(tableHeaderNo) == 0)
				{
					AS_ReadDOMGridLayout(tblObject[i].rows(0));
					return;
				}
				else
				{
					if(parseInt(tblObject[i].rows(0).header_no) == parseInt(tableHeaderNo))
					{
						AS_ReadDOMGridLayout(tblObject[i].rows(0));
						return;
					}
				}
			}
		}
	}
	else
	{
		if(tblObject.rows(0).className == "tr_grid_header")
		{
			if(parseInt(tableHeaderNo) == 0)
			{
				AS_ReadDOMGridLayout(tblObject.rows(0));
				return;
			}
			else
			{
				if(parseInt(tblObject.rows(0).header_no) == parseInt(tableHeaderNo))
				{
					AS_ReadDOMGridLayout(tblObject.rows(0));
					return;
				}
			}
		}
	}
}

function AS_OpenToolBar(obj)
{
	var elm=document.getElementById("resizeTool");
		//alert(screen.width-40);
	if (elm!=null)
	{
		elm.style.top=this.event.clientY-25;
		elm.style.display = "block";
		if (event.clientX > screen.width-50) elm.style.left=this.event.clientX-35;
		else elm.style.left=this.event.clientX+15;
		
		if(typeof(obj.header_no) != "undefined")
		{
			document.getElementById("resizeToolTD").header_no = obj.header_no;
			
		}
		document.getElementById("resizeToolTD").unique_id = obj.parentElement.parentElement.uniqueID;
	}
}

function AS_CloseToolBar()
{
	var elm=document.getElementById("resizeTool");
	if (elm!=null)
	{
		elm.style.display = "none";
	}
}
// Floating Toolbar Functions - End
function AS_GetLayoutId(xslDoc)
{
    var preffix = "";    
    if(xslDoc==null) return preffix;
    try
    {
        var oElement = xslDoc.selectSingleNode("//layout_condition");
        if(oElement != null )
        {
            var xpath = oElement.getAttribute("xpath");
            var oNode = m_primaryXML.selectSingleNode(xpath);
            preffix = oNode.text;
        }
    }
    catch(err)
    {/*do nothing*/}
    return preffix;
}

function AS_CanBeCustomized(xslDoc)
{
    var result = false;
    if(xslDoc==null) return true;
    try
    {
        result = xslDoc.selectNodes("//tr[@class $eq$ 'tr_grid_header']").length==1 || xslDoc.selectSingleNode("//layout_condition")!=null;
    }
    catch(err)
    {/*do nothing*/}
    return result;
}

function AS_WriteGridLayout(cellsWidth,cellsLoc)
{
	var cacheElement=document.getElementById("Grid_Layout_Data");
	if (cacheElement==null){
		alert("cacheElement is null");
		 return ;
	}
	var fileID="";
	
	if (typeof(m_XSLURL)!="undefined" && m_XSLURL!="")
		fileID=m_XSLURL;	
	if (typeof(m_WindowType)!="undefined" && m_WindowType=="lookup")
	{		
		fileID=document.all._scrollerXSL.title;
	}
	if (fileID==null || fileID=="" && m_primaryXSL!=null)
	{ 
		fileID=m_primaryXSL.url;
    }
	if (fileID==null || fileID=="")
		fileID=m_currentAlias;
	if (fileID==null  || fileID=="")
		return ;	
	fileID=String.prototype.Format("{0}{1}",fileID,AS_GetLayoutId(m_primaryXSL));
	var cacheLayoutXML=cacheElement.XMLDocument;
	
	//root->layout->field names/field Length/field location->	
	var strXML="<root><layout>";
	if (cellsWidth!=null && cellsLoc!=null)
	{
		var fieldsNames, fieldsLength,fieldsLocation;
		strXML+="<fields_names/>"+"<fields_length>"+cellsWidth.join(",")+"</fields_length>";
		strXML+="<fields_location>"+cellsLoc.join(",")+"</fields_location>";
	}
	strXML+="</layout></root>";
	cacheLayoutXML.loadXML(strXML);
	var sLayoutID = _GetPageName(fileID)+"_layout";
	cacheElement.save(sLayoutID);
	_RemoveGlobalVar(sLayoutID);
	return;
}

function AS_ReadGridLayout(xslDoc,ignoreReplaced)
{
	try
	{	
		if (xslDoc==null) return null;
		var headerClassFound=xslDoc.selectNodes("//tr[@class $eq$ 'tr_grid_header']");
		var count=headerClassFound.length;
		if (count==0) return xslDoc;
		var cacheElement=document.getElementById("Grid_Layout_Data");
		if (cacheElement==null) return xslDoc;
		var fileID="";
		fileID=String.prototype.Format("{0}{1}",xslDoc.url,AS_GetLayoutId(xslDoc));;
		if ((fileID==null || fileID=="") && typeof(m_XSLURL)!="undefined" && m_XSLURL!="")
		{
			fileID=m_XSLURL;
	    }
		if (typeof(m_WindowType)!="undefined" && m_WindowType=="lookup")
		{			
			fileID=document.all._scrollerXSL.title;
		}						
		if (fileID==null || fileID=="")
			fileID=m_currentAlias;
		if (fileID==null  || fileID=="")
			return xslDoc;
			
		var sLayoutID = _GetPageName(fileID)+"_layout";
		cacheElement.load(sLayoutID);
		var cacheLayoutXML=cacheElement.XMLDocument;
		//root->layout->field names/field Length/field location->
		var layout=cacheLayoutXML.selectSingleNode("/root/layout");
		if( typeof(_GetGlobalVar(sLayoutID))!="undefined" && _GetGlobalVar(sLayoutID)==true) return xslDoc;
		
		var fieldsNames, fieldsLength,fieldsLocation;
		if (layout!=null)
		{
			fieldsNames=layout.selectSingleNode("fields_names");		
			fieldsLength=layout.selectSingleNode("fields_length");
			fieldsLocation=layout.selectSingleNode("fields_location");
			
			if (fieldsNames!=null && fieldsLength!=null && (fieldsNames+fieldsLength!="")  ) 
			{
				//alert("AS_ReadGridLayout:"+fieldsLocation.text);	
				fieldsNames=fieldsNames.text.split(",");
				fieldsLength=fieldsLength.text.split(",");
				m_XSLLayout=fieldsLocation.text;
				fieldsLocation=fieldsLocation.text.split(",");
				
				xslDoc=AS_SetGridLayout(xslDoc,fieldsNames,fieldsLength,fieldsLocation,ignoreReplaced);
				_SetGlobalVar(sLayoutID,true);
			}
			else
			{
			    m_XSLLayout=null;
			}
		}
		else
		{
		    m_XSLLayout=null;
		}
	}
	catch(err)
	{
	    m_XSLLayout=null;
		return xslDoc;
	}
	return xslDoc;
}

function AS_SetGridLayout(xslDoc,fieldsNames,fieldsLength,fieldsLocation,ignoreReplaced)
{
    function GetHeaderClass(len,headerXPath)
    {
        var oElement = xslDoc.selectSingleNode("//layout_condition");
        var oBaseElement = xslDoc;
        if(oElement != null )
        {
            try
            {
                var xpath = oElement.getAttribute("xpath");
                var filter = oElement.text;
                var oNode = m_primaryXML.selectSingleNode(xpath);
                filter = String.prototype.Format(filter,oNode.text);
                oBaseElement = xslDoc.selectSingleNode("//"+filter);
            }
            catch(err)
            {/*do nothing*/}
        }
        var headerClass = oBaseElement.selectSingleNode(headerXPath);	
	    return headerClass;
    }
	var len=fieldsLocation.length;	
	var headerClass = GetHeaderClass(len,".//tr[@class $eq$ 'tr_grid_header']");
	if(headerClass==null) return xslDoc;
	if (ignoreReplaced==null || ignoreReplaced!=true)	
		if (headerClass.getAttribute("replaced")=="true") return xslDoc;
	var headerChilds=headerClass.selectNodes("td");
	var TDElements=headerClass.selectNodes("//td[@class $eq$ 'header_for_img_bg']");
	var count=headerChilds.length;
	var TDElement, TDWidthElement;
	var orderArray=new Array();//sort by the order
	for (var i=0;i<len;i++)
	{
		for (var j=0;j<len;j++)
		{
			if (fieldsLocation[j]==i+1) break
		}
		if (j!=len)
		{
		//fieldsLocation[i]=fieldsLocation[i]+";"+i;
			orderArray[j]=i;
		}
		else return xslDoc;
	}
	
	var loc,order;
/*
	for (var i=0;i<fieldsLocation.length;i++) 
	{
		fieldsLocation[i]=fieldsLocation[i].split(";");	
		loc=fieldsLocation[i][1];
		order=fieldsLocation[i][0];
		orderArray[loc]=order;
	}
*/	
	
	var xmlObj=new ActiveXObject("microsoft.xmldom");
	xmlObj.loadXML('<xsl:stylesheet xmlns:xsl=\"uri:xsl\" xmlns:x=\"http://www.w3.org/1999/XML/xinclude\"><tr class=\"tr_grid_header\" replaced=\"true\"></tr></xsl:stylesheet>');
	for (var i=0;i<count;i++)
	{
		loc=orderArray[i];// the row in the i-th place...		
		//alert("loc:"+loc+"\n"+headerChilds[loc].xml+"\n"+headerChilds[i].xml);
		//alert(headerChilds[loc].xml);
		xmlObj.selectSingleNode("/xsl:stylesheet/tr").appendChild(headerChilds[loc].cloneNode(true));
		
	}
	headerClass.parentNode.replaceChild(xmlObj.selectSingleNode("/xsl:stylesheet/tr"),headerClass);
	headerClass=GetHeaderClass(len,".//tr[@class $eq$ 'tr_grid_header']");	
	var headerChilds=headerClass.selectNodes("td");
	var count=headerChilds.length;
	for (var i=0;i<count;i++)
	{		
		if (fieldsLength[i]==null) continue;
		//the last cells should get width
//		if (i==count-1)
//			headerChilds[i].setAttribute("width","");									
//		else
			headerChilds[i].setAttribute("width",fieldsLength[i]+"px");	
		
	}
	var rowsTable=GetHeaderClass(len,".//table/xsl:for-each//tr[@class $eq$ 'editable_grid_row']");

	if (rowsTable!=null)
	{
	    var sXPath = "*[nodeName() $eq$ 'td' or nodeName() $eq$ 'xsl:choose' or nodeName() $eq$ 'xsl:if']";
		xmlObj.loadXML('<xsl:stylesheet xmlns:xsl=\"uri:xsl\" xmlns:x=\"http://www.w3.org/1999/XML/xinclude\">'+
			rowsTable.xml+'</xsl:stylesheet>');
		TDElements=xmlObj.selectNodes(String.prototype.Format("/xsl:stylesheet/tr/{0}",sXPath));
		count=TDElements.length;
		for (var i=count-1;i>=0;i--)
		{
			TDElements[i].parentNode.removeChild(TDElements[i]);
		}
		TDElements	=rowsTable.selectNodes(sXPath);		
		for (var i=0;i<count;i++)
		{
			loc=orderArray[i];// the row in the i-th place...		
			
			xmlObj.selectSingleNode("/xsl:stylesheet/tr").appendChild(TDElements[loc].cloneNode(true));
			
		}
		rowsTable.parentNode.replaceChild(xmlObj.selectSingleNode("/xsl:stylesheet/tr"),rowsTable);		
		rowsTable=GetHeaderClass(len,".//table/xsl:for-each//tr");;	
		TDElements	=rowsTable.selectNodes(sXPath);
		count=TDElements.length;
		for (var i=0;i<count;i++)
		{		
			if (fieldsLength[i]==null) continue;
			var sWidth = "";
			if (i==count-1)
			    sWidth = "";					
			else if (i==0)
				sWidth = fieldsLength[i]-2+"px";							
			else
				sWidth = fieldsLength[i]-1+"px";			
		    var nodeCollection = TDElements[i].selectNodes(".//td|.[nodeName() $eq$ 'td']");		
		    for(var index=0;index<nodeCollection.length;index++)
		    {
		        nodeCollection[index].setAttribute("width",sWidth);	
		    }							
		}		
		
	}
	return xslDoc;
	
}

function _addOnChange(xslDoc)
{
	try
	{
		if ( AS_GetPagePermission(null,"modify")=="true")
		{
			xslDoc=_AddTableScrl(xslDoc);
			var xslOnChangeAttribute = new ActiveXObject("MSXML2.DOMDocument")
			xslOnChangeAttribute.async = false
			var xslonbeforedeactivate = new ActiveXObject("MSXML2.DOMDocument")
			xslonbeforedeactivate.async = false

			xslonbeforedeactivate.loadXML("<xsl:attribute name='onbeforedeactivate' xmlns:xsl='uri:xsl'>return(AO_ItemBeforedeactivate(this,<xsl:value-of select='@number'/>-1))</xsl:attribute>")

			xslOnChangeAttribute.loadXML("<xsl:attribute name='onchange' xmlns:xsl='uri:xsl'>return(ItemChange(this,<xsl:value-of select='@number'/>-1))</xsl:attribute>")

			var elementsToFix = xslDoc.selectNodes("//input|//textarea|//select")
			var xslElement ;
			for (var i=0; i< elementsToFix.length; i++){
				xslElement = elementsToFix[i];		
				if(!xslElement.getAttribute("onchange") && xslElement.selectNodes("xsl:attribute[@name='onchange']").length == 0){		
							xslElement.insertBefore(xslOnChangeAttribute.firstChild.cloneNode(true), xslElement.firstChild)
							xslElement.insertBefore(xslonbeforedeactivate.firstChild.cloneNode(true), xslElement.firstChild)
				}		
			}
		}
		xslOnChangeAttribute = null;
		xslDoc=_CheckDisable(xslDoc);	
	}
	catch(err)
	{/*do nothing*/}
	return xslDoc;
}


function AS_GetBCPermission(action)
{
	var lockingPerson=AS_RecordIsLocked();
	if (lockingPerson!="" && action != "new") return "false";
	
	if (action==null) action="Modify";
	else action=""+action;
	action=action.charAt(0).toUpperCase()+action.substr(1);
	//Access="true" New="false" Delete="false" Modify="true"
	//	if (m_BCName.toLowerCase()=="warehouse") return "false"; //just a test !!!
	if ((typeof(m_modulePermissions)!="undefined") &&  (m_modulePermissions!=null) && 
		(typeof(m_modulePermissions[action])!="undefined"))
		return String(m_modulePermissions[action]).toLowerCase();
	
	return "true";
}

//get report permission
function AS_GetReportPermission(action,reportName)
{
	if((typeof(m_ReportParams) == "undefined" || ((m_ReportParams instanceof Array) && m_ReportParams.length==0) ||
		typeof(m_ReportParams[0]) == "undefined" || ((m_ReportParams[0] instanceof Array) && m_ReportParams[0].length==0)) && typeof(reportName)=="undefined") return "false";
	
	reportName = typeof(reportName)=="undefined"?m_ReportParams[0][0]:reportName;
	var reportPermissions = m_ControlFrame.m_modulePermissions[reportName];
	if (action==null) action="Access";
	else action=""+action;
	action=action.charAt(0).toUpperCase()+action.substr(1);
	
	if( reportPermissions == null || (reportPermissions!=null && typeof(reportPermissions.Access)=="unknown"))
	{
		var moduleName = SOAP_GetReportModuleName(reportName);
		moduleName = "reports_qbe_asp/"+moduleName+".asp";
		if( moduleName == null || moduleName == "") return "true";
		var permissionsXML = SOAP_GetPermissionsXML(moduleName,m_BCName);
		if(permissionsXML != null)
		{
			var objPermissionsXML = new ActiveXObject("MSXML2.DOMDocument");
			objPermissionsXML.async=false;

			objPermissionsXML.loadXML(permissionsXML)

			var moduleXML = objPermissionsXML.selectSingleNode("/Module")
			var pagesArr = moduleXML.getAttribute("modulePages").split(",")

			var reportPermissions = new Array()
			reportPermissions["Access"] = (moduleXML.getAttribute("Access") == "true")
			reportPermissions["Modify"] = (moduleXML.getAttribute("Modify") == "true")
			reportPermissions["Delete"] = (moduleXML.getAttribute("Delete") == "true")
			reportPermissions["New"] = (moduleXML.getAttribute("New") == "true")
			
			m_ControlFrame.m_modulePermissions[reportName] = reportPermissions;
		}
	}
	if( reportPermissions != null )
		return String(reportPermissions[action]).toLowerCase();
	else
		return "true";
}

function AS_RecordIsLocked()
{
	if (m_LockingPerson!="")
	{
	    if(typeof(m_lockEnabled) != "undefined" && m_lockEnabled == false) return "";
	    return m_LockingPerson;
	}
	if (typeof(m_primaryXML)=="undefined" || m_primaryXML==null) return "";
	var HoldingUser=m_primaryXML.selectSingleNode("/root/@HoldingUser");
	if (HoldingUser!=null && HoldingUser!=null) 
	{
		
		m_LockingPerson=HoldingUser.text;
		if(m_LockingPerson!="" && (typeof(m_lockEnabled) != "undefined" && m_lockEnabled == false)) return "";
		return m_LockingPerson;
	}
	return "";
}

function AS_TreatUIPermissions(xrefPageName)
{
	var UIelements=new Array();
	var elm;
	if ((typeof(m_moduleUIPermissions)!="undefined") && m_moduleUIPermissions!=null)
	{
		for (var elmID in m_moduleUIPermissions)
		{
			if (m_moduleUIPermissions[elmID]) continue;
			elm=document.getElementById(elmID);
			if (elm==null) continue;
			var clsName=""+ elm.className;
			if (clsName.toLowerCase()=="clstoolbaritem")
				AO_SetMenuButton("disabled",elmID)
			else
			{	
				__EnableElement(elm,elm.tagName.toLowerCase());
				__DisableElment(elm,elm.tagName.toLowerCase());
				var lupElm=document.getElementById(elmID+"_lup");
				if (lupElm!=null)
				{
					__EnableElement(lupElm,lupElm.tagName.toLowerCase());
					__DisableElment(lupElm,lupElm.tagName.toLowerCase());
				}				
			}
		}
	}
	if ((typeof(m_pagesUIPermissions)!="undefined") && m_pagesUIPermissions!=null && m_pagesUIPermissions[xrefPageName]!=null)
	{
		for (var elmID in m_pagesUIPermissions[xrefPageName])
		{
			if (m_pagesUIPermissions[xrefPageName][elmID]) continue;
			elm=document.getElementById(elmID);
			if (elm==null) continue;
			var clsName=""+ elm.className;
			if (clsName.toLowerCase()=="clstoolbaritem")
				AO_SetMenuButton("disabled",elmID)
			else
			{	
				__EnableElement(elm,elm.tagName.toLowerCase());
				__DisableElment(elm,elm.tagName.toLowerCase());
				var lupElm=document.getElementById(elmID+"_lup");
				if (lupElm!=null)
				{
					__EnableElement(lupElm,lupElm.tagName.toLowerCase());
					__DisableElment(lupElm,lupElm.tagName.toLowerCase());
				}				
			}
		}
	}
}

//check permissions for specified element id
function AS_CheckPageUIPermissions(xrefPageName,elementID)
{
	if ((typeof(m_pagesUIPermissions)!="undefined") && m_pagesUIPermissions!=null && m_pagesUIPermissions[xrefPageName]!=null)
	{
		for (var elmID in m_pagesUIPermissions[xrefPageName])
		{
			if (m_pagesUIPermissions[xrefPageName][elmID]) continue;
			if(elmID==elementID) return false;
		}
	}
	return true;
}

function AS_GetPagePermission(pageAlias,action)
{
//m_pagesPermissions[pageAlias][key]

	try
	{

		if (typeof(m_action)!="undefined")
		{
			if (action==null) action="Modify";
			else action=""+action;
			action=action.charAt(0).toUpperCase()+action.substr(1);
			
			var lockingPerson=AS_RecordIsLocked();
			if (lockingPerson!="" && action!="Access") return "false";		
			if (pageAlias==null) pageAlias=m_currentAlias;
		
	//		if (pageAlias.toLowerCase().indexOf("address")!=-1) 
	//		{
	//			return "view"; //just a test !!!
	//		}
	//		if (pageAlias.toLowerCase().indexOf("order")!=-1) 
	//		{
	//			return "deny"; //just a test !!!
	//		}		
			if ((typeof(m_pagesPermissions)!="undefined") && (m_pagesPermissions!=null) && (typeof(m_pagesPermissions[pageAlias])!="undefined"))
			{
				if (action=="Modify")
					if (AS_GetBCPermission(action)=="true")
						return String(m_pagesPermissions[pageAlias][action]).toLowerCase();
					else return "false"
				else return String(m_pagesPermissions[pageAlias][action]).toLowerCase();
				
			}
		}
	}
	catch(e)
	{
		return "true";
	}

	return "true";
}

function AS_ShouldPageBeDisabled(xslDoc,must_check) 	//ASAP #IL0406020025
{
    if(AO_IsConnectedWindow()) return;
	var disableComment;
	var disablePage;
	if (must_check==null) must_check=false;
	if (AS_GetPagePermission(null,"modify")=="true")
	{
		disableComment=xslDoc.selectSingleNode("//xsl:comment[@id='disable_request']");		
		if (disableComment==null) 
		{	
			if (!must_check) return xslDoc;		
			else disablePage=false;
		}			
		if (disableComment!=null)		
			disablePage=disableComment.selectSingleNode("disable_page");		
		if (disablePage!=null)disablePage=AO_CheckDisablePage(m_currentAlias);	
		else disablePage=false;
	}
	else disablePage=true;
	if (disablePage) return true;
	
	
	if (disableComment!=null)
	{
		if (!disablePage)
		{
			var blnDisableGroup,groupName;		
			var disableGroupsCol=disableComment.selectNodes("disable_groups/group");
			for (var i=0;i<disableGroupsCol.length;i++){
				groupName=""+disableGroupsCol[i].text;
				if (groupName=="") continue;
				blnDisableGroup=AO_CheckDisableGroup(m_currentAlias,groupName);
				if (blnDisableGroup) return true;
				else
				{
					if (xslDoc.selectNodes("//x:ao_group[(@id='"+groupName+"')]//*[(@old_onclick)]").length>0)
					{
						return true;
					}
				}
			}
		}
	}
	return false;
}


function _CheckDisable(xslDoc,must_check){	
	try
	{
		var disableComment;
		var disablePage;
		if (must_check==null) must_check=false;
		if (AS_GetPagePermission(null,"modify")=="true" && !AO_IsConnectedWindow())
		{
			disableComment=xslDoc.selectSingleNode("//xsl:comment[@id='disable_request']");		
			if (disableComment==null) 
			{	
				if (!must_check) return xslDoc;		
				else disablePage=false;
			}			
			if (disableComment!=null)		
				disablePage=disableComment.selectSingleNode("disable_page");		
			if (disablePage!=null)disablePage=AO_CheckDisablePage(m_currentAlias);	
			else disablePage=false;
		}
		else disablePage=true;
		
		xslDoc=AO_DisablePageXSL(xslDoc,disablePage);
		
		if (disableComment!=null)
		{
			if (!disablePage)
			{
				var blnDisableGroup,groupName;		
				var disableGroupsCol=disableComment.selectNodes("disable_groups/group");
				for (var i=0;i<disableGroupsCol.length;i++){
					groupName=""+disableGroupsCol[i].text;
					if (groupName=="") continue;
					blnDisableGroup=AO_CheckDisableGroup(m_currentAlias,groupName);
					if (blnDisableGroup) xslDoc=AO_DisableGroupXSL(xslDoc,groupName);
					else
					{
						if (xslDoc.selectNodes("//x:ao_group[(@id='"+groupName+"')]//*[(@old_onclick)]").length>0)
						{
							xslDoc=AO_DisableGroupXSL(xslDoc,groupName,false);
						}
					}
				}
			}
		}
	}
	catch(err)
	{/*do nothing*/}
	return xslDoc;
}

 function __EnableElement(elm,tag){
	var old_disabled,old_readonly,fldStyle,elmNodeName;
	with(elm){
		if (tag=="table")
		{
			if (getAttribute("old_onclick")==null) return;
			var oTd = null;
			if(typeof(elm.selectSingleNode) != "undefined")
			{
			    oTd = elm.selectSingleNode("//td[@class = 'readonly_grid_main_cell']");
			}
			else
			{
			    var oCollection = elm.getElementsByTagName("TD");
			    for(var index=0;index<oCollection.length;index++)
			    {
			        if(oCollection[index].className == "readonly_grid_main_cell")
			        {
			            oTd = oCollection[index];
			            break;
			        }
			    }
			}
			if( oTd != null )
			{
			    oTd.setAttribute("class","readonly_grid_main_cell");
			    oTd.removeAttribute("old_class");
			}
			var onclick, onselectstart;
			onclick=""+getAttribute("old_onclick");
			onselectstart=""+getAttribute("old_onselectstart");
			setAttribute("onclick",onclick);
			setAttribute("onselectstart",onselectstart);
			removeAttribute("old_onclick");
			removeAttribute("old_onselectstart");
		}	
		old_disabled=""+getAttribute("old_disabled");						
		old_readonly=""+getAttribute("old_readonly");
		if (old_disabled=="true"  ) 
		{
			setAttribute("disabled",old_disabled);
		}
		else removeAttribute("disabled");
		if(getAttribute("is_disabled")!=null)removeAttribute("is_disabled");
		if (old_readonly=="true") setAttribute("readOnly",old_readonly);
		else removeAttribute("readOnly");
		removeAttribute("old_disabled");
		removeAttribute("old_readonly");
		fldStyle=getAttribute("style");		
		
		if (fldStyle){		
			if (typeof(fldStyle)=="string"){
				if (fldStyle.match(/background-color\:.*\;|$/ig))
					fldStyle=fldStyle.replace(/background-color\:transparent/ig,";");								
				else fldStyle=";";
				setAttribute("style",fldStyle);		
			}
			else if (typeof(fldStyle)=="object")
				fldStyle.backgroundColor="";
		}
		if (tag==null)
		{
			elmNodeName=getAttribute("nodeName");
			if (elmNodeName!=null && elmNodeName!=undefined)tag=elmNodeName;
		}
	}
	if (tag=='td') 
	{
		var cls="className";
		fldStyle=""+elm.getAttribute(cls);	
		if (fldStyle=="null") {
			cls="class";
			fldStyle=""+elm.getAttribute(cls);	
		}

		if (fldStyle=="disCalendar1"){
			fldStyle="btnCalendar1"	
			elm.setAttribute(cls,fldStyle);
		}
		if (fldStyle=="disLookup1"){
			fldStyle="btnLookup1"	
			elm.setAttribute(cls,fldStyle);
		}							
		if (fldStyle=="disTime1"){
			fldStyle="btnTime1"	
			elm.setAttribute(cls,fldStyle);
		}															
	}
	fldStyle=""+elm.getAttribute("style");		
	if (fldStyle.indexOf(m_disableElementFilter)>-1)
	{
		fldStyle=fldStyle.replace(m_disableElementFilter,"");	
		elm.setAttribute("style",fldStyle);				
	}
}

///<summary>
///__DisableElment disables elements on screen by there types.
///</summary>
/// <param name="elm">[required]a reference to the element to disable</param>
/// <param name="tag">[required]the HTML tag of the scope surrounding the element</param>
function __DisableElment(elm,tag){
    
	var old_disabled,old_readonly,fldStyle;
	try{
		DisableElment_local(elm,tag);
		return;
	}catch(e){/**/}	
	with(elm){
		if (tag=="label") return;
		if (getAttribute("id")!=null)
		{ 
			if (AS_GetPagePermission(null,"modify")=="false")
			{
				if (getAttribute("id").indexOf("_qbe")>-1) return;
				else if (getAttribute("id").indexOf("line_btn_zoom_butt")>-1) return;

			}
		}
		if (getAttribute("ao_readonly")=="no") return;
		if (""+getAttribute("old_disabled")=="true" || ""+getAttribute("old_readonly")=="true") return;	
		//handle table elements	
		if (tag=="table")
		{
			var oTd = null;
			if(typeof(elm.selectSingleNode) != "undefined")
			{
			    oTd = elm.selectSingleNode("//td[@class = 'readonly_grid_main_cell']");
			}
			else
			{
			    var oCollection = elm.getElementsByTagName("TD");
			    for(var index=0;index<oCollection.length;index++)
			    {
			        if(oCollection[index].className == "readonly_grid_main_cell")
			        {
			            oTd = oCollection[index];
			            break;
			        }
			    }
			}
			if( oTd != null )
			{
			    oTd.setAttribute("class","readonly_grid_cell");
			    oTd.setAttribute("old_class","readonly_grid_main_cell");
			}
			var old_onclick, old_onselectstart;
			old_onclick=""+getAttribute("onclick");
			old_onselectstart=""+getAttribute("onselectstart");
			setAttribute("old_onclick",old_onclick);
			setAttribute("old_onselectstart",old_onselectstart);
			setAttribute("onselectstart","");
			setAttribute("onclick","");
			return;
		}
		//handle onclick attribute
		if (getAttribute("onclick")!=null)
		{
			if (getAttribute("onclick").toString().indexOf("AO_Sort")>-1) return;	
		}

		old_disabled=""+getAttribute("disabled");						
		old_readonly=""+getAttribute("readOnly");			
		if (old_disabled!="null" || old_readonly!="null") {
			if (old_disabled!="false" && old_readonly!="false")
			return;
		}
		setAttribute("old_disabled",old_disabled);
		setAttribute("old_readonly",old_readonly);					
	    //handle the apperance of no input elements dhtml elements
	    //set the disable attribute
		if (tag!="input" && tag!="textarea" && tag!="select")
		{	
			setAttribute("disabled","true");
			fldStyle=getAttribute("style");		
		    if (fldStyle){
			    if (typeof(fldStyle)=="string"){
				    if (fldStyle.match(/background-color\:.*\;|$/ig))
						    fldStyle=fldStyle.replace(/background-color\:.*\;|$/ig,";background-color:transparent;");
					    else fldStyle+=";background-color:transparent;";	
				    setAttribute("style",fldStyle);						
			    }
			    else if (typeof(fldStyle)=="object")
				    fldStyle.backgroundColor="transparent";
		    }
		    else setAttribute("style","background-color:transparent");		
		}
		else if((tag=="select") || (getAttribute("type")=="checkbox"))
		{
		    setAttribute("disabled","true");		
		}
		else if ((getAttribute("type")==null) || (getAttribute("type")=="text" ) || (getAttribute("type")=="textarea" ))
		{
			setAttribute("is_disabled","true");		
		}
		
		setAttribute("readOnly","true");
		
	}
	//alert(tag);
	fldStyle=elm.getAttribute("style");		
	fldStyle+=m_disableElementFilter;
	elm.setAttribute("style",fldStyle);												
	
    //handle the appernace of TD elemenents
	if (tag=='td') 
	{
		var cls="className";
		fldStyle=""+elm.getAttribute(cls);	
		if (fldStyle=="null") {
			cls="class";
			fldStyle=""+elm.getAttribute(cls);	
		}
		fldStyle=fldStyle.toLowerCase();
		if ((AS_GetPagePermission(null,"modify")=="false") && ((elm.getAttribute("id")==null) || (elm.getAttribute("id")=="")) &&
			(fldStyle=="btncalendar1" || fldStyle=="btnlookup1" || fldStyle=="btntime1") )
		{
			var prevElm=elm.previousSibling;
			if (prevElm!=null)
			{
				var inpElm=prevElm.all;
				if (inpElm==null) inpElm=prevElm.childNodes;
				if (inpElm!=null) 
				{
					if (inpElm.length==null)
					{
						if (inpElm.getAttribute("id")!=null && inpElm.getAttribute("id").indexOf("_qbe")>-1) 
						{
							
							elm.removeAttribute("disabled");	
							elm.removeAttribute("readOnly");	
							return;
						}			
					}		
					else
					{
						for (var i=0;i<inpElm.length;i++)
						{						
							if (inpElm[i].getAttribute("id")!=null && inpElm[i].getAttribute("id").indexOf("_qbe")>-1) 
							{
								elm.removeAttribute("disabled");	
								elm.removeAttribute("readOnly");	
								return;
							}			
						}
					}
				}
			}	
								
		}		
		//handle the apperance of general elements
		if (fldStyle=="btncalendar1"){
			fldStyle="disCalendar1"	
			elm.setAttribute(cls,fldStyle);
		}
		if (fldStyle=="btnlookup1"){
			fldStyle="disLookup1"	
			elm.setAttribute(cls,fldStyle);
		}			
		if (fldStyle=="btntime1"){
			fldStyle="disTime1"	;
			elm.setAttribute(cls,fldStyle);
		}			
		if (fldStyle.toLowerCase().indexOf("hotlink")>-1)
			elm.removeAttribute("disabled");		
		else if (fldStyle.toLowerCase().indexOf("xref_tab")>-1 && 
		    (AS_GetPagePermission(null,"modify")=="false" || AO_IsConnectedWindow()))		
			elm.removeAttribute("disabled");		
	}
}

function AO_DisableGroupDOM(pageAlias,groupName,disable){

	var i,elm,tn,pageDOM,groupDOMCol,count=0,checkGroup;	
	if (pageAlias==null)pageDOM =document;
	else pageDOM=document.all[pageAlias];		
	if (pageDOM==null|| pageDOM.length!=null) return false;	
	if (groupName==null) groupDOMCol=pageDOM.all;
	else groupDOMCol=pageDOM.all[groupName];
	if (groupDOMCol==null) return false;
	if (groupDOMCol.length==null && groupDOMCol.id!=groupName) return false;
	if (groupDOMCol.length==null) groupDOMCol.length=1;
	for (count=0;count<groupDOMCol.length;count++){	
		checkGroup=groupDOMCol[count]
		if (checkGroup==null)checkGroup=groupDOMCol;
		if (checkGroup.tagName.toLowerCase()!="ao_group")continue;		
		elms=checkGroup.all;		
		for (i=0;i<elms.length;i++){
			elm=elms[i];
			tn=elm.tagName.toLowerCase();
			if (disable){
				if (tn=="input" || tn=="select" || tn=="textarea" || tn=="button" || elm.onclick!=null || elm._onclick!=null){					
					__DisableElment(elm,tn)
				}
			}else {
				if (elm.old_disabled!=null){
				 __EnableElement(elm,tn);
				}
			}
		}
	}	

	return true;
	
}
function AO_DisableGroupXSL(xslDoc,groupName,disable){
	if (disable==null) disable=true;
	var old_disabled,old_readonly;
	var groupPath="//x:ao_group[@id='"+groupName+"']";
	var groupsToFix=xslDoc.selectNodes(groupPath);
	var elementsToFix,xslElement		;
	if (disable)
		for (var i=0;i<groupsToFix.length;i++){
			elementsToFix = groupsToFix[i].selectNodes(groupPath+"//button|"+groupPath+"//input|"+groupPath+
				"//textarea|"+groupPath+"//select|"+groupPath+"//*[(@onclick $ne$ '') $or$ (_onclick $ne$ '')]")	
			for (var j=0; j< elementsToFix.length; j++){
				xslElement = elementsToFix[j]	;
				__DisableElment(xslElement,xslElement.tagName);
			}
		}
	else
		for (var i=0;i<groupsToFix.length;i++){
			elementsToFix = groupsToFix[i].selectNodes(groupPath+"//button|"+groupPath+"//input|"+groupPath+
				"//textarea|"+groupPath+"//select|"+groupPath+"//*[@old_onclick]")	
			for (var j=0; j< elementsToFix.length; j++){
				xslElement = elementsToFix[j]	;
				__EnableElement(xslElement,xslElement.tagName);
				
			}
		}	
	return xslDoc;
}

function AO_DisablePageDOM(pageAlias,disable){
	var i,elm,tn,pageDOM;
	if (pageAlias==null)pageDOM=document;
	else pageDOM=document.all[pageAlias];
	if (pageDOM==null|| pageDOM.length!=null) return false;	
	var elms=pageDOM.all;		
	for (i=0;i<elms.length;i++){
		elm=elms[i];		
		if (disable){
			tn=elm.tagName.toLowerCase();
			if (elm.type!=null && elm.type!="") tn=elm.type.toLowerCase();
			if (tn=="input" || tn.indexOf("select")>-1 || tn=="textarea" || tn=="button" || elm.onclick!=null || elm._onclick!=null){
			    if(elm.getAttribute("disableelement") == "false") continue;
				if(elm.getAttribute("skipdomdisabled") == "true")
				{	
					var len = elm.all.length;
					var collectionElements = elm.all;
					for(var childIndex=0;childIndex<len;childIndex++)
					{
						var oElement = collectionElements[childIndex];
						var tagName = oElement.tagName.toLowerCase();
						if (tagName=="input" || tagName=="select" || tagName=="textarea" || tagName=="button" || oElement.onclick!=null || oElement._onclick!=null){
							oElement.setAttribute("childskipdomdisabled","true");
						}
					}
					continue;
				}
				else if(elm.getAttribute("childskipdomdisabled") == "true")
				{	
					continue;
				}
				__DisableElment(elm,tn)
			}
		}else {
			if (elm.old_disabled!=null){
				tn=elm.tagName.toLowerCase();
			 __EnableElement(elm,tn);
			}
		}
	}		
	return true;
}
function AO_DisablePageXSL(xslDoc,disable){
	var old_disabled,old_readonly;
	if (disable){	
		var elementsToFix = xslDoc.selectNodes("//button|//input|//textarea|//select|//span[@title='mm/yy']|//*[(@onclick!='' $and$ @class!='xref_tab_off1') $or$ (@_onclick!='')]|//xsl:choose/*/*[(@name='onclick')]")
		for (var i=0; i< elementsToFix.length; i++){
			var xslElement = elementsToFix[i]	;
			var tag = xslElement.tagName;
			while(tag == "xsl:attribute" || tag == "xsl:when" || tag == "xsl:choose" || tag == "xsl:otherwise")
			{
				xslElement = xslElement.parentNode;
				tag = xslElement.tagName
			}
				with (xslElement){
					__DisableElment(xslElement,tag)
				}
		}
	}
	else {
		var elementsToFix = xslDoc.selectNodes("//*[@old_disabled]|//*[@old_onclick]|//*[@old_onselectstart]")
		for (var i=0; i< elementsToFix.length; i++){
			var xslElement = elementsToFix[i]; 
			var tag = xslElement.tagName;
			__EnableElement(xslElement,tag)
		}
	}
	return xslDoc;
}
function AO_CheckDisableGroup(pageAlias,groupName){
	var result=false;
	try{
		result=DisableGroupTest(pageAlias,groupName);
	}catch(e){/* result=false */}
	return result;
}
function AO_CheckDisablePage(pageAlias){
    if(AO_IsConnectedWindow())return true;
	var result=false;
	try{
		result=DisablePageTest(pageAlias);
	}catch(e){/* result=true */}
	return result;
}
function _AddTableScrl(xslDoc){
	var addScrl=xslDoc.selectNodes("//table[(@onclick!='')]");
	for (var i=0;i<addScrl.length;i++){
		addScrl[i].setAttribute("onkeydown","return KB_ScrollerUpdate()");		
	}	
	return xslDoc;
	
}

function AO_CheckSessionTimeOut(SOAP_Result)
{
    var errMessage = new Array();
    WriteError(SOAP_Format_Error_Message(SOAP_Result),true,errMessage);
//	var errMessage = SOAP_Result.errorDetail.string.split("-->");
//	if (errMessage.length>=2)
//		errMessage=errMessage[1].replace(/(^\s*)|(\s*$)/g, "")
//	else
//		errMessage=errMessage[0];
		
	if(errMessage == "A2SEC009" || errMessage == "Unknown server error" 
		|| errMessage == "There is no row at position 0.")
	{
	    if(_GetGlobalVar("IsAsteaBrowser")==true)
        {
	        ExecuteCommand("SessionTimeOut","A2SEC009");
	        return;
	    }
		alert(AO_GetMesg("A2SEC009"));
		SetCookie("LoginLoaded","N");
		_SetGlobalVar("SessionID",null);
		m_PageIndicator.NoBusy();
		_OpenWindow('../start/logoff.asp');
		return true
	}
	return false;
}

function _OpenWindowFromMenu(url,top_level){
	var old_top_level=_GetGlobalVar("top_level")
	_SetGlobalVar("top_level",top_level)
	
	url=url.replace("&lt;![CDATA[","");
	url=url.replace("]]&gt;","");				
	var test=_OpenWindowEx(url) ;
	if (test)_SetGlobalVar("top_level",old_top_level);
	else {
		//if (top_level!="MyFavorites") 
		//_SetGlobalVar("PortalName",top_level)
	}
	
}
function _OpenWindowEx(url) {
	if (typeof(m_aliases)!="undefined") if (AO_ConfirmExit()) return true;
	_OpenWindow(url);
}
function _OpenWindow(url,to_replace) 
{
	function CheckURL(url){
		if ((""+url).toLowerCase().indexOf("form_asp/service_order_maint.asp")>0)
			url=url.replace(/form_asp\/service_order_maint.asp/i,"form_asp/service_order_maint_lt.asp");
		return (url)
	}
	if(AO_IsConnectedWindow())return;
	var objHttp;
	var objScript;
	if (to_replace==null) to_replace=false;
	if (typeof(m_aliases)!="undefined")  AO_CloseSession();
	if( url == "" ) return true;
	if ( ((_GetGlobalVar("IsMobile")=="True")&&(_GetGlobalVar("is_sa")=="Y")) || ((_GetGlobalVar("IsTech")=="True")&&(_GetGlobalVar("is_sa")=="Y")) )
		url=CheckURL(url);
	var sResult = validateObj.InvokeHook("f_beforeOpenWindow",url);
	if( sResult != null ) url = sResult;
	if (to_replace)				
		AO_LocationReplace(url);
	else
		AO_Redirect(url);
		

	return true;
}
/// <summary>
/// Used to set object called currXMLDoc, which is a pointer that is the same as m_primaryXML.  
/// It allows the developer to use the currXMLDoc in the same way as we use m_primaryXML.  
/// The object it creates is used for backward compatibility, and the developer can use m_primaryXML without using currXMLDoc.
/// </summary>
/// <param name="clear">[optional]if true different from currXMLDoc</param>
/// <returns>true/false</returns>
function CreateXMLDOM(clear)
{
	try{
	    if(clear) currXMLDoc=null;
		if (currXMLDoc==null) {
			//var xmlTemp=document.all.tags("XML");
			var xmlTemp=document.getElementById("_primaryXML");
			// V.A. 18/08/2000
			if (xmlTemp != null) currXMLDoc=xmlTemp.XMLDocument;
			//~ V.A. 18/08/2000
			else return false;
		}
		return true;
	}
	catch(e)
	{
		WriteError(e);
		return false;
	}
}

function WriteError(msg,NO_UI,errMessage){	
	if (typeof(msg)=="object") {
		msg=msg.description; //error object		
	}
	if(AS_HandleInvalidState(msg)) return false;
	NO_UI = typeof(NO_UI)=="undefined"?false:NO_UI;
	var title="";
	var start=0;
	var rowNum,boName,elementName;
	msg=msg.trim();	
	if (msg.length==0) return false;
	if (msg.charAt(0)==":")
	{		
		title=msg.slice(1);
		title=title.split((/\:|\$|\#/gi))[0];
		msg=AO_GetMesg(msg.slice(1));
	}

	else
	{
		var oXMLNode = new ActiveXObject("MSXML2.DOMDocument");
		oXMLNode.async = false;

		if (oXMLNode.loadXML(msg))
		{
			if (oXMLNode.selectSingleNode("//body")!=null)
				msg = oXMLNode.selectSingleNode("//body").text;
			else
			{
				
				msg = oXMLNode.selectSingleNode("//root/Message").text;
				boName = oXMLNode.selectSingleNode("//root/BOName").text;
				if (boName.indexOf("(main)")>-1)
					boName="main";
				rowNum = oXMLNode.selectSingleNode("//root/Row").text;
				title = oXMLNode.selectSingleNode("//root/MessageID").text;
				elementName = oXMLNode.selectSingleNode("//root/ElementName");
				if (elementName!=null && !NO_UI) 
				{
					try{
						elementName=""+elementName.text;
						if (typeof(m_action) != "undefined" && !m_action.match(/.*(new).*/ig)) 
						{
							var alias="";
							
							for (var i=0;i<m_aliases.length;i++)
							{															
								if (m_aliases[i].split(":")[0]==boName)break;							
							}
							if (i<m_aliases.length)
							{
								var j=-1;
								var BOArray=m_PageAttributes[currTab].split(";");
								for (var k=0;k<BOArray.length;k++)
								{
									
									if (BOArray[k]==i)
									{
										j=currTab;
										break;
									}
								}
								if (j==-1)
								{
									for (j=0;j<m_PageAttributes.length;j++)
									{
										//fixed by eli harel
										var find = false;
										if (j==currTab)continue;
										BOArray=m_PageAttributes[j].split(";");
										for (var k=0;k<BOArray.length;k++)
										{
											if (BOArray[k]==i)
											{ 
												find = true;
												break;
											}
										}			
										if( find ) break;														
									}
									if (j<m_PageAttributes.length)
									{
										alias=m_PageAliases[j];
										var groupName=GetGroupByPage(alias);
										if (groupName!=null)
										{
											groupName=groupName.split(":")[0];
											if (m_curGroupAlias != groupName)
												_SelectTabControlItem(groupName);
										}
										_OpenPage(alias,false);
									}
									
								}
								
							}
						}
						else 
						{
							if (elementName!="")
								_ChangeStyle(document.getElementById(elementName).group);	
						}
						if (elementName!="")
						{
							var elm=document.getElementById(elementName);
							if (elm==null) elm=document.getElementById(boName+"@"+elementName);
							if (elm!=null)
							{
								
								elm.focus();
								elm.focus();//only twice works...
							}
						}
					}catch(e){/* do nothing*/}					
				}
				
			}
		}
		else		
		{	
			//ASAP #IL0408050031
			if (oXMLNode.loadXML("<root>"+msg+"</root>"))
				msg=oXMLNode.selectSingleNode("/root").text;			
				
		}		
		
		/*var firstindex = msg.search(/\:\s+/g);
		var secondindex = msg.indexOf(" at Astea");	
		
        if(firstindex!=-1 && secondindex!=-1)
        {
           var sTranslateMsg = AO_GetMesg(msg.substring(firstindex+2,secondindex));
           if( sTranslateMsg != "" ) msg = sTranslateMsg;
        }*/
        if(typeof(errMessage)!="undefined")
        {   
            errMessage[0] = msg;
            return;
        }
        msg = AO_GetMesg(msg);
		oXMLNode = null;
	}

	var funcName=AS_GetFunctionName(WriteError.caller);
	
	if(NO_UI) return msg;
	
	if (title!="" && AS_IsDebugMode())	
	{
		var msg2=msg.replace(/\"/g,"\"\"");
		msg2=msg2.replace(/\'\'/g,"\'");
		msg2=msg2.replace(/\f|\n|\r|\t|\v/g,"\" & chr(13) & \"");
		var str='msgbox "'+msg2+'",,"'+title+'"';
		window.execScript(str, "vbscript");
	}
	else
		alert (msg);
}

// Written By Ronit Tanach-Sherez : 2/1/2003
/////////////////////////////////////////////
function AO_GetMesg(mess_id, strParams){
	var oSettingMgr;
	var MsgText="";
	var buttonListNo;
	var tmp;
	var msgNumber=-1;
	var sliceFlag=0;
	var msgParam=null;
	var place=mess_id.match(/\:|\$|\#/gi);
	if (place==null){
		msgNumber=mess_id;
	}
	else {
		msgNumber=mess_id.slice(0,place.index);
		sliceFlag++; //sign for special parameters in string for example ":A2LOG520:parameter".
	}
	var varExist=false;
	if (oMsgXML==null)
	{	
		var tmpObj=null;
		var pri_win=AO_GetPrimaryWindow();
		if (pri_win!=null) pri_win=pri_win.top;
		if (pri_win!=null) pri_win=pri_win.control_frame;
		if (pri_win!=null) 
		{			
			if (typeof(pri_win.m_MessagesXML)!="undefined")
			{
				varExist=true;
				tmpObj=pri_win.m_MessagesXML;
			}
		}
		if (tmpObj!=null && typeof(tmpObj.documentElement) != "unknown") 
		{
			oMsgXML=tmpObj;
		}
		else
		{
			oMsgXML = new ActiveXObject("MSXML2.DOMDocument");
			oMsgXML.async=false;
			oMsgXML.load("../Messages/" + UI_LANGUAGE + "_MSG.xml");
			if (varExist ) pri_win.m_MessagesXML=oMsgXML;
		}
	}			
	//Select the message from xml file.
	try
	{
	    MsgText=oMsgXML.selectSingleNode("/root/Messages/"+msgNumber);
	}
	catch(err)
	{
	    MsgText=null
	}
	if (MsgText==null) return mess_id;
	else MsgText=MsgText.text;

	//Set the parameters in case the sent message is a string with deliniters like ":"
	if(sliceFlag==1)
	{
		msgParam=mess_id.slice(place.index+1);
		MsgText = MsgText.replace("{0}",msgParam);		
	}
		
	//Set the parameters: instead {0}{1}.. the parameters are set from strParams array.
	for(var k=0; strParams!=null && k<strParams.length  ;k++){		 
		tmp = "{" + String(k)+ "}" ;
		MsgText = MsgText.replace(tmp,strParams[k]);
	}

	return MsgText;
}

// Written By Ronit Tanach-Sherez : 7/1/2003
/////////////////////////////////////////////
function AO_custMsg(a_text,a_title,a_params){	
	
	var res=AO_msg(AO_GetMesg(a_text,a_params),AO_GetButtons(a_text),a_title+" "+a_text);
	return res;
}

// Written By Ronit Tanach-Sherez : 2/1/2003
/////////////////////////////////////////////
function AO_GetButtons(mess_id){
//	var oMsgXML;
	var buttonNumber;
	var MsgButtonList;
	if(oMsgXML ==null){
		oMsgXML = new ActiveXObject("MSXML2.DOMDocument");
		oMsgXML.async=false;
		oMsgXML.load("../Messages/" + UI_LANGUAGE + "_MSG.xml");
	}
		
	//UI_LANGUAGE - global parameter.
	//oMsgXML.load("../Messages/" + UI_LANGUAGE + "_MSG.xml");
	
	MsgButtonList = oMsgXML.selectSingleNode("/root/Messages/"+mess_id).getAttribute("button_list");	
	///////////////////////////////////////////////////////////////////////////
	//	1)MsgButtonList is a parameter from xml for button list:
	//		0 - OK 
	//		1 - OK,Cancel
	//		2 - Abort,Retry,Ignore
	//		3 - Yes,No,Cancel
	//		4 - Yes,No
	//	    5 - Retry,Cancel 
	//
	///////////////////////////////////////////////////////////////////////////
	switch(MsgButtonList)
	{
		case "OK":
			buttonNumber=0;
			break;
		case "OK,Cancel":
			buttonNumber=1;
			break;
		case "Abort,Retry,Ignore":
			buttonNumber=2;
			break;
		case "Yes,No,Cancel":
			buttonNumber=3;
			break;
		case "Yes,No":
			buttonNumber=4;
			break;
		case "Retry,Cancel":
			buttonNumber=5;
			break;
		default:
			buttonNumber=0;
			break;
	}		   	

	return buttonNumber;  
}
	
// Written By Jamil Mozalbat : 7/7/2002
function AO_GetMesgWithParams(msgText , strParams){	  
	var strMsg = AO_GetMesg(msgText,strParams);
	return strMsg;	 
}  

function _Show_Hide_Search(obj)
{
try{
	var count = _searchTable.rows.length;

	if (m_show)
	{
		for (var i = 2; i < count; i++)
		{
			_searchTable.rows(i).style.display = "";
		}
		obj.className="btnHideAdvan";
	}else
	{
		for (var i = 2; i < count; i++)
		{
			_searchTable.rows(i).style.display = "none";
		}
		obj.className="btnShowAdvan";
	}
	
	m_show = !m_show;
	
	return;
}catch(e){WriteError(e)}
}

function AS_RetrieveDynamicList(dynamicListArray)
{
	
	var entity_name,query_name,id_field,descr_field;
	var arrFields,arrValues,arrTypes,arrOperators;	
	var property;
	var strSearchXMLArray=new Array();
	var retrieved;
	var retrieveCounter=0;
	for (var count=0;count<dynamicListArray.length;count++)
	{
		dynamicList=dynamicListArray[count];		
		retrieved=dynamicList.getAttribute("retrieved");
		if (retrieved!=null && retrieved=="true") continue;
		entity_name=dynamicList.getAttribute("data_view");
		query_name=dynamicList.getAttribute("query");
		
				
		arrFields=arrValues=arrTypes=arrOperators=new Array();
		
		property=dynamicList.getAttribute("fields");
		if (property!=null && property!="")
			arrFields=property.split(";");
		property=dynamicList.getAttribute("values");
		if (property!=null && property!="")
		{
			arrValues=property.split(";");		
			for (var i=0;i<arrValues.length;i++)
			{
				if (arrValues[i].indexOf("{")==0)
					arrValues[i]=_ParseParams("&"+arrValues[i]);
			}
		}
		property=dynamicList.getAttribute("types");
		if (property!=null && property!="")
			arrTypes=property.split(";");		
		property=dynamicList.getAttribute("operatorts");
		if (property!=null && property!="")
			arrOperators=property.split(";");		
		try
		{
			var arrXMLSearchParams=f_changeDynamicListParams(entity_name,query_name,arrFields,arrValues,arrTypes,
				arrOperators);
			if (arrXMLSearchParams!=null)
			{
				var tmpArrsFields=arrFields,
					tmpArrValues=arrValues,
					tmpArrTypes=arrTypes,
					tmpArrOperators=arrOperators;
					
				if (arrXMLSearchParams["fields"]!=null)
					tmpArrFields=arrXMLSearchParams["fields"];
				if (arrXMLSearchParams["values"]!=null)				
					tmpArrValues=arrXMLSearchParams["values"];
				if (arrXMLSearchParams["types"]!=null)			
					tmpArrTypes=arrXMLSearchParams["types"];
				if (arrXMLSearchParams["operators"]!=null)			
					tmpArrOperators==arrXMLSearchParams["operators"];
				var isEqualLength=(tmpArrsFields.length==tmpArrValues.length==tmpArrTypes.length==tmpArrOperators.length);
				if (isEqualLength)
				{
					arrFields=tmpArrsFields;
					arrValues=tmpArrValues;
					arrTypes=tmpArrTypes;
					arrOperators=tmpArrOperators;
				}
				else
				{
					throw("In entity '"+entity_name+"', query '"+query_name+
						"', the length of the operators is not equal");
				}
				
			}
			
		}
		catch(e)
		{
			
			if (typeof(f_changeDynamicListParams)!="undefined")
			{
				if (typeof(e)!="object")
				{
					WriteError("AS_RetrieveDynamicList:"+e);
					throw("AS_RetrieveDynamicList:"+e);
				}
				else		 
				
					WriteError("AS_RetrieveDynamicList:"+e.description);
			}
		}	
		strSearchXMLArray[retrieveCounter++]=BuildXML4Search(entity_name, query_name, arrFields, arrValues,arrTypes,arrOperators);	
	}
	var strXMLSearch="";
	for (var count=0;count<retrieveCounter;count++)
		strXMLSearch+=strSearchXMLArray[count];
	//var SOAPResult=SOAP_RetrieveXML(strXMLSearch);
	
	var SOAPResult=SOAP_RetrieveXMLBatch("<FindBatch>"+strXMLSearch+"</FindBatch>");
	var strDDLW;
	
	var xmlDDDWList=new ActiveXObject("Microsoft.XMLDOM");
	xmlDDDWList.loadXML("<root/>");
	xmlDDDWListRoot=xmlDDDWList.selectSingleNode("/root");
	var fieldNode,id_field_name=id_field,descr_field_name=descr_field;
	if (!SOAP_IsError(SOAPResult)){	
		SOAPResult=SOAP_Get_XMLObj(SOAPResult);
		for (var count=0;count<retrieveCounter;count++)		
		{
			dynamicList=dynamicListArray[count];
			entity_name=dynamicList.getAttribute("data_view");

			descr_field=dynamicList.getAttribute("display_value");
			id_field=dynamicList.getAttribute("data_value");
			if (id_field=="" || id_field==null) id_field=dynamicList.nodeName;
			strDDLW="<dynamic id='"+dynamicList.nodeName+"'>";
			
			var rows=SOAPResult.selectNodes("/FindBatch/root[@entityName $eq$ '"+entity_name+"']/row");
			var row,id_fld,descr_fld;
			for (var i=0;i<rows.length;i++){
				row=rows[i];
				id_fld=row.selectSingleNode(id_field);
				if (id_fld!=null)id_fld=""+id_fld.text;
				else id_fld="";
				descr_fld=row.selectSingleNode(descr_field);
				if (descr_fld!=null)descr_fld=""+descr_fld.text;
				else descr_fld="";	
				id_fld=__ProperXMLVal(id_fld);				
				descr_fld=__ProperXMLVal(descr_fld);				
				
				strDDLW+="<entry data_value=\""+id_fld+"\" display_value=\""+descr_fld+"\">";
				for (var j=0;j<row.childNodes.length;j++)
				{
					fieldNode=row.childNodes[j];
					if (fieldNode.nodeName!=id_field && fieldNode.nodeName!=descr_field)
					{
						strDDLW+="<"+fieldNode.nodeName+">" + __ProperXMLVal(fieldNode.text) +"</"+fieldNode.nodeName+">";
					}
				}
				strDDLW+="</entry>";
			}
			strDDLW+="</dynamic>";
			var xmlDDLW=new ActiveXObject("Microsoft.XMLDOM");
		
			if (xmlDDLW.loadXML(strDDLW)){
				xmlDDDWListRoot.appendChild(xmlDDLW.selectSingleNode("/dynamic"));
			}
		}
		//else return null;
	}		
	else 
	{
		return null;
	}
	if (xmlDDDWList.xml=="<root/>") return null;
	else return xmlDDDWList;
	
}

function AS_SearchAndLoadDynamicListsInXSL(xmlObj,xslObj)
{
	if (xslObj==null) 
	{
		WriteError("AS_SearchAndLoadDynamicListsInXSL(): xslObj is null");
		return null;
	}
	if (xmlObj==null)
	{
		if (typeof(m_primaryXML)!="undefined" && m_primaryXML!=null)
			xmlObj=m_primaryXML;
		else if ((typeof(m_StateID)=="undefined") && (typeof (m_BCName)!="undefined"))
		{
			var xmlDocObj=document.getElementById("searchXML"+m_BCName);
			if (xmlDocObj!=null) xmlObj=xmlDocObj.XMLDocument;			
		}
	}
	if (xmlObj==null)
	{
		//WriteError("AS_SearchAndLoadDynamicListsInXSL(): xmlObj is null");
		return xmlObj;
	}
	var dynamicListOnXSL=xslObj.selectNodes("//xsl:comment[@id='dynamicLists']/*");		
	var dynamicListObj,dynamicListName;
	var ddlbChild,ddlbChildObj;
	for (var count=0;count<dynamicListOnXSL.length;count++)
	{
		dynamicListObj=dynamicListOnXSL[count];
		dynamicListName=dynamicListObj.nodeName;
		if (xmlObj.selectSingleNode("/root/ddlb/"+dynamicListName)==null)
		{
			ddlbChild=xmlObj.selectSingleNode("/root/ddlb");
			if (ddlbChild==null)
			{
				if (ddlbChildObj==null)
				{
					ddlbChildObj=new ActiveXObject("microsoft.xmldom");
					ddlbChildObj.loadXML("<ddlb/>");
					ddlbChildObj=ddlbChildObj.selectSingleNode("/ddlb");					
				}
				
				xmlObj.selectSingleNode("/root").appendChild(ddlbChildObj.cloneNode(true));
				ddlbChild=xmlObj.selectSingleNode("/root/ddlb");	
				if (ddlbChild==null)
				{
					WriteError("AS_SearchAndLoadDynamicListsInXSL(): Cannot create DDLB List in primaryXML");
					return xmlObj;
				}								
			}
			ddlbChild.appendChild(dynamicListObj.cloneNode(true));			
		}
	}	
	if (count>0)
	{
		xmlObj=AS_SearchAndLoadDynamicLists(xmlObj);
		return xmlObj;
	}	
	
}
function AS_SearchAndLoadDynamicLists(xmlObj)
{
	
	if (xmlObj==null) return null;
	var dynamicList;
	dynamicList=xmlObj.selectNodes("/root/ddlb/*[@data_view]");	
//	<bpart_type_id data_view="bpart_type" query="bpart_type_lup" data_value="bpart_type_id" display_value="descr"/>	
	var data_value;
	var entriesCount,entries;

	if (dynamicList.length>0)
	{		
		var dynamicListResult=AS_RetrieveDynamicList(dynamicList);			
		if (dynamicListResult!=null)
		{
			for (var i=0;i<dynamicList.length;i++)
			{				
				entries=dynamicListResult.selectNodes("/root/dynamic[@id $eq$ '"+dynamicList[i].nodeName+"']/entry");
				entriesCount=entries.length;
				for (var j=0;j<entriesCount;j++)
				{
					dynamicList[i].appendChild(entries[j].cloneNode(true));
				}
				dynamicList[i].setAttribute("retrieved","true");
			}
		}
	}
	return xmlObj;
	
}

function __ProperXMLVal(str){
    var pos = str.search(/\&/g);
    if(pos > -1 && str.substr(pos+1,4) != "amp;" )
    {
      str=str.replace(/\&/g,"&amp;");
	}
	str=str.replace(/\&amp;lt;/g,"&lt;");
	str=str.replace(/\</g,"&lt;");
	str=str.replace(/\>/g,"&gt;");
	str=str.replace(/\&amp;gt;/g,"&gt;");
	str=str.replace(/\"/g,"&quot;");
	str=str.replace(/\'/g,"&apos;");
	
	return str;
}

function AS_GetFunctionName(callerName)
{
	var funcName="";
	if (callerName!=null) {
		callerName=callerName.toString();
		funcName=callerName.match("^function(.*)\\(");
		if (RegExp.$1.length>0)funcName=RegExp.$1+":";
	}
	return funcName;
}
/// <summary>
/// Creates XML string that represents search criteria send by client function to
/// retrieve data from the Application server. This function is used by the lookup to execute search criteria
/// and retrieve the result as XML.
/// If the field ID is also used as an input element for the document you can set the following attributes on the XSL page:
/// alias_replace - use replace alias when the server builds the SQL command
/// virtual - the field is not part of the search criteria and used for presentetion purpose
/// ignore - sets the field to ignore the value
/// The function defines an inner function that is used to accelerate UNION query performance by specifing where cond for each select statement.
/// This functionality can be used to define where cond for each selected statement that composes your union query. In the XSL for each
/// field use the following format: where_cond1!person.search_name;where_cond2!cmp_prospects.first_name to associate the field to the corresponding
/// where cond.
/// </summary>
/// <param name="entityName">[required]entity name</param>
/// <param name="queryName">[required]query name</param>
/// <param name="aFields">[required] the corresponding field name. If the field does not exist as input element on the document you can set the field attribute
//// using this format: fieldName!attribute, for example, the attribute can be alias_replace.</param>
/// <param name="aValues">[required]the corresponding values</param>
/// <param name="aTypes">[required]the field type (string, date, number, etc.) or argument if the field should not be part of the where cond</param>
/// <param name="aOperators">[required]the operator used to evaluate the field (<,>,=,like)</param>
/// <param name="aPageNumber"></param>
/// <returns>XML string sent to the server as search criteria</returns>
function BuildXML4Search(entityName, queryName, aFields, aValues,aTypes,aOperators,aPageNumber)
{
	var funcName=AS_GetFunctionName(BuildXML4Search.caller);
	function ConstructLocalObj()
	{	
		this.MapColumns = new Array();
		this.StrOperators = new Array();
		this.StrValues = new Array();
		this.StrTypes = new Array();
	}
	//this private function create where conds for union by grouping each column
	//to specified data store 
	function CreateUnionWhereCond(strMapColumns,strOperators,strValues,strTypes)
	{
		var rtnObj = null;
		var whereCondMaps=null;
		var removeMapColumnArr = new Array();
		
		//handle union
		for(var i=0;i<strMapColumns.length;i++)
		{
		    if(strMapColumns[i]=="") continue;
			var objElement = document.getElementById(strMapColumns[i]);
			if(objElement == null) objElement = document.getElementById(strMapColumns[i]+"_qbe");
			if((objElement == null) || (aValues[i].length == 0)) continue;
			var whereCondArr = null;
			
			if(objElement.getAttribute("params_mapping")==null)
			{
				try{
					whereCondArr = f_checkParamsMapping(strMapColumns[i]);
					if(typeof(whereCondArr) == "string")
					{
						whereCondArr = whereCondArr.split(";");
					}
				}catch(err){/*do nothing*/}
				if(whereCondArr==null) continue;
			}
			else
			{
				whereCondArr = objElement.getAttribute("params_mapping").split(";");
			}
			var query = "";
			var fieldValue = strValues[i];
			var sOperator =strOperators[i].replace("<","&amp;lt;");
			sOperator=sOperator.replace(">","&amp;gt;");
			query += "$alias "+sOperator+" ";
			if(strTypes[i].toLowerCase() == "string" ) 
			{
			    fieldValue = fieldValue.replace(/\'/gi,"\'\'");
				if( strOperators[i].toLowerCase() == "like" )
					fieldValue = fieldValue+"%"
				query += "'"+fieldValue+"'";
			}
			else if( strTypes[i].toLowerCase() == "date") 
			{
				query += FormatISODate(fieldValue);
			}
			else
			{
				query += fieldValue;
			}
			
			removeMapColumnArr[strMapColumns[i]] = true;
			
			for(var j=0;j<whereCondArr.length;j++)
			{
				var whereCond = whereCondArr[j];
				var alias = whereCond.split("!")[1];
				if(alias=="") continue;
				var runQuery = alias=="aSql"?whereCond.split("!")[2]:query.replace("$alias",alias);
				whereCond = whereCond.split("!")[0];
				if(whereCondMaps == null)
				{
					whereCondMaps = new Array();
				}
				if(whereCondMaps[whereCond]==null)
				{
					whereCondMaps[whereCond]=new String();
				}
				
				whereCondMaps[whereCond] += ((whereCondMaps[whereCond]=="")?"":" and ")+" ( " + runQuery + " ) ";
			}
		}
		if(whereCondMaps!=null)
		{
			rtnObj = new ConstructLocalObj();
			for(var where in whereCondMaps)
			{
				rtnObj.MapColumns.push(where+"!alias_replace");
				rtnObj.StrOperators.push("=");
				rtnObj.StrValues.push(whereCondMaps[where]);
				rtnObj.StrTypes.push("argument");
			}
			for(var i=0;i<strMapColumns.length;i++)
			{
				if(removeMapColumnArr[strMapColumns[i]]==true) continue;
				rtnObj.MapColumns.push(strMapColumns[i]);
				rtnObj.StrOperators.push(strOperators[i]);
				rtnObj.StrValues.push(strValues[i]);
				rtnObj.StrTypes.push(strTypes[i]);
			}
		}
		return rtnObj;
		//end handle union
	}
try{
	var strXML = "<Find ";
	var getRecordCount=" getRecordCount";
	var oper="<operators values='",type="<types values='";
	var is_replace="<is_replace_alias values='";
	var is_recordCount = "false";
	strXML += "entity_name='" + entityName + "' ";
	if (queryName!="")
	{
		queryName=queryName.split(":");		
		strXML += "query_name='" + queryName[0] + "' ";
		if (queryName.length==2 && queryName[1]=="lookup") getRecordCount=" getLookupRecordCount"
		queryName=queryName[0];
	}
	else
		// just send dammy param (by Alex and Kofman)
		strXML += "x='y' ";
	if (aPageNumber!=null && funcName.indexOf("AS_RetrieveDynamicList")==-1)
	{
		if (aPageNumber!=-1)
		{
			if (aPageNumber>=1)  is_recordCount = "true";	
			strXML+=" pageNumber='"+aPageNumber+"' ";
		}
	}
	else if (typeof(m_PortalName)=="undefined" )
	{
	    is_recordCount = (funcName.indexOf("AS_RetrieveDynamicList")==-1?"true":"false");
	}
	strXML+=getRecordCount+String.prototype.Format("='{0}' ",is_recordCount); 
	
	if (aTypes==null) aTypes=null;
	if (aOperators==null) aOperators=null;
	var val, elm;
	var rtnObj = null;
	if((funcName.toLowerCase()).indexOf("lookup") == -1)
		rtnObj = CreateUnionWhereCond(aFields,aOperators,aValues,aTypes);
		
	if(rtnObj != null )
	{
		aFields = rtnObj.MapColumns;
		aValues = rtnObj.StrValues;
		aTypes = rtnObj.StrTypes;
		aOperators = rtnObj.StrOperators;
	}
	
	for (var i = 0; i < aFields.length; i ++)
	{
		if (aValues[i].length > 0)
		{
			//changes by eli harel
			elm=document.getElementById(aFields[i]);
			if(elm == null && funcName.indexOf("A2CS_ServerRunRetrieve")>-1)
			{
				elm=document.getElementById(aFields[i]+"_qbe");
			}
			if (elm!=null)
			{
			    //attribute added to the XSL file suggesting this element will not appear in search criteria.
				if (elm.virtual!=null) continue;
				if (elm.ignore!=null)
				{
					//FIX for ASAP #IL0506140020        
					//this attribute are used on the report QBE's and cause error
					//on lookup's so i check the caller name and if the caller is
					//lookup skip the ignored field
					if(funcName.indexOf("LookUp_Exec") != -1)continue;
					aOperators[i]="ignore"
					aTypes[i]="ignore"
					aFields[i]="ignore-"+aFields[i];
				}
				if (elm.alias_replace!=null) 
				{
					var replaceAttribute=elm.alias_replace;
					replaceAttribute=replaceAttribute.split(";");
					if(replaceAttribute.length==1)
					{
						is_replace+="N;";
					}
					else
					{
						if(replaceAttribute.length==2)
							if (replaceAttribute[1]==queryName)
								is_replace+="N;";
							else is_replace+="Y;";
					}
				}
				else
				{
					if (elm.ignore!=null)
						is_replace+="ignore;";
					else
						is_replace+="Y;";
						
				}
			}
			else
			{
				aFields[i]=aFields[i].split("!");
				if (aFields[i].length==2)
				{
					var attr=aFields[i][1];
					aFields[i]=aFields[i][0];
					if (attr=="alias_replace")
						is_replace+="N;";
					else
						is_replace+="Y;";
				}
				else 
				{
					aFields[i]=aFields[i][0];
					is_replace+="Y;";	
				}
			}			 
			if (aTypes!=null && aTypes[i]!=null){
				aTypes[i]=aTypes[i].replace("<","&lt;");
				aTypes[i]=aTypes[i].replace(">","&gt;");
				type+=aTypes[i];
			}
			else type+="string";
			type+=";";
			if (aOperators!=null && aOperators[i]!=null){
				aOperators[i]=aOperators[i].replace("<","&lt;");
				aOperators[i]=aOperators[i].replace(">","&gt;");
				if (aOperators[i]=="arg_like")
				{ 
					aOperators[i]="like";
					val=aValues[i].trim()+"%";
				}
				else
					val=aValues[i].trim();
				oper+=aOperators[i];
			}
			else 
			{
				if (aTypes!=null && aTypes[i]!="argument") oper+="like";
				else oper+="=";
				val=aValues[i].trim();
			
			}
			oper+=";";
			
			if (aOperators!=null && aOperators[i]!=null && aOperators[i]!="in") 
				strXML += aFields[i] + '="' + __ProperXMLVal(val) + '" ';
			else
				strXML += aFields[i] + '="' + val + '" ';
		}
	}
	
	strXML += ">";

	strXML +=oper+"'/>";
	strXML +=type+"'/>";
	strXML +=is_replace +"'/>";
	strXML +="</Find>";
	return strXML;
	
}catch(e){e.description="BuildXML4Search:"+e.description;WriteError(e)}
}

/// <summary>
/// Is used for focusing on a specified field after lookups.
/// </summary>
/// <param name="fieldName">[required]field to focus on</param>
/// <param name="custom_xref">[optional]pass a custom xref if the current one doesn't work</param>
/// <returns>true/false</returns>
function AS_FocusOnField(fieldName, custom_xref)
{
// ASAP #IL0212300003 - focus after lookup
	try
	{
		var fieldColumn = document.all(fieldName);
		if (typeof(custom_xref) == "undefined")
		    custom_xref = currRow[currTab];
		if (fieldColumn!=null )
		{
			if (fieldColumn.length != null)
			{
				fieldColumn = fieldColumn(custom_xref);
			}
			if (!(fieldColumn.disabled || fieldColumn.readOnly || fieldColumn.type=="hidden" ||
					fieldColumn.style.display=="none" || fieldColumn.style.visibility=="hidden"))
			{
					fieldColumn.focus();
					fieldColumn.focus();
			}
		}
	}	catch(e){/**/}	
}
/// <summary>
/// This function is invoked when the user clickd the date button lookup
/// (this button appears near date input).
/// </summary>
/// <param name="elmName">the input ID that displays the date string</param>
/// <param name="initialXMLValue">date string in XML format, used to set the default date on the lookup</param>
function DateLookUp(elmName, initialXMLValue)
{
    if (typeof(glbPreventOnChange)!="undefined") glbPreventOnChange=false;
    if (window.event.srcElement.className.match(/.*(discalendar).*/ig)){
	    return false;
    }
    try{
	    if (window.frames.length==0){
		    if (window.event.srcElement.className.toLowerCase().trim().match(/.*dislookup|discalendar.*/ig)){
			    return false;
		    }
	    }
	    var textObj=null;
	    if ("string"==typeof(elmName))textObj=document.all(elmName);
	    else if ("object"==typeof(elmName)) textObj=elmName;
	    if (textObj==null) return false;	
	    if (textObj.length!=null){
			    textObj=textObj(currRow[currTab]);				
	    }			
	    var val=""+textObj.value;
	    
	    if (val!="")
	    { 
		    val=GoInternal(val);
	    }
	    else if (initialXMLValue != null && initialXMLValue.length > 0)
	    {
	        val = initialXMLValue;
	    }
	    
	    if (val!="" && val.indexOf(":")==-1)
	    {
		    //(iDay, iMonth, iYear)
		    val=val.split("-")[2]+"-"+val.split("-")[1]+"-"+val.split("-")[0];
		    val="?value="+val;
	    }
	    else
	    {
	        val="";
	    }
	    
	    var strURL = "../includes/calendar_lup.asp"+val;
	    var sFeatures = " status: 0; dialogWidth: 320px;dialogHeight: 380px";
	    result = window.showModalDialog(strURL, "calendar", sFeatures,false);
	    if (result != "canceled" && result != null){
		    var d = new Date(result);
		    textObj.value=d.ToShortDateFormat();
    //		if (textObj.preset) AO_AssignVal(textObj,result);
		    if (textObj.onchange) textObj.onchange();				
	    }
	    AS_FocusOnField(elmName); // ASAP #IL0212300003 - focus after lookup
    }catch(e){WriteError(e)}	
}

function FormatISODate(xmlDate)
{
	//xmlDate = xmlDate.substring(0,xmlDate.length - 4)
	
	xmlDate = xmlDate.replace(/-/g,"")
	
	xmlDate = "'" + xmlDate.replace(/T/g," ") + "'"
	
	if(_GetGlobalVar("DBVendor") == "MSS")
		return xmlDate
	else // Oracl
	{
		xmlDate = xmlDate.replace(/:\d{3}/gi,"");
		return "TO_DATE(" + xmlDate + ",'YYYYMMDD HH24:MI:SS')"
	}
}

function AO_internalDate(){
	var dt=new Date();
	var strDate=dt.getFullYear()+"-"+(dt.getUTCMonth()+1)+"-"+dt.getUTCDate();
	return strDate;
}

/// <summary>
/// Formats the date string from XML format to the local regional setting format.
/// </summary>
/// <param name="dateStr">[required]the XML string date</param>
/// <returns>the formatted string date</returns>
function AO_UDF(dateStr) {  // Write user format to user1 field
	try
	{
		if( dateStr == "" ) return dateStr;
		var d = new Date();
		d.ParseFromXMLFormat(dateStr);
		return d.ToShortDateFormat();
	}
	catch(err)
	{
		alert(err.description);
	}
}

//Time popup functionality (START)
	var oPopup = window.createPopup();
	
	function show_mytime(elmName,len) {
		var d;
		var no;
		var elm=document.all(elmName);
		var oHourToken = len==48?new Array(0,30,59):new Array(0,15,30,45,59);
		
		if (elm.length!=null) 
		{
			if (currRow!=null && currTab !=null && currRow[currTab]!=null)
				elm=elm[currRow[currTab]];				
			else
				elm=elm[0];
		}
		if (elm.value==""){
			d = new Date();
		}
		else{
			d = new Date("12/12/1970 " + elm.value);
		}
		var sTime = d.toTimeString();
		var iHours = parseInt(sTime.split(":")[0]);
		var iMinutes = parseInt(sTime.split(":")[1]);
		var iToken = 0;
		if(iMinutes>0)
		{
			for(var i=0;i<oHourToken.length;i++)
			{
				if( (iMinutes > oHourToken[i] || iMinutes == oHourToken[i])  && 
					(iMinutes < oHourToken[i+1] || iMinutes == oHourToken[i+1]) )
				{
					var iLow = iMinutes-oHourToken[i];
					var iHigh = oHourToken[i+1]-oHourToken[i];
					iToken = (iHigh%iLow)==(iHigh-iLow)?i+1:i;
					break;
				}
			}
		}
		
		var sMinute = new String(oHourToken[iToken]);
		var sHour = new String(iHours);
		if(iToken==oHourToken.length-1)
		{
			sHour = new String(++iHours==24?0:iHours);
			sMinute="00";
		}
		if(sMinute.length==1) sMinute = "0"+sMinute;
		if(sHour.length==1) sHour = "0"+sHour;
		no = sHour+":"+sMinute;
		/*if (d.getMinutes()>30){
			no=(d.getHours()+1)*2;
		}
		else{
			no=d.getHours()*2
		}
		if (Math.abs(d.getMinutes()-30)<15){
			if (d.getMinutes()<=30){
				no=no+1;
			}
			else{
				no=no-1;		
			}
		}*/
		return no;
	}
	
		
	function onDone(src){
		oPopup.document.write(src); 
	}
	    
	   
	function clickPopup(obj,elmName){
		var elm=document.all(elmName)
		if (elm.length!=null) elm=elm[currRow[currTab]];		
		elm.value=obj.value;oPopup.hide();
		if (elm.preset) AO_AssignVal(elm,obj.value);
		if (elm.onchange) elm.onchange();
		AS_FocusOnField(elmName); // ASAP #IL0212300003 - focus after lookup
	}
		
	function openPopup(what,elmName)
	{
	    var oPopBody = oPopup.document.body;
	    oPopBody.innerHTML=what.innerHTML;
		oPopup.document.getElementById("ddtime1").onclick=new Function('clickPopup(this,"'+elmName+'")');
		var elm=document.all(elmName)
		if (elm.length!=null) elm=elm[currRow[currTab]];		
	    oPopup.show(0, 20, 70, 70, elm);
	    //alert(document.getElementById(elmName).value);
	}
		
	function TimeLookUp(elmName){
	try{
		if (typeof(glbPreventOnChange)!="undefined") glbPreventOnChange=false;
		if (window.event.srcElement.className.toLowerCase().trim().match(/.*dislookup|distime.*/ig)){
			return false;
		}
		openPopup(timePopup,elmName);		
		
	}catch(e){WriteError(e)}
		//oPopup.document.getElementById("ddtime1").options(show_mytime(elmName)).selected='true';
		var oddtime1 = oPopup.document.getElementById("ddtime1");
		oddtime1.value = show_mytime(elmName,oddtime1.options.length);
	}
	

//Time popup functionality (END)
function reportScrollerReset(parentElement)
{
    validateObj.InvokeHook("ResetArguments");
    ScrollerReset(parentElement);
}

/// <summary>
/// Clears the QBE filter fields.
/// </summary>
/// <param name="parentElement">[optional, default _searchTop] the fields container</param>
function ScrollerReset(parentElement) {
	try{
		if (parentElement==null) parentElement=_searchTop;
		var fields = parentElement.all.tags("input");
		var dlbFields = parentElement.all.tags("select");
		
		if (fields.length == 0 && dlbFields.length == 0) return;

		for (var i = 0; i < fields.length; i++)
		{
			if (fields[i].type != "text") continue;
			if (fields[i].disabled || fields[i].readOnly ) continue;
			fields[i].value = "";
		}

	    for (var i = 0; i < dlbFields.length; i++)
	    {
				if (dlbFields[i].disabled || dlbFields[i].readOnly ) continue;
				dlbFields[i].options[0].selected = true;
		}
	}catch(e){WriteError(e)}		
}

function AO_AssignVal(textObj,rv){
	try{
		textObj.value=rv;
		textObj.realValue=rv;
		textObj.focus();
		textObj.blur();
	}catch(e){WriteError(e)}
}


function doError(descr,file,line) {
  var str = "";
	  
  str+=":ERR001:Error occured\nError Description: "+descr+"\nIn file: " +file+"\nIn Line:" +line;
  WriteError(str);
  return true;
	  
}
function Single_Portal(){	
	var strURL=_get_portal_addr();
	return _OpenWindowEx(strURL);
}

function _get_portal_addr(){
  /*
  var aCookie = document.cookie.split("; ");
  for (var i=0; i < aCookie.length; i++)
  {
    // a name/value pair (a crumb) is separated by an equal sign
    var aCrumb = aCookie[i].split("=");
    if ("CurrentPortalURL" == aCrumb[0]) 
      return unescape(aCrumb[1]);
  }
  return "../start/login.asp";
*/
  return _GetGlobalVar("CurrentPortalURL")
}

function addKeyHandler(element) {

	element._keyObject = new Array();
	element._keyObject["keydown"] = new Array();
	element._keyObject["keyup"] = new Array();
	element._keyObject["keypress"] = new Array();
	
	element.addKeyDown = function (keyCode, action) {
		element._keyObject["keydown"][keyCode] = action;
	}
	
	element.removeKeyDown = function (keyCode) {
		element._keyObject["keydown"][keyCode] = null;
	}

	element.addKeyUp = function (keyCode, action) {
		element._keyObject["keyup"][keyCode] = action;
	}
	
	element.removeKeyUp = function (keyCode) {
		element._keyObject["keyup"][keyCode] = null;
	}
	
	element.addKeyPress = function (keyCode, action) {
		element._keyObject["keypress"][keyCode] = action;
	}
	
	element.removeKeyPress = function (keyCode) {
		element._keyObject["keypress"][keyCode] = null;
	}
	
	function handleEvent() {
		var type = window.event.type;
		var code = window.event.keyCode;
		
		if (element._keyObject[type][code] != null) 
			element._keyObject[type][code]();
	}
	
	element.onkeypress = handleEvent;
	element.onkeydown = handleEvent;
	element.onkeyup = handleEvent;
}

function AO_KeyDown(){
	var ev=window.event;
	var se=ev.srcElement;
	var actionButton=null;
	var actionButton=null;
	
	function AS_CheckActiveElement()
	{
	    try
	    {
	        var oElement = event.srcElement;
	        var oActiveElement = document.activeElement;
	        oElement.detachEvent("onblur",AS_CheckActiveElement);
	        if( oActiveElement.id == "" )
	        {
	            AO_FocusFirstObject(null,null);
	            return;
	        }
	        else if(parseInt(oActiveElement.getAttribute("tabIndex"))>-1)
		    {
		        if(oActiveElement.getAttribute("readonly") || oActiveElement.getAttribute("disabled")) 
		        {
		            var oContainer = document.getElementById("MainDiv");
		            var inputsCollection = oContainer.getElementsByTagName("INPUT");
	                var check = false;
		            for(var index=0;index<inputsCollection.length;index++)
		            {
		                var oInput = inputsCollection[index];
		                if(check && oInput.getAttribute("readonly")==false 
		                    && oInput.getAttribute("disabled")==false && 
		                    parseInt(oInput.getAttribute("tabIndex"))>-1)
		                {
		                    oInput.setActive();
		                    break;
		                }
		                if(oInput.id == oActiveElement.id) check = true;
		            }
		        }
		    }
		
	        
	    }
	    catch(err)
	    {/*do nothing*/}
	}
	function __RunButtonFunction(buttonName)
	{
		 //ASAP #IL0407070015
		var actionButton=document.getElementById(buttonName);
		if(actionButton==null || actionButton.style.display == "none") return false;
		if (actionButton !=null && actionButton.onclick!=null)
			{
			try{se.blur();}catch(e){/*nothing*/}
			{
				actionButton.focus();							
				if (document.activeElement!=null && document.activeElement.id==buttonName)					
					actionButton.onclick();
			}			
			returnValue=false;
			return false;
		}	
		return true;	
	}	
	
with (ev){
		if (keyCode=="116")
		{
			ev.returnValue = false;
			return false;
		}
		m_tabKeyDown = (keyCode=="9");
		//this code section deal with tab on editale grid
		if (keyCode=="9")
		{
		    //set attribute that indicate if the which event raise the onchnage event
				//ASAP IL0710100025        
				srcElement.setAttribute("tabkey","true");
		    if (m_handleTabKeyCode==true)
		    {   
			try
			{
				if(se.tagName != "INPUT" ) return;
				//get ref to the currnt row
				var rowObj = se.parentElement.parentElement;
				var cellObj = se.parentElement;
				var inputElm = null;
				var lastVisibleCell = -1;
				//count all visible cell on the current row
				for(var i=0;i<rowObj.cells.length;i++)
				{
					var currentCell = rowObj.cells[i];
					if(currentCell.getElementsByTagName("INPUT").length>0)
					{
						inputElm = currentCell.getElementsByTagName("INPUT")[0];
					}
					if( currentCell.style.display != "none" && inputElm!=null 
					&& inputElm.readonly!=true && inputElm.disabled!=true && 
					(inputElm.className=="input" || inputElm.className=="checkbox"))
					{
						lastVisibleCell = currentCell.cellIndex;
					}
				}
				//check if the current cell is the last one
				if( rowObj.className != "editable_grid_row" || cellObj.cellIndex != lastVisibleCell) return;
				var tblObj = rowObj.parentElement.parentElement;
				var func = tblObj.onclick;
				var pos = (func==null?-1:(func.toString()).search(/SelectEditableRow/ig));
				
				if( pos == -1 )return
				
				if(inputElm.onchange) inputElm.onchange();
				//check if the current row is the last one
				if( rowObj.rowIndex == (tblObj.rows.length-1))
				{
					var newRowAdded = validateObj.InvokeHook("f_insertNewRowOnTab",rowObj.rowIndex);
					if(newRowAdded==null || newRowAdded==false)AddNewRow("",false);
					return;
				}
				//get ref to the next row
				var nextRow = tblObj.rows[rowObj.rowIndex+1];
				
				//call the function to edit the next row after tab
				SelectEditableRow(tblObj,nextRow);
				
				//focus the first input item
				var elementCollection = nextRow.getElementsByTagName("INPUT");
				for(var i=0;i<elementCollection.length;i++)
				{
					var focusObj = elementCollection[i];
					if(focusObj.parentElement.className == "editable_grid_cell")
					{
						focusObj.focus();
						focusObj.setActive();
						break;
					}
				}
				
			}
			catch(err)
			{
				/*do nothing*/
			}
		}}
		
		if (keyCode=="113" && !(ctrlKey || altKey || shiftKey) ) {
			if (se.readOnly || se.disabled) return;
			var lupElm=document.all[se.id+"_lup"];
			
			if ((lupElm!=null)){				
				try{
					if (lupElm.length!=null ){
						if ((lupElm.type==null) && (currRow!=null) && (currTab!=null))
						lupElm=lupElm(currRow[currTab]);				
					}			
					if (lupElm.onclick) lupElm.onclick();
				}catch(e){return}			
			}
			else if (typeof(se.lookup)!="undefined"){
				LookUp(se.id);
			}
			else if ((""+se.className).search(/date/ig)>-1) {
					DateLookUp(se.id);
			}
			else if ((""+se.className).search(/time/ig)>-1) {
					TimeLookUp(se.id);
			}				
		}
		if (keyCode=="9")
		{
		    srcElement.attachEvent("onblur",AS_CheckActiveElement);
		}
		else if (typeof(m_action)!="undefined"  && ((keyCode=="83") && ctrlKey && shiftKey && !altKey))		
		{ //CTRL+SHIFT+S - Save
			if( m_action == "new")
			{
				return __RunButtonFunction("btnSubmitSelected");
			}
			else
			{
				return __RunButtonFunction("tdMenuBarItemSave");
			}
		}
		
		else if (typeof(m_action)!="undefined"  && ((keyCode=="40") && ctrlKey && shiftKey && !altKey))		
		{ 
//				alert("down");

			var pageAlias=m_currentAlias,new_PageAlias;
			var len=m_PageAliases.length-1;
			for (var i=0;i<=len;i++)
			{
				if (pageAlias==m_PageAliases[i]) break;
			}
			if (i<=len )
			{
				if (m_MenuTimer!=null) window.clearTimeout(m_MenuTimer);
				if (m_TempPageAlias==null) m_TempPageAlias=pageAlias;
				m_MenuTimer=null;
				var old_groupAlias=GetGroupByPage(pageAlias).split(":")[0];
				document.all("sub" + pageAlias +"ex").className = "clsTabControlSubItem";
				
				new_PageAlias=m_PageAliases[(i+1)%m_PageAliases.length];
				while(AO_test_disable_tab(new_PageAlias))
				{
					i=i+1;
					new_PageAlias=m_PageAliases[(i+1)%m_PageAliases.length];
				}
				var new_groupAlias= GetGroupByPage(new_PageAlias).split(":")[0];
				if (old_groupAlias!=new_groupAlias)
					_SelectTabControlItem(new_groupAlias);
//				_SelectTabControlSubItem(pageAlias);
				document.all("sub" + new_PageAlias +"ex").className = "clsTabControlSubItemSelected";
				m_currentAlias=new_PageAlias;
				m_MenuTimer=window.setTimeout("AS_OpenPage('"+m_TempPageAlias+"','"+new_PageAlias+"')",300);
//					alert("up");
					returnValue=false;
					return false;
			}
			
		}		
		else if (typeof(m_action)!="undefined"  && ((keyCode=="38") && ctrlKey && shiftKey && !altKey))		
		{
			//up
			var pageAlias=m_currentAlias,new_PageAlias;
			var len=m_PageAliases.length-1;
			for (var i=0;i<=len;i++)
			{
				if (pageAlias==m_PageAliases[i]) break;
			}
			if (i<=len )
			{
				if (m_MenuTimer!=null) window.clearTimeout(m_MenuTimer);
				if (m_TempPageAlias==null) m_TempPageAlias=pageAlias;
				m_MenuTimer=null;
				var old_groupAlias=GetGroupByPage(pageAlias).split(":")[0];				
				document.all("sub" + pageAlias +"ex").className = "clsTabControlSubItem";				
				new_PageAlias=m_PageAliases[(i+m_PageAliases.length-1)%m_PageAliases.length];
				while(AO_test_disable_tab(new_PageAlias))
				{
					i=i-1;
					new_PageAlias=m_PageAliases[(i+m_PageAliases.length-1)%m_PageAliases.length];
				}				
				var new_groupAlias= GetGroupByPage(new_PageAlias).split(":")[0];
				if (old_groupAlias!=new_groupAlias)
					_SelectTabControlItem(new_groupAlias);
//				_SelectTabControlSubItem(pageAlias);
				document.all("sub" + new_PageAlias +"ex").className = "clsTabControlSubItemSelected";
				m_currentAlias=new_PageAlias;
				m_MenuTimer=window.setTimeout("AS_OpenPage('"+m_TempPageAlias+"','"+new_PageAlias+"')",300);
				
//					alert("up");
					returnValue=false;
					return false;
			}
			
		}				
		else if ( typeof(m_action)!="undefined"  && ctrlKey && shiftKey && (keyCode==76))//Ctrl+Shift+L
		{
			try
			{
				KB_XrefFormUpdate()
			}catch(e)
			{
			}
		}
		else if ((keyCode=="70") && ctrlKey && shiftKey && !altKey)
		{ //CTRL+SHIFT+F
			if (window.dialogArguments==null)
			{
				_TongueMoveIt();
				_SelectSection('Search',null,5)
				returnValue=false;
				return false;
			}
		}
		else if ((keyCode=="13"))		
		{
			var searchBtnObj = document.getElementById("btnSearch");
			if(searchBtnObj != null && searchBtnObj.getAttribute("typeex") == "submit")
			{
				if( !validateObj.IsNothing(block) && block.posLeft < 0 )
				{
					searchBtnObj.click();
					event.returnValue = false;
					return false;
				}
			}
		}
		else if ((keyCode=="118") && ctrlKey && shiftKey && !altKey)
		{ //CTRL+SHIFT+F7 - Spell
			AO_ShowSpellChecker();
		}	
		else if ((keyCode=="78") && ctrlKey && shiftKey && !altKey)
		{ //CTRL+SHIFT+N - New
			var res =  __RunButtonFunction("tdMenuBarItemNew"); //ASAP #IL0407070015
			if(!res)//launch save and new operation (A Sync)
			{
			    res = __RunButtonFunction("tdMenuBarItemSaveAndNew");
			}
			return res;
		}		
		else if ((keyCode=="84") && ctrlKey && shiftKey && !altKey)
		{ //CTRL+SHIFT+T - Display Trace Log
		    ShowOutputWindow();
			return false;
		}	
	    else if ((keyCode=="69") && ctrlKey && shiftKey && !altKey)
		{ //CTRL+SHIFT+E - Save new record and exit
			return __RunButtonFunction("tdMenuBarItemSaveAndExit");
		}
			
		else if ((keyCode=="80") && ctrlKey && shiftKey && !altKey)
		{ //CTRL+SHIFT+P - portal
			return __RunButtonFunction("tdMenuBarItemPortal");
		}						
		
		else if ((keyCode=="81") && ctrlKey && shiftKey && !altKey)
		{ //CTRL+SHIFT+Q - QBE
			return __RunButtonFunction("tdMenuBarItemClose");
		}						
		else if ((keyCode=="65") && ctrlKey && shiftKey && !altKey)
		{ //CTRL+SHIFT+A - Apply
			return __RunButtonFunction("tdMenuBarItemApply");
		}														
		else if ((keyCode=="84") && ctrlKey && shiftKey && !altKey)
		{ //CTRL+SHIFT+T - Attachments
			return __RunButtonFunction("tdMenuBarItemAttach");
		}						
		else if ((keyCode=="77") && ctrlKey && shiftKey && !altKey)
		{ //CTRL+SHIFT+M - Mail
			return __RunButtonFunction("tdMenuBarItemCommun");
		}	
		else if ((keyCode=="82") && ctrlKey && shiftKey && !altKey)
		{ //CTRL+SHIFT+R - Report
			return __RunButtonFunction("tdMenuBarItemReport");
		}			
		else if ((keyCode=="68") && ctrlKey && shiftKey && !altKey)
		{ //CTRL+SHIFT+D - Delete
			return __RunButtonFunction("tdMenuBarItemDelete");
		}							
		else if ((keyCode=="79") && ctrlKey && shiftKey && !altKey)
		{ //CTRL+SHIFT+X - Export
		    if(typeof(gPortalName) == "undefined")
		    {
			    return __RunButtonFunction("tdMenuBarItemExport");
			}
			else
			{
			    Export();
			}
		}					
		else if ((keyCode=="72") && ctrlKey && shiftKey && !altKey)
		{ //CTRL+SHIFT+F - Refresh
			return AO_RefreshModule(true);
		}	
		/*else if ((keyCode=="80") && ctrlKey && altKey)
		{ //CTRL+SHIFT+P - Print
		   try
		    {
		        //window.attachEvent("onafterprint",AO_OnAfterPrint);
		        document.body.insertAdjacentHTML("beforeEnd","<object id=\"idWBPrint\" width=0 height=0 \classid=\"clsid:8856F961-340A-11D0-A96B-00C04FD705A2\"></object>");
		        var idWBPrint = document.getElementById("idWBPrint");
                idWBPrint.ExecWB(6, 2);
                idWBPrint.outerHTML = "";
            }
            catch(err)
            {
                //alert(err.description);
            }
            return false;
		}*/
		else if ((typeof(m_action)!="undefined") && ((keyCode>="49" && keyCode<="57") && ctrlKey && shiftKey && !altKey))
		{ //CTRL+SHIFT+[1-9] handle nevigation between groups on new page
			if( m_action != "new" ) return;
			var keyNumber = (parseInt(keyCode)-48);
			if( typeof(m_GroupAliases[keyNumber-1] ) == "undefined" || m_GroupAliases[keyNumber-1] == "btnSubmit")
			{
				if( m_GroupAliases[keyNumber-1] == "btnSubmit" )
				{
					var btnSubmitObj = document.getElementById("btnSubmit");
					if( btnSubmitObj != null && btnSubmitObj.firstChild.tagName.toLowerCase() == "button")
					{
						btnSubmitObj.firstChild.focus();
						btnSubmitObj.firstChild.focus();
					}
				}
				return false;
			}
			AO_NextGroup(m_GroupAliases[keyNumber-1]);
		}
	}	
	try{
		return AO_HandleKey(ev);
	}catch(e){/*nothing*/}
}

/*function AO_OnAfterPrint()
{
    alert("finish");
}*/
//=============== spell check functions
function AO_ShowSpellChecker(inptObj)
{
	try
	{
		if(_GetGlobalVar("ActivateDictionary")=="true" || _GetGlobalVar("ActivateDictionary")==true)
		{
			if(typeof(inptObj)=="string")
				inptObj = document.getElementById(inptObj);
			else
				inptObj = validateObj.IsNothing(inptObj)?document.activeElement:inptObj;
			if((inptObj!=null) && (inptObj.tagName.toLowerCase() == "textarea" ||
				inptObj.tagName.toLowerCase() == "input") && (inptObj.value!="") &&
				(inptObj.disabled==false && inptObj.readOnly==false))
			{
				return checkSpellingById(inptObj.id);
			}
		}
	}
	catch(err)
	{/*do nothing*/}
}

//=======================================
function AS_OpenPage(old_pageAlias,new_PageAlias)
{
	m_TempPageAlias=null;
	m_MenuTimer=null;
	window.status=m_MenuTimer;
	m_currentAlias=old_pageAlias;
	_OpenPage(new_PageAlias);
	
	
}

function AO_tryResize(){
try{
	if (window.dialogArguments) return true;
  	var md=document.getElementById("MainDiv");
	if (md!=null){
		var xslHeight = document.getElementById('_MainTable').clientHeight;
		md.style.height = xslHeight;
		if (md.style.pixelWidth<1012){
			md.style.width="1012";
		}
	}
 }catch(e){  
 return false;/*do nothing*/
 }
return true;
}

function Pad(val,w,c) {
	val=val.toString();
	while(val.length<w) val=c + val;
	if (val.length>w)val=val.substr(val.length-w);
	return val;
}	

/// <summary>
/// The opposite of AO_UDF function, used mainly to put date values from user input into the XML.
/// </summary>
/// <param name="s">date string in client format, for example  mm/dd/yy 09/25/03</param>
/// <returns>the date in XML format 2003-09-25</returns>
function GoInternal(s) {  // Write internal format (y/m/d) to internal1 field
	try
	{
		var d = new Date();
		s = s.trim();
		var res = d.ParseFromLocaleFormat(s);
		if( !res )
		{
		    return ":MSK006";
		} 
		else if(!res && s.indexOf(m_sep) == -1)
		{
			return AO_GetMesg("MSK007",Array(m_sep));
			//return (':Use "' + m_sep + '" for the seperator');
		}
		else if(!res && s.indexOf(m_sep) > -1 && s.split(m_sep)<3)
		{
			return AO_GetMesg("MSK008",Array(m_sep));
			//return (':Need 2 seperators ("' + m_sep + '")');
		}
		return d.ToInternalFormat();
	}
	catch(err)
	{
		return ':'+AO_GetMesg("MSK006");
	}
}


function ao_ModalWindow(fileDir,fileName,acTion,Args,ArgFeatures){
	
	var WinStrURL,WinArguments="",WinFeatures
	var TmpArr1,TmpArr2
		if(acTion.trim().length==0){
			alert("Cannot proceed! The acTion parameter is missing");
			return false;
		}
			
		//handle sent arguments
		if(Args.length <= 0){
			WinArguments='';
		}
		else{
			
			TmpArr1=Args[0].split("^");
			TmpArr2=Args[1].split("^");
				for (var i=0; i < TmpArr1.length; i++){
					
					WinArguments+=TmpArr1[i] + "=" + TmpArr2[i];
					if (TmpArr1[i+1] != null) WinArguments+="&";
				}
		}
	
		// handle sent features
		if(ArgFeatures.length <= 0){
			WinFeatures="scroll:no;status:no;resizable:no;dialogWidth:950px;dialogHeight:530px";
		}
		else{
				if (ArgFeatures[0].trim()!=""){
					WinFeatures="scroll:"+ ArgFeatures[0]+";";
				}
				else{
					WinFeatures="scroll:no;";
				}
				
				if (ArgFeatures[1].trim()!=""){
					WinFeatures+="status:"+ ArgFeatures[1]+";";
				}
				else{
					WinFeatures+="status:no;";
				}
				
				if (ArgFeatures[2].trim()!=""){
					WinFeatures+="resizable:"+ ArgFeatures[2]+";";
				}
				else{
					WinFeatures+="resizable:no;";
				}
				
				if (ArgFeatures[3].trim()!=""){
					if(ArgFeatures[3].indexOf("%") > -1)
					{
						WinFeatures+="dialogWidth:"+ parseInt(parseInt(ArgFeatures[3])/100*screen.width)+"px;";
					}
					else
					{
						WinFeatures+="dialogWidth:"+ ArgFeatures[3]+"px;";
					}
				}
				else{
					WinFeatures+="dialogWidth:950px;";
				}
				
				if (ArgFeatures[4].trim()!=""){
					if(ArgFeatures[4].indexOf("%") > -1)
					{
						WinFeatures+="dialogHeight:"+ parseInt(parseInt(ArgFeatures[4])/100*screen.height)+"px";
					}
					else
					{
						WinFeatures+="dialogHeight:"+ ArgFeatures[4]+"px";
					}
				}
				else{
					WinFeatures+="dialogHeight:530px";
				}
				
		}	
	if (WinArguments!="") WinArguments="&"+WinArguments;
	WinArguments=WinArguments.replace(/\//g,"%2F");//ASAP #IL0501300009
	WinStrURL='../'+fileDir+'/'+fileName+'?action='+acTion+WinArguments;
	
	return window.showModalDialog(WinStrURL,null,WinFeatures);
}

// Maybe we need to handle cases with multiple windows (opener)
function _RemoveGlobalVar(name){
	var win;
	try{
		if (window.dialogArguments) win=window.dialogArguments[window.dialogArguments.length-1];
		else if (window.opener) win=window.opener.top.control_frame;
		else if (window.top) win=window.top.control_frame;
	}catch(e){/* nothing*/}	
	if(!win || typeof(win.m_GlobalVars)=="undefined") return false;

	delete win.m_GlobalVars[name]	
}
function AO_GetPrimaryWindow()
{
 if(window.dialogArguments)
 {
  return  window.dialogArguments[window.dialogArguments.length-1]
 }
 else if(window.opener)
 {
  return window.opener.AO_GetPrimaryWindow();
 }
 else if(this.frameElement.tagName.toLowerCase()=="iframe")
 {
	return this.frameElement.parentElement.document.parentWindow.opener.AO_GetPrimaryWindow();
 }
 else
  return this
}


function _SetGlobalVar(name,value)
{	
	var win = AO_GetPrimaryWindow();
	win.top.control_frame.m_GlobalVars[name] = value;
}

function ExecuteCommand(commandType,commandParameter)
{
    var win  = AO_GetPrimaryWindow();
	var commandButton = win.top.control_frame.document.getElementById("CommandButton");
	commandButton.setAttribute("CommandParameter",commandParameter);
	commandButton.setAttribute("CommandType",commandType);
	commandButton.click();
}

function _GetGlobalVar(name)
{	
	var win  = AO_GetPrimaryWindow();
	if(typeof(win.top.control_frame.m_GlobalVars) == "undefined") return null;
	return win.top.control_frame.m_GlobalVars[name];
}

//US040645@@1 Andrew D'Antonio 5/11/09
function AO_ConsistsURLValue(sourceURL,url)
{
    var length = url.length;
    var index =  url.lastIndexOf("/");
    if(index == -1)
        return false;
    var aspPage = url.substr(index +1,length - index);
    if(sourceURL.toLowerCase().indexOf(aspPage.toLowerCase()) > -1)
        return true;
    return false;
}
//End US040645@@1 Andrew D'Antonio 5/11/09

/////////////// Window Handling /////////////////////

function AS_PreserveWindowHandler(winHandler,name)
{
    var win = AO_GetPrimaryWindow();
    var preservedWinHandler = win.top.control_frame.m_PreservedWinHandler;
    
    for(var key in preservedWinHandler)
    {
        if(preservedWinHandler[key]!=null && preservedWinHandler[key].closed)
        {
            preservedWinHandler[key] = null;
        }
    }
    preservedWinHandler[new Date().getTime()] = winHandler;
//    _SetGlobalVar("CurrentOpenedTab", winHandler);
//    setTimeout("_GetGlobalVar('CurrentOpenedTab').frames['main_frame'].AS_DisplayLogout()",2000);
}

function AS_CloseOpenedWindow(key)
{
    var win = AO_GetPrimaryWindow();
    var preservedWinHandler = win.top.control_frame.m_PreservedWinHandler;
    try
    {
        var winHandler = preservedWinHandler[key];
        //preservedWinHandler[key] = null;  
        if(winHandler!=null && !winHandler.closed)
        {
            if(typeof(winHandler.m_StateID)!="undefined" && winHandler.m_StateID!=-1)
            {   
                winHandler.AO_CloseState();
            }
            winHandler.close();
            winHandler = null;
        }
     }
     catch(err)
     {}
}

function AS_IsOpenedWindow()
{
    var win = AO_GetPrimaryWindow();
    var preservedWinHandler = win.top.control_frame.m_PreservedWinHandler;
    try
    {
        for(var key in preservedWinHandler)
        {
            var winHandler = preservedWinHandler[key];
            if(winHandler!=null && !winHandler.closed) return true;
        }
     }
     catch(err)
     {}
     return false;
}

function AS_CloseAllOpenedWindow()
{
    var win = AO_GetPrimaryWindow();
    var preservedWinHandler = win.top.control_frame.m_PreservedWinHandler;
    for(var key in preservedWinHandler)
    {
        AS_CloseOpenedWindow(key);
    }
}


function AS_DisplayLogout()
{
    _SetGlobalVar("IsChildWindow","Y");
    _SetGlobalVar("ExternalAppEntrance", null);
    document.getElementById('logout').style.display = 'inline';
    document.getElementById('logout').style.visibility="visible";
}

/////////////////////////////////////////////////////////////////

//window.open handler
function AO_OpenWindow(sURL , sName , sFeatures )
{
    if(AO_OpenInAsteaBrowser(sURL)) return;
    var maxWin = true;
    var bPreserve = true;
    if( AO_OpenWindow.arguments.length == 4 )
    {
        maxWin = AO_OpenWindow.arguments[3];
    }
    if( AO_OpenWindow.arguments.length == 5 )
    {
        bPreserve = AO_OpenWindow.arguments[4];
    }
    if(typeof(AO_ShowElementID)!="undefined") AO_ShowElementID();
    var winHandler = windowOpenOrigFunc(sURL,sName,sFeatures);
    if(bPreserve && (opener == null || (opener.document.location.href != winHandler.document.location.href)))
    {
        AS_PreserveWindowHandler(winHandler,sName);
    }
    if(maxWin)maximizeIE(winHandler);
    return winHandler;
}

//open the specified url in astea browser instead in a new opened window
function AO_OpenInAsteaBrowser(sURL)
{
    if(_GetGlobalVar("IsAsteaBrowser")!=true) return false;
    for(var key in m_filterUrl)
    {
        if( sURL.indexOf(key)>-1)
        {
            ExecuteCommand(m_filterUrl[key],sURL);
            return true;
        }
    }
    return false;
}

function AO_ShowModalDialog(sURL , vArguments , sFeatures)
{
    if(AO_IsConnectedWindow()) return;
	var useAutoResizing = true;
	if(AO_ShowModalDialog.arguments!=null && AO_ShowModalDialog.arguments.length == 4)
	{
		_SetGlobalVar("UseAutoResizing",AO_ShowModalDialog.arguments[3]);
	}
	var win = AO_GetPrimaryWindow();
	if (sFeatures==null)sFeatures="";
	if (vArguments==null){
		vArguments=new Array()
		vArguments[0]=win.top.control_frame
	}
	else if (vArguments instanceof Array)
	{
		if(vArguments.length==0 || vArguments[vArguments.length-1] == null ||typeof(vArguments[vArguments.length-1].name) == "undefined"
			|| vArguments[vArguments.length-1].name != "control_frame")
		{
			vArguments[vArguments.length]=win.top.control_frame;
		}
	}
	else if (typeof(vArguments)=="object" || typeof(vArguments)=="string"){
		var tmpArg=vArguments;
		vArguments=new Array();
		vArguments[0]=tmpArg;
		vArguments[1]=win.top.control_frame;
	}
	if(typeof(AO_ShowElementID)!="undefined") AO_ShowElementID();
	var clockMode = (document.getElementById("mainTimerDiv")!=null && typeof(ContinueTimer) != "undefined");
	if(clockMode) FreezeTimer();
	var result=showModalDialogOrigFunc(URLEncode(sURL),vArguments,sFeatures)
	if(clockMode) ContinueTimer();
	return result
}

/// <summary>
/// For internal Framework. Checks if the server error contains invalid state, if true displays relevant
/// message to the user and reloads the current page.
/// </summary>
/// <return>true/false</return>
function AS_HandleInvalidState(serverError)
{
    if( serverError.indexOf("INVALID_STATE;") == -1 ) return false;
    WriteError(AO_GetMesg("AO09041"));
    m_EnforceLooseMsg = false;
    document.location.reload(true);
    return true;
}

/// <summary>
/// For internal Framework. Checks if the server error contains optimistic lock message, if true
/// displays confirm message to the user to refresh the module.
/// </summary>
/// <param name="serverError">[required] the server error to verify</param>
/// <param name="confirm">[optiona, default true]if true displays the confirm message</param>
/// <return>true/false</return>
function AS_HandleOptimisticLock(serverError,confirm)
{
    if( serverError.indexOf("LOCK_OPTIMISTIC;") == -1 ) return false;
    confirm = typeof(confirm)=="undefined"?true:confirm;
    var sUserName = "";
    var oMatch = serverError.match(/\s*LOCK_OPTIMISTIC;\w*\W*\d*\s*/g);
    if( oMatch != null )
    {
        var sError = oMatch[0];
        sUserName = sError.split(";")[1].trim();
    }
    if(!confirm) return AO_GetMesg("SYS062",Array(sUserName));
    var sMsg = AO_GetMesg("SYS061",Array(sUserName));
	var ans=AO_LockOptimisticConfirm(sMsg);
	//question:The data that you are currently using has been changed by {0} or a batch process. Please refresh the screen, and reapply your changes -->
	//yes=6 close the state and refresh the screen.
	//no=7 do nothing.
	switch (ans){
		case 6: 
			AO_CloseState();
			AO_RefreshModule(false);
			break;
		case 7:
			break;
	}
	return true;
}
function URLEncode(str){
	str=str.replace(/\+/g,"%2B");
	str=str.replace(/\&/g,"%26");
	str=str.replace(/\#/g,"%23");
	str=str.replace(/\s/g,"%20");	
	return str;
}
function URLDecode(str){
	str=str.replace(/\%26/g,"&");
	str=str.replace(/\%23/g,"#");
	str=str.replace(/%2B/g,"+");
	str=str.replace(/%20/g," ");
	return str;
}
function HTMLEncode(sHtml)
{
    if(typeof(sHtml) != "string") return "";
    sHtml=sHtml.replace(/\</g,"&lt");
	sHtml=sHtml.replace(/\>/g,"&gt");
	return sHtml;
}
function AO_IsConnectedWindow()
{
	return (window.name.indexOf("ConnectedWindow") > -1);
}

function AO_RefreshModule(fromCahce)
{
	FrameStatus("Set","Refresh");
	document.location.reload(fromCahce);
}

function AO_GetApplicationURL()
{
     var hostName  = window.location.host;
     var applicationName = window.location.pathname.split("/")[1];
     var protocol = window.location.protocol;
     var sUrl = new String("{0}://{1}/{2}");
     return sUrl.Format(sUrl,protocol,hostName,applicationName);
}

function AO_Redirect(locationStr,doc,noCache)
{
	if(!doc)
	{
		doc = document;
		noCache = false;
	}
	if(!noCache)
	{
		if(typeof doc=='object')
		{
			noCache = false;
		}
		else
		{
			noCache = doc;
			doc = document;
		}
	}
	var pageParams=__GetQueryString(locationStr);
	if(pageParams)
	{
		_SetGlobalVar("_PageParameters", pageParams);
		_SetGlobalVar("_FullPageLocation", "<![CDATA["+locationStr+"]]>");
	}
	if (window) window.status="";
	var fullPageLocation = _GetPageFullName(locationStr);
	if( CheckBGFrames(fullPageLocation) == false )
	{
		doc = GetMainDocument(fullPageLocation,pageParams,doc);
		//insert page on cache only for the main frame
		if(doc.location.href==fullPageLocation && GetCurrentFrameName()=="main_frame")
		{
			doc.location.reload(noCache);
		}
		else	
		{
			if(ActivateFrames() && !validateObj.IsNothing(pageParams) || noCache==true)
			{
				doc.location.replace(fullPageLocation);
			}
			else
			{
				    //US040645@@1 Andrew D'Antonio 5/11/09
			    //doc.location = fullPageLocation;
                if(AO_ConsistsURLValue(doc.location.href,fullPageLocation))
                    doc.location = locationStr;
                else
                    doc.location = fullPageLocation;
                //End US040645@@1 Andrew D'Antonio 5/11/09
			}
		}
	} 
}

//this function check if we can activate the frames operation
function ActivateFrames()
{
	if(!m_RealoadPage){return true;}
	if(GetCookie("ActivateFrame") == "Y") return true;
	if(window.dialogArguments)
	{
		return  false;
	}
	else if(window.opener)
	{
		return false;
	}
	
	else return false;
}

//xxx
function GetActiveFrameIndex(frameRows)
{
	var rowIndex=0;
	try
	{
		frameRows = validateObj.IsDefined(frameRows)?frameRows.split(","):AO_GetPrimaryWindow().top.document.all.myframeset.getAttribute("rows").split(",");	
		for(rowIndex=0;rowIndex<frameRows.length;rowIndex++)
		{
			if(frameRows[rowIndex] == "100%") break;
		}
	}
	catch(err)
	{/*do nothing*/}
	return rowIndex;
}
//this function get/set the status of specified frame
//param 1 -string- get or set
//param 2 -string- frame status
//param 3 -string- frame name 
function FrameStatus(modifier,status,frameName)
{
	if(!ActivateFrames()) return;
	var primaryWin = AO_GetPrimaryWindow();
	var attrVal = null;
	var frameObj = null;
	
	frameObj = validateObj.IsDefined(frameName)?eval("primaryWin.top."+frameName+".frameElement"):primaryWin.frameElement;
	
	if( modifier == "Get")
	{
		attrVal = frameObj.getAttribute("LoadStatus");
	}
	else if( modifier == "Set")
	{
		attrVal = status;
		frameObj.setAttribute("LoadStatus",status);
	}
	else if( modifier == "Remove")
	{
		frameObj.removeAttribute("LoadStatus");
	}
	
	return attrVal;
}
//this function check if we need to execute code section 
//only once when the page is loaded into the frame
function DoSingleOperation()
{
	if(validateObj.IsNothing(window.frameElement) == false  &&
		window.frameElement.getAttribute("LoadStatus") != null)
	{
		return !m_pageFirstLoaded;
	}
	
	return true;
}
//this function get the current frame name
function GetCurrentFrameName()
{
	var primaryWin = AO_GetPrimaryWindow();
	return primaryWin.frameElement.name;
}

function GetFrameObj(frameName)
{
	if(validateObj.IsDefined(frameName) == false) frameName = "main_frame";
	return eval("AO_GetPrimaryWindow().top."+frameName+".window");
}

//check the current frame name
function CheckCurrentFrame(frameName)
{
	var primaryWin = AO_GetPrimaryWindow();
	if(validateObj.IsDefined(frameName) == false) frameName = "main_frame";
	if(primaryWin.frameElement.name == frameName)
	{
		return true;
	}
	
	return false;
}
//get ref to the current frame document object
//param 1 -string- locatio string
//param 2 -string- page query string paramteres
function GetMainDocument(location,pageParam,defaultDoc)
{
	var primaryWin = AO_GetPrimaryWindow();
	var doc = validateObj.IsDefined(defaultDoc)==false?document:defaultDoc;
	if(!ActivateFrames()) return doc;
	//if we navigate from portal page / or the carmen bar
	//get the reference to the document
	//that should contain the page according to the page type
	if( !validateObj.IsNothing(pageParam) )
	{
		var queryString = new QueryString(pageParam);
		var actionType = queryString.ItemByName("action");
		//check the action type
		switch(actionType)
		{
			//handle/maint page
			case "retrieve":
				primaryWin.top.document.all.myframeset.setAttribute("rows","0,0,0,100%,0",false);
				//_SetGlobalVar("FrameSetRow",primaryWin.top.document.all.myframeset.getAttribute("rows"));	
				doc = primaryWin.top.secondFrame.document;
				FrameStatus("Set","Loader","secondFrame");
				break;
			//handle new page
			case "new","newwithparamsui":
				primaryWin.top.document.all.myframeset.setAttribute("rows","0,0,0,0,100%",false);	
				//_SetGlobalVar("FrameSetRow",primaryWin.top.document.all.myframeset.getAttribute("rows"));	
				doc = primaryWin.top.thirdFrame.document;
				FrameStatus("Set","Loader","thirdFrame");
				break;
		}
		return doc;
	}
	else if(GetCurrentFrameName() != "control_frame")
	{
		//if the current frame is not the main frame
		//set the doc ref to the main_frame document 
		//and display the main_frame
		if(GetCurrentFrameName() != "main_frame")
		{
			if(primaryWin.top.document.all.myframeset.getAttribute("rows").split(",")[0] != "100%")
			{
				//primaryWin.top.main_frame.frameElement.style.display = "block";
				primaryWin.top.document.all.myframeset.setAttribute("rows","100%,0,0,0,0",false);
			}
			doc = primaryWin.top.main_frame.document;
		}
		
		FrameStatus("Set","Loader","main_frame");
	}
	return doc;
}
//this function check the current frame location and display the correct frame
function CheckBGFrames(location)
{
	var operationRes = false;
	
	try
	{
		if( !m_RealoadPage )
		{
			FrameStatus("Set","Loaded","main_frame");
			ExecReteriveWithLayout("maint");
			return true;
		}
		
		if( (typeof(m_NavigateTo) != "undefined") && ActivateFrames() )
		{
			//chekc navigation pages
			if( m_NavigateTo.length != 3 ) return operationRes;
			var index = 0;
			if(location.indexOf("?") > -1 )
			{
				location = location.substr(0,location.indexOf("?")-1);
			}
			for(var index=0;index<m_NavigateTo.length;index++)
			{
				if((m_NavigateTo[index].toLowerCase()).indexOf(location.toLowerCase()) > -1)
				{
					break;
				}
			}
			if( index == 3 )
			{
				var primaryWin = AO_GetPrimaryWindow();
				var frameName = "";
				if(location.search(/_qbe/gi) > -1)
				{
					frameName = "main_frame";
					index = 0;
				}
				else if(location.search(/_new/gi) > -1)
				{
					frameName = "thirdFrame";
					index = 1;
				}
				else if(location.search(/_maint/gi) > -1)
				{
					frameName = "secondFrame";
					index = 2;
				}
				
				var destLocationFrame = eval("primaryWin.window.top."+frameName+".document.location.href");
				if( location.indexOf(_GetPageName(destLocationFrame)) == -1 )
				{
					index = 3;
				}
			}
			
			switch(index)
			{
				case 0:
					//display the scroller page in the main frame only if the 
					//current page is not in the main frame
					if( CheckCurrentFrame() == false)
					{
						RunReteriveAndDisplayLayout("scroller");
						operationRes = true;
					}
					break;
				case 1:
					RunReteriveAndDisplayLayout("new");
					operationRes = true;
					break;
				case 2:
					RunReteriveAndDisplayLayout("maint");
					operationRes = true;
					break;
			}
		}
	}
	catch(err)
	{/*do nothing*/}
	return operationRes;
}
//this function display the requested frame and run the retrieve function on the frame scope
function RunReteriveAndDisplayLayout(pageName)
{
	var primaryWin = AO_GetPrimaryWindow();
	m_executeFinalCommand = null;
	
	if( pageName == "scroller" )
	{
		primaryWin.top.main_frame.window.FullDisplayCurrentFrame("scroller");
		primaryWin.top.document.all.myframeset.setAttribute("rows","100%,0,0,0,0",false);
	}
	else if( pageName == "new" )
	{
		if(FrameStatus("Get",null,"thirdFrame") == "Loaded")
		{
			primaryWin.top.thirdFrame.window.ExecReteriveWithLayout("new");
		}
		else
		{
			primaryWin.top.thirdFrame.window.m_executeFinalCommand = "FrameStatus('Set','Loaded');\n\t";
			primaryWin.top.thirdFrame.window.m_executeFinalCommand += "ExecReteriveWithLayout();";
		}
		primaryWin.top.document.all.myframeset.setAttribute("rows","0,0,0,0,100%",false);
	}
	else if( pageName == "maint" )
	{
		if(FrameStatus("Get",null,"secondFrame") == "Loaded")
		{
			primaryWin.top.secondFrame.window.ExecReteriveWithLayout("maint");
		}
		else
		{
			primaryWin.top.secondFrame.window.m_executeFinalCommand = "FrameStatus('Set','Loaded');\n\t";
			primaryWin.top.secondFrame.window.m_executeFinalCommand += "ExecReteriveWithLayout();";
		}
		primaryWin.top.document.all.myframeset.setAttribute("rows","0,0,0,100%,0",false);
	
	}
}
//this function display the current frame by 100%
function FullDisplayCurrentFrame(pageName)
{	
	if(pageName == "scroller")
	{
		var inputs = _searchTable.getElementsByTagName("INPUT");
		if( inputs.length > 0 )
		{
			inputs[0].focus();
		}
	}
	return;
	var primaryWin = AO_GetPrimaryWindow();
	if( GetCurrentFrameName() == "main_frame")
	{
		primaryWin.top.document.all.myframeset.setAttribute("rows","100%,0,0,0,0",false);
	}
	else if( GetCurrentFrameName() == "secondFrame")
	{
		primaryWin.top.document.all.myframeset.setAttribute("rows","0,0,0,100%,0",false);
	}
	else if( GetCurrentFrameName() == "thirdFrame")
	{
		primaryWin.top.document.all.myframeset.setAttribute("rows","0,0,0,0,100%",false);
	}
}
function EntryPoint(acs,val)
{
	if(!ActivateFrames()) return false;
	var primaryWin = AO_GetPrimaryWindow();
	if(acs == "Get")
	{
		return primaryWin.top.document.all.myframeset.getAttribute("EntryPoint");
	}
	else if(acs == "Set")
	{
		primaryWin.top.document.all.myframeset.setAttribute("EntryPoint",val);
	}
	else if(acs == "Remove")
	{
		primaryWin.top.document.all.myframeset.removeAttribute("EntryPoint");
	}
}
//this function load all other pages in specified frame
//param 1 -string- the loader frame name scroller,main or new
function LoadingFrames(parentName)
{
	if(!ActivateFrames() ||FrameStatus("Get") != "Loader") return;
	parentName = validateObj.IsDefined(parentName)?parentName:"maint";
	EntryPoint("Set",parentName);
	switch(parentName)
	{
		case "scroller":
			LoadMaintPage();
			LoadNewPage();			
			//FrameStatus("Set","Loader");
			break;
		case "maint":
			LoadScrollerPage();
			LoadNewPage();
			//FrameStatus("Set","Loader");
			break;
		case "new":
			LoadMaintPage();
			LoadScrollerPage();
			//FrameStatus("Set","Loader");
			break;
	}
}
/////////////////////////////// --LoadMaintPage
//this function load the maint page if the page exists
function LoadMaintPage()
{
	if(typeof(m_NavigateTo)=="undefined" || m_NavigateTo[2]==null 
	|| m_NavigateTo[2]=="" || m_NavigateTo[2]=="undefined") return;
	
	var primaryWin = AO_GetPrimaryWindow();
	FrameStatus("Set","_BackgroundLoading","secondFrame");
	//primaryWin.top.secondFrame.window.document.location.href = _GetPageFullName(m_NavigateTo[2]);
	primaryWin.top.secondFrame.window.document.location.replace(_GetPageFullName(m_NavigateTo[2]));
}

/////////////////////////////// --LoadNewPage
//this function load the new page if the page exists
function LoadNewPage()
{
	if(typeof(m_NavigateTo)=="undefined" || m_NavigateTo[1]==null 
	|| m_NavigateTo[1]=="" || m_NavigateTo[1]=="undefined") return;
	
	var primaryWin = AO_GetPrimaryWindow();
	FrameStatus("Set","_BackgroundLoading","thirdFrame");
	//primaryWin.top.thirdFrame.window.document.location.href = _GetPageFullName(m_NavigateTo[1]);
	primaryWin.top.thirdFrame.window.document.location.replace(_GetPageFullName(m_NavigateTo[1]));
}

/////////////////////////////// --LoadScrollerPage
//this function load the scroller page if the page exists
function LoadScrollerPage()
{
	if(typeof(m_NavigateTo)=="undefined" || m_NavigateTo[0]==null 
	|| m_NavigateTo[0]=="" || m_NavigateTo[0]=="undefined") return;
	
	var primaryWin = AO_GetPrimaryWindow();
	FrameStatus("Set","_BackgroundLoading","main_frame");
	//primaryWin.top.main_frame.window.document.location.href = _GetPageFullName(m_NavigateTo[0]);
	primaryWin.top.main_frame.window.document.location.replace(_GetPageFullName(m_NavigateTo[0]));
}

function ClearFrames()
{
	if(!ActivateFrames()) return;
	return;
}

function AO_LocationReplace(locationStr,doc,saveLastViewPage)
{
	var  fullPageLocation = _GetPageFullName(locationStr);
	var  pageParams		  = __GetQueryString(locationStr);
	
	if(!doc)
	{
		doc = document
	}
		
	if(pageParams)
	{
		_SetGlobalVar("_PageParameters", pageParams);
	}
	if(saveLastViewPage) SetCurrentPage();
	if( CheckBGFrames(fullPageLocation) == false )
	{
		doc = GetMainDocument(fullPageLocation,pageParams,doc);
		doc.location.replace(fullPageLocation);
	}
}

function __GetQueryString (locationString)
{
	var pos = locationString.indexOf("?")
	
	if (pos == -1) return "";
	var str=locationString.substr(pos+1);
	var strArr=str.split("&");
	
	var lng=strArr.length;
	var strLoc=strArr[0];
	for (var i=1;i<lng;i++){		
		if (strArr[i].indexOf("=")>-1 ){			
			strLoc+="&"+strArr[i];
		}
		else {
			strLoc+="%26"+strArr[i];;
		}
	}
	return strLoc;
}
/*
function __QueryString(locationString,param)
{
	var pos = locationString.indexOf("?")
	var str=locationString.substr(pos+1);
	var strArr=str.split("&");
	var val = "";
	
	for(var index=0;index<strArr.length;index++)
	{
		if(strArr[index].split("=")[0] == param)
		{
			val = strArr[index].split("=")[1];
			break;
		}
	}
	
	return val;
}*/

function _GetPageName(locationString)
{
	var end = locationString.indexOf("?");
	if(end==-1)
	{
	    return locationString.substr(locationString.lastIndexOf("/") + 1);
	}
	locationString = locationString.substring(0,end);
	var start = locationString.lastIndexOf("/") + 1;
	if (end == -1) end = locationString.length;
	
	return locationString.substring(start,end);
}

function _GetPageFullName(locationString)
{
	var start = 0
	var end = locationString.indexOf("?")
	
	if (end == -1) end = locationString.length;
	
	return locationString.substring(start,end);
}

function _GetCurrentPageName()
{	
	var pageName = _GetPageName(document.location.href).toLowerCase()
	return pageName.substring(0,pageName.length - 4)	
}

function OpenNewWindow(navigateStr)
{
    var stringUrl = _GetPageFullName(window.top.location.href);
    stringUrl += "?ExtSessionID="+_GetGlobalVar("SessionID")+"&Recover=N&IsChildWindow=Y";
    if(navigateStr==null)
    {
        var pageName = _GetPageName(location.href)
        if(typeof(m_action) == "undefined")
        {
            stringUrl += "&ExtPage=scrl_asp/"+pageName;
        }
        else if((typeof(m_action) != "undefined") && (m_action=="new" || m_action=="maint"))
        {
            stringUrl += "&ExtPage=form_asp/"+pageName;
            stringUrl += "?"+_GetGlobalVar(_GetPageName(document.location.href));
        }
    }
    else
    {
        stringUrl += "&ExtPage="+navigateStr;
    }
    if(_GetGlobalVar("IsAsteaBrowser")==true)
    {
        ExecuteCommand("OpenNewTab","");
    }
    else
    {
        return window.open(stringUrl,'','height=700,width=900,status=yes,toolbar=yes,menubar=yes,location=yes,titlebar=yes,scrollbars=yes,resizable=yes',null,true);
    }
}


function _GetRelativePagePath(locationString)
{
	if(locationString == null)
		locationString = document.location.href

	locationString = locationString.toLowerCase()

	var start = locationString.lastIndexOf("/")

	start = locationString.substring(0,start).lastIndexOf("/") + 1

	var end = locationString.indexOf("?")
	
	if (end == -1) end = locationString.length;
	
	return locationString.substring(start,end);
}

function _EnableSearchBtn(ths)
{
   document.getElementById('SearchMenuBar_btn').disabled=(ths.value == "");
}

function _SelectShortCutItem_new(groupAlias,numGroups)
{
	var menuEntryHeight=30;
	var sumAllOpenItemsHeight=0;
	var ga;
	var j=0;	
	if (numGroups==null) numGroups=7;
	if(document.getElementById(groupAlias).className=="clsShortcutItem_plus")
	{
		document.getElementById(groupAlias).className="clsShortcutItem_minus";		
		ga=document.all("sci_sub" + groupAlias);		
		//top right bottom left
		ga.style.display = "block";
		m_upvisible=0;
		m_downvisible=ga.rows.length;
		for (j=0;j<m_downvisible;j++){
			ga.rows[j].style.display="none";
			document.all(groupAlias + "_arrow" + j).innerHTML="";	
		}
		
		setTimeout("_showRow('"+"sci_sub" + groupAlias+"',"+0+","+m_downvisible+")", 1);
	}
	else if(document.getElementById(groupAlias).className=="clsShortcutItem_minus")
	{
		document.all(groupAlias).className="clsShortcutItem_plus";
		document.all("sci_sub" +groupAlias).style.display = "none";
	}
	m_curShortCutGroupAlias = groupAlias;
	return true;
}

function _SelectSection(section,group,nogroups){
	if (section==m_curSection) return;
	if(m_curSection != null )
	{	
		document.getElementById("h_"+m_curSection).className = "mnuMainSection";
		document.getElementById("f_"+m_curSection).className = "mnuMainGroup";
	}
	if( document.getElementById("h_"+section) == null ) return;
	document.getElementById("h_"+section).className = "mnuMainSectionSelected";
	document.getElementById("f_"+section).className = "mnuMainGroupSelected";
	var sectionGap = (document.getElementById("_ShortcutItems").clientHeight-(23*m_numSections));
	document.getElementById(section).style.height = sectionGap;
	var tb_newSec=document.getElementById(section);
	if (tb_newSec==null) return;

	tb_newSec.style.display="block";
	if (m_curSection!=null){
		var tb_oldSec=document.getElementById(m_curSection);
		tb_oldSec.style.display="none";
	}	
	if (group!=null)_SelectShortCutItem_new(section+"_"+group,nogroups);
	if (section.toLowerCase()=="search") 
		document.getElementById("SearchPortal_input").focus();
	m_curSection=section;
		
}

function AOProgressBar(progressID,title,method)
{
    var height = 140
    var width = 380
    _SetGlobalVar("ProgressBarTitle",title);
    m_progressHandler = window.open("../form_asp/ProgressBar.asp?progressID="+progressID+"&method="+method,null,"height="+ height +",width=" + width + ",top=" + ((window.screen.availHeight - height ) / 2) + ",left=" + ((window.screen.availWidth - width ) / 2) + ",status=no,toolbar=no,menubar=no,location=no",false)
    _SetGlobalVar("progressHandler",m_progressHandler);
}

function f_getglbparam(moduleName,codeID)
{
	var paramKey = moduleName + "#" + codeID;
	var paramValue = m_ControlFrame.m_glbParams[paramKey];

	if(typeof(paramValue) != 'undefined')
		return paramValue; // taking from cache

	try
	{
		if(moduleName.length > 0) // Get all parameters for the specific module
		{
			var params = SOAP_Get_XMLObj(SOAP_RetrieveXML(BuildXML4Search("glb_param","get_glbparam_module_all",Array("module"),Array(moduleName),Array("argument"),Array("=")))).selectNodes("/root/row")

			for(var i = 0; i < params.length; i++)
			{
				m_ControlFrame.m_glbParams[moduleName + "#" + params[i].selectSingleNode("ap_glb_param_code").text] = params[i].selectSingleNode("ap_glb_param_val").text
			}
		}
		else // Get one specific parameter (by codeID)
		{
			var params = SOAP_RetrieveXML(BuildXML4Search("glb_param","get_glbparam_code",Array("a_code"),Array(codeID),Array("argument"),Array("="))).selectNodes("/root/row")
			
			m_ControlFrame.m_glbParams[codeID] = params.selectSingleNode("ap_glb_param_val").text;
		}

		return m_ControlFrame.m_glbParams[paramKey];
	}
	catch(e)
	{
		return null
	}
	
	return null
}

			
function put_space()
{
	try
	{
	    var oTable = document.getElementById("tblLinks");
	    if(oTable == null && colList.length>0)
	    {
	        var cellObj = document.getElementById(colList[0]);
	        if(cellObj != null)
	        {
	            oTable =  cellObj.parentNode.parentNode.parentNode;
	        }
	    }
	    
	    if(oTable == null) return;
	    oTable.style.borderCollapse = "collapse";
	    oTable.borderColorDark = "#A8A898";
	    oTable.borderColorLight = "#A8A898";
	    return;
	}catch(e){/*do nothing*/}
}	
			
var m_curSection=null;
m_curShortCutGroupAlias=null;
if ("undefined"==typeof( showModalDialogOrigFunc)) var showModalDialogOrigFunc;
if ("undefined"==typeof( windowOpenOrigFunc)) var windowOpenOrigFunc;

//HANDLE MAIN WINDOW SIZE//
function maximizeIE(win) 
{
	var winW = (screen.width)
	var winH = (screen.height);
	if(typeof(win) == "undefined")
	{
	    win = window.top!=null?window.top:window;
	}
	win.resizeTo(winW,winH);
	win.moveTo((screen.height - screen.height),(screen.width - screen.width));
}
//########################//
function AS_IsDebugMode(bInitNU)
{
   var res = (_GetGlobalVar("IsDebugMode")=="True");
   if( res && bInitNU)
   {
        try
        {
            ScriptManager("NUnitHelper.js",true);
        }
        catch(err){/**/}
        if(typeof(NU_ShowNunit)=="undefined")res=false;
   }
   return res;
}

function AS_LooseData()
{
    m_progressHandler = _GetGlobalVar("progressHandler");
    if(m_progressHandler != null && !m_progressHandler.closed)
    {
        var sMsg = AO_GetMesg( "AO09051" );
        event.returnValue=sMsg;
    }
    return;
}

///Create the latest MSXMLVersion installed on the local machine
function CreateMSXMLObject()
{
    var progIDs = [ 'Msxml2.DOMDocument.6.0', 'Msxml2.DOMDocument.5.0', 'Msxml2.DOMDocument.4.0', 'Msxml2.DOMDocument.3.0', 'Msxml2.DOMDocument' ]; // MSXML5.0, MSXML4.0 and Msxml2.DOMDocument all have issues - be careful when using.  Details below.
    for (var i = 0; i < progIDs.length; i++) 
    {
        try 
        {
            var xmlDOM = new ActiveXObject(progIDs[i]);
            return xmlDOM;
        }
        catch (ex) 
        {/**/}
    }
    return null;
}

//override the ActiveXObject function in order to override some defaults properties
function ActiveXObjectNew(CLASSID)
{
    var activexObject = null;
    var enforceResync = true;
   
    for(var index=0;index<m_msxmlCLASSID.length;index++)
    {
        if(m_msxmlCLASSID[index].toLowerCase() == CLASSID.toLowerCase())
        {
            enforceResync = false;
            break;
        }
    }
    
    try
    {
        activexObject = new m_activexObjectOld(CLASSID);
        if(!enforceResync) activexObject.setProperty("ForcedResync", false);
    }
    catch(err)
    {}
    if(activexObject==null) activexObject = new m_activexObjectOld(CLASSID);
    return activexObject;
}

//////////////////////////////////////////////////////////////////////////////////////
//This section handle script error
function CustomError()
{
    this.Description = "";
    this.FunctionName = "";
    this.ScriptName = "";
    
    this.GetMessage = function ()
    {
        var errorMsg = new StringBuilder();
        errorMsg.Append("\nDescription - " + this.Description);
        errorMsg.Append("\nFunction Name - " + this.FunctionName);
        //errorMsg.Append("\nScript Name - " + this.ScriptName);
        return errorMsg.ToString();
    }
   
}

function BrowserErrorHandling(sMsg,sUrl,sLine)
{
    try
    {
        if(DEBUG_CLIENT && _GetGlobalVar("SuppressError")!=true)
        {
            var sErrorLog = new StringBuilder();
            sMsg = m_CustomError!=null?m_CustomError.GetMessage():sMsg;
            sErrorLog.Append(String.prototype.Format("Error: {0}\n",sMsg));
            sErrorLog.Append("Line: " + sLine + "\n");
            sErrorLog.Append("URL: " + sUrl + "\n");
            sErrorLog.Append("\n\nDo you want to suppress errors for the current context?");
            var res = AO_msg(sErrorLog.ToString(),4,"An error was thrown and caught");
            if(res == 6)
            {
                _SetGlobalVar("SuppressError",true);
            }
        }
    }
    catch(err){}
    finally
    {
        m_CustomError = null;
    }
    return true;
}

function NewGetElementById(id)
{
	
    var oElement =  m_functionElementOld(id);
    m_CustomError = null;
    
    if(oElement == null)
    {
        var funcName=AS_GetFunctionName(NewGetElementById.caller);
        m_CustomError = new CustomError();
        m_CustomError.Description = String.prototype.Format("DOM Function getElementById didn't found Element ID \"{0}\" on the DOM tree, please Validate your DOM struture or check your script.",id);
        m_CustomError.FunctionName = funcName;
        m_CustomError.ScriptName = "";
    }
    
    return oElement;
}

function NewAllElements(id)
{
    var oElement =  m_functionAllOld(id);
    if(oElement == null || oElement.length==0)
    {
        var funcName=AS_GetFunctionName(NewAllElements.caller);
        m_CustomError = new CustomError();
        m_CustomError.Description = String.prototype.Format("DOM Function all didn't found Element ID \"{0}\" on the DOM tree, please Validate your DOM struture or check your script.",id);
        m_CustomError.FunctionName = funcName;
        m_CustomError.ScriptName = "";
    }
     else
    {
        m_CustomError = null;
    }
    return oElement;
}

//////////////////////////////////////////////////////////////////////////////////

function onload_ao_shared_functions(){

    if(typeof(m_functionElementOld)=="undefined")
    {
        //get reference to the Class Object
        m_functionElementOld = document.getElementById;
        //override the class object
        document.getElementById = NewGetElementById;
    }
    
    if(typeof(m_functionAllOld)=="undefined")
    {
        //get reference to the Class Object
        m_functionAllOld = document.all;
        //override the class object
        document.all.item = NewAllElements;
        document.all.namedItem = NewAllElements;
    }
    
    if(typeof(m_activexObjectOld)=="undefined")
    {
        //get reference to the Class Object
        m_activexObjectOld = ActiveXObject;
        //override the class object
        ActiveXObject = ActiveXObjectNew;
    }


    if(window.dialogArguments == null && opener == null )
        window.onbeforeunload= new Function("AS_LooseData()");
    if( window.dialogArguments )
    {
	    var autoResizing = true;
	    try
	    {
		    if(typeof(_GetGlobalVar("UseAutoResizing"))!="undefined")
		    {
			    autoResizing = _GetGlobalVar("UseAutoResizing");
			    _RemoveGlobalVar("UseAutoResizing");
		    }
	    }
	    catch(err)
	    {/*do nothing*/}
	    var slice = ((parseInt(window.dialogWidth)*100)/parseInt(window.screen.width))/100;
	    if(!isNaN(slice) && slice<0.7 && autoResizing)
		    window.dialogWidth = (0.7*window.screen.width)+"px";
	}
	//m_curShortCutGroupAlias="iAdmin_Requests";
	/* Overide the window.showModalDialog to Astea's function that adds new parameter to the dialog arguments*/
	if (showModalDialogOrigFunc==null) {
		showModalDialogOrigFunc=window.showModalDialog;
		window.showModalDialog=AO_ShowModalDialog;
	}
    if( windowOpenOrigFunc==null)
    {
        windowOpenOrigFunc=window.open;
        window.open = AO_OpenWindow;
    }
    window.onerror= BrowserErrorHandling;
	window.onresize=new Function("return AO_tryResize()");
	document.onkeydown=new Function("return AO_KeyDown()");
	
	/*if (typeof(fGetDateFormatString)!="undefined")
	{
		m_dateOrder=fGetDateFormatString(m_sep,m_YearLength);
	}*/
	try
	{
	    if( AS_IsDebugMode() )
	    {
	        ScriptManager("NUnitHelper.js",true);    
	    }
	}catch(e){/**/}	
	
	window.onbeforeunload= new Function("AS_SaveData()");
}

function AS_InvisibaleUI()
{
    try
    {
        if(_GetGlobalVar("IsAsteaBrowser")==true)
        {
            document.getElementById("imgDemoLibrary").style.display = "none";
            document.getElementById("imgAllianceLibrary").style.display = "none";
            document.getElementById("imgOnlineHelp").style.display = "none";
        }
    }
    catch(err)
    {}
}
///Preserved the last viewed URL in the global variable when the onunload event fired
function AS_SaveData()
{
    try
    {
        if(this.frameElement.name == "main_frame")
        {
            _SetGlobalVar("LastViewedURL",document.location.href);
        }
    }
    catch(err){ }
}

function AS_OpenDescrWindowGlasses(fld){
	 
	if (typeof(fld)=="undefined") return false;
	var fld_obj = document.getElementById(fld);
	var a_Object = new Object();
	a_Object.ReadOnly = fld_obj.readOnly;
	a_Object.Descr = fld_obj.value.trim();
	
	if(typeof(fld_obj.maxlength) != "undefined" && fld_obj.maxlength!=null)
	{
	    a_Object.maxlength = fld_obj.maxlength.trim();
	}
	fld_obj.value=window.showModalDialog('../App_includes/comments_view.htm',a_Object,'scroll:no;status:no;resizable:no;help:no');
	if( fld_obj.onchange != null )
	{
	    fld_obj.onchange();
	}		
}

////////Cookies Section Start//////////////
function getCookieVal (offset) {
	var doc = null;
	try
	{
		doc = AO_GetPrimaryWindow().top.control_frame.document;
	}
	catch(err)
	{/*do nothing*/}
	if( doc == null ) doc = document;
	var endstr = doc.cookie.indexOf (";", offset);
	if (endstr == -1)
		endstr = doc.cookie.length;
	return unescape(doc.cookie.substring(offset, endstr));
}

function GetCookie (name) {
	var doc = null;
	//try to get ref to control frame document
	try
	{
		doc = AO_GetPrimaryWindow().top.control_frame.document;
	}
	catch(err)
	{/*do nothing*/}
	if( doc == null ) doc = document;
	var arg = name + "=";
	var alen = arg.length;
	var clen = doc.cookie.length;
	var i = 0;
	while (i < clen) {
		var j = i + alen;
		if (doc.cookie.substring(i, j) == arg)
			return getCookieVal (j);
		i = doc.cookie.indexOf(" ", i) + 1;
		if (i == 0) break; 
	}

	return null;
}  

function SetCookie (name, value) {
	var doc = null;
	//try to get ref to control frame document
	try
	{
		doc = AO_GetPrimaryWindow().top.control_frame.document;
	}
	catch(err)
	{/*do nothing*/}
	if( doc == null ) doc = document;
	var argv = SetCookie.arguments;
	var argc = SetCookie.arguments.length;
	var expires = (argc > 2) ? argv[2] : null;
	var path = (argc > 3) ? argv[3] : null;
	var domain = (argc > 4) ? argv[4] : null;
	var secure = (argc > 5) ? argv[5] : false;
	
	doc.cookie = name + "=" + escape (value) +
	((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
	((path == null) ? "" : ("; path=" + path)) +
	((domain == null) ? "" : ("; domain=" + domain)) +
	((secure == true) ? "; secure" : "");
}

function DeleteCookie(name){
	the_date = new Date("December 31, 1999");

	//SetCookie (name, "xxx", the_date,"/")
}
////////Cookies Section End/////////////
function PageIndicator()
{
	var _interval = null;
	var _start = true;
	var _animationChar = new Array(".",". .",". . .",". . . .",". . . . .");
	var _index=0;
	var _prevstatus = "";
	var me = this;
	var _defaultCaption = "Loading";
	var _caption = "";
	var _lock = false;
	var _caller = "";
	this.ShowStatusProgress = function _ShowStatusProgress()
	{	
		try
		{
			if(! _lock )
			{
				document.body.style.cursor = "wait";
				window.status = _caption+" "+(typeof(_animationChar[_index+1])=="undefined"?_animationChar[4]:_animationChar[_index++]);
				if(_index == _animationChar.length)
				{
					_index = 0;
				}
			}
		}
		catch(err)
		{/*do nothing*/}
	}
	this.Busy = function _Busy(str,caller)
	{
		try
		{
			if( _interval == null )
			{
				_caption = (str==""||typeof(str)=="undefined" || str=="undefined")?_defaultCaption:str;
				document.body.style.cursor = "wait";
				_prevstatus = window.status;
				_start = true;
				_caller = (caller==""||typeof(caller)=="undefined")?"":caller;
				_interval = window.setInterval(me.ShowStatusProgress,400);
			}
			else
			{
				_lock = true;
				_caption = (str==""||typeof(str)=="undefined"||str=="undefined")?_defaultCaption:str;
				window.status = _caption+" "+(typeof(_animationChar[_index-1])=="undefined"?_animationChar[4]:_animationChar[_index--]);
			}
		}
		catch(err)
		{/*do nothing*/}
		finally
		{
			_lock = false;
		}
	}
	
	this.NoBusy = function _NoBusy(stoper)
	{
		try
		{
			if(typeof(stoper)=="undefined" || stoper == _caller)
			{
				document.body.style.cursor = "auto";
				if( _interval != null )
				{
					window.clearInterval(_interval);
				}
				window.status = _prevstatus;
				_index = 0;
				_interval = null;
			}
		}
		catch(err)
		{/*don nothing*/}
	}
	
	this.IsBusy = function _IsBusy()
	{
		return ( _interval != null )
	}
}

function MenuItem(name,label,url,img,func)
{
	this.Name=name;
	this.Label=label;
	this.Url=url;
	this.Func=func;
	this.Img=img;
	this.Ref=null;
	var events = new Array("onmouseover","onmouseout","onclick");
	this.DiasbleItem = function _DiasbleItem(flg)
	{
		if(this.Ref!=null)
		{
			var len = this.Ref.all.length;
			for(var i=0;i<len;i++)
			{
				var child = this.Ref.all[i];
				child.disabled = flg;
			}
			
			child = this.Ref.getElementsByTagName("TR")[0];
			child.onmouseout();
			for(var j=0;j<events.length;j++)
			{
				var eventName = events[j];
				if(child.getAttribute(eventName) != null)
				{
					if( flg )
					{
						child.setAttribute(eventName+"_old",child.getAttribute(eventName));
						child.removeAttribute(eventName);
					}
					else
					{	
						if( child.getAttribute(eventName+"_old") != null )
						{
							child.setAttribute(eventName,child.getAttribute(eventName+"_old"));
							child.removeAttribute(eventName+"_old");
						}
					}
				}
			}
		}
	}
}

function ContextMenu(objId,itemName,menuItems,_width,_height,activeElement)
{
	this.ShowPopUp = function _ShowPopUp()
	{	
		if(window.event.srcElement.id.indexOf("show_arrow_group")==-1 && 
			divObj.style.display == "none")
		{
			return;
		}
		window.event.cancelBubble = true;
		if( divObj.style.display == "block" ) 
		{
			divObj.style.display = "none";
			return;
		}
		var _offsetLeft  = 0;
		var _offsetTop  = 0;
		var refItem = imgObj;
		
		do{
			_offsetLeft += refItem.offsetLeft;
			_offsetTop += refItem.offsetTop;
			refItem = refItem.parentElement;
			if(refItem.id == "divToolBar") break;
		}while(refItem!=null);
		
		divObj.style.left = _offsetLeft+document.getElementById("divToolBar").offsetLeft;
		divObj.style.top = _offsetTop+parseInt(document.getElementById("divToolBar").style.top)+27;
		divObj.style.display = "block";
	}
	
	this.ActivetElement = function (itemObj,activeElement)
	{  
	    if(typeof(activeElement) != "undefined")
	    {       
	       var oElement = document.getElementById(activeElement);
	       if(activeElement == itemObj.id ) return;
	       oElement.setAttribute("menuitem","false");
	       var oTable = oElement.firstChild;
	       var oRemovedTD = oTable.rows[0].removeChild(oTable.rows[0].cells[1]);
	       oRemovedTD.vAlign = "";
	       oRemovedTD.style.paddingLeft = "";
	       oRemovedTD.style.paddingTop = "3px";
	       oRemovedTD.colSpan = 2;
	       var oReplaceTD = oTable.rows[1].cells[0].replaceNode(oRemovedTD);
    	   oTable.rows[1].cells[0].firstChild.innerText = oTable.rows[0].cells[0].firstChild.alt.substr(0,7);
    	   
	       var oTable1 = itemObj.firstChild;
	       itemObj.setAttribute("menuitem","true");
	       var oTd = oTable1.rows[1].cells[0].replaceNode(oReplaceTD);
	       oRemovedTD = oTable1.rows[0].removeChild(oTable1.rows[0].cells[1]);
	       oTable.rows[0].insertBefore(oRemovedTD);
	       oTd.vAlign = "bottom";
	       oTd.style.paddingLeft = "3px";
	       oTd.style.paddingTop = "";
	       oTable1.rows[0].insertBefore(oTd);
    	   
	       var oParent = oElement.parentNode;
	       this.ActiveElement = oElement.id;
	       itemObj = itemObj.replaceNode(oElement);
	       oParent.insertBefore(itemObj);
	    }
	}
	var itemObj=null;
	var id = "";
	var me = this;
	if(validateObj.IsString(objId))
	{
		var toolBar = document.getElementById("_Module_ToolBar").cells(0).firstChild;
		itemObj = toolBar.all(objId);
	}
	else 
	{
		itemObj = objId;
		id=objId.id;
	}
	
	this.ItemName = itemName;
	this.MenuItems = menuItems;
	this.Id = id;
	
	var firstRowObj = itemObj.firstChild.rows[0];
	var newCellObj = firstRowObj.insertCell(-1);
	
	var sOnMouseOver = String.prototype.Format("show_td_group{0}.style.border=\"silver 1px outset\"",id);
	var sOnMouseOut = String.prototype.Format("show_td_group{0}.style.border=\"#D6D7CE 1px solid\"",id);
	
	var sTable = new StringBuilder();
	var sImageId = "show_arrow_group"+id;
	sTable.Append("<table width='100%' cellpadding='0' cellspacing='0'>");
	sTable.Append("<tr>");
	sTable.Append(String.prototype.Format("<td style='border:#D6D7CE 1px solid' onmouseover='{0}' onmouseout='{1}' id='{2}' width='5px'>",sOnMouseOver,sOnMouseOut,"show_td_group"+id));
	sTable.Append(String.prototype.Format("<IMG src='../images/icn_new_multiple.gif' height='23' width='5' id='{0}'/>",sImageId));
	sTable.Append("</td><td>&nbsp;</td>");
	sTable.Append("</tr>");
	sTable.Append("</table>");
	newCellObj.innerHTML = sTable.ToString();

	var divObj = document.createElement("DIV");
	divObj.id = id+"div";
	divObj.style.display = "none";
	divObj.style.position = "absolute";
	divObj.style.zIndex = "1000";
	if(validateObj.IsDefined(_width)) divObj.style.width = _width;
	
	document.body.insertAdjacentElement("afterBegin",divObj);
	var selectSize = !validateObj.IsNothing(m_NavigateTo[1])?menuItems.length+1:menuItems.length;
	var oTable = document.createElement("TABLE");
	var oTbody = document.createElement("TBODY");
	oTable.width = "100%";
	oTable.id = id+"_ContextMenu";
	oTable.cellPadding = 0;
	oTable.cellSpacing = 0;
	oTable.style.backgroundColor = "#EDEEDE";
	oTable.style.border = "1px solid black";
	oTable.appendChild(oTbody);
	
	
	for (var i=0; i < menuItems.length; i++)
	{
		var menuItem = 	menuItems[i];
		var imgTd = "";
		var strTable = "<table width='100%' cellpadding='0' cellspacing='0'>";
		var oRow = document.createElement("TR");
		var oCell = document.createElement("TD");
		
		oRow.appendChild(oCell);
		oCell.id = id+"_MenuItem";
		
		if(!validateObj.IsNothing(menuItem.Img))
		{
			imgTd = "<td width='2px'>&nbsp;</td><td width='17px'><IMG id='item_image' width='8px' height='9px' src='../images/"+menuItem.Img+"'></IMG></td>";
		}
		if(menuItem.Name != "")
		{
			var oSB = new StringBuilder();
			oSB.Append("<tr id='{0}_Item' style='cursor:hand;'>");
			oSB.Append("<td language='javascript' a_function='{1}' menuitem='true' class='clsToolBarItem' id='{2}' onclick='{3}' new='false' maint='true' search='False'>");
			oSB.Append("<table style='border-collapse: collapse' cellspacing='0' cellpadding='0' border='0'  ID='Table12'>");
			oSB.Append("<tbody>");
			oSB.Append("<tr>");
			oSB.Append("<td id='mbsti_{4}' align='middle'>");
			oSB.Append("<img id='{5}' style='cursor:hand;' src='../images/{6}.gif' onmouseout=\"src='../images/{7}.gif'\" onmouseover=\"src='../images/{8}_h.gif'\" height='25' alt='{9}' width='25'>");
			oSB.Append("</td>");
			oSB.Append("<td id='mbstl_{10}' noWrap align='middle' valign='middle' style='padding-left:3px'>");
			oSB.Append("<label id='mbstl_{11}_ttl' style='font:10px arial'>{12}</label>");
			oSB.Append("</td>");
			oSB.Append("</tr>");
			oSB.Append("<tr><td></td></tr>");
			oSB.Append("</tbody>");
		    oSB.Append("</table>");
			oSB.Append("</td>");
			oSB.Append("</tr>");
			var sHTMLContent = oSB.ToString();
			var sImage = menuItem.Img.split(".")[0];
			sHTMLContent = String.prototype.Format(sHTMLContent,menuItem.Name,menuItem.Func,menuItem.Name,menuItem.Func,menuItem.Name,sImage.replace("icn_",""),sImage,sImage,sImage,menuItem.Label,menuItem.Name,menuItem.Name,menuItem.Label);
			strTable+=sHTMLContent;
		}
		else if(menuItem.Label != "")
		{
			strTable+="<tr><td colspan='5' style='height:2px'><hr></td></tr>";
		}
		if( i < menuItems.length-1 && menuItems[i+1].Label!="hr") strTable+="<tr><td colspan='5' style='height:2px'></td></tr>";
		strTable+="</table>";
	
		
		oCell.insertAdjacentHTML("afterBegin",strTable);
		oTbody.appendChild(oRow);
		menuItem.Ref = oCell;
	}
	
	
	divObj.insertAdjacentElement("afterBegin",oTable);
	var imgObj = itemObj.all(sImageId);
	
	imgObj.onclick = this.ShowPopUp;
	if(m_CreatedContextMenu == null) m_CreatedContextMenu = new Array();
    m_CreatedContextMenu[itemName] = this.ShowPopUp;
	document.onclick =  CloseContextMenu;
	ContextMenu.prototype.ActiveElement = activeElement;
	this.ActivetElement(itemObj,activeElement);
}
function CloseContextMenu(name)
{
    if(m_CreatedContextMenu==null) return false;
    
    if(typeof(name) == "undefined" )
    {
        for(var key in m_CreatedContextMenu)
        {   
            m_CreatedContextMenu[key]();
        }
    }
    else if(typeof(m_CreatedContextMenu[name]) != "undefined")
    {
         m_CreatedContextMenu[name]();
    }
}

//new object to display message for async operation
function SingleOperationIndicator()
{
	var _interval = null;
	var _caption = null;
	var _progress = 0;
	var _animationChar = new Array(".",". .",". . .",". . . .",". . . . .");
	var me = this;
	var _spanObj = null;
	var _lblObj = null;
	this.Animate = function _animate()
	{
		_progress = 0;
		_interval = window.setInterval(me.StartAnimation,400);	
	}
	
	this.StartAnimation = function _startAnimation()
	{
		var strProgress = "";
		if(_progress==5) _progress=0;
		_lblObj.innerHTML = _caption+_animationChar[_progress];
		_progress++;
	}
	
	this.Show = function _show(caption,_width,_height,_top,_left)
	{
		_caption = caption;
		_width = typeof(_width)=="undefined"?"220px":_width;
		_height = typeof(_height)=="undefined"?"60px":_height;
		_top = typeof(_top)=="undefined"?(parseInt(window.dialogHeight)/2)+"px":_top;
		_left = typeof(_left)=="undefined"?(parseInt(window.dialogWidth)/2)+"px":_left;
		
		_spanObj = document.getElementById("SingleOperationIndicator_SPAN");
		if(_spanObj==null)
		{
			//position:absolute;visibility: hidden;z-index:500;
			_spanObj = document.createElement("SPAN");
			_spanObj.id = "SingleOperationIndicator_SPAN";
			_spanObj.name = "SingleOperationIndicator_SPAN";
			_spanObj.style.position = "absolute";
			_spanObj.style.zIndex = 555;
			_spanObj.style.backgroundColor = "#EDEEDE";
			_spanObj.style.border='0.05cm groove black';
			document.body.insertAdjacentElement("afterBegin",_spanObj);
			var strTbl ="<table cellpadding='3' cellspacing='3' width='100%'>";
			strTbl +="<tr>";
			strTbl +="<td width='100%' align='center' style='font:bold 18px' height='30px' id='captionContainer' name='captionContainer'>";
			strTbl +="</td>";
			strTbl +="</tr>";
			strTbl +="<tr>";
			strTbl +="<td width='100%' align='left' valign='middle'>";
			strTbl +="<img src='../images/progress_bar_ani.gif' width='210' height='13px' />";
			strTbl +="</td>";
			strTbl +="</tr>";
			strTbl +="</table>";
			_spanObj.insertAdjacentHTML("afterBegin",strTbl);
			_lblObj = _spanObj.all("captionContainer");
		}
		
		//spanObj.style.display = "block";
		_spanObj.style.width = _width;
		_spanObj.style.height = _height;
		_spanObj.style.top = _top;
		_spanObj.style.left = _left;
		_lblObj.innerHTML = caption;
		//me.Animate();
	}
	this.Hide = function _hide()
	{
		if(_spanObj == null )return;
		window.clearInterval(_interval);
		_spanObj.style.display = "none";
	}
}

var m_SingleOperationWinIndicatorRef = null;
//new object to display message for sync operation that freeze 
//the ui 
function SingleOperationWinIndicator() {
	var winHandler = null;
	var me = this;
	var counter = 0;
	// astea-trans=text;TXTASP$please_wait_vx;N;
	var _desc = "Please Wait...";
	this.Show = function _show(_width,_height,_top,_left,_title)
	{
		try
		{
			_title = typeof(_title)=="undefined"?"Loading...":_title;
			_width = typeof(_width)=="undefined"?"240":_width;
			_height = typeof(_height)=="undefined"?"20":_height;
			_top = typeof(_top)=="undefined"?(parseInt(screen.height)/2):_top;
			_left = typeof(_left)=="undefined"?(parseInt(screen.width)/2):_left;
			var sFeatures = "height="+_height+",width="+_width+",status=no,toolbar=no,menubar=no,location=no,titlebar=no,scrollbars=no,resizable=no,left="+_left+",top="+_top;
			winHandler = window.open(String.prototype.Format("../form_xsl/Loading_Indicator.htm?desc={0}",_desc),"Loading",sFeatures,false);
			winHandler.document.title = _title;
			winHandler.attachEvent("onfocus",me.SetFocus);
		}
		catch(err)
		{}
	}
	
	
	this.SetDesc = function _setDesc(desc)
	{
	    _desc = typeof(desc)=="undefined"?_desc:desc;
	}
	
	this.GetDesc = function _getDesc()
	{
	    return _desc;
	}
	
	this.Hide = function _hide()
	{
		try
		{
			if(winHandler == null )return;
			winHandler.close();
		}
		catch(err)
		{}
	}
	this.SetFocus = function _setFocus()
	{
		winHandler.focus();
	}
	m_SingleOperationWinIndicatorRef = this;
}

//function that check if the UI_langauge as dictionary
function CheckDictionary()
{
	return (_GetGlobalVar("ActivateDictionary")=="true" || _GetGlobalVar("ActivateDictionary")==true);
}

function determineCharSize(test_string,_width,_height)
{
	var sizeObj = new Object();
	sizeObj.width = 0;
	sizeObj.height = 0;
	var mydiv = document.createElement('DIV');
	mydiv.style.width = typeof(_width)=="undefined"?"1px":_width;
	mydiv.style.height = typeof(_height)=="undefined"?"1px":_height;
	
	document.body.appendChild(mydiv);
	var mytxt = document.createTextNode(test_string);

	mydiv.appendChild(mytxt);
	var total = mydiv.clientWidth;
	
	sizeObj.width = parseInt(mydiv.clientWidth);
	sizeObj.height = parseInt(mydiv.clientHeight);
	mydiv.removeNode(true);
	
	return sizeObj;
}

function setCharsSize()
{
	var strCapitalChars = new String("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
	var strChars = new String("abcdefghijklmnopqrstuvwxyz");
	var charSizesArr = new Array(strCapitalChars.length);
	for(var index=0;index<strChars.length;index++)
	{
		charSizesArr[index]=new Array(2);
		charSizesArr[index][0] = determineCharSize(strChars.substr(index,1));
		charSizesArr[index][1] = determineCharSize(strCapitalChars.substr(index,1));
	}
	
	return charSizesArr;
}

function getCharSize(chr)
{
	var charSizesArr = _GetGlobalVar("charSizesArr");
	var baseIndex = -1;
	var charCode = chr.charCodeAt(0);
	var sizeObj = null;
	
	if(charCode>=65 && charCode<=90)
	{
		baseIndex = 65;
	}
	else if(charCode>=97 && charCode<=122)
	{
		baseIndex = 97;
	}
	
	if(baseIndex == -1)
	{
		sizeObj = determineCharSize(chr);
	}
	else
	{
		sizeObj = charSizesArr[charCode-baseIndex][0]
	}
	return sizeObj;
}


function IsBIProduct(val)
{
    var list = new Array('FieldServiceBI','LogisticsBI','ContactCenterBI','ContractsBI');
    for(var index=0;index<list.length;index++)
    {
        if(list[index]==val)return true;
    }
    return false;
}

function AS_CheckXSLError(objXSLT)
{
    if(!AS_IsDebugMode()) return true
    if (objXSLT.parseError.errorCode != 0) 
    {
      var strErrMsg = "Problem Parsing Style Sheet:<br />"
        + "  Error #: "             + objXSLT.parseError.errorCode + ""
        + "  Description: "         + objXSLT.parseError.reason + ""
        + "  In file: "             + objXSLT.parseError.url + ""
        + "  Line #: "              + objXSLT.parseError.line + ""
        + "  Character # in line: " + objXSLT.parseError.linepos + ""
        + "  Character # in file: " + objXSLT.parseError.filepos + ""
        + "  Source line: "         + objXSLT.parseError.srcText;
      WriteError(strErrMsg);
      return true;
    }
    return false
}
//check if portal exists for the current user
function AS_PortalExist(portalName)
{
	var res = false;
	var portalXML = null;
	try
	{
		if (typeof(window.top.control_frame.m_PortalsXML)!="undefined" && window.top.control_frame.m_PortalsXML!=null)
		{
			portalXML = window.top.control_frame.m_PortalsXML;
		}
		else if (typeof(_GetGlobalVar("__PortalsXML"))!="undefined")
		{	
			portalXML=new ActiveXObject("microsoft.xmldom");
			portalXML.async = "false";
			portalXML.loadXML( _GetGlobalVar("__PortalsXML"));
		}
		if(portalXML != null )
		{
			res = (portalXML.selectSingleNode("//row[product_id = '"+portalName+"']")!=null);
		}
	}
	catch(err)
	{/*do nothing*/}
	return res;
}

//validator object that implement validation for:
//1.email validation
function Validator()
{
	this.VlidateEmail = function CheckEmail(emailAddress) 
	{
	    if(emailAddress=="") return true;
		var filter=/^.+@.+\..{2,3}$/
		if (!filter.test(emailAddress)){
			return false
		}
		return true
	}
	
	this.VlidatePhone = function CheckPhone(phoneNumber)
	{
	   //allowing the (), -, " ", and digits in phone number.
	   //a minimum of 5 digits.
	   if (""==phoneNumber) return true;
	   var filter=/^\+?\d[-\s\d]*\d$/;
	   if (!filter.test(phoneNumber)){
			return false;
		}
		return true;
	}
}

function ScriptManager(scriptName,singleInstance)
{
    singleInstance = (this.frameElement==null||this.frameElement.name=="control_frame")?false:singleInstance;
    if(window.dialogArguments != null || opener != null ) singleInstance = false;
    var oScript = document.getElementById(scriptName);
    if(  oScript == null )
    {
        var controlFrame = AO_GetPrimaryWindow().top.control_frame;
        oScript = controlFrame.document.getElementById(scriptName);
        if( singleInstance == false || oScript == null)
        {
            oScript = document.createElement("SCRIPT");
            oScript.src = String.prototype.Format("../includes/{0}",scriptName);
            oScript.id = scriptName;
        }
        else
        {
            oScript = controlFrame.document.getElementById(scriptName).cloneNode(true);
        }
        var oContainer = document.body;
        if( oContainer == null)
        {
            oContainer = document.getElementsByTagName("HEAD")[0];
        }
        oContainer.insertAdjacentElement("afterBegin",oScript);
    }
    return true;
}

var validator = new Validator();
var m_NotificationMessage = null;
function AS_GetASyncHandler()
{
    var controlFrame = AO_GetPrimaryWindow().top.control_frame;
    return controlFrame.m_ASyncObject;
}

function AS_RaiseErrorEvent(stateHolders)
{
    if( m_NotificationMessage == null ) m_NotificationMessage = new NotificationMessage();
    m_NotificationMessage.Show(stateHolders);
}

function AS_RaiseOnCloseEvent(oStateHolder)
{
    var sModuleName = oStateHolder.Parameters[1];
    var sRecordName = oStateHolder.Parameters[2];
    var sRecordId = oStateHolder.Parameters[3];
    var sMessage = String.prototype.Format("Successfully Save {0}[{1}] for {2}",sRecordName,sRecordId,sModuleName);
    window.status=sMessage;
    AS_GetASyncHandler().CleanClosedState();
    return true;
}

function AS_AttachErrorEvent()
{
    if( window.dialogArguments==null && window.opener ==null && AS_GetASyncHandler() != null )
	{
	    AS_GetASyncHandler().OnRaiseError(AS_RaiseErrorEvent);
	    AS_GetASyncHandler().OnCloseState(AS_RaiseOnCloseEvent);
	}
}

function AS_CreateAsyncSaveButton(activeElement)
{
    try
    {
	    if(document.getElementById("tdMenuBarItemApplydiv")!=null || m_disableAsyncBehaivor)
	    {
	        if(m_SaveContextMenu!=null) m_SaveContextMenu.ActivetElement(document.getElementById(m_SaveContextMenu.ActiveElement),activeElement);
	        return true;
	    }
	    var tdObj = document.getElementById("tdMenuBarItemApply");
	    var sFunction = "new_Single_Done()";
	    
    	var sFunction1 = String.prototype.Format("{0};{1};{2}","AS_SetSaveOptions(this,1)",sFunction,"");
	    var itemSaveExit = new MenuItem("tdMenuBarItemSave","Save And Exit",null,"icn_apply.gif",sFunction1);
	    var sFunction2 = String.prototype.Format("{0};{1};{2}","AS_SetSaveOptions(this,2)",sFunction,"");
	    var itemSaveNew = new MenuItem("tdMenuBarItemSave_New","Save And New",null,"icn_apply.gif",sFunction2);
	    m_SaveContextMenu = new ContextMenu(tdObj,"_NewSave",new Array(itemSaveExit,itemSaveNew),"200px",null,activeElement);
	    //nUnitContextMenu.MenuItems[1].DiasbleItem(true);
	 
	    return true;
	 }
	 catch(err)
	 {}
}

function AS_SetSaveOptions(ths,val)
{
    if(m_disableAsyncBehaivor)
    {
        m_saveOptions=null;
        return;
    }
    m_saveOptions=val;
    SetCookie ("ActiveElement", ths.id);
    return;
}

function AS_ExitSaveSequansce()
{
    if(m_SaveStatusBW & 2 )
        m_SaveStatusBW |= 4;
}

function AS_DisplayNewSaveOptions(displayMask)
{
    displayMask = typeof(displayMask)=="undefined"?0:displayMask;
    //if(m_disableAsyncBehaivor) displayMask = 4|8;
    var buttons = new Array("btnSubmitSelected","tdMenuBarItemSaveAndNew","tdMenuBarItemSaveAndExit");
    var masks = new Array(2,4,8);
    for(var i=0;i<buttons.length;i++)
    {
        var id = buttons[i];
        var oElement = document.getElementById(id);
        if(oElement==null) continue;
        if(m_action != "new" ) oElement.parentNode.removeChild(oElement);
        if( displayMask != null )
        {
            if(displayMask&masks[i])
            {
                AO_SetMenuButton("disabled",id,"javaScript","javaScript",null,null,null); 
            }
            else
            {
                AO_SetMenuButton(m_action,id);
            }
       }
       else
       {
            if( oElement.a_function != null )
	        {
	           sFunction = oElement.a_function;
	           sFunction = sFunction.replace(/\'/gi,"\"");
	        }
	        sFunction = String.prototype.Format("{0};{1};{2}","m_saveOptions=1",sFunction,"m_saveOptions=null;");
       }
    }
}
/*function AS_UpdateNewSaveOptions()
{   
    var buttons = new Array("btnSubmitSelected","tdMenuBarItemSaveAndExit","tdMenuBarItemSaveAndNew");
    var oElement = document.getElementById(buttons[0]);
    var sFunction = "new_Single_Done(false)";
    if( oElement.a_function != null )
    {
       sFunction = oElement.a_function;
       sFunction = sFunction.replace(/\'/gi,"\"");
    }
    for(var i=1;i<buttons.length;i++)
    {
        var sInnerFunction = String.prototype.Format("{0};{1};{2}","m_saveOptions="+i,sFunction,"m_saveOptions=null;");            
        oElement = document.getElementById(buttons[i]);
        oElement.onclick = new Function(sInnerFunction);
    }
}*/

function NotificationMessage()
{   
    var oSB = new StringBuilder();
    var sTitle = "Notification Message";
    var crossobj = null;
    var oMessageContainer = null;
    var dragapproved = false;
    var dragbar = null;
    var oCloseStateBtn = null;
    var oEditStateBtn = null;
    var oParent = document.body;//document.getElementById("MainDiv");
    var iWidth = 340;
    var iHeight = 130;
    var iLeft = parseInt(oParent.clientWidth,10)-iWidth-10;
    var iTop = parseInt(oParent.clientHeight,10)-iHeight-15;
    var sPosition = String.prototype.Format("top:{0}px;left:{1}px;width:{2}px;height:{3}px",iTop,iLeft,iWidth,iHeight);
    var me = this;
    oSB.Append(String.prototype.Format("<div id='notification_message' style='-moz-opacity:0' style='position:absolute;{0};visibility:hidden;z-Index:500'>",sPosition));

    oSB.Append("<table border='0' height='100%' width='100%' bgcolor='#626673' cellspacing='0' cellpadding='2'>");
    oSB.Append("<tr><td width='100%'>");
     
    //TITLE -->
    oSB.Append("<table border='0' width='100%' cellspacing='0' cellpadding='0' height='100%'>");
    oSB.Append("<tr>");
    oSB.Append("<td id='dragbar' style='cursor:hand; cursor:pointer' width='100%'><div width='100%' onSelectStart='return false'><font face='Verdana'");
    oSB.Append(String.prototype.Format("color='#F7F4EF'><strong><small>{0}</small></strong></font></div></td>",sTitle));
    oSB.Append("</tr>");
    //-------------------------------->
    
    //MESSAGE CONTENT BETWEEN HERE -->
    oSB.Append("<tr>");
    oSB.Append("<td width='100%' bgcolor='#F7F4EF' style='padding:4px'>");
    oSB.Append("<table width='100%' height='100%' cellpadding='0' cellspacing='0'>");
    oSB.Append("<tr><td align='left' valign='top' height='80%' id='NMErrorDisplay'>");
    ///////////////////////////////////////////////////////////////////////////////
    oSB.Append("</td></tr>");
    //-------------------------------->
    
    //BUTTONS -->
    /*oSB.Append("<tr><td>");
    oSB.Append("<table height='100%' cellpadding='0' cellspacing='0'>");
    oSB.Append("<tr><td class='clicked_space'>");
    var sButtonStruct = String.prototype.Format("<table cellpadding='0' cellspacing='0' border='0'><tr><td class='butt_left'></td><td class='imgText'>{0}</td><td class='butt_right'></td></tr></table>","OK");
    oSB.Append(String.prototype.Format("<button class='clickTranspButt' onclick='' id='NMEditState'>{0}</button>",sButtonStruct));
    oSB.Append("</td><td class='clicked_space'>");
    sButtonStruct = String.prototype.Format("<table cellpadding='0' cellspacing='0' border='0'><tr><td class='butt_left'></td><td class='imgText'>{0}</td><td class='butt_right'></td></tr></table>","Cancel");
    oSB.Append(String.prototype.Format("<button class='clickTranspButt' onclick='' id='NMCloseStateBtn'>{0}</button>",sButtonStruct));
    oSB.Append("</td></tr>");*/
    oSB.Append("</table>");
    oSB.Append("</td></tr>");
    //------------------------>

    oSB.Append("</td>");
    oSB.Append("</tr>");
    oSB.Append("</table>");
    
    oSB.Append("</td>");
    oSB.Append("</tr>");
    oSB.Append("</table>");
    
    oSB.Append("</div>");
    
    oParent.insertAdjacentHTML("afterBegin",oSB.ToString());
    SET_DHTML(CURSOR_MOVE, "notification_message");
    crossobj = document.getElementById("notification_message");
    dragbar = crossobj.all("dragbar");
    oMessageContainer = crossobj.all("NMErrorDisplay");

    this.Hide = function ()
    {
        crossobj.style.visibility="hidden";
    }
    
    this.Show = function (stateHolders)
    {
        var oSB = new StringBuilder();
        var sStateID = "";
        var disableButtons = false;
        for(var index=0;stateHolders!=null && index<stateHolders.length;index++)
        {
            var oStateHolder = stateHolders[index];
            oSB.Append("<table width='100%' height='100%' cellpadding='0' cellspacing='0'>");
            // astea-trans=text;TXTASP$an_error_occur_vx;N;
            var sTranslate1 = "An error occurred in the";
            // astea-trans=text;TXTASP$mdle_t_vx;N;
            var sTranslate2 = "module";
            // astea-trans=text;TXTASP$In_vx;N;
            var sTranslate3 = "in";
            // astea-trans=text;TXTASP$click_vx;N;
            var sTranslate4 = "Click";
            // astea-trans=text;TXTASP$fix_the_problem_vx;N;
            var sTranslate5 = "to fix the error";
            // astea-trans=text;TXTASP$or_click_vx;N;
            var sTranslate6 = "or click";
            // astea-trans=text;TXTASP$to_rollback_vx;N;
            var sTranslate7 = "to rollback";
            // astea-trans=text;TXTASP$go_back_vx;N;
            var sTransalte8 = "Go Back";
            // astea-trans=text;TXTASP$Cancel_vx;N;
            var sTransalte9 = "Cancel";
            var sGoBackLink = String.prototype.Format("<span id='NMEditState' onclick='' style='color:blue;cursor:hand'>{0}</span>",sTransalte8);
            var sRollBackLink = String.prototype.Format("<span id='NMCloseStateBtn' onclick='' style='color:blue;cursor:hand'>{0}</span>",sTransalte9);
            var sModuleName = oStateHolder.Parameters[1];
            var sRecordName = oStateHolder.Parameters[2];
            var sRecordId = oStateHolder.Parameters[3];
            var sHeaderMsg = String.prototype.Format("{0} {1} {2}, {3} {4} <span id='NMEditState' onclick='' style='color:blue;cursor:hand'>{5}</span>.",sTranslate1,sModuleName,sTranslate2,sTranslate3,sRecordName,sRecordId);
            var sFooterMsg = String.prototype.Format("{0} {1} {2}, {3} {4} {5}.",sTranslate4,sGoBackLink,sTranslate5,sTranslate6,sRollBackLink,sTranslate7);
            oSB.Append("<tr><td>");
            oSB.Append("<table width='100%' cellpadding='0' cellspacing='0'>");
            oSB.Append("<tr><td width='10%'><img src='../images/icn_warning_24.gif'></td>");
            oSB.Append(String.prototype.Format("<td align='left' style='color:black;font:bold'>{0}</td></tr>",sHeaderMsg));
            oSB.Append("</table>");
            oSB.Append("</td></tr>");
         
            oSB.Append("<tr><td align='left' height='100%' valign='top' style='padding-top:5px'><div style='overflow-y:auto'>");
            var sErrorMessage = SOAP_Format_Error_Message(oStateHolder.SOAPResult);
            
            if( sErrorMessage.indexOf("INVALID_STATE;") > -1 )
            {
                sErrorMessage = AO_GetMesg("AO09041");
                AS_GetASyncHandler().RemoveStateById(oStateHolder.StateID);
                disableButtons = true;
            }
            else
            {
                var sResult = AS_HandleOptimisticLock(sErrorMessage,false);
                if(sResult!=false) sErrorMessage = sResult;
            }
            sStateID = oStateHolder.StateID;
            oSB.Append(sErrorMessage);
            oSB.Append("</div></td></tr>");
            
            oSB.Append(String.prototype.Format("<tr><td align='left' style='color:black;font:bold'>{0}</td></tr>",sFooterMsg));
            oSB.Append("</table>");
        }
        
        oMessageContainer.innerHTML = oSB.ToString();
        
        oCloseStateBtn = oMessageContainer.all("NMCloseStateBtn");
        oEditStateBtn = oMessageContainer.all("NMEditState");
        if(oCloseStateBtn==null) return;
        
        var sExpression = String.prototype.Format("m_NotificationMessage.CloseState('{0}');",sStateID);
        oCloseStateBtn.onclick = new Function(sExpression);
        if(!disableButtons)
        {
            sExpression = String.prototype.Format("m_NotificationMessage.EditState('{0}');",sStateID);
            oEditStateBtn[0].onclick = new Function(sExpression);
            oEditStateBtn[1].onclick = new Function(sExpression);
        }
        else
        {
            oEditStateBtn[0].style.color = "gray";
            oEditStateBtn[1].style.color = "gray"; 
            oEditStateBtn[0].style.cursor = "";
            oEditStateBtn[1].style.cursor = "";
        }

        
        /*window.setTimeout("",500);
        if (crossobj.filters)
        {
            //crossobj.filters[0].duration=1;
            crossobj.filters[0].Apply();
            crossobj.filters[0].Play();
        }*/
        crossobj.style.visibility="visible";
    }
    
    this.CloseState = function(stateID)
    {
        AS_GetASyncHandler().CloseState(stateID,true);
        this.Hide();
    }
    
    this.EditState = function(stateID)
    {
        AS_GetASyncHandler().NavigateToModule(stateID);
    }
}

function AS_BuildXPathExpression(oNode)
{
    var sXpathExpression = "";
    while(oNode.ownerDocument!=null)
    {
        sXpathExpression = "/"+oNode.nodeName+sXpathExpression;
        oNode = oNode.parentNode;
    }
    return sXpathExpression;
}

///<summary>
///AO_Fill_ServerSort_Params fills the supersort needed params 
///adds the followong attributes: sort_coloumn_alias, force_sort, sort_direction
///</summary>
/// <param name="order">[optional]the additional sorting column.</param>
/// <param name="sign">[optional]the additional sorting direction.</param>
/// <param name="force_value">[required] if default sort then false, if AO_sort was called - true.</param>
/// <param name="criteria">[optional]legacy from AO_Sort</param>
/// <returns>HashTable with attribs.</returns>
function AO_Fill_ServerSort_Params(order, sign, force_value, criteria, XSLPage)
{
    var superSortHash = new Array();
    var fieldValue = order;  
    if (validateObj.IsDefined(XSLPage))
    {
        //retrieve default sort value.
        if (typeof(criteria) == "undefined") criteria ="";
        if(fieldValue=="")
        {
	        var sortField = XSLPage.selectSingleNode("//"+criteria+"@order-by");
	        if(sortField == null) throw("sortField is null");
	        fieldValue = sortField.value;
    	    
	        if ((sign == "") && (fieldValue.length > 1)) sign= fieldValue.substr(0,1);
            fieldValue = fieldValue.replace(/(\+)|(\-)/g,'');
        }
        fieldValue = fieldValue.replace(/(\@)|(\;)/g,',');
	    var primaryKeyValue = XSLPage.documentElement.getAttribute("primaryKey");
	    if(primaryKeyValue==null)
	    {
	        XSLPage.documentElement.setAttribute("primaryKey",fieldValue);
	    }
	    else if(primaryKeyValue!=fieldValue)
	    {
	        fieldValue = fieldValue+","+primaryKeyValue;
	    }
	    else
	    {
	        fieldValue = primaryKeyValue;
	    }
	}
    
	superSortHash['sort_column_alias'] = fieldValue;
	
	if (superSortHash['sort_column_alias'] == "") sign="";
	else if ((sign == "") || ((sign!="+") && (sign!="-"))) sign="+";	
	
	superSortHash['sort_direction']  = sign;
	superSortHash['force_sort'] = force_value;
	
	return superSortHash;
		    
}


///<summary>
///AO_ServerSort is a function for ScrollerRetrieve that takes care of
///server side sorting. 
///adds the followong attributes: sort_coloumn_alias, force_sort, sort_direction
///</summary>
/// <param name="searchString">[required]raw XML4Search search string.</param>
/// <param name="superSortHash">[optional]holds the parameters for server side sorting: the sort fields, direction and if search was called or sort.</param>
/// <param name="XSLPage">[optional]The main XSLPage for finding default OrderBy.</param>
/// <returns>new search string with attribs.</returns>

function AO_ServerSort(searchString, superSortHash, XSLPage)
{
    try
    {
        if ((typeof(superSortHash) == "undefined") || (superSortHash == null))
            superSortHash = AO_Fill_ServerSort_Params("", "", 'false', "", XSLPage);
        
        var superSortAddedAttributes = new String("<Find sort_column_alias='" + superSortHash['sort_column_alias'] + 
                  "' sort_direction='" + superSortHash['sort_direction'] +
                  "' force_sort='" + superSortHash['force_sort'] + "'");
    //alert(searchString.replace('<Find', superSortAddedAttributes));
        return searchString.replace('<Find', superSortAddedAttributes);
     }
     catch(err)
     {return searchString;}
}

///<summary>
/// The following function check the sort behavior, if IsServerQBESortEnabled set to true
/// use server sort otherwise use client sort
///</summary>
///<param term='order'></param>
///<param term='sign'></param>
///<param term='criteria'></param>
///<param term='XSLPage'></param>
///<param term='container'></param>
///<param term='recordCount'></param>
///<return></retrun>
function AO_CheckSortLimit(order, sign, criteria, XSLPage,container,recordCount,maxRetrieveLimit)
{
    try
    {
         if (IsServerQBESortEnabled() && (parseInt(_GetGlobalVar("RecordLimit")) < recordCount)
                && (Number(recordCount)< Number(maxRetrieveLimit)))
		    {
		        //update the server sorting details according to the 
		        //required parameters.
		        var superSortHash = new Array();
		        superSortHash = AO_Fill_ServerSort_Params(order, sign, 'true', criteria, XSLPage );
		        var btnSearchObj = document.getElementById("btnSearch");
		        if(btnSearchObj != null && btnSearchObj.onclick != null)
		        {
		            var funcStr = btnSearchObj.onclick.toString();
		            funcStr.match(/\s(\w+)\(/gi);
		            if(RegExp.$1 != "ScrollerRetrieve")
		            {
		                _SetGlobalVar("superSortHash",superSortHash);
		                btnSearchObj.onclick();
		                return true;
		            }
		        }
		        ScrollerRetrieve(false,null,superSortHash);
		        return true;
		    }
		    else 
		    {
		        if (Number(recordCount)> Number(maxRetrieveLimit) )
	            {
	               if (container.innerText.match(m_queryNotSortedLbl) == null) 
	                    container.innerText += ". "+m_queryNotSortedLbl;
	            }
		    }
    		
		    return false;
	}
	catch(err)
	{return false;}
}

function IsServerQBESortEnabled()
{
    return (_GetGlobalVar("IsServerQBESortEnabled")!=null && _GetGlobalVar("IsServerQBESortEnabled").toLowerCase()== "true");
}

function ExportState( exportFormat, filename, templateDoc, delimiter )
{
	return SOAP_Export( exportFormat, filename, templateDoc, delimiter );
}	

function IsExportable()
{
    try
    {
        if(typeof(gPortalName) != "undefined") 
        {
            if(typeof(m_strXMLSearch[m_TabNumber]) == "undefined" || m_strXMLSearch[m_TabNumber] == null )
                return false;
            if(m_strXMLSearch[m_TabNumber].getAttribute("query_name")==null)
                return false;
        }
    }
    catch(err)
    {/*do nothing*/}
    return true;
}

function Export()
{
    if(!IsExportable())return;
	var exportFormat = "E"; // Excel is the default format
	var relativePath = "EXPORT\\"
	var isStateful = !(typeof(m_aliases) == "undefined");

	var params = new Array( exportFormat, relativePath, isStateful );
	var res = window.showModalDialog('../form_asp/export_engine.htm',params,'dialogWidth:600px;dialogHeight:420px;status:no;toolbar:no;scroll:no;center:yes;help:no');
	if ( res == null ) return;
	
	exportFormat = res[0];
	var templateDoc = res[1];
	var delimiter = res[2];
    var SOAPResult = null; 
	// If there is no state		
	if( isStateful ) 
	{
		SOAPResult = ExportState( exportFormat, relativePath, templateDoc, delimiter );
	}
	else if(typeof(gPortalName) == "undefined")
	{
		SOAPResult = ExportQuery( exportFormat, relativePath, templateDoc, delimiter );
	}
	else
	{
	    SOAPResult = ExportQueryCriteria(m_strXMLSearch[m_TabNumber], exportFormat, relativePath, templateDoc, delimiter );
	}
	
	if ( SOAP_IsError( SOAPResult ) )
	{		
		var IsAliasesExisted = true;

        if ( typeof(m_aliases) == "undefined" )
        {
                IsAliasesExisted = false;
                m_aliases = new Array();
        }
        
        var IsPageAttributesExisted = true;
        
        if ( typeof(m_PageAttributes) == "undefined" )
        {
                IsPageAttributesExisted = false;
                m_PageAttributes = new Array();
        }

        WriteError( SOAP_Format_Error_Message( SOAPResult ) );

        if ( !IsAliasesExisted )
        {
                m_aliases = undefined;
        }

        if ( !IsPageAttributesExisted )

        {
                m_PageAttributes = undefined;
        }
        return;
	}

	// Open the resulted export file in a new page
	AO_DownloadFile( relativePath + SOAPResult.value, null, "yes" );
}

function ExportQueryCriteria(searchString, exportFormat, filename, templateDoc, delimiter )
{
    try
    {
        if(searchString==null) throw "Failed Exporting Data";
        res = SOAP_ExportQuery( searchString.xml, exportFormat, filename, templateDoc, delimiter );
	}
	catch(e)
	{
	    AO_EndWait();WriteError(e)
	}	

	return res;	
}

function ExportQuery( exportFormat, filename, templateDoc, delimiter )
{
	try{
		f_BeforeScrollerRetrieve()
	}catch(e){}

	var pos;
	var field;
	var elementsArr;
	var fields=new Array();
	var colName;
	var strHTML;
	var indx = 0;
	var strContent;
	var strFields = new Array();
	var strValues = new Array();
  	var strTypes=new Array();
  	var strOperators=new Array();
	m_currentRow[currTab] = null;
	currRow[currTab] = null;
	var searchXML=GetXSLDocument("searchXML"+m_BCName);
try{	
	elamentsArr = _searchTop.all.tags("input");
	for (var i=0;i<elamentsArr.length;i++)fields[i]=elamentsArr[i];
	elamentsArr = _searchTop.all.tags("select");
	for (var j=0;j<elamentsArr.length;j++,i++)fields[i]=elamentsArr[j];
	elamentsArr = _searchTop.all.tags("textarea");
	for (var k=0;k<elamentsArr.length;k++,j++,i++)fields[i]=elamentsArr[k];
	elamentsArr=null;
	if (fields.length == 0) return;

	for (i = 0; i < fields.length, field = fields[i]; i++)
	{
		with (field){
			if (type == "button") continue;
			//check if there is a mandatory field in QBE
			if ((field.className).indexOf("mandatory")!=-1)
			{
				if(field.value=='')
				{
					alert('You must fill the mandatory fields!');
					return false;
				}
			}
			if (value.length > 0)
			{
				colName = id;
				
				pos = colName.search("\\#");
				if (pos != -1) colName = colName.substring(0, pos);
				
				strFields[indx] = colName;
  				strTypes[indx]=(typeof(field_type)=="undefined")?"string":field_type;
  				strOperators[indx]=(typeof(operator)=="undefined")?"like":operator;
				if(strTypes[indx].indexOf("date")>-1) {
					var dtVal=GoInternal(value,"date");
					if (dtVal.charAt(0)==":") {
						WriteError(dtVal.substr(1));
						return false;
					}
					if 	(strOperators[indx].indexOf(">")>-1)
					{
						dtVal=dtVal + "T00:00:00:000";
					}
					else if (strOperators[indx].indexOf("<")>-1)
					{
						dtVal=dtVal + "T23:59:59:999";
					}					
					
					strValues[indx]= dtVal;
				}				
				else strValues[indx] = value;  								
				indx ++;
			}
		}
	}
    m_searchString=BuildXML4Search(m_EntityName, m_QueryName, strFields, strValues,strTypes,strOperators);  
    try{
			var str_searchString=f_pre_scrl_retrieve(m_searchString);
			if (str_searchString!=null) m_searchString=str_searchString;
	}catch(e)
	{
		// do nothing
	}
	var strContent=false;
	
		res = SOAP_ExportQuery( m_searchString, exportFormat, filename, templateDoc, delimiter );
	}catch(e){AO_EndWait();WriteError(e)}	

	try{
		f_AfterScrollerRetrieve();
	}catch(e){}
	
	return res;	

}

// Download a file from the server 
// Parameters:
//	relativePath: [Required] Path to file relatively to Globals/FileStoragePath
//  filename: [Optional] Filename to be displayed on the client. 
//  toBeDeleted: [Optional. Default "no"] Delete the file after downloading or not ( "yes"/"no" )
//  loadFromCache: [Optional] If loadFromCache is false file always downloading from server.
function AO_DownloadFile( relativePath, filename, toBeDeleted, loadFromCache)
{
	if ( relativePath == null || relativePath == "" ) return;
	if ( filename == null ) filename = relativePath.substr( relativePath.lastIndexOf('\\') + 1 );
	if ( toBeDeleted == null ) toBeDeleted = "no";

	var linkObj = top.uploadFrame.document.getElementById("attachment_link");
	linkObj.href = "../Web_Framework/Download.aspx?SessionID=" + _GetGlobalVar("SessionID") + "&id=" + relativePath + "&name=" + filename + "&delete=" + toBeDeleted;
	if (loadFromCache!=null && !loadFromCache) linkObj.href+="&rnd=" + String(Math.random());
	linkObj.focus();
	linkObj.click();
}

///<summary>
///this function check the credit permission for the current looged in user
// according to his permission rule.
///</summary>
///<return></retrun>
function CheckCreditCardPermissions()
{
    var permissionsXML = SOAP_GetPermissionsXML("form_asp/show_credit_maint.asp","Show_Credit_Card_Data")
    
    if(permissionsXML != null)
	{
	   var objPermissionsXML = new ActiveXObject("MSXML2.DOMDocument");
		objPermissionsXML.async=false;

		objPermissionsXML.loadXML(permissionsXML)

		var moduleXML = objPermissionsXML.selectSingleNode("/Module")
		_SetGlobalVar("IsUserCreditCardPermissions",(moduleXML.getAttribute("Access") == "true"));
	}
	else
	{
	   _SetGlobalVar("IsUserCreditCardPermissions",false); 
	}
}

function FilterElements(element,filter,firstOrDefault,queueResults)
{
    if(queueResults==null) queueResults = new Array();
    if(firstOrDefault==null) firstOrDefault=false;
    if(ValidateElement(filter,element))
    {
        queueResults.push(element);
    }
    if((element.hasChildNodes() && !firstOrDefault ) || (firstOrDefault && queueResults.length==0) )
    {
        var len = element.children.length;
        for(var index=0;index<len;index++)
        {
            var childElement = element.children[index];
            if(childElement.hasChildNodes())
            {
                FilterElements(childElement,filter,firstOrDefault,queueResults);
            }
            else
            {
                if(ValidateElement(filter,childElement))
                {
                    queueResults.push(childElement);
                }
            } 
        }
    }
    if(firstOrDefault && queueResults.length>0)
    {
        return queueResults[0];
    }
    else if(firstOrDefault && queueResults.length==0)
    {
        return null;
    }
    return queueResults;
}

function ValidateElement(filter,element)
{
    return eval(CreateFilter(filter,"element"));
}

function CreateFilter(filter,name)
{
 //   "tagName div|className test";
    var filters = filter.split("|");
    var sb = new StringBuilder();
    var len = filters.length;
    for(var index=0;index<len;index++)
    {
        var val = filters[index].split(" ");
	    sb.Append(String.prototype.Format("{0}.{1}.toLowerCase() == '{2}'",name,val[0],val[1]));
	    sb.Append(" && ");
    }
    sb.Append(" 1==1 ");
    return sb.ToString();
}


onload_ao_shared_functions();




