//debugger;
var m_PageID   = 0;
var m_ObjectID = 0;
var m_ClassID  = 0;
var m_ParentObjectID = 0;
var m_ParentClassID  = 0;
var m_TaskID  = 0;
var m_SubType = 0;
var m_VirtualParentObjectID = 0;
var m_VirtualParentClassID = 0;
var m_bIsTemplate = false;
var m_ActiveLink = null;
var m_sAlertDefinition = null;
var m_bReadOnly = false;
var m_oBroker = null;
var m_oClient=null;
var m_bManualDataChanged = false;
var m_sClassName = '';
var m_sInstanceName = '';
var m_iPermissions = 7;
var m_bApplyContext = false;

var m_bMessagesJoined = false;
//var m_oMessages = new Array();
var m_sPrimaryDocPath = '';
//var m_oOpenedWindows = null;
//var m_bAllowNewPages = false;
var m_sAuditingInfo  = null;
var m_iLoader;
//	var m_oCurrentTopWindow = null;
var m_iChangedPage=-1;

var m_bIsNewTemplate = false;
var m_arCaptions = new Array();

var m_oLocation;
//var m_oGeminiWindow;
var PERMISSION_NONE   = 0;
var PERMISSION_READ   = 1;
var PERMISSION_UPDATE = 2;
var PERMISSION_ADD    = 3;
var PERMISSION_DELETE = 4;

var DATA_TYPE_NUMBER  = 1;
var DATA_TYPE_STRING  = 2;
var DATA_TYPE_DATE    = 3;
var DATA_TYPE_LOOKUP  = 7;
var DATA_TYPE_BOOLEAN = 5;

var DT_DATE='7';
var m_bRememberMe=false;

var m_iTop = -1;
var m_iLeft = -1;
var m_iWidth = -1;
var m_iHeight = -1;

var m_iResizeWidth = -1;
var m_iResizeHeight = -1;

var m_bResizeTimerIsActivate=false;
var m_oResizeTimer;

var m_sTag="";
var m_bOnlyGridRefresh=false;

//-- ZIV09032004
var m_bProgrammerHelp = false;
var m_bSkipOnChange = false;
var cnINSTANCE_CONTAINER_PAGE = 172030100;

//Users and Contacts Obb
var ALL_USERS_OBB = 69;

//Asifa - Declare global variable for execution page.
var EXECUTION_PAGE = "gisapi.dll";
var m_childCallback = "";
var m_sMethodName="";
var m_bResult;


function getBroker()
{
    /*********************************/
    //debugger;
	if (m_oBroker!=null)
	{
		return m_oBroker;
	}

	// this is for modal windows, wich cannot access the opener, there for the pointer
	// to the opener is passed through the window.dialogArguments
	if (self.dialogArguments != null)
	{
		m_oBroker = self.dialogArguments.getBroker();
		return m_oBroker;
	}
	
	if (opener!=null && !opener.closed)
	{
		try
		{
			m_oBroker = opener.getBroker();
			if (m_oBroker!=null)
			{
				return m_oBroker;
			}
		}
		catch(e)
		{
		}
	}

	if (top==self)
	{
	    var m_oBroker = new Object();
        m_oBroker.createRequest = CreateRequest;
        m_oBroker.createResponse = function(responseXML)
        {
            return RESPONSE_CONVERTER().getResponse(responseXML);
        };
        m_oBroker.document = top.document;
        m_oBroker.Clean = function () 
            {
                setHourglass(false);
            };
        m_oBroker.getLength = function (f) 
            {
                return f.length;
            }
	    
	    if (top.document.parentWindow == null)
	        m_oBroker.document.parentWindow = m_oBroker.document.defaultView;
	    
        return m_oBroker;
	
	}
	

	if (parent!=null && parent!=self)
	{
		try
		{
			m_oBroker = parent.getBroker();
			if (m_oBroker!=null)
			{
				return m_oBroker;
			}
		}
		catch(e)
		{
		}
		if (m_oBroker==null)
		{
			try
			{
				m_oBroker = parent.parent.getBroker();
			}
			catch(e)
			{
			}
		}
		if (m_oBroker==null)
		{
			m_oBroker = top.getBroker();
			return m_oBroker;
		}
	}

	return m_oBroker;
}


//  params constructor
function brokerParam(Name, Value, Datatype)
{
	this.name = Name;
	this.value = Value;
	this.Datatype = Datatype;
}

//Asifa - Added function to Handle response
function handle_onResponse(Response)
{
	var oResponse;
	if (Response != null )
	{
	    if (typeof (Response) != 'string')
	    {
	        oResponse = Response;
	    }
	    else
	    {
	        //Asifa - call js class
	        var res = RESPONSE_CONVERTER();
	        //Asifa - Convert xml to response
	        oResponse = res.getResponse(Response);
	        if (oResponse == null) return;

	        //updateAlerts(oResponse.getAlerts());
	    }

	    if (oResponse.getResult())
	    {
	        //Asifa - Here changed methodName to m_sMethodName
	        if ((m_sMethodName == '1') || (m_sMethodName == '3') || (m_sMethodName == '2'))
	        {
	            setPageValues();
	        }
	    }
        // cleanup
	    Parameters = null;
	    oWindow = null;
	    Request = null;
	    Arguments = null;
	    oParameter = null;
	    oBroker = null;
	    oPage = null;

	    return oResponse;
	  }
	else
	  {
	    return null;
	  }
}

function sendThroughBroker(classID, methodName, Parameters, secured, callBack, interval, transactional, timeout, isSynchReq)
{
	var Request, Arguments;
	var oParameter;
	var index=0;

	// assigned value.		
	m_sMethodName = methodName;

	var Response;
	var oPage;

    //Asifa - Instantiate js class.
	Request = CreateRequest();

	if (transactional!=false)
		Request.setRequiresTransaction(true);

	if (secured)
		Request.setSecured();
    
    if (callBack == null)
        callBack = function(param){};
    
	if (timeout!=null)
		Request.setTimeout(timeout);
    
    if (isSynchReq == null)
        isSynchReq = true;
	
	Request.setClass(parseFloat(classID));
	Request.setMethod(methodName);
	Request.setPage(parseFloat(m_PageID),
				 	parseFloat(m_ObjectID),
					parseFloat(m_ClassID),
					parseFloat(m_ParentObjectID),
					parseFloat(m_ParentClassID),
					parseFloat(m_SubType),
					parseFloat(m_TaskID),
					parseFloat(m_VirtualParentObjectID),
					parseFloat(m_VirtualParentClassID));

    
	Arguments = Request.getArguments();
	if (Parameters != null)
	    for (var i = 0; i < Parameters.length; i++)
	        Arguments.add(Parameters[i].name, Parameters[i].value + '');			
	else
		Arguments.add('Broker', 'Broker');
	

    if (isSynchReq)
        return handle_onResponse(Request.submit(function (){}, self, isSynchReq));
    else 		
	    Request.submit(function(responseVal) {callBack(handle_onResponse(responseVal))}, self, isSynchReq);
}

function addError(Number, Source, Description, SeverityLevel, Category)
{
	WriteToLog('An Error has accured  : #' + Number + ' - ' + Source + ' , ' + Description);
}

function logOff()
{
	try
	{

	     var req; 
          if (window.XMLHttpRequest) { // Non-IE browsers 
            req = new XMLHttpRequest(); 
          } else if(window.ActiveXObject) { // IE 
                req = new ActiveXObject("Microsoft.XMLHTTP");
          }else{
                alert('Internal error: Unknown browser type. Failed to send request for logoff.');
          } 
        req.open("GET", EXECUTION_PAGE + "?Do=Logout&Now=1", true); 
        req.send(null); 
	}
	catch(e)
	{
	   alert('Internal error: Failed to send request for logoff.');
	}
	
	// reset last url
	setCookie('LastUrl', '');
    var sLoginURLNew = getCookie('loginURLNew', '');
    
    
    if(sLoginURLNew != null && sLoginURLNew != '' && sLoginURLNew != 'undefined')
    {
        if(sLoginURLNew.toUpperCase().indexOf(".ASPX")>-1)
	        sLoginURLNew = sLoginURLNew.substring(0,sLoginURLNew.lastIndexOf("/"));
	    document.location = sLoginURLNew;
	}
    else
	    document.location = '/apollo';
}


function readCookie(name) 
{
    return getCookie(name);
}
    
function onButton(image)
{
	image.originalClassName = image.className;
	if (image.parentNode.getAttribute('Enabled') == 'true')
	{
		image.style.cursor = 'pointer';
		image.src = image.getAttribute('ActiveIcon');
		image.className = 'Raised' + image.className;
	}
	else
	{
		image.style.cursor = 'default';
	}
}

function offButton(image)
{
	image.src = image.getAttribute('NormalIcon');
	image.className = image.originalClassName;
}

function disableAction(Action, forGood)
{
	var iIndex = 0;
	var oButton = null;
	var oToolbar = getDomElement('ToolBar');

	if (oToolbar == null) return;
	var oButtons =  oToolbar.firstChild.firstChild.childNodes;
	if (oButtons == null) return;
	for (; iIndex < oButtons.length; iIndex++)
	{
		oButton = oButtons(iIndex).firstChild;
		if ((oButton != null) && (oButton.Action == Action))
		{
			disableButton(oButton.Num, forGood);
		}
	}
}

function enableAction(Action)
{
	var iIndex = 0;
	var oButton = null;
	var oToolbar = getDomElement('ToolBar');
	if (oToolbar == null) return;
	var oButtons =  oToolbar.firstChild.firstChild.childNodes;
	if (oButtons == null) return;

	for (; iIndex < oButtons.length; iIndex++)
	{
		oButton = oButtons(iIndex).firstChild;
		if ((oButton != null) && (oButton.Action == Action))
		{
			enableButton(oButton.Num);
		}
	}
}


function disableButton(ID,ForGood)
{
    var oButton = getDomElement(ID);
    if(oButton != null)
    {
	    //oButton.style.background = "url('../images/button_gradient2_gray.gif')";
	    oButton.setAttribute('disabled', 'true');
	    oButton.removeAttribute('href');
    }
    else//Legacy Code
    {
	    var oButtonLink = getDomElement('ButtonLink' + ID);
	    var oButtonImage = getDomElement('Button' + ID);
	    var oBarLink = getDomElement('BarLink' +ID);
	    if ((oButtonLink != null) && (oButtonImage != null))
	    {
		    if (oButtonLink.getAttribute('Enabled') == 'false' || oButtonLink.Locked == 'true')
		    {
			    // alredy disabled
			    return;
		    }
			
		    //alert('disable ' + ID + '\n\n' + oButtonLink.getAttribute('Enabled') + '\n' + oButtonLink.getAttribute('Locked'));
			
			
		    oButtonLink.setAttribute('Enabled', 'false');
		    oButtonLink.setAttribute('oldonclick', oButtonLink.getAttribute('onclick'));
		    oButtonLink.onclick = '';
		    oButtonImage.setAttribute('oldSrc', oButtonImage.getAttribute('src'));
		    oButtonImage.setAttribute('oldNormalIcon', oButtonImage.getAttribute('NormalIcon'));
		    oButtonImage.setAttribute('oldActiveIcon', oButtonImage.getAttribute('ActiveIcon'));
		    oButtonImage.src = oButtonImage.getAttribute('DisabledIcon');
		    oButtonImage.setAttribute('NormalIcon', oButtonImage.getAttribute('DisabledIcon'));
		    oButtonImage.setAttribute('ActiveIcon', oButtonImage.getAttribute('DisabledIcon'));
		    if (ForGood==true) 
		        oButtonLink.Locked = 'true';
	    }
	    else
	    {
		    if (oBarLink !=null)
		    {
			    if (oBarLink.getAttribute('Enabled') == 'false' || oBarLink.Locked == 'true')
			    {
				    oBarLink.basicClassName = oBarLink.className;
				    return;
			    }
				
			    oBarLink.className = 'DisabledHeaderLink';
			    oBarLink.setAttribute('basicClassName', 'DisabledHeaderLink');
			    oBarLink.setAttribute('oldonclick', oBarLink.getAttribute('onclick'));
			    oBarLink.onclick = '';
			    oBarLink.setAttribute('Enabled', 'false');
		    }
	    }
    }		   
}

function enableButton(ID)
{
    var oButton = getDomElement(ID);
    if(oButton != null)
    {
	    //oButton.style.background = "url('../images/button_gradient2.gif')";
	    oButton.removeAttribute('disabled');
	    oButton.setAttribute('href','#');
    }
    else//Legacy Code
    {
	    var oButtonLink = getDomElement('ButtonLink' + ID);
	    var oButtonImage = getDomElement('Button' + ID);
	    var oBarLink = getDomElement('BarLink' +ID);
	    if ((oButtonLink != null) && (oButtonImage != null))
	    {
	        //alert('enable1 ' + ID + '\n\n' + oButtonLink.getAttribute('Enabled') + '\n' + oButtonLink.getAttribute('Locked'));
		    if ((oButtonLink.getAttribute('Enabled') == 'true') || (oButtonLink.getAttribute('Locked') == 'true'))
		    {
			    // alredy enabled
			    return;
		    }
			
		    oButtonLink.setAttribute('Enabled', 'true');
		    oButtonLink.attachEvent('onclick', m_uiGenerator.getFunctionPointer(oButtonLink.getAttribute('oldonclick')));
			
		    oButtonImage.src = oButtonImage.getAttribute('oldSrc');
		    oButtonImage.setAttribute('NormalIcon', oButtonImage.getAttribute('oldNormalIcon'));
		    oButtonImage.setAttribute('ActiveIcon', oButtonImage.getAttribute('oldActiveIcon'));
	    }
	    else
	    {
		    if (oBarLink != null)
		    {
			    if ((oBarLink.getAttribute('Enabled') == 'true') || (oBarLink.getAttribute('Locked') == 'true'))
			    {
				    oBarLink.basicClassName = oBarLink.className;
				    return;
			    }
			    oBarLink.className = 'HeaderLink';
			    oBarLink.setAttribute('basicClassName', 'HeaderLink');
			    oBarLink.attachEvent('onclick', m_uiGenerator.getFunctionPointer(oButtonLink.getAttribute('oldonclick')));
			    oBarLink.setAttribute('oldonclick','');
			    oBarLink.setAttribute('Enabled', 'true');
		    }
	    }
    }
}

function setClassName(newClassName)
{
	// history
	m_sClassName = newClassName;

	initHistory()
}

function getTitle()
{
	var sTitle = m_sClassName;
	if (trim(m_sInstanceName) != '') sTitle += ' (' + m_sInstanceName + ')';

	return (unWellFormXML(sTitle));
}

function getHistory(histories)
{
	var sHistory = '';

	try
	{
		if ((opener != null) && (!opener.closed) && (opener != self))
		{
			opener.getHistory(histories);
			histories[histories.length] = getTitle();
		}
		else if ((parent != null) && (!parent.closed) && (parent != self))
		{
			parent.getHistory(histories);
		}
	}
	catch(e)
	{
	}
}

function setHistory(histories)
{
	var iIndex = histories.length-1;
	var iLength = 0;
	var sImage = '<IMG Width="8" Heigh="8" SRC="' + createGeminiImage('images/hd_history_devider.gif') +'"/>'
	var sText = '';
	var sToolTip = '';

	var oHistoryTag = getDomElement('HISTORY');
	if (oHistoryTag != null)
	{
		// create the HTML...
		var sHMTL = '<TABLE Width="100%" Border="0" Cellpadding="0" cellspacing="0"><TR>';
		var sTDs = '';
		while ((iIndex >= 0) && (iLength < oHistoryTag.parentNode.clientWidth))
		{
			sText = histories[iIndex];
			iLength += (sText.length + 2) * 7;

			sTDs = '<TD Nowrap="True"><LABEL Class="History">' + sText + '</LABEL></TD>' + sTDs;

			if (iIndex > 0 && sText!='')
			{
				sTDs = '<TD>&#160;' + sImage + '&#160;</TD>' + sTDs;
				iLength += 20;
			}
			iIndex--;
		}

		// if been cuted, add ...
		if (iIndex > 0)
		{
			sTDs = '<TD Nowrap="True"><LABEL Class="History">...</LABEL></TD>' + sTDs;
		}

		sHMTL +=  sTDs + '<TD Width="100%">&#160;</TD>'
		sHMTL += '</TR></TABLE>';

		// create tooltip
		iIndex = 0;
		while (iIndex < histories.length-1)
		{
			sToolTip += histories[iIndex] + ' > ';
			iIndex++;
		}
		sToolTip += histories[iIndex];

		oHistoryTag.innerHTML = sHMTL;
		oHistoryTag.title = sToolTip;
	}
}

function initTitle()
{
	var oHeader = getDomElement('PageHeaderLabel');
	if (oHeader == null) return;

	var sTitle = null;

	// page title
	if (m_ObjectID == -1)
	{
		sTitle = 'New ' + m_sClassName;
	}
	else
	{
		sTitle = (trim(m_sInstanceName) != '') ? m_sInstanceName : m_sClassName;
	}

	sTitle = unWellFormXML(sTitle);

	// page title
	oHeader.title = sTitle;
	oHeader.innerHTML = sTitle;
	// IE title
	document.title = sTitle;
}

function initHistory()
{
	initTitle();

	var oHistories = new Array();
	getHistory(oHistories)
	setHistory(oHistories);
}

/*
function AllowNewPages()
{
	return top.m_bAllowNewPages;
}
*/

//var thePopup = null;
//var thePopupURL = "";
function openUrl(URL, bNewInstance)
{
    var oWindow;
    var oDocument;
    var lWidth;
    var lHeight;
    var lTop;
    var lLeft;
    var sFeatures, sLocation;
    //var bNewWindow=true;
    var iIndex = 0;
    var lNewPageID = 0;
    var lCurrentPageID = 0;

    bNewInstance = (bNewInstance != null) ? bNewInstance : false;

   /* if (bNewInstance)
    {
        lWidth = 168;
        lHeight = 100;
        lTop = (screen.availHeight - lHeight) / 2;
        lLeft = (screen.availWidth - lWidth) / 2;
    }
    else
    { */ 
        if (screen.availWidth > 800)
        {
            lWidth = screen.availWidth - 150;
            lHeight = screen.availHeight - 100;
            lTop = (screen.availHeight - lHeight) / 2;
            lLeft = (screen.availWidth - lWidth) / 2;
        }
        else
        {
            lWidth = screen.availWidth - 10;
            lHeight = screen.availHeight - 25;
            lTop = 0;
            lLeft = 0;
        }

    //}

        if (bNewInstance)
        {
            sFeatures = ',scrollbars=yes';
            sFeatures += ',center=yes';
            sFeatures += ',resizable=yes';
            sFeatures += ',status=yes';
            sFeatures += ',history=no';
            sFeatures += ',toolbar=no';
            sFeatures += ',menubar=no';
            sFeatures += ',location=no';
            sFeatures += ',titlebar=no';

            /*
            sLocation = 'width=100';
            sLocation += ',height=100';
            sLocation += ',top=' + screen.height; //600
            sLocation += ',left=' + screen.width; //800
            */

            sLocation = 'width=' + (m_iWidth > 0 ? m_iWidth : lWidth);
            sLocation += ',height=' + (m_iHeight > 0 ? m_iHeight : lHeight);
            sLocation += ',top=' + (m_iLeft > 0 ? m_iLeft : lLeft);
            sLocation += ',left=' + (m_iTop > 0 ? m_iTop : lTop);

            URL += "#popup=1";


            oWindow = open(URL, '_blank', sLocation + sFeatures);
            return;
        }
        else
        {
            oWindow = top;
            if (continueNavigation())
            {
                oWindow.AddInsertedWindow(URL, this);
            }
        }
}


function sleep(millisecondi)
{
    var now = new Date();
    var exitTime = now.getTime() + millisecondi;

    while(true)
    {
        now = new Date();
        if(now.getTime() > exitTime) return;
    }
}

function reloadGeminiWindow(ObjectID)
{		
	document.location = getSelfReferencingURL(ObjectID);
}

function getSelfReferencingURL(ObjectID)
{
    var bHasHeader=0;
	// PageID, ObjectID, ClassID, ParentObjectID, ParentClassID, TaskID, SubType, VirtualParentObjectID, VirtualParentClassID,ShowHeader

	if (ObjectID==null)
		ObjectID = m_ObjectID;

	if (top == self && (typeof(m_bIsPopup) == "undefined" || m_bIsPopup == null || !m_bIsPopup))
		bHasHeader = 1;
    
    try 
    {        
        return createGeminiURL(m_PageID, ObjectID, m_ClassID, m_ParentObjectID, m_ParentClassID, null, null, null, null, bHasHeader, (location.protocol == 'HTTPS'));
    }
    catch (e)
    {
        return document.location.href;
    }			
}
            
function getLinkableURL(url)
{
    if (url == null)
        url = document.location.href;
    var sQS = url.slice(url.indexOf('?') + 1);
    var portfolioUrl = getCookie('loginURLNew', 'apollo');
    //alert(portfolioUrl);
    if (portfolioUrl != null)
    {
        if (portfolioUrl.lastIndexOf('/') >= 0)
        {
            portfolioUrl = portfolioUrl.slice(0, portfolioUrl.lastIndexOf('/') );
            portfolioUrl = portfolioUrl.slice(portfolioUrl.lastIndexOf('/') + 1);
        }
	    
        if (sQS.indexOf('&__p=') > 0)
            sQS = sQS.slice(0, sQS.indexOf('&__p='));
        sQS += '&__p=' + portfolioUrl;
    }
    
    sQS = 'jumpTo=' + encodeBase64(sQS);
    
    url = top.document.location.href;
    url = url.slice(0, url.indexOf('gisapi.dll?'));
    url += 'jump.htm?' + sQS;
    return url;
}

function getURLParam(param, defaultValue, url)
{
    if (url == null)
        url = document.location.href;
    if (url.indexOf('?') < 0)
        return null;
    url = url.slice(url.indexOf('?') + 1);
    return getQSparam(url, param, defaultValue);
}

function getQSparam(queryString, param, defaultValue)
{
    var aParams = queryString.split('&');
    for (var i = 0; i < aParams.length; i++)
    {
        var aParam = aParams[i].split('=');
        if (aParam.length != 2)
            continue;
        if (aParam[0].toLowerCase() == param.toLowerCase())
            return aParam[1];
    }
    return defaultValue;
}



//Closes all children window of current window
/*
function closeChildren()
{
	var iIndex = 0;
	var oOpenWindows = getOpenWindows();
	if (oOpenWindows==null) return;
	var oWindow;
	for (iIndex=oOpenWindows.length-1;iIndex>=0;iIndex--)
	{
		oWindow = oOpenWindows[iIndex].Window;
		if(!oWindow.closed)
		{
			oWindow.close();
		}
	}
}
*/

function closeOpener()
{
	if ((opener != null) && (!opener.closed))
		opener.close();
}
function refreshSmsPayment()
{
 if (opener != null)
 {
    if (opener.m_PageID==716030100) opener.getGridByID(723040100).Refresh(); 
 }
}
function refreshOpener(bRefreshPage, IgnoreClassMatching)
{
    try {
    
	    if (opener != null && (!opener.closed))
	    {
	        if (IgnoreClassMatching==null || IgnoreClassMatching==false)
			    if (m_ClassID != opener.m_ClassID) 
			        return;

	        if (bRefreshPage!=null)
	        {
			    if (!bRefreshPage)
				    opener.setTimeout('refreshNow(false,true)',0);
			    else
				    opener.setTimeout('refreshNow(true,true)',0);
	        }
	        else
			    opener.setTimeout('refreshNow(true,true)',0);
	    }
	}
	catch (e) {}
}

function refreshNow(bRefreshPage)
{
	var oGrid = null;
	
	// Property pages can contain grid (like realestate)
	// Change By Nir			
	if ((typeof(m_arGrids) == "object") && (m_bOnlyGridRefresh || getDomElement('WORKSPACE')==null))
	{
		oGrid = getGrid();
		if (oGrid!=null)
		{
			if (bRefreshPage)
				oGrid.Refresh(false,true);
			else
				oGrid.Refresh(true,true);
		}
	}
	else
	{
		if (typeof(reloadSMSWindow) != null)
		{
			reloadSMSWindow();
		}
		//alert('Refresh all page');
		else if (m_PageID!=1030300) //do not refresh main page
		{
			if (continueNavigation())
				reloadGeminiWindow();
		}
	}

}

function resizePage()
{
	// new card
	//if ((getWorkMode()==1) && (!bIsNewInstance)) return;
	var bPopup = (location.hash == '#popup=1');
	if (!bPopup) return;

	// resize window
	if (m_iTop != -1 && m_iLeft != -1 && m_iHeight != -1 && m_iWidth != -1)
	{
		if (self==top)
		{
			moveTo(m_iLeft, m_iTop);
			window.resizeTo(m_iWidth, m_iHeight);
			return;
		}
	}
	if (m_iTop == -1 && m_iLeft == -1 && m_iHeight != -1 && m_iWidth != -1)
	{
		// changes of width and height according to available screen (in cases of 800x600)
		if (m_iWidth > screen.availWidth)  	m_iWidth = screen.availWidth-20;
		if (m_iHeight > screen.availHeight)	m_iHeight = screen.availHeight-20;
		m_iLeft = (screen.availWidth - m_iWidth)/2
		m_iTop = (screen.availHeight - m_iHeight)/2
		try
		{
		    moveTo(m_iLeft, m_iTop);
		}
		catch (e) {}
		
		try
		{
		    window.resizeTo(m_iWidth, m_iHeight);
		}
		catch (e) {}
		
	}
}

function locateWindow (windowObject, Top, Left, Height, Width)
{
	// globals (for futre resizing)
	windowObject = (windowObject == null) ? self : windowObject;

	windowObject.m_iTop = Top;
	windowObject.m_iLeft = Left;
	windowObject.m_iWidth = Width;
	windowObject.m_iHeight = Height;
}

function maximizeWindow(windowObject)
{
	windowObject = (windowObject == null) ? self : windowObject;
	windowObject.moveTo(0,0);
	windowObject.resizeTo(screen.availWidth,screen.availHeight);
}

function restoreWindow(windowObject)
{
	locateWindow(windowObject, m_iTop,m_iLeft,m_iHeight,m_iWidth)
}

////////////////////////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////// general functions //////////////////////////////////////
function initPageSize(Top, Left, Height, Width)
{
	m_iTop    = Top;
	m_iLeft   = Left;
	m_iHeight = Height;
	m_iWidth  = Width;
}

function initVars(PageID,
				  ObjectID,
				  ClassID,
				  ParentObjectID,
				  ParentClassID,
				  TaskID,
				  SubType,
				  VirtualParentObjectID,
				  VirtualParentClassID,
				  AlertDefinition,
				  AuditingInfo,
				  IsReadOnly,
				  ClassName,
				  InstanceName,
				  ShowHeader,
				  ApplyContext,
				  PermissionBit)
{
	m_PageID   = PageID;
	m_ObjectID = ObjectID;
	m_ClassID  = ClassID;
	m_ParentObjectID = ParentObjectID;
	m_ParentClassID  = ParentClassID;
	m_TaskID  = TaskID;
	m_SubType = SubType;
	m_VirtualParentObjectID = VirtualParentObjectID;
	m_VirtualParentClassID  = VirtualParentClassID;
	m_sAlertDefinition      = AlertDefinition;
	m_bReadOnly     = IsReadOnly;
	m_sAuditingInfo = AuditingInfo;
	m_sClassName    = ClassName;
	m_sInstanceName = InstanceName;
	m_bShowHeader = ShowHeader;

	if (ApplyContext != null)
		m_bApplyContext = ApplyContext;

	if (PermissionBit != null)
		m_iPermissions  = PermissionBit;
    
	locateWindow(m_iTop, m_iLeft, m_iHeight, m_iWidth);

	// no need
	// tomer move the call of the function to the pageonload of the main template
	 //setTimeout('setPageValues()', 200);

}

function initPageDefinition()
{

	//-- Define prototypes
	try
	{
		String.prototype.toCurrencyFormat = toCurrencyFormat;
		String.prototype.fromCurrencyFormat = fromCurrencyFormat;
		String.prototype.Trim = trim;
		Number.prototype.toCurrencyFormat = toCurrencyFormat;
		Number.prototype.fromCurrencyFormat = fromCurrencyFormat;
	}
	catch(e)
	{}

	waitForDocumentBody();


	initHistory();

	
	
	initForms();
	
	handleToolBar();
	initLinks();
	//updateAlerts();
	handleKeys();
//		cancelSubmit();

	attachEvent('onresize', handleResize);
	resizePage();
	handleResize();

}

function initLinks()
{
    return;

	var iIndex = 0;
	var oLinks = document.getElementsByTagName('A');
	while (iIndex < oLinks.length)
	{

		oLinks[iIndex].attachEvent('onmouseover', highlightLink);
		oLinks[iIndex].attachEvent('onmouseout', restoreLink);
		//oLinks[iIndex].attachEvent('onmousedown', beforeClickAction); // ZIV09032004 - This is for later version (4.0)

		if (oLinks[iIndex].onclick != '')
		{
			oLinks[iIndex].attachEvent('onclick', activateLink);
		}

		if (oLinks[iIndex].basicClassName == null)
		{
			oLinks[iIndex].setAttribute('basicClassName', oLinks[iIndex].className);
		}
		iIndex++;
	}
}

function activateLink(event, sourceElement)
{
	try
	{
		var oLink = (event != null) ? event.srcElement : sourceElement;
	}
	catch(e)
	{}

	if (null == oLink) return;

	if(oLink.parentNode!=null)
		if (oLink.parentNode.tagName == 'A') oLink = oLink.parentNode;
	if (oLink == null) return;

	if ((oLink.className.search('Button') >= 0) || (oLink.className.search('HeaderLink') >= 0)) return;

	if (m_ActiveLink != null)
	{
		m_ActiveLink.className = m_ActiveLink.basicClassName;
	}
	if (oLink.className.search('Active') < 0)
	{
		oLink.className = 'Active' + oLink.basicClassName;
	}
	m_ActiveLink = oLink;
}

function highlightLink()
{
	var oLink = event.srcElement;
	if (oLink.parentNode.tagName == 'A') oLink = oLink.parentNode;
	if (oLink == null) return;

	if (oLink.className.search('Button') >= 0) return;
	if (oLink != m_ActiveLink)
	{
		if (oLink.className.search('Hover') < 0)
		{
			oLink.className = 'Hover' + oLink.basicClassName;
		}
	}
}

function restoreLink()
{
	var oLink = event.srcElement;
	if (oLink.parentNode.tagName == 'A') oLink = oLink.parentNode;
	if (oLink == null) return;

	if (oLink.className.search('Button') >= 0) return;
	if (oLink != m_ActiveLink)
	{
		oLink.className = oLink.basicClassName;
	}
}

function letUserStay(messsgeID)
{
	var sMsgStr = getDomElement ('TEXT' + messsgeID).innerHTML + ' ';
	event.returnValue = sMsgStr;
}

function setHourglass(State,oWindow)
{
	if (oWindow==null) oWindow = self;



	oWindow.waitForDocumentBody();

	try
	{
	    oWindow.document.body.style.cursor = State ? 'wait' : 'default';
		
		for (var iIndex=0;iIndex < oWindow.frames.length;iIndex++)
		{		    
		    setHourglass(State, oWindow.frames[iIndex]);
		} 
	} 
	catch (e)
	{}  
}

function frameExists(theWindow,frameName)
{
	var index = 0;
	var oFrame;
	while (index < theWindow.frames.length)
	{
		oFrame = theWindow.frames[index];
		try
		{
			if (oFrame.name == frameName) return true;
		}
		catch (e)
		{}

		index++;
	}
	return false;
}

////////////////////////////////////////////////////////////////////////////////////////////////


//////////////////// get an element in the document (DOM 1 standard) ///////////////////////////
function getDomElement(ID)
{
	var oElement = document.getElementById(ID)
	return(oElement);
	/*
	if (oElements.length == 0) 	return (null);
	var oElement = oElements[0]
	if (oElement == null)
	{
		return (null);
	}
	else
	{
		return(oElement);
	}
	*/
}
////////////////////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////// replace the blanks for asp requests //////////////////////////////
function replaceBlanks(str)
{
	var tmpStr;

	while(tmpStr!=str)
	{
		tmpStr=str;
		str=tmpStr.replace(" ", "%20");
	}
	return str;
}
////////////////////////////////////////////////////////////////////////////////////////////////

function handleErrors(Message,Url,Line)
{
	WriteToLog('Error ' + Message + ' at line ' + Line + ' on page ' + m_PageID);

	return false;
}


/*
function setActiveWindow()
{
	var oBroker = getBroker();
	if (oBroker != null)
	{
		try
		{
			if (oBroker.getSpy()!= null)
			{
				oBroker.getSpy().SetActiveWindow(self);
			}
		}
		catch(e)
		{}
	}
}
*/

function waitForDocumentBody()
{
	var iCount=0;
	while(document.body==null && iCount<10000)
	{
		iCount++;
	}
}

function handleResize()
{
	if(document == null) return;
	if(document.body == null) return;

	if ((m_iResizeWidth != document.body.offsetWidth) || (m_iResizeHeight != document.body.offsetHeight))
	{
		m_iResizeHeight = document.body.offsetHeight;
		m_iResizeWidth  = document.body.offsetWidth;

		//getBroker().EnableConsole();
		//getBroker().Log('handleResize ' +  m_PageID);

		initGUI();
	}
}

function initGUI()
{
	var iHeight, iWorkspaceHeight;
	var oWorkspace = getDomElement('WORKSPACE');
	var oPageFrame = getDomElement('PAGEFRAME' + m_PageID);
	var iPageTopOffset = 0;

	try
	{
		waitForDocumentBody();

		var oPageHeader = getDomElement('PageHeader');
		if (oPageHeader != null) 
		    iPageTopOffset += oPageHeader.offsetHeight;

		var oStatusBar = getDomElement('StatusBar');
		if (oStatusBar != null) 
		    iPageTopOffset += oStatusBar.offsetHeight;
		var oStatusBarSpace = getDomElement('StatusBarSpace');
		if (oStatusBarSpace != null) 
		    iPageTopOffset += oStatusBarSpace.offsetHeight;

		var oToolBar = getDomElement('ToolBar');
		if (oToolBar != null) 
		    iPageTopOffset += oToolBar.offsetHeight;
		var oToolBarSpace = getDomElement('ToolBarSpace');
		if (oToolBarSpace != null) 
		    iPageTopOffset += oToolBarSpace.offsetHeight;

		var oNewStatusBarSpace = getDomElement('NewOutlookbarOuterFrame');
		if (oNewStatusBarSpace != null) 
		    iPageTopOffset += 10;

		var iHeight = top.document.body.clientHeight - iPageTopOffset - 1;
		if (iHeight < 0) return;
		//-- Instance Container is opening objects and doesn't have div for height
		if (parent.m_PageID == cnINSTANCE_CONTAINER_PAGE)
			iHeight -= 46;

		if (oPageFrame != null)
		{
			oPageFrame.style.overflow = 'scroll';
			if (oWorkspace != null) // outlookbar  windows
				oPageFrame.style.height = iHeight - 12; // 12 is the padding of the inner frame
			else // divsbar  windows
				oPageFrame.style.height = iHeight - 14;
		}

		if (oWorkspace != null)
			oWorkspace.style.height = iHeight-12;

		if (typeof(m_oGrid) == 'object')
			m_oGrid.onResizeHandler();
	}
	catch (e)
	{
	   alert('Internal error\n' + e);
	}
}

function handleKeys()
{
	waitForDocumentBody();
	try
	{
		 document.body.onkeydown = handleKeyDown;
	}
	catch (e) {}
}

function handleKeyDown()
{
	if (event.keyCode==8) //backspace
    {
		if (
		    event.srcElement.tagName.match(/INPUT/i) 
		        && (event.srcElement.type.match(/text/i) || event.srcElement.type.match(/password/i)) 
		    || (event.srcElement.tagName.match(/textarea/i))			    )
			    event.returnValue =  (!event.srcElement.readOnly)
		else
			event.returnValue = false;			
	}
	    
	if (event.keyCode==122) //f11
		event.returnValue = false;
}


function initFields()
{
	var item;
	var form;
	var findex;
	var iindex;
	var bFocused = false;
	var bReadOnly=false;
	var value;
	var iPlace,sInputElement,oInputElement,sComboElement,oComboElement;

	for(findex=0;findex<document.forms.length;findex++)
	{
		form = document.forms.item(findex);
		for(iindex=0;iindex<form.elements.length;iindex++)
		{
			item = form.elements.item(iindex);
			// dates

			if (item.DATATYPE=='7')
			{
				if (item.value.length)
				{
					value = ConvertToClientFormat(item.value);
					if	(value==null)
						item.value='';
					else
						item.value = value;
				}
			}
			/*if (item.DATATYPE=='NUMBER' || item.DATATYPE=='3' || item.DATATYPE=='5' || item.DATATYPE=='20' || item.DATATYPE=='131')
			{
				item.style.textAlign='right';
			}*/
			// readonly fields
			bReadOnly = (item.className.search(/ReadOnly/gi) >= 0);
			if (bReadOnly)
			{
				if (item.tagName == 'SELECT')
					item.disabled=true;
				else if ((item.tagName == 'INPUT') && ((item.type == 'checkbox') || (item.type == 'radio')))
					item.disabled=true;
				else
					item.readOnly=true;
			}

			//----- Multi Measurment Field Initilizing -----
			iPlace = item.id.search(new RegExp ('_MeasurementUtilityCombo', 'gi'))
			if(iPlace>0)
			{
				//---- Setting IS_MULTI_MEASURMENT attribute -----
				sInputElement = item.id.slice(0,iPlace);
				oInputElement = getDomElement(sInputElement);
				oInputElement.setAttribute("IS_MULTI_MEASURMENT",1);

				//---- Setting IGNORE attribute -----
				sComboElement = item.id;
				oComboElement = getDomElement(sComboElement);
				oComboElement.setAttribute("IGNORE",1);
			}

			if (item.IS_ROUNDED)
			{
				if(item.IS_ROUNDED=='TRUE')
				{
					var iDecimalPlaces=0;
					if(item.SCALE)iDecimalPlaces = item.SCALE;
					if(item.NOT_ROUNDED_VALUE.length==0)item.NOT_ROUNDED_VALUE = item.value;
					item.value = roundFloat(item.value,iDecimalPlaces);
					//im attaching this event to handle only cases that the user enter value manually.
					//if MultiMeasurement converssion occure this event should be dettached !
					item.attachEvent ('onchange',synchronizeValues);
				}
			}
		}
	}
}

function textAreaLengthStoper()
{
	var maxLength = parseInt(event.srcElement.MAX_LENGTH,10);
	var currLength = parseInt(event.srcElement.innerHTML.length,10);
	//alert(currLength + ">" + maxLength)

	if (currLength>maxLength)
	{
		Beep();
		event.srcElement.innerHTML=event.srcElement.innerHTML.substring(0,maxLength);
		Msgbox(1090102);			
	}
}
function Beep()
{
	var oBroker = getBroker();
	if (oBroker==null) return;
	if (oBroker.readyState!=4) return;
	oBroker.Beep();
	oBroker=null;
}

function wellFormJavaScript(value)
{

	value = geminiReplaceAll (value, '"', '\\"');
	value = geminiReplaceAll (value, "'", "\\'");

	return (value);
}

function unWellFormJavaScript(value)
{

	value = geminiReplaceAll (value, '\\"' , '"');
	value = geminiReplaceAll (value, "\\'" , "'");

	return (value);
}

function unWellFormXML(Str)
{
	Str=geminiReplaceAll(Str, '&amp;', '&');
	Str=geminiReplaceAll(Str, '&lt;', '<');
	Str=geminiReplaceAll(Str, '&gt;', '>');
	Str=geminiReplaceAll(Str, '&quot;', '"');
	Str=geminiReplaceAll(Str, "&apos;", "'");
	return Str;
}

function wellFormXML(Str)
{
	Str=geminiReplaceAll(Str, "&", "&amp;");
	Str=geminiReplaceAll(Str, "<", "&lt;");
	Str=geminiReplaceAll(Str, ">", "&gt;");
	Str=geminiReplaceAll(Str, '"', '&quot;');
	Str=geminiReplaceAll(Str, "'", "&apos;");
	return Str;
}

function geminiReplaceAll(str, find, replace)
{
	var a;
	var b = new Array();

	if (str == null) return null;

	str = str.toString();
	a = str.split(find);
	b[0]=a[0];

	for (var i=1;i<a.length;i++)
		b[i] = replace + a[i];

	str='';
	for (i=0;i<a.length;i++)
		str = str+b[i];

	return str;
}

function getRandom()
{
	return 10000000*Math.random();
}


function synchronizeValues()
{
	if(event.srcElement.IS_ROUNDED)
		if(event.srcElement.IS_ROUNDED == 'TRUE') event.srcElement.NOT_ROUNDED_VALUE = event.srcElement.value;
	if (validateOneField(event.srcElement))
	{
		// Programmer OnChange Function
		if(event.srcElement.ON_CHANGE != null)
			eval(event.srcElement.ON_CHANGE);    // Fire The Function that was assigned to the ON_CHANGE property
	}
}


function roundFloat(fNum, iNum)
{
	var f;                // The Full Floating Number
	var iNumOfPoints;     // Number of points after the decimal places ( according to this i calculate the rounding )
	var Result;
	var iPower;

	f = parseFloat(fNum);
	iNumOfPoints = parseInt(iNum);

	if (iNumOfPoints <= 0 || iNumOfPoints == null || isNaN(iNumOfPoints))
	    return(Math.round(f));

	iPower = Math.pow(10, iNumOfPoints);
	Result = (Math.round(f * iPower))/iPower;

	return  (Result);
}

function sendMail(To,Subject,Body)
{
	if (Subject==null)
		Subject=' ';
	if (Body==null)
		Body=' ';

	var sMailString = 'mailto:' + To + '&Subject=' + Subject + '&Body=' + Body;
	document.location = sMailString;
}

function disableField(item, isManadatory)
{
	if (item == null) return;
	if(item.className.search(new RegExp ('hidden', 'gi'))=='0')  return;
	if ((item.tagName == 'SELECT') || ((item.tagName == 'INPUT') && ((item.type == 'checkbox') || (item.type == 'radio') || (item.type == 'button'))))
	{
		item.disabled=true;
	}
	else if (item.tagName == 'IMG')
	{
		item.disabled = true; // works only in IE 5.5
		if (item.onclick != '')
		{
			item.setAttribute("hisLink", item.onclick);
			item.onclick = '';
			item.style.visibility='Hidden';
		}
		return (true);
	}
	else
	{
		item.readOnly=true;
	}

	var sClass = 'ReadOnlyField';
	if (isManadatory) sClass = 'MandatoryReadOnlyField' ;
	if (item.tagName=='INPUT' && item.type=='button') sClass = 'DisabledButton';
	// finally
	item.className = sClass;
}

function enableField(item, isManadatory)
{
	if (item == null) return;

	if ((item.tagName == 'SELECT') || ((item.tagName == 'INPUT') && ((item.type == 'checkbox') || (item.type == 'radio') || (item.type == 'button'))))
		item.disabled=false;
	else if (item.tagName == 'IMG')
	{
		item.disabled = false; // works only in IE 5.5
		if (item.getAttribute("hisLink"))
		{
			item.style.visibility='visible';
			item.onclick = item.hisLink;
		}
		return (true);
	}
	else
		item.readOnly=false;

	var sClass = 'NormalField';
	if (isManadatory) sClass = 'MandatoryField';
	if (item.tagName=='INPUT' && item.type=='button' || item.isButton == "1") 
	    sClass = 'Button';
	// finally
	item.className = sClass;
}

function updateAlerts(Data)
{
	var oBroker = getBroker();
	if (oBroker==null) return;
	var oWindow = oBroker.document.parentWindow;
	if (typeof(oWindow.HandleAlertsData)!="function") return;

	if (Data == null) Data = m_sAlertDefinition;
	oWindow.setTimeout('HandleAlertsData("' + Data + '");', 0);
}

function getPageHelp(includeSubType)
{
	var Alias = m_PageID;
	includeSubType = (includeSubType == null) ? false : includeSubType;
	if (includeSubType) Alias += m_SubType;
	showGeminiHelp(Alias);
}

function showGeminiHelp(Alias)
{
	sURL = './Help';
	if (Alias != null)
		sURL += '/WPIQ_Help_csh.htm#TopicID=' + Alias;
	sURL += '?v=' + getUserProfile('VERSION_NUMBER');


	var sFeatures = 'width=168';
	sFeatures += ',height=100';
	sFeatures += ',top=' + (screen.availHeight-100)/2;
	sFeatures += ',left=' + (screen.availWidth-168)/2;
	sFeatures += ',scrollbars=0';
	sFeatures += ',center=yes';
	sFeatures += ',resizable=yes';
	sFeatures += ',status=no';
	sFeatures += ',history=no';
	sFeatures += ',toolbar=yes';
	sFeatures += ',menubar=no';
	sFeatures += ',location=no';

	var oWindow = window.open (sURL ,'_blank',sFeatures);
	maximizeWindow(oWindow);

	//showHelp(sURL);
}

function trim(oString)
{
    if(null == oString) return (oString);
    
    var sString = oString.toString()        

    while (sString.substring(0,1) == ' ')
        sString = sString.substring(1, sString.length);
    while (sString.substring(sString.length-1, sString.length) == ' ')
        sString = sString.substring(0,sString.length-1);
    return sString;
}

//////////////////////////////////////////// open page caption editor //////////////////////////////////////////////
function editPagCaptions(ParentID)
{
	var CAPTIONS_ADMIN_CLASS_ID = 67000000;
	var ADMINISTRATION_CLASS_ID = 69000000;
	var oBroker = getBroker();
	var iPageID = m_PageID;
	var iDomainID = getUserProfile('DOMAIN_ID');
	if (oBroker != null)
	{
		try
		{
			if (m_iLastLink != null)
			{
				var iIndex = 0;
				while (iIndex < m_oLinkFramePairs.length)
				{
					if (m_oLinkFramePairs[iIndex].Link == m_iLastLink)
					{
						iPageID = m_oLinkFramePairs[iIndex].Frame;
						break;
					}
					iIndex++;
				}
			}
			else
				iPageID = m_PageID;
		}
		catch(e)
		{
			iPageID = m_PageID;
		}

		openGeminiWindow(67030300,
						  iPageID,
						  CAPTIONS_ADMIN_CLASS_ID,
						  ParentID,
						  ADMINISTRATION_CLASS_ID,
						  null,
						  null,
						  iDomainID,
						  ADMINISTRATION_CLASS_ID,
						  null,
						  null,
						  null,
						  true);
	}
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function openGeminiCalculator(sTargetInputName)
{
	var oFloatingPage , sURL;

	sURL = createGeminiURL(1030900, -1, 1000000, null, null,null,null ,null ,null ,null ,0);

	oFloatingPage=getDomElement("ifrmFloatingCalculatorFloatingPage");
	if (oFloatingPage!=null)
		frames("ifrmFloatingCalculatorFloatingPage").setCalculatorTargetInput(sTargetInputName);
//			oFloatingPage.document.setCalculatorTargetInput(sTargetInputName);
	else
		if(sTargetInputName!="" && sTargetInputName!=null)
			sURL += '#'+ sTargetInputName;

	loadFloatingPage ('CalculatorFloatingPage', sURL, true);

	return true;
}


function createGeminiImage(src)
{
	try
	{
		//var oImg = getUserProfile('SKIN_PATH') + src + '?v=' + getUserProfile('VERSION_NUMBER');
		var oImg = 'skins/common/' + src + '?v=' + getUserProfile('VERSION_NUMBER');
		return oImg.toLowerCase();
	}
	catch(e)
	{
		return null;
	}
}

function createGeminiStylesheet(src)
{
	if (getBroker()==null)  return;
	var oStyle = getUserProfile('SKIN_PATH') + src + '?v=' + getUserProfile('VERSION_NUMBER');
	return oStyle.toLowerCase();
}


function CanI(Action)
{
	return (!(Action > PERMISSION_READ && m_bReadOnly));
}

function disableFields(bDisable)
{
	oCheckedWindow = self;
	for(var iFormIndex=0; iFormIndex < oCheckedWindow.document.forms.length; iFormIndex++)
	{
		var oDocument = oCheckedWindow.document;
		var oForm = oDocument.forms.item(iFormIndex);
		for(var iIndex=0; iIndex < oForm.elements.length; iIndex++)
		{
			var oItem = oForm.elements.item(iIndex);
			var bIsMandatory = (oItem.className.search(new RegExp ('Mandatory', 'gi'))=='0')
			if (oItem.IGNORE != '1')
			{
				if (bDisable)
					disableField(oItem, bIsMandatory);
				else
					enableField(oItem, bIsMandatory);
			}
		}
		for(var iIndex=0; iIndex < oDocument.images.length; iIndex++)
		{
			var oItem = oDocument.images[iIndex];
			if ((oItem.IGNORE != '1') && (oItem.className.search(new RegExp ('ImageButton', 'gi'))=='0'))
			{
				if (bDisable)
					disableField(oItem, bIsMandatory);
				else
					enableField(oItem, bIsMandatory);
			}
		}
	}
}

function setPageValues()
{
	var sFrameName;
	m_bManualDataChanged=false;
	if(!m_bReadOnly)
	{
	//stop
		for(var findex=0;findex<document.forms.length;findex++)
		{
			var form = document.forms.item(findex);
			if (form.IGNORE!='1')
			{
				for(var iindex=0;iindex<form.elements.length;iindex++)
				{
				    var item = form.elements.item(iindex);

					if(item.IGNORE!='1')
					{
						switch(item.type)
						{
							case "checkbox":
								item.setAttribute('orgValue', item.checked);
								break;
							case "radio":
								item.setAttribute('orgValue', item.checked);
								break;
							case "select-multiple":
	                            var orgValue = '';
	                            for (var iOpt = 0; iOpt < item.options.length; iOpt++)
	                                if (item.options[iOpt].selected)
	                                    orgValue += item.options[iOpt].value;
	                            item.setAttribute('orgValue', orgValue);
		                        break;
							default:
								if(!item.IS_MULTI_MEASURMENT)
									item.setAttribute('orgValue', item.value);
								else
									item.setAttribute('orgValue', roundFloat(ConvertToServerUnits(item),2));
								break;
						}
					}
				}
			}
		}
	}
	if (typeof(m_oLinkFramePairs) == 'object')
	{
		for (var iIndex=0;iIndex<m_oLinkFramePairs.length;iIndex++)
		{
			sFrameName  = 'Frame' + m_oLinkFramePairs[iIndex].Frame;
			try
			{
				frames(sFrameName).setPageValues();
			}
			catch(e){}
		}
	}
}

function hasItemChanged(item)
{
	if(m_bReadOnly) return(false);

	switch(item.type)
	{
		case "radio":
			if(item.orgValue!=item.checked)	
			    return(true);
			break;
		case "checkbox":
			if(item.orgValue!=item.checked)	
			    return(true);
			break;
		case "select-multiple":
		    var newValue = '';
            for (var iOpt = 0; iOpt < item.options.length; iOpt++)
                if (item.options[iOpt].selected)
                    newValue += item.options[iOpt].value;
            if (item.getAttribute("orgValue") != newValue)
                return true;
            break;
		default:
			if(item.orgValue!=item.value) 
			    return(true);
			break;
	}
	return(false);
}

function manualSetDataChanged()
{
	m_bManualDataChanged=true;
}

function resetManualSetDataChanged()
{
	m_bManualDataChanged=false;
}

function hasDataChanged()
{
	var tmpDataChanged=false;
	var sFrameName;
	if(m_bReadOnly)	return(false);
	if(m_bManualDataChanged) return(true);

	for(var findex=0;findex<document.forms.length;findex++)
	{
		var form = document.forms.item(findex);
		if (form.IGNORE!='1')
		{
			for(var iindex=0;iindex<form.elements.length;iindex++)
			{
			    var item = form.elements.item(iindex);
				if(item.IGNORE!='1' && !item.readOnly)
				{
					switch(item.type)
					{
                        case "button":
					        break;
						case "radio":
							tmpDataChanged = (item.getAttribute("orgValue").toString() != item.checked.toString());
							break;
						case "checkbox":
							tmpDataChanged = (item.getAttribute("orgValue") != null && item.getAttribute("orgValue").toString() != item.checked.toString());
							break;
						case "select-multiple":
						    var newValue = '';
		                    for (var iOpt = 0; iOpt < item.options.length; iOpt++)
		                        if (item.options[iOpt].selected)
		                            newValue += item.options[iOpt].value;
		                    tmpDataChanged = (item.getAttribute("orgValue") != newValue);
		                    break;
						default:
							if(!item.IS_MULTI_MEASURMENT)
								tmpDataChanged = (item.getAttribute("orgValue") != item.value);
							else
							{
								var nScale = (item.SCALE==null) ? 2 : item.SCALE;
								tmpDataChanged = (item.getAttribute("orgValue") != roundFloat(ConvertToServerUnits(item),nScale));
							}
							break;
					}
				}
				if(tmpDataChanged)
				{
					if (typeof(m_FirstLink) != 'undefined')
						m_iChangedPage = m_FirstLink;
					return(true);
				}
			}
		}
	}

	if (typeof(m_oLinkFramePairs) == 'object')
	{
		for (var iIndex=0;iIndex<m_oLinkFramePairs.length;iIndex++)
		{
			sFrameName  = 'Frame' + m_oLinkFramePairs[iIndex].Frame;
			try
			{
				if (frames(sFrameName).hasDataChanged())
				{
					m_iChangedPage = m_oLinkFramePairs[iIndex].Link;
					return true;
				}
			}
			catch(e){}
		}
	}
	return(false);
}


function focusFirstMandatory()
{
	return (true);
}


function handleTabOrder()
{
	return (true);
}

function isParentHidden(oItem)
{
	if(oItem==null) return(0);
	if(oItem.className=='Hidden') return(1);
	if(oItem.className==null) return(0);
	return(isParentHidden(oItem.parentNode));
}

function loadFloatingPage(id, url, hideOnBlur, floatLocation, HTML)
{
	var sName="ifrmFloating"+id;
	var oFloatingPage=getDomElement(sName);
	
	if ((hideOnBlur==null) || (navigator.appVersion.indexOf("MSIE 5.0")!=-1)) hideOnBlur=false;

	catchClickEvent(floatLocation);
	if (oFloatingPage==null)
		createFloatingPage(id, url, hideOnBlur, HTML);
	else
		if (oFloatingPage.readyState=="complete")
			showFloatingPage(id);
}

function createFloatingPage(id, url, hideOnBlur, HTML)
{
	var oBody=document.getElementsByTagName("BODY")[0];
	var sName="ifrmFloating"+id;
	var sOnBlur="";
	var sDQ = '"';

	if (hideOnBlur) sOnBlur="onblur='hideFloatingPage("+sDQ+id+sDQ+")';";

	if (HTML != null) url = 'blank.htm';

	oBody.insertAdjacentHTML("afterbegin","<IFRAME id='" + sName + "' name='" + sName + "' src='" + url + "' style='position: absolute; visibility:hidden;' framespacing='0' frameborder='0' border='0' scrolling='no' " + sOnBlur + "></IFRAME>");

	if (HTML != null)
	{
		var oWindow = frames(sName);
		var oDocument = oWindow.document;
		oDocument.open();
		oDocument.write(HTML);
		oDocument.close();
	}
}

function showFloatingPage(id)
{
	var sName="ifrmFloating"+id;

	window.frames[sName].prepareToShow();
	positionFloatingPage(id);
	getDomElement(sName).style.visibility='visible';
	getDomElement(sName).style.display='';
	getDomElement(sName).focus();
}

function hideFloatingPage(id)
{
	var sName="ifrmFloating"+id;
	getDomElement(sName).style.visibility='hidden';
	getDomElement(sName).style.display='none';
	if (typeof(onFloatingPageHide)=="function") onFloatingPageHide(id);
}

function positionFloatingPage(id)
{
	var sName="ifrmFloating"+id;
	var oPageIfrm=getDomElement(sName);
	oPageIfrm.style.zIndex=1000;
	var iLeft = m_oLocation.clientX;
	var iTop = m_oLocation.clientY;
	var iWidth, iHeight;
	var TopWidth = document.body.offsetWidth;
	var TopHeight = document.body.offsetHeight;
	if (this.name == "ifrmFloatingActivityPage") // just for activity floating card
	{
		TopWidth = 300;
		TopHeight = 350;
	}

	if ((typeof(window.frames[sName].m_iWidth)!="number") && (window.frames[sName].m_iWidth!=-1))
	{
		iWidth=oPageIfrm.offsetWidth;
		iHeight=oPageIfrm.offsetHeight;
	}
	else
	{
		iWidth=window.frames[sName].m_iWidth;
		iHeight=window.frames[sName].m_iHeight;
	}

	// this function restores the card size in order to support the floating page insert.
	// if restored size still smaller then 800x600 then restore to 800x600
	if ((iWidth > TopWidth) || (iHeight > TopHeight))
	{
		var iRestoredWidth = (m_iWidth>800)?m_iWidth:800;
		var iRestoredHeight = (m_iHeight>600)?m_iHeight:600;

		window.resizeTo(iRestoredWidth, iRestoredHeight);
		positionFloatingPage(id);
		return;
	}
	//if ((iWidth > TopWidth) || (iHeight > TopHeight)) { alert('Floating window too big ...'); return; }
	//Setting Left coordinates - adding and removing 5 px in order to prevent border mistakes
	if ((m_oLocation.clientX + iWidth + 5) > TopWidth)
	{
		iLeft = (m_oLocation.clientX - iWidth - 5) ;
		if (iLeft < 0 )
		{
			iLeft = (m_oLocation.clientX - (iWidth/2));
			if (iLeft < 0 )
			    iLeft = 0;
			if ((iLeft + iWidth + 5) > TopWidth)
			    iLeft = TopWidth - (iWidth + 5);				
		}
	}
	//Setting Top coordinates - adding and removing 5 px in order to prevent border mistakes
	if ((m_oLocation.clientY + iHeight + 5) > TopHeight)
	{
		iTop = (m_oLocation.clientY - iHeight - 5 ) ;
		if (iTop < 0 )
		{
			iTop = (m_oLocation.clientY - (iHeight/2));
			if (iTop < 0 ) 
			    iTop = 0;
			if ((iTop + iHeight + 5) > TopHeight)
			    iTop = TopHeight - (iTop + 5);
		}
	}

	oPageIfrm.style.width=iWidth;
	oPageIfrm.style.height=iHeight;
	oPageIfrm.style.pixelLeft=iLeft;
	oPageIfrm.style.pixelTop=iTop;
}

function catchClickEvent(location)
{
	if (location!=null)
		m_oLocation=location;
	else
	{
		m_oLocation=new Object();
		m_oLocation.clientX=event.clientX + document.body.scrollLeft;
		m_oLocation.clientY=event.clientY + document.body.scrollTop;
		m_oLocation.screenX=event.screenX + document.body.scrollLeft;
		m_oLocation.screenY=event.screenY + document.body.scrollTop;			
	}
}

var m_sDragedFloatingPageID="";
var m_bIsDragged=false;
var m_bParentOfDragged=false;
var m_iDownEventScreenX, m_iDownEventScreenY;

function moveFloatingWindow(xDelta, yDelta)
{
	var sName="ifrmFloating"+m_sDragedFloatingPageID;
	var oPageIfrm=getDomElement(sName);

	oPageIfrm.style.pixelLeft=oPageIfrm.style.pixelLeft+xDelta;
	oPageIfrm.style.pixelTop=oPageIfrm.style.pixelTop+yDelta;
}

function setFloatingPageDragable(floatingPageID, dragElementName)
{
	if (dragElementName!=null)
		getDomElement(dragElementName).onmousedown=handleDragMouseDown;
	else
		document.onmousedown=handleDragMouseDown;
	document.onmouseup=handleDragMouseUp;
	parent.document.onmouseup=parent.handleDragMouseUp;
	document.onmousemove=handleDragMouseMove;
	m_sDragedFloatingPageID=floatingPageID;
}

function handleDragMouseDown()
{
	m_iDownEventScreenX=event.screenX;
	m_iDownEventScreenY=event.screenY;
	m_bIsDragged=true;
	window.parent.m_sDragedFloatingPageID=m_sDragedFloatingPageID;
	window.parent.m_bParentOfDragged=true;
}

function handleDragMouseMove()
{
	if (m_bIsDragged)
	{
		window.parent.moveFloatingWindow(event.screenX-m_iDownEventScreenX, event.screenY-m_iDownEventScreenY);
		m_iDownEventScreenX=event.screenX;
		m_iDownEventScreenY=event.screenY;
	}
}

function handleDragMouseUp()
{
	if (!m_bParentOfDragged)
	{
		//If caught in the floating ifrm
		m_bIsDragged=false;
		window.parent.m_sDragedFloatingPageID="";
		window.parent.m_bParentOfDragged=false;
	}
	else
	{
		//If caught in the parent window
		var sName="ifrmFloating"+m_sDragedFloatingPageID;
		window.frames[sName].m_bIsDragged=false;
		m_sDragedFloatingPageID="";
		m_bParentOfDragged=false;
	}
}

function WriteToLog(message)
{
	return;
	
	var oBroker = getBroker();
	if (oBroker!=null)
	{
		oBroker.EnableConsole();
		oBroker.Log(message);
		try
		{
			if (oBroker.getSpy() != null) oBroker.getSpy().AppendLogEntry(message);
		}
		catch(e) {}
	}
}



function chgSectionForm(e)
{
    if (m_bIsFirefox)
    {
        if (e.target.className == 'SectionForm')
            e.target.style.display = (e.target.innerHTML == '' ? 'none' : 'block');
    }
    else
       if (event.propertyName == 'innerHTML')
            event.srcElement.style.display = (event.srcElement.innerHTML == '' ? 'none' : 'block');
}



function HandleDataDiv(index, shownClass, forceClass)
{
    if (index == null || typeof(index) == 'object')
    {   
        var obj = event.srcElement;
        while (obj != null && obj.sectionID == null)
            obj = obj.parentNode;
        if (obj == null)
            return;
        index = obj.sectionID;
    }
   
    if (typeof(event) != 'undefined' && event != null)
    {
        var t = event.srcElement.tagName.toLowerCase();
        if (t == 'select' || t == 'option' || t == 'a' || t == 'input' || t == 'nobr') 
	    {
	        var pObj = m_uiUtil.getParentNodeByTagName(event.srcElement, 'a');
	        if (pObj == null || pObj.isButton == null)
	            return false;		         
	    }
	}
	

	shownClass = (shownClass==null) ? 'DataDiv' : shownClass;
	
	//get the elements
	var oExpandBarImage = getDomElement('ExpandBarImage' + index);
	var oDataDiv = getDomElement('DataDivContainer' + index);        
    if (oDataDiv == null) 
    { //old way
        oDataDiv = getDomElement('DataDiv' + index);
        if (oDataDiv == null)
            return;
        
        if (forceClass == null)
            if (oDataDiv.className != 'Hidden')
                forceClass = 'Hidden';
            else
                forceClass = shownClass;
        
        oDataDiv.className = forceClass;
        
        if (forceClass == 'Hidden')			    
		    oExpandBarImage.src = oExpandBarImage.src.replace('expand', 'collapse');//  createGeminiImage('images/expand.gif');
	    else
		    oExpandBarImage.src = oExpandBarImage.src.replace('collapse', 'expand');// createGeminiImage('images/collapse.gif')	;
	    try
	    {
	        if (self != top) 
	            top.resizeFrame();
	    }
	    catch(e) {}
    }
    else
    {   
        //refresh grids that haven't been opened before
        if (oDataDiv.className == 'Hidden' || oDataDiv.style.display == 'none')
        {
            var aGrids = getGridsInSection(index);
            for (var i = 0; i < aGrids.length; i++)
            {
                var g = m_arGrids[aGrids[i]];
                if (g.ExecType > 0)
                {
                    //alert('refreshing grid ' + aGrids[i]);                        
                    g.Refresh(null, null, null, true);
                    g.ExecType = 0;
                }
            }
        }
    
        if (oDataDiv.anim == null)
            oDataDiv.anim = new divAnimation(oDataDiv, shownClass, oExpandBarImage);
        
        if (forceClass == 'Shown')
            oDataDiv.anim.slideDown();
        else if (forceClass == 'Hidden')
            oDataDiv.anim.slideUp();
        else
            oDataDiv.anim.slide();
    }
    
    
}

function toggleSection(index, shownClass)
{
	//alert(index);
	HandleDataDiv(index, shownClass, shownClass);
	return;
}


function saveSectionState(index)
{
    if (index == null || typeof(index) == 'object')
    {   
        var obj = event.srcElement;
        while (obj != null && obj.sectionID == null)
            obj = obj.parentNode;
        if (obj == null)
            return;
        index = obj.sectionID;
    }
    
    var oDataDiv = getDomElement('DataDivContainer' + index);
    if (oDataDiv == null)
        return;
    
    
    
    var pinImg = document.getElementById('ExpandBarPinImage' + index);	 
    var oExpandBarImage = getDomElement('ExpandBarImage' + index);
       	    
    if (pinImg != null && oExpandBarImage != null)
    {
        var state = (pinImg.src.indexOf('pin_up') > 0) ? 1 : 0;
        var aGrids = getGridsInSection(index);
        
        if (state == 1)			    
        {
            pinImg.src = pinImg.src.replace('pin_up', 'indicator');
            if (oExpandBarImage.src.indexOf('expand') > 0)
                event.cancelBubble = true;	            
        }
        else
        {
            pinImg.src = pinImg.src.replace('pin_down', 'indicator');
            if (oExpandBarImage.src.indexOf('collapse') > 0)
                event.cancelBubble = true;
        }
       
        
    	    
        var oParameters = new Array();
        oParameters.push(new brokerParam('ID', -1));
        oParameters.push(new brokerParam('SECTION_ID', index));
        oParameters.push(new brokerParam('SECTION_IS_EXPANDED', state));
        
        
        for (var i = 0; i < aGrids.length; i++)
        {
            var pfx = "GRID_" + aGrids[i] + "_";        
            oParameters.push(new brokerParam("GRID_ID", aGrids[i]));
            oParameters.push(new brokerParam(pfx + "IS_EXPANDED", state));      
        }
        
            
        var oResponse = sendThroughBroker(754000000, 20, oParameters, null, getSaveSessionStateCallback(index, state), null, null, null, false);
        
    }       
}

function getSaveSessionStateCallback(sectionID, state)
{
    return function() {saveSectionStateCallback(sectionID, state);}
}

function saveSectionStateCallback(sectionID, state)
{
    var pinImg = document.getElementById('ExpandBarPinImage' + sectionID);
    if (pinImg == null)
        return;
        
    pinImg.src = pinImg.src.replace('indicator', (state == 1 ? 'pin_down' : 'pin_up'));             
}


function showPinTip()
{
    var html = '<table cellpadding=0 cellspacing=0 border=0>' +
               ' <tr><td><img src="skins/common/images/pin_up.gif"/></td>' +
               ' <td>Pin up - section will be collapsed next visit. </td></tr>' +
               ' <tr><td><img src="skins/common/images/pin_down.gif"/></td>' +
               ' <td>Pin down - section will be open next visit.</td></tr>' +
               ' </table>';
    
    m_uiGenerator.showInfoPopup(html, null, null, 232, 36);

}


function getGridsInSection(sectionID)
{
    var secObj = document.getElementById('DataDivContainer' + sectionID);
    if (secObj == null)
        return new Array();
    return getGridsInObj(secObj, 5);
}

function getGridsInObj(obj, levelsToSearch)
{
    if (levelsToSearch == null || levelsToSearch <= 0 || obj == null)
        return new Array();
    
    
    var aGrids = new Array();
    for (var i = 0; i < obj.childNodes.length; i++)
        if (obj.childNodes[i].id != null && obj.childNodes[i].id.slice(0,9) == 'GRID_DIV_')
            aGrids.push(obj.childNodes[i].id.slice(9));
            
    if (aGrids.length == 0)
        for (var i = 0; i < obj.childNodes.length; i++)
            aGrids = aGrids.concat(getGridsInObj(obj.childNodes[i], levelsToSearch - 1));
    
    return aGrids;
}



function saveGridState(gridID)
{

}

function getGridStateParams(gridID, isExpanded)
{
    var oParameters = new Array();
    var g = m_arGrids[gridID];
    if (g == null)
        return oParameters;
        
    var pfx = "GRID_" + gridID + "_";        
    oParameters.push(new brokerParam("GRID_ID", gridID));
    oParameters.push(new brokerParam(pfx + "VIEW_ID", g.ViewID));
    oParameters.push(new brokerParam(pfx + "IS_EXPANDED", isExpanded));        
    if (g.SortOrder[0] != null)
    {
        oParameters.push(new brokerParam(pfx + "SORT_COL", g.SortOrder[0].ColumnID));
        oParameters.push(new brokerParam(pfx + "SORT_DIR", g.SortOrder[0].Order));
    }
    if (g.SearchString != null && g.SearchColumnID != null)
    {
        oParameters.push(new brokerParam(pfx + "FILTER_VALUE", g.SearchString));
        oParameters.push(new brokerParam(pfx + "FILTER_COL", g.SearchColumnID));
    }
    
    return oParameters;
}


function isWindowReady(Window)
{
	var bResult = false;
	if (Window!=null)
		if (!Window.closed)
			if (Window.document.readyState=='complete' || Window.document.readyState==4)
				if (Window.document.body.readyState=='complete' || Window.document.body.readyState==4) 
				    bResult = true;
	return bResult;
}

function getClassAttribute(ClassName, PropertyName)
{
    //alert(ClassName + ',' + PropertyName);
	for (var iCSSIndex=document.styleSheets.length-1;iCSSIndex>=0;iCSSIndex--)
	{
		var CSS = document.styleSheets[iCSSIndex];
		for (var iClassIndex=CSS.rules.length-1;iClassIndex>=0;iClassIndex--)
			if (CSS.rules(iClassIndex).selectorText==ClassName)
				return eval('document.styleSheets[' + iCSSIndex + '].rules[' + iClassIndex + '].style.' + PropertyName);
	}
	return null;
}


function RemoveInsertedWindow(Window)
{
	var oWindow;
	var oWorkspace;
	var oDivs;
	var oInsertedDivs = new Array();
	var iIndex;
	var iLength;
	var oCurrentDiv;

	oWorkspace = top.document.body;
	oDivs = oWorkspace.children;
	for (iIndex=oDivs.length-1;iIndex>=0;iIndex--)
		if (oDivs[iIndex].getAttribute('ID')=='INSERTED_FRAME')
		{
			if (iIndex==0)
			{
				oDivs[iIndex].innerHTML = '';
				oWorkspace.removeChild(oDivs[iIndex]);
			}
			else
				oInsertedDivs[oInsertedDivs.length] = oDivs[iIndex];
		}
	oCurrentDiv = oInsertedDivs[oInsertedDivs.length-1];
	oCurrentDiv.className='Shown';
	if (oInsertedDivs.length>1)
	{
		try
		{
			oWindow = top.frames[oCurrentDiv.Name];
		}
		catch(e)
		{
			oWindow = top;
		}
	}
	else
		oWindow = top;

	if (oWindow!=null)
	{
		if (navigator.appVersion.indexOf("5.5")>-1)
			if (typeof(oWindow.NavigationLinkOnClick)=="function")
				oWindow.NavigationLinkOnClick();
		if (oWindow.document.body.getAttribute('OldText')!=null)
			top.document.title = oWindow.document.body.getAttribute('OldText');
		else
			top.document.title = oWindow.document.title;
	}
}

function AddInsertedWindow(URL,Opener)
{
	var Random = 'f' + getRandom()*1000;
	var workspace = top.document.body;
	var iIndex;

	if (m_iLoader) return;
	if (workspace==null) return;

	workspace.insertAdjacentHTML('afterBegin','<SPAN ID="INSERTED_FRAME" Name="' + Random + '" STYLE="HEIGHT:100%;WIDTH:100%"><IFRAME height="100%" width="100%" ID="'+ Random +'" FRAMEBORDER="0" SCROLLING="no" FRAMESPACING="0" SRC="'+ URL +'"></IFRAME></SPAN>');

	//INSERTED_FRAME

	frames(Random).id=Random;
	frames(Random).name=Random;
	frames(Random).window.opener=Opener;
	m_iLoader = setInterval('ShowInsertedWindow("' + Random + '")', 10);

	//frames(Random).window.m_oCurrentTopWindow=frames(Random).window;

}

function getCurrentTopWindow()
{
    var bPopup = (location.hash == '#popup=1');	    
	if (!bPopup) return top;
	
	var oWindow=self;
	while (oWindow.opener==null && oWindow.parent!=oWindow && oWindow.parent!=null)
		oWindow=oWindow.parent;
	return oWindow;
}

function ShowInsertedWindow(Name)
{
	var oDivs;
	if (frames(Name).document.readyState=='complete' || frames(Name).document.readyState==4)
	{
		if (frames(Name).document.body.readyState=='complete' || frames(Name).document.body.readyState==4)
		{
			clearInterval(m_iLoader);
			m_iLoader = null;

			if (top.document.body.getAttribute('OldText')==null)
				top.document.body.setAttribute('OldText',top.document.title);
			top.document.title=frames(Name).window.document.title;

		}
		else
			return;
	}
	else
		return;
	oDivs = document.getElementsByName('INSERTED_FRAME');
	for (var iIndex=0;iIndex<oDivs.length;iIndex++)
		if (oDivs[iIndex].Name==Name)
			oDivs[iIndex].className = 'Shown';
		else
			oDivs[iIndex].className = 'Hidden';
}


function closeWindow(bIsFromExit)
{
	var oSrcElement = null;
	if(window.event)
	{
		if(event.srcElement)
		{
			oSrcElement = event.srcElement;
			if(oSrcElement.tagName == "IMG")
			{
				if(oSrcElement.src.search(/exit.gif/gi) >= 0)
					return top.close();

				if(oSrcElement.src.search(/new.gif/gi) >= 0)
					return goBack(false);

				if(oSrcElement.src.search(/delete.gif/gi) >= 0)
					return goBack(false);
			}
		}
	}
	goBack();	
}

function goBack(checkContinueNavigation)
{
	var bResult=true;
	if(checkContinueNavigation==null) 
	    checkContinueNavigation=true;

	if(checkContinueNavigation) 
	    bResult = continueNavigation();

	if(bResult)
	{
        try
        {
			opener.getGrid().onResizeHandler(true);
        }
        catch (e) {}

        var bPopup = (location.hash == '#popup=1');	    
		if (!bPopup && self!=top)
		{
			try
			{
				if(typeof(opener.focus)=="object") opener.focus();//--ZIV260204
			}
			catch(e) {}

			try
			{
				top.RemoveInsertedWindow(window);
			}
			catch(e) {}
		}
		else
			window.close();
	}
}
//Asifa - handle callback
function handleContinueNavigationCallback(bResult)
{
	m_bResult = bResult;
}

function continueNavigation()
{
	var oTop;
	var bResult = true;
	var iIndex = 0;
	
	oTop = getCurrentTopWindow();

    var bDataChanged = oTop.hasDataChanged();
    
    if(!bDataChanged)
    {
        while (iIndex < oTop.frames.length)
	    {
		    currentPageID = oTop.frames[iIndex].m_PageID;
		    if(oTop.frames[iIndex].hasDataChanged()) 
		    {
		        bDataChanged = true;
		        oTop = oTop.frames[iIndex].window;
		        break;
		    }
		    iIndex++;
	    }
	}		
	
	if (bDataChanged)
	{
		if (Msgbox(1090002)) // ask the user if to exit without save changes
		{
			//-- Save Notes if the Frame Exists
			if (frameExists(oTop,'Frame166030100'))
			{
				try
				{
					oTop.frames['Frame166030100'].frames["NotesFrame"].frames["Page2"].saveNote();
				}
				catch(e) {}
			}

			//call save method
			if(oTop.m_oClient!=null)
			{
					var isSync = true;
				//Asifa - code changes
				oTop.m_oClient.Save(handleContinueNavigationCallback, isSync);
				bResult = m_bResult;
			}
			else if (typeof(oTop.Save) == 'function')
				bResult = oTop.Save();
			else
			{
				WriteToLog('Page does not support save function: #' + m_PageID);
				oButton = findButton(oTop,'save');
				if (oButton == null)
				{
					alert('Cannot find save function!'); //FEEDBACK
					bResult = false;
				}
				else
					bResult = executeObjectEvent(oButton, 'onclick');
			}

		}
	}
	return bResult;
}

function handleToolBar()
{
	if(top==self) 
	    disableButton(1050001);  // back button
	if(m_TaskID > 0) 
	    disableButton(1050003,true); // send as task button
	if (top.m_PageID == 172030100) 
	    disableButton(1050001);  // back button in instance container
}


function cancelSubmit()
{
	var findex, formsLength = document.forms.length;
	for(findex=0;findex<formsLength;findex++)
		document.forms.item(findex).attachEvent('onsubmit',cancelOnSubmit);
}

function cancelOnSubmit() 
{ 
    event.returnValue = false;
}

function openExternal(URL)
{
	if (URL.search ('http') == -1) URL = '//' + URL;
	open(URL);
}

function toHex(number)
{
	number = (number == null) ? 0 : number;
	return(number.toString(16));
}

function getUserProfile(Name)
{
	var oUserProfile;
	var iIndex;
	var oBroker=getBroker();

	if (oBroker!=null)
	{   
		if (oBroker.document != null && oBroker.document.parentWindow.m_arUserProfile != null)
		{
			oUserProfile = oBroker.document.parentWindow.m_arUserProfile;
			for (iIndex=0;iIndex<oUserProfile.length;iIndex++)
				if (oUserProfile[iIndex].name==Name)
					return oUserProfile[iIndex].value;
		}			
	}
	return null;
}

function enableConsole()
{
    return; 

	try
	{
		getBroker().EnableConsole();
	}
	catch(e){};
}

function genHandleResponse(Response)
{
	var iFeedback = 0;
	var bResult = false;

	if (Response==null) return(false);

	bResult = Response.getResult();
	iFeedback = Response.getFeedback();

	if (iFeedback <= 0)
		iFeedback = (bResult ? 1090003 : 1090005);

	Msgbox(iFeedback);


	return(bResult);
}

function handleResponse(response)
{
	var iFeedback = 0;
	if (response!=null)
	{
		iFeedback = response.getFeedback();
		if(iFeedback==1090035 || iFeedback==1090010)
		{
			Msgbox(iFeedback);
			setPageValues();
			refreshOpener();
			closeWindow(false);
			return(true);
		}
	}
	return(false);
}


/********************  initForms & Functions that work with 1 item in the form ***************/
function initForms()
{
	var item, form;
	var findex, iindex;
	var bFocused = false;
	var arrayLength = 0;

	var tabIndex = 1;					// for setting tab order
	var bFirstMandatoryIsSet = false;	// for setFocusFirstMandatory
	m_bRememberMe = false;
	//bug in ie5 and win98
	try
	{
		findex = document.forms.length;
	}
	catch (e)
	{
		return;
	}
	for(findex=0 ; findex < document.forms.length ; findex++)
	{
		form = document.forms.item(findex);
		arrayLength = form.elements.length;
		for(iindex=0 ; iindex < arrayLength ; iindex++)
		{
			item = form.elements.item(iindex);
			if(item!=null)
			{
				initField(item);
				if (m_bReadOnly && item.IGNORE != '1')
					disableField(item, false);
				else
				{
					setItemValue(item);
					tabIndex = setTabOrder(item,tabIndex);		// check what's with rememberMe?!?!?!?
					if(!bFirstMandatoryIsSet)
						bFirstMandatoryIsSet = setFocusFirstMandatory(item);
				}
			}
			item = null;
		}
		form = null;
	}


	item=null;
	arrayLength = document.images.length;
	if(m_bReadOnly)
	{
		// set images
		for(var iIndex=0; iIndex < arrayLength; iIndex++)
		{
			item = document.images[iIndex];
			if ((item.IGNORE != '1') && (item.className == 'ImageButton'))
				disableField(item, false);
		}
	}
}


function initField(item)
{
	var value;
	var bReadOnly=false;
	var iPlace,sInputElement,oInputElement,sComboElement,oComboElement;
	var iDecimalPlaces;
	if (item==null) return;

	//Checks Text Area length
	if ((item.tagName == 'TEXTAREA') || (item.tagName == 'textarea'))
	{
		item.attachEvent ('onkeypress',textAreaLengthStoper);
	   	item.attachEvent ('onkeyup',textAreaLengthStoper);
	   	item.attachEvent ('onblur',textAreaLengthStoper);
	}


	bReadOnly = (item.className.search(/ReadOnly/gi) >= 0);  // readonly fields
	if (bReadOnly)
	{
		if (item.tagName == 'SELECT')
			item.disabled=true;

		else if ((item.tagName == 'INPUT') && ((item.type == 'checkbox') || (item.type == 'radio')))
			item.disabled=true;
		else
			item.readOnly=true;
	}

	if(bReadOnly)
	{
		if(item.DATATYPE=='CURRENCY')
		{
			item.attachEvent ('onblur',currencyFormatWrapper);
			item.value = item.value.toCurrencyFormat();
		}
	}

	//----- Multi Measurment Field Initilizing -----
	iPlace = item.id.search(new RegExp ('_MeasurementUtilityCombo', 'gi'))
	if(iPlace>0)
	{
		//---- Setting IS_MULTI_MEASURMENT attribute -----
		sInputElement = item.id.slice(0,iPlace);
		oInputElement = getDomElement(sInputElement);
		oInputElement.setAttribute("IS_MULTI_MEASURMENT",1);

		//---- Setting IGNORE attribute -----
		sComboElement = item.id;
		oComboElement = getDomElement(sComboElement);
	}

	if (item.IS_ROUNDED)
	{
		if(item.IS_ROUNDED=='TRUE')
		{
			iDecimalPlaces=0;
			if(item.SCALE)iDecimalPlaces = item.SCALE;
			if(item.NOT_ROUNDED_VALUE.length==0)item.NOT_ROUNDED_VALUE = item.value;
			item.value = roundFloat(item.value,iDecimalPlaces);
			//im attaching this event to handle only cases that the user enter value manually.
			//if MultiMeasurement converssion occure this event should be dettached !
			item.attachEvent ('onchange',synchronizeValues);
		}
	}
}

function setTabOrder(item,tIndex)
{
	switch(item.className)
	{
		case "MandatoryField":
			m_bRememberMe=false;
			item.tabIndex=tIndex++;
			break;
		case "MandatoryReadOnlyField":
			m_bRememberMe=true;
			item.tabIndex=-1;
			break;
		case "NormalField":
			m_bRememberMe=false;
			//item.tabIndex=(tIndex++)+100;
			item.tabIndex=tIndex++;
			break;
		case "ReadOnlyField":
			m_bRememberMe=false;
			item.tabIndex=-1;
			break;
		default:
			if (m_bRememberMe)
			{
				if((item.type=='button')&&(item.style.visibility!='hidden'))
				{
					item.tabIndex=tIndex++;
					m_bRememberMe=false;
				}
				else
					item.tabIndex=(tIndex++)+100;
			}
			else
				item.tabIndex=tIndex++;
			break;
	}

	return(tIndex);
}


function setFocusFirstMandatory(item)
{}

function setItemValue(item)
{
	if(item.IGNORE=='1')
		return;

	switch(item.type)
	{
		case "checkbox":
			item.setAttribute('orgValue', item.checked);
			break;
		case "radio":
			item.setAttribute('orgValue', item.checked);
			break;
		case "select-multiple":
		    var orgValue = '';
		    for (var iOpt = 0; iOpt < item.options.length; iOpt++)
		        if (item.options[iOpt].selected)
		            orgValue += item.options[iOpt].value;
		    item.setAttribute('orgValue', orgValue);
			break;
		default:
			if(!item.IS_MULTI_MEASURMENT)
				item.setAttribute('orgValue', item.value);
			else
				item.setAttribute('orgValue', roundFloat(ConvertToServerUnits(item),2));
			break;
	}
}

function genericExit()
{
	if(continueNavigation())
		closeWindow();
}

function findButton(oWindow,byVal)
{
	var iIndex = 0;
	var sSearchExp;
	var attributeValue;
	var oButton = null;
	sSearchExp = eval('/' + byVal + '/i');
	if (oWindow == null) return null;
	var oToolbar = oWindow.getDomElement('ToolBar');
	if (oToolbar == null) return null;
	var oButtons =  oToolbar.firstChild.firstChild.childNodes;
	if (oButtons == null) return null ;
	var iLength = oButtons.length;
	while (iIndex < iLength)
	{
		oButton = oButtons(iIndex).firstChild;
		if (oButton != null)
		{
			attributeValue = oButton.getAttribute('SRC' , 0);
			if (attributeValue == null)
				oButton = oButton.firstChild;
			if (oButton != null)
			{
				attributeValue = oButton.getAttribute('SRC' , 0);
				if (attributeValue != null && attributeValue.search(sSearchExp)!=-1)
					return oButton.parentNode;
			}
		}
		iIndex++;
	}

	return null;
}

function executeObjectEvent(obj, FuncName)
{
	var tmpObj = obj;
	var bResult = false;
	if (tmpObj.getAttribute(FuncName , 0))
		bResult = tmpObj.onclick();
	return bResult;
}


function dropApplication(ApplicationName)
{
	var oBroker=getBroker();
	var oApplicationManager = null;

	if (oBroker!=null)
		if(oBroker.document.parentWindow.m_PageID==1030300)
			if (typeof(oBroker.document.parentWindow.m_arApplicationsManager)=='object')
			{
				oApplicationManager = oBroker.document.parentWindow.getApplicationsManager();
				if(oApplicationManager==null) return;
				return(oApplicationManager.Remove(ApplicationName));
			}
}

function parseDec(val,places,sep)
{
	// This function takes two arguments:
	//   (string || number)  val
	//            (integer)  places
	//             (string)  sep
	// val is the numeric string or number to parse
	// places represents the number of decimal
	// places to return at the end of the parse.
	// sep is an optional string to be used to separate
	// the whole units from the decimal units (default: '.')

	val = '' + val;
		// Implicitly cast val to (string)

	if (!sep) {
		sep = '.';
		// If separator isn't specified, then use a decimal point '.'
	}

	if (!places) { places = 0; }
	places = parseInt(places);
		// Make sure places is an integer

	if (!parseInt(val)) {
		// If val is null, zero, NaN, or not specified, then
		// assume val to be zero.  Add 'places' number of zeros after
		// the separator 'sep', and then return the value.  We're done here.
		val = '0';
		if (places > 0) {
			val += sep;
			while (val.substring((val.indexOf(sep))).length <= places) {
				val += '0';
			}
		}
		return val;
	}

	if ((val.indexOf('.') > -1) && (sep != '.')) {
		val = val.substring(0,val.indexOf('.')) + sep + val.substring(val.indexOf('.')+1);
			// If we're using a separator other than '.' then convert now.
	}

	if (val.indexOf(sep) > -1) {
		// If our val has a separator, then cut our value
		// into pre and post 'decimal' based upon the separator.
		pre = val.substring(0,val.indexOf(sep));
		post = val.substring(val.indexOf(sep)+1);
	} else {
		// Otherwise pre gets everything and post gets nothing.
		pre = val;
		post = '';
	}

	if (places > 0) {
		// If we're dealing with a decimal then...

		post = post.substring(0,(places+1));
			// We care most about the digit after 'places'

		if (post.length > places) {
			// If we have trailing decimal places then...

			//alert (parseInt(post.substring(post.length - 1)));

			if ( parseInt(post.substring(post.length - 1)) > 4 ) {
				post = '' + Math.round(parseInt(post) / 10);
				//post = '' + post.substring(0,post.length - 2) + (1/Math.pow(10,places));
				//post = ('' + post.substring(0,post.length - 2)) + (parseInt(post.substring(post.length - 1)) + 1);
			} else
				post = '' + Math.round(parseInt(post));
		}

		if (post.length > places) 
			post = '' + Math.round(parseInt(post.substring(0,places)));
		else if (post.length < places)
			while (post.length < places)
				post += '0';

	} else {

		if (parseInt((post.substring(0,1))) > 4)
			pre = '' + (parseInt(pre) + 1);
		else
			pre = '' + (parseInt(pre));
		post = '';
	}

	sep = (post.length > 0) ? sep : '';
		// Should we use a separator?

	val = pre + sep + post;
		// Rebuild val

	return val;
}

function parseMoney(val,sep)
{

	// Specialized version of parseDec useful for
	// parsing money-related data.  Arguments:
	//   (string || number)  val
	//             (string)  sep
	// val is the monetary value to be parsed,
	// sep is an optional decimal separator (default: '.')

	return parseDec(val,2,sep);
}

function sepToDec(val,sep)
{

	val = '' + val;

	if ((val.indexOf(sep) > -1) && (sep != '.')) 
		val = val.substring(0,val.indexOf(sep)) + '.' + val.substring(val.indexOf(sep)+1);

	return val;
}

function decToSep(val,sep)
{

	val = '' + val;
	sep = '' + sep;

	if ((val.indexOf('.') > -1) && (sep.length > 0))
		val = val.substring(0,val.indexOf('.')) + sep + val.substring(val.indexOf('.')+1);

	return val;
}


function setCookie(sName, sValue)
{
	if (navigator.cookieEnabled)
	{
			var oTimeNow = new Date();
			oTimeNow.setYear(oTimeNow.getFullYear() + 1);
			var sExpirationDate = oTimeNow.toUTCString();

			var sCookie = sName + "=" + escape(sValue) + ";expires=" + sExpirationDate + ";path=/";
			document.cookie =  sCookie;
	}
}

function getCookie(sName, defaultValue)
{
	if (navigator.cookieEnabled)
	{
			var aCookie = document.cookie.split(";");
			for (var i=0; i < aCookie.length; i++)
			{
					var aCrumb = aCookie[i].split("=");
					if (aCrumb[0].indexOf(sName)!=-1)
							return unescape(aCrumb[1]);
			}
			return('');
	}

	// a cookie with the requested name does not exist
	return defaultValue;
}

function frameset_OnResize()
{}

function ImageKeyDown(Control)
{
	if (Control==null) 
	    return;
	var sSrc = Control.src.replace('.gif','_clicked.gif');
	Control.src = sSrc;
}

function ImageKeyUp(Control)
{
	if (Control==null) return;
	var sSrc = Control.src.replace('_clicked.gif','.gif');
	Control.src = sSrc;
}

function IsClassSupportAutoNumbering(ClassID)
{
	var oBroker=getBroker();
	var bResult=false;

	ClassID = (ClassID==null) ? m_ClassID : ClassID;
	if (oBroker!=null)
		if(oBroker.document.parentWindow.m_PageID==1030300)
			if (typeof(oBroker.document.parentWindow.m_arAutoNumbering)=='object')
				bResult = oBroker.document.parentWindow.IsAutoNumberingSupported(ClassID);
	return bResult;
}

/************************* Msgbox Extention **************************/
function Message(ID,Display,Type,Text)
{
	this.ID = ID;
	this.Display = Display;
	this.Type = Type;
	this.Text = Text;
}

function CustomMessage(Message,Type,ParentWindow,MessageID,Help)
{
	this.Message = Message;
	this.Type = Type;
	this.ParentWindow = ParentWindow;
	this.MessageID = MessageID;
	this.Help = Help;
}


//////////////////////////////////// functions for feedbacks ///////////////////////////////////////////
function Message(ID,Display,Type,Text)
{
	this.ID = ID;
	this.Display = Display;
	this.Type = Type;
	this.Text = Text;
}

function Msgbox (messsgeID, additionalText, oWindow)
{
	return MsgboxEx(messsgeID, additionalText, oWindow); //--ZIV050104
}

function MsgboxEx (messsgeID, additionalText, oWindow)
{
	var sMsgStr='';
	var oMessage = null;
	var bResult = false;

	//oMessage = getMsgbox(messsgeID, additionalText);
	try
	{
		oMessage = eval("getBroker().document.parentWindow.m_arMessages['" + messsgeID + "']");
	}
	catch(e)
	{
		oMessage = null;
	}
	if (null == oMessage)
	{
		alert ('Internal error: feedback #' + messsgeID + ' not found in cache.');
		return (false);
	}
	
	// format with additional text
	var sFormattedMessage = formatMessage(oMessage.Text, additionalText);

	if (oMessage.Display == 2)
	{
		if (null != oWindow)
			bResult = oWindow.OpenCustomMessage(sFormattedMessage, oMessage.Type, messsgeID);
		else
			bResult = OpenCustomMessage(sFormattedMessage, oMessage.Type, messsgeID);
	}
	else //-- Status Bar Message
		window.setTimeout('StatusBarScrollMsg("' + sFormattedMessage + '")', 100);

	oWindow = null;

	return bResult;
}

function formatMessage(message, messageArguments)
{	            
    
	if (null == messageArguments) return (message);

    var sNewMessage = message;
	for(var iIndex = 0; iIndex < messageArguments.length; iIndex++)
	{
		var iPosition = message.indexOf('#'+ iIndex + ';');
		if (iPosition == -1) continue;
	
		var regExp = new RegExp('#'+iIndex+';',["i"])
		sNewMessage = (null == sNewMessage) ? message.replace(regExp, messageArguments[iIndex]) : sNewMessage.replace(regExp, messageArguments[iIndex]);						
	}
	return (sNewMessage);
}

var sStatusBarScrollMsg = "";
var iStatusCounter = 0;
function StatusBarScrollMsg(theMsg)
{
	if (null != theMsg)
	{
		//initialize
		var spacers = "";
		for (var i = 0; i < theMsg.length + 20; i++) spacers = spacers + " ";

		iStatusCounter = 1;
		sStatusBarScrollMsg = theMsg + spacers;
		window.status = sStatusBarScrollMsg;

		window.setTimeout('StatusBarScrollMsg(null)', 500);
		//window.setTimeout('window.status = ""', 5000); // thjis tops the scroll
	}
	else
	{
		//move the string and recall the function
		var msgTrim = sStatusBarScrollMsg;
		var msgSlice = sStatusBarScrollMsg;
		msgTrim = msgTrim.substring(2, msgTrim.length);
		msgSlice = msgSlice.substring(0, 2);

		if (iStatusCounter * 2 > sStatusBarScrollMsg.length)
		{
			window.setTimeout('window.status = ""', 500);
			return;
		}
		iStatusCounter++;

		window.status = msgTrim + msgSlice;
		sStatusBarScrollMsg = msgTrim + msgSlice;
		window.setTimeout('StatusBarScrollMsg(null)', 100);
	}
}


function OpenCustomMessage(Message,Type,MessageID)
{
	var oCustomMessage = null;
	var vReturnValue = 0;
	var sFeatures = "";

	sFeatures =  'dialogWidth: 400px';
	sFeatures += ';dialogHeight: 265px';
	sFeatures += ';dialogTop: 300px';
	sFeatures += ';dialogLeft 300px';
	sFeatures += ';center: yes';
	sFeatures += ';resizable: no';
	sFeatures += ';scroll: no';
	sFeatures += ';status: no';
	sFeatures += ';help: no';

	oCustomMessage = new CustomMessage(Message,Type,this,MessageID);

	var iRandom = getRandom();
	vReturnValue = showModalDialog("CustomMessage.htm?v=" + getUserProfile('VERSION_NUMBER')+iRandom , oCustomMessage, sFeatures);
	if(Type != 4) vReturnValue = (vReturnValue==1) ? true : false;

	return (vReturnValue);
}

////////////////////////////////////////////////////////////////////////////////////////////////

//------------------------------- ZIV09032004 (For Version 4.0) ---------------------------
function getGeminiHelp()
{
	if(event.keyCode == '17' || event.keyCode == 0)
	{
		event.returnValue = false;
		event.cancelBubble = true;
		event.keyCode = '0';
		openGeminiWindow(400030100, m_PageID, 400000000, null, null,null,null ,null ,null ,null ,0);
	}
}

function beforeClickAction()
{
	m_bSkipOnChange = true;
}

function fOnChangeWrapper()
{
	if(m_bSkipOnChange)
	{
		m_bSkipOnChange = false;
		return;
	}
	var oObject = event.srcElement;
	oObject.attachEvent ("ondblclick",oObject.original_onchange);
	oObject.fireEvent   ("ondblclick");
	oObject.detachEvent ("ondblclick",oObject.original_onchange);
}

function Trim()
{
	return trim(this);
}

//----- Currency Format Support -------
function currencyFormatWrapper()
{
	if(event)
		if(event.srcElement)
			event.srcElement.value = event.srcElement.value.toCurrencyFormat();
}

function fromCurrencyFormat()
{
	return ConvertFromCurrencyFormat(this);
}

function toCurrencyFormat()
{
	if (this == null || this.toString() == '')
	    return this;
	return ConvertToCurrencyFormat(this);
}

function ConvertFromCurrencyFormat(fNum)
{
	fNum = geminiReplaceAll (fNum, ",", "");
	return fNum;
}


function ConvertToCurrencyFormat(num) 
{
    num = num.toString().replace(/\$|\,/g,'');
    if (isNaN(num))
        num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num%100;
    num = Math.floor(num/100).toString();
    if (cents < 10)
        cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
        num = num.substring(0,num.length-(4*i+3))+','+
    
    num.substring(num.length-(4*i+3));
    return (((sign)?'':'-') +  num + '.' + cents);
}

function showGraph(ID)
{
	openGeminiWindow(500030100, ID, 500000000, null, null, null, null, null, null, null, 0, 0);
}

function timeOutBroker()
{
	alert ("Your session has timed out, please login again");

	var oBroker = getBroker();

	if (oBroker != null) 
	    oBroker.document.parentWindow.document.location.href = ("gisapi.dll?do=timeout");
}

function getCookie(sName)
{	      
    if (null == sName) return ('');
    
	if (navigator.cookieEnabled)
	{
		var aCookie = document.cookie.split(";");
		for (var i=0; i < aCookie.length; i++)
		{
			var aCrumb = aCookie[i].split("=");	
			
			var sStoredName = trim(aCrumb[0]);				
			if (sStoredName.toLowerCase() == sName.toLowerCase())
				return unescape(aCrumb[1]);
		}
		return('');
	}

	// a cookie with the requested name does not exist
	return null;
}

function geminiParseFloat(str)
{
    while (str.indexOf(",")>0)
        str = str.replace(",","");
    return str;
}


//------------------- Asifa - Prototype.js -------------------------------------

function CreateRequest()
{
	var tmp = new Object();
	
	tmp.setPage = request_setPage;
	tmp.Execute = request_execute;
	tmp.execute = request_execute;
	tmp.setRequiresTransaction = request_setRequiresTransaction;
	tmp.setSecured = request_setSecured;
	tmp.setTimeout= request_setTimeout;
	tmp.setClass= request_setClass;
	tmp.setMethod= request_setMethod;
	tmp.getArguments = request_getArguments;
	tmp.submit = request_submit;
	tmp.Submit = request_submit_simple;
	tmp.toXML = request_toXML;
	tmp.add = request_add;
	tmp.m_nExecutedClass = 0;
	tmp.m_sMethod = "0";
	tmp.m_oArguments = null;
	tmp.m_bSecured = false;
	tmp.m_sExecutionPage = EXECUTION_PAGE || null;
	tmp.m_bRequiresTransaction = false;
	tmp.m_bPlainText = true;
	tmp.m_nTask = null;
	tmp.m_nVirtualParentObject = null;
	tmp.m_nVirtualParentClass = null;
	tmp.m_nObject = null;
	tmp.m_nClass = null;
	tmp.m_nParentObject = null;
	tmp.m_nParentClass = null;
	tmp.m_nSubType = null;
	tmp.m_nTimeOut =0;
	tmp.m_oRequests = null;
	tmp.m_nPage = 0;
	tmp.m_sThreadCommand = "";
	tmp.m_sCallback = null;
	tmp.m_oRequests = null;
	return tmp;
}

function request_add(oRequest)
{
	if (this.m_oRequests==null)
		this.m_oRequests = new Array();
	this.m_oRequests[this.m_oRequests.length] = oRequest;
}

function request_getArguments()
{
	if (this.m_oArguments == null)
		this.m_oArguments = ARGUMENTS();
	return this.m_oArguments;
}

function request_setSecured()
{
	this.m_bSecured = true;
}

function request_setTimeout(timeout)
{
	this.m_nTimeOut = timeout;
}

function request_setClass(classId)
{
	this.m_nExecutedClass = classId;
}

function request_setMethod(methodName)
{
	this.m_sMethod = methodName;
}

function request_setRequiresTransaction(bValue)
{
	this.m_bRequiresTransaction = bValue;
}

function request_setPage(page, object, cclass, parentObject, parentClass, subType, task, virtualParentObject, virtualParentClass)
{
	this.m_nPage                = page;
	this.m_nObject              = object;
	this.m_nClass               = cclass;
	this.m_nParentObject        = parentObject;
	this.m_nParentClass         = parentClass;
	this.m_nSubType             = subType;
	this.m_nTask                = task;
	this.m_nVirtualParentObject = virtualParentObject;
	this.m_nVirtualParentClass  = virtualParentClass;
}

function request_submit_simple(bOldFashioned) 
{
    return this.submit(function () {}, null, true, bOldFashioned, null, null);
}

function request_submit(callback, caller, isSyncReq, bOldFashioned, Xml, IsPlainText)
{  
	var flag = false;
	if (typeof(bOldFashioned) != 'undefined')
		flag = bOldFashioned;
	
	if (!flag)
	{
		Xml = this.toXML();
		IsPlainText = false;
	}
	else
		sXml = (this.m_oArguments == null) ? "" : this.m_oArguments.getArgumentsToXml();

	if ((this.m_nClass == 0) || (this.m_nExecutedClass == 0)) 
	    return null;

	this.m_bPlainText = IsPlainText;
	
	var responseXml = this.execute(this.m_nExecutedClass, this.m_sMethod, Xml, callback, caller, isSyncReq)
	return (isSyncReq ? responseConverter_getResponse(responseXml) : null);	
}

function request_toXML() 
{
	var sXML = '';
	
	d1 = new Date();
	
	//debugger;
	
	sXML += "<REQUEST METHOD='" + this.m_sMethod + "' CLASS='" + this.m_nExecutedClass +"'>";
	if (this.m_oArguments != null)
		sXML += this.m_oArguments.toXML();
	
	if (this.m_oRequests != null)
	{
		sXML += "<REQUESTS>";
		for (var iIndex =0;iIndex<this.m_oRequests.length;iIndex++)
			sXML += this.m_oRequests[iIndex].toXML();
		
		sXML += "</REQUESTS>";
	}
	sXML += "</REQUEST>";
	
	//alert((new Date()) - d1);

	return sXML;
}

function request_execute(Class, Method, Parameters, callback, caller, isSyncReq)
{
	var sResponse=null;
	this.m_sCallback = callback;
	var paramEncoder = CUrlParamEncoder();

	// URL encoding
	var UnicodeEncoder = URLUnicodeEncoder();
	Parameters  = UnicodeEncoder.encode(escape(Parameters));
	
	paramEncoder.addParam("Do", "Execute" );
	paramEncoder.addParam("PageID", this.m_nPage );
	paramEncoder.addParam("ExeClassID", Class );
	paramEncoder.addParam("ExecuteMethod", Method );
	paramEncoder.addParam("Arguments", Parameters);
	paramEncoder.addParam("PlainText", (this.m_bPlainText?1:0));
	paramEncoder.addParam("Transactional", (this.m_bRequiresTransaction?1:0));
	paramEncoder.addParam("Compressed", 0);
	paramEncoder.addParam("TaskID", this.m_nTask );
	paramEncoder.addParam("VirtualParentObjectID", this.m_nVirtualParentObject);
	paramEncoder.addParam("VirtualParentClassID", this.m_nVirtualParentClass);
	paramEncoder.addParam("ObjectID", this.m_nObject);
	paramEncoder.addParam("ClassID", this.m_nClass);
	paramEncoder.addParam("ParentObjectID", this.m_nParentObject);
	paramEncoder.addParam("ParentClassID", this.m_nParentClass);
	paramEncoder.addParam("SubType", this.m_nSubType);
	
	//this.m_sThreadCommand = paramEncoder.sXML;
	this.m_sThreadCommand = paramEncoder.sXML;
    
	var chttp = CHttpPost();
	return chttp.sendRequest(caller, this, this.m_sCallback, isSyncReq);
}

function CUrlParamEncoder()
{
	var tmp = new Object();

	tmp.addParam = urlParamEncoder_addParam;
	tmp.sXML = "";
	return tmp;
}

function urlParamEncoder_addParam(szName, szValue)
{
    // seperator
	if (this.sXML.length > 0) 
		this.sXML += "&";			

		var sTmpName = szName.toUpperCase();
		var sArguments = "ARGUMENTS";
		var sValue;
		var a, b;
				

		if (sTmpName == sArguments)
		{
			var sTmp = szValue.toUpperCase();	
			a = sTmp.indexOf("<ARGUMENT NAME='NAME'");
			a = sTmp.indexOf("'", a + 21);
			b = sTmp.indexOf("'", a+1);

			sValue = sTmp.substring(a+1, b);
			a = 1;	
		}

		// append
        this.sXML += szName; 
		this.sXML += "=";
		this.sXML += szValue;
}

function CHttpPost()
{
	var tmp = new Object();

	tmp.sendRequest = chttpPost_sendRequest;

	return tmp;
}
function chttpPost_sendRequest(caller, request, callback, isSyncReq)
{
	var cURL = null;
	var req = '';
	
	if (isSyncReq == null)
	    isSyncReq = true;
	
	
	try
	{
		cURL = EXECUTION_PAGE;

		if (window.XMLHttpRequest) // Non-IE browsers
            req = new XMLHttpRequest();
        else 
            if (window.ActiveXObject) // IE
                req = new ActiveXObject("Microsoft.XMLHTTP");

		setHourglass(true);
		req.open("POST", cURL, !isSyncReq);
		if (req.overrideMimeType)
		    req.overrideMimeType('text/plain');  //firefox un-f'ing
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
		if (!isSyncReq)
		{
	        req.onreadystatechange = function (event) 
	        {
			    if (req.readyState == 4) 
			    {
				    setHourglass(false);
				    callback.call(caller, req.responseText);
			    }
            };
		}
    
				
        req.send(request.m_sThreadCommand);
                
        setHourglass(false);
        
        if (!isSyncReq)
            return;
    
        return req.responseText;
    }
	catch(e)
	    {
		alert(e.message);
	}
}

function ParseStringToXML(text)
{
	var xmlDoc = GetXMLDocument(text);
	xmlDoc.async = "false";
	var docElem = xmlDoc.documentElement;
	if(docElem.tagName == 'RESPONSE')
	{
		var tmpobj = new Object();
		tmpobj['RESULT'] = docElem.getAttribute('RESULT');
		var arguments = docElem.childNodes[0].childNodes;
		for(var i=0; i<arguments.length; i++)
			tmpobj[arguments[i].getAttribute('NAME')] = arguments[i].getAttribute('VALUE');
	}		
	return tmpobj;
}

function ARGUMENT(name, value, datatype)
{
  var tmp = new Object();
  
  tmp.m_oName = name; 
  tmp.m_oValue = value;
  tmp.m_sDatatype = datatype;

  tmp.initialize = argument_initialize;
  tmp.getName = argument_getName;
  tmp.getValue = argument_getValue;
  tmp.getDatatype = argument_getDatatype;
	
  return tmp;
}

function argument_initialize(name, value, dataType)
{
	this.m_oName = name;
	this.m_oValue = value || "";
	this.m_sDatatype = dataType || '';
}

function argument_getName()
{
	return this.m_oName;
}

function argument_getValue()
{
	return this.m_oValue;
}

function argument_getDatatype()
{
	return this.m_sDatatype;
}

  
function ARGUMENTS()
{
	var tmp = new Object();
	
	tmp.itemsArray = new Array();
	tmp.add = addArgument;
	tmp.Add = addArgument;
	tmp.toXML = converToXML;
	tmp.replaceChars = replaceChars;
	tmp.getNamedItem = getNamedItem;
	tmp.count = countArguments;
	tmp.Count = countArguments;
	tmp.getItem = getArgumentItem;
	tmp.Item = getArgumentItem;
	tmp.item = getArgumentItem;
	tmp.getArgumentsToXml = getArgumentsToXml;

	return tmp;
}

function addArgument(name, value, isReplaceChars, dataType)
{
	var flag = true;
	if(typeof(isReplaceChars) != 'undefined')
		flag = isReplaceChars;

	dataType = dataType || "";
		
	var argument = ARGUMENT();

	if(flag)
		argument.initialize(name, this.replaceChars(value), dataType);
	else
		argument.initialize(name, value, dataType);
	this.itemsArray[this.itemsArray.length] = argument;
} 
	
function converToXML()
{
	var retVal = "";
	
	var len = this.itemsArray.length;

	for (var index = 0; index < len; index++)
	{
		var arg = this.itemsArray[index];
		if (index==0) 
			retVal = "<ARGUMENTS>";
		
		retVal += "<ARGUMENT NAME='" + arg.getName();
		retVal += "' VALUE='" + arg.getValue();
		retVal += "' DATATYPE='" + arg.getDatatype();
		retVal += "'/>";
		
		if (index == len - 1) 
			retVal += "</ARGUMENTS>";
	}
	arg = null;
	return retVal;
}

function countArguments()
{
	return this.itemsArray.length;
}

function getArgumentItem(index)
{
	try
	{
		return this.itemsArray[index];
	}
	catch(e) {}
}

function replaceChars(baseValue)
{
	var newValue = "";
	if (baseValue == null)
		return newValue;

	var len = baseValue.length;

	for (var index=0; index<len; index++)
	{
		switch (baseValue.charAt(index))
		{
			case '&': //&
				newValue += "&amp;";
				break;
			case '<': //<
				newValue += "&lt;";
				break;
			case '>': //>
				newValue += "&gt;";
				break;
			case '\'': //'
				newValue  += "&apos;";
				break;
			case '\"': //"
				newValue += "&quot;";
				break;
			case '%': //%
				newValue += "&#37;";
				break;
			default:
				newValue = newValue + baseValue.charAt(index);
		}
	}
	return newValue;
}
	
function getNamedItem(name)
{
	var iIndex;
	var arg;
	var len = this.count();
	for (var iIndex = 0; iIndex < len; iIndex++)
	{
		arg = this.getItem(iIndex);
		if(arg.getName() == name )
			return arg.getValue();
   }
   return null;
}

function getArgumentsToXml()
{
	var retVal = "";
	var arg = new Object();
	var len =  this.count();
	for (var index = 0; index < len; index++)
	{
		arg = this.itemsArray[index];
		if (index == 0)
			retVal = "<!DOCTYPE ARGUMENTS [";
		
		retVal += "<!ENTITY arg"+ index+" '";
		retVal += arg.getValue()+ "'>";
		if (index == len - 1)
		{
			retVal += "<!ELEMENT ARGUMENTS (ARGUMENT+)>";
			retVal += "<!ELEMENT ARGUMENT EMPTY>\n";
			retVal += "<!ATTLIST ARGUMENT NAME CDATA #IMPLIED>";
			retVal += "<!ATTLIST ARGUMENT VALUE CDATA #IMPLIED>";
			retVal += "]>\n";
		}
	}

	for (var index = 0;index < len;index++)
	{
		arg = this.itemsArray[index];
		if (index == 0)
		  retVal = "<ARGUMENTS>";

		retVal += "<ARGUMENT NAME='" + arg.getName();
		retVal += "' VALUE='&arg" + index+";'/>";
		retVal += "' DATATYPE='" + arg.getDatatype();
		
		if (index == len - 1) 
			  retVal += "</ARGUMENTS>";
	}
	arg = null;
			
	return retVal;
}	


function RESPONSE_CONVERTER()
{
	var tmp = new Object();

	tmp.getResponse = responseConverter_getResponse;

	return tmp;
}

function responseConverter_getResponse(xml)
{
	var bResult=false;
	var sResult = null;
	
	var oCurrentElement;
	var oResponseChilds = new Array();
	var oArguments = new Array();

	var oBrokerArguments = ARGUMENTS(); //var oBrokerArguments = new Arguments();
	var sAlerts;
	var nFeedback = 0;

	var sObjectName;
	var nObjectID;
	var sModifiedBy;
	var sModificationDate;
	
	
	try
	    {
		if (xml == null)
			return null;
		if (xml.length == 0)
		    return null;

		if (!(xml.substring(0, 1) == "<"))
		{
		    if (xml.toLowerCase().indexOf('timeout') < 0)
		    {
		        return alert("Internal Server Error: Server Returned Invalid Response Xml");
		    }
		    else
		        return alert('Your session timed out. Please login again');
		}
		
		var xmlDoc = GetXMLDocument(xml);
		var docElem = xmlDoc.documentElement;

		if(docElem.tagName != 'RESPONSE')
			return alert("Internal Server Error: Server Returned Invalid RESPONSE Xml");
		
		sResult = docElem.getAttribute('RESULT');
		if (sResult != null)
			bResult = (sResult == 'TRUE' || sResult == 'true');
		//Need to verify if it can calculate child nodes of RESPONSE xml
		if (docElem.childNodes.length == 0)
		{
			return RESPONSE(bResult,
							oBrokerArguments,
							sAlerts,
							nFeedback,
							sObjectName,
							nObjectID,
							sModifiedBy,
							sModificationDate,
							xml,
							docElem);
		}
		//getting all the child nodes
		oResponseChilds = docElem.childNodes;
		for (var iReponseIndex=0; iReponseIndex<oResponseChilds.length; iReponseIndex++)
		{
			oCurrentElement = oResponseChilds[iReponseIndex];
			
			switch(oCurrentElement.tagName)
			{
				case 'ARGUMENTS' : 
					oArguments = oCurrentElement.childNodes;

					for (var iArgumentsIndex=0; iArgumentsIndex< oArguments.length; iArgumentsIndex++)
					{
						oCurrentElement = oArguments[iArgumentsIndex];
						if (oCurrentElement.nodeValue != '\n')
						{
						    var name = (oCurrentElement.getAttribute("NAME") || oCurrentElement.getAttribute("name") || oCurrentElement.getAttribute("Name"));
						    var value = (oCurrentElement.getAttribute("VALUE") || oCurrentElement.getAttribute("Value") || oCurrentElement.getAttribute("value"));
						    var dataType = (oCurrentElement.getAttribute("DATATYPE") || oCurrentElement.getAttribute("DataType") || oCurrentElement.getAttribute("datatype"));
						    oBrokerArguments.add( name, value, false, dataType); 
						}
					}
					break;
				case 'FEEDBACK' :
					nFeedback = oCurrentElement.getAttribute("ID");
					break;
				case 'ALERTS' :
					sAlerts = (oCurrentElement.getAttribute('NEW') || "0");
					break;
				case 'BLL' :
					nObjectID = oCurrentElement.getAttribute("ID");
					sObjectName = oCurrentElement.getAttribute("NAME");
					sModifiedBy = oCurrentElement.getAttribute("MODIFIED_BY");
					sModificationDate = oCurrentElement.getAttribute("MODIFICATION_DATE");
					break;
				default : break;
			}
		}
		
		return RESPONSE(bResult,
						oBrokerArguments,
						sAlerts,
						nFeedback,
						sObjectName,
						nObjectID,
						sModifiedBy, 
						sModificationDate,
						xml,
						docElem);
		
	}
	catch(e)
	{
		alert(e.message);
		bResult = false;
		return RESPONSE(bResult,
						oBrokerArguments,
						sAlerts,
						nFeedback,
						sObjectName,
						nObjectID,
						sModifiedBy, 
						sModificationDate,
						xml,
						docElem);
	
	}
	
}


function RESPONSE(result, arguments, alerts, feedback, objectName, objectID , modifiedBy, modificationDate, response, responseDoc)
{	
	var tmp = new Object();
	
	tmp.result				= result || false;
	tmp.arguments           =  arguments || ARGUMENTS();
	tmp.m_sAlerts			= alerts || '';
	tmp.feedback			= feedback || 0;
	tmp.response			= response || null;
	tmp.m_nObjectID         = objectID || 0;
	tmp.m_sObjectName       = objectName || null;
	tmp.m_sModifiedBy       = modifiedBy || null;
	tmp.m_sModificationDate = modificationDate || null;
	tmp.m_responseDoc		= responseDoc || null;
	
	tmp.getResult = response_getResult;
	tmp.getArguments = response_getArguments;
	//tmp.getAlerts = response_getAlerts;
	tmp.getFeedback = response_getFeedback;
	tmp.getFeedBack = response_getFeedback;
	tmp.toXML = response_toXML;
	tmp.getObjectName = response_getObjectName;
	tmp.getObjectID = response_getObjectID;
	tmp.getModifiedBy = response_getModifiedBy;
	tmp.getModificationDate = response_getModificationDate; 
	tmp.getResponseDoc = response_getResponseDoc;

	return tmp;
}
function response_getResult()
{
	return this.result;
}
function response_getArguments()
{
	 return this.arguments;
}
/*
function response_getAlerts()
{
	return this.m_sAlerts;
}
*/
function response_getFeedback()
{
	return this.feedback;
}
function response_toXML()
{
	return this.response;
}
function response_getObjectName()
{
	return this.m_sObjectName;
}
function response_getObjectID()
{
	return this.m_nObjectID;
}
function response_getModifiedBy()
{
	return this.m_sModifiedBy;
}
function response_getModificationDate()
{
	return this.m_sModificationDate;
}
function response_getResponseDoc()
{
	return this.m_responseDoc;
}

function URLUnicodeEncoder()
{
	var tmp = new Object();
	tmp.encode = URLUnicodeEncoder_encode;
	return tmp;
}

function URLUnicodeEncoder_encode(string)
{
	string = string.replace(/\r\n/g,"\n");
    var utftext = "";

	for (var n = 0; n < string.length; n++) 
	{
	  	var c = string.charCodeAt(n);
		
		if (c < 128) 
		{
		    if(c == 32) 
		        utftext += '+';
            if(c == 43)
                utftext += '%2B';
		    else
			    utftext += String.fromCharCode(c);		
		}
		else if((c > 127) && (c < 2048)) {
			utftext += String.fromCharCode((c >> 6) | 192);
			utftext += String.fromCharCode((c & 63) | 128);
		}
		else {
			utftext += String.fromCharCode((c >> 12) | 224);
			utftext += String.fromCharCode(((c >> 6) & 63) | 128);
			utftext += String.fromCharCode((c & 63) | 128);
		}

	}
	return utftext;
}



function SectionHeaderForm_propChg(e) 
{
    //handler to hide/show SectionHeaderForm in CommonTemplates.xsl
    if (e.propertyName!='innerHTML') 
        return;
        
    var obj = e.srcElement;
    while (obj != null && obj.tagName.toLowerCase() != 'table')
        obj = obj.parentNode;
    if (obj == null)
        return;
    obj.style.display = ((this.innerHTML == '') ? 'none' : 'inline');
}
function WellFormNumber(Value)
{
    var nResult = Value.replace(',','');
    nResult = parseFloat(nResult);
    if (isNaN(nResult)) nResult = 0;
    return nResult;
}


/*
function GetXMLDocument(xml)
{
    var xmlDoc;

    if (window.ActiveXObject) // IE
    {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(xml);
    }
    else // Non-IE browsers
    {
        if (window.XMLHttpRequest)
        {
                xmlDoc = new DOMParser().parseFromString(xml, "text/xml");      
        }
    }
	return xmlDoc;
}

*/
//
// Tests for different versions of XML parser on user's machine, falling back on
// older versions if newer one is not present.
// Version 3.0 comes with IE 6.0, 
// XMLDOM was shipped with IE 5 and WIN95
function getXMLParser()
{
    var progIDs = ['Msxml2.DOMDocument.6.0', 'Msxml2.DOMDocument.3.0', 'Microsoft.XMLDOM'];
    for (var i = 0; i < progIDs.length; i++)
    {
        try
        {

            var xmlDOM = new ActiveXObject(progIDs[i]);
            return xmlDOM;
        }
        catch (ex)
        {
        }
    }
}
//
// Replacement for GetXMLDocument in General.js
//
function GetXMLDocument(strText)
{
    if (typeof DOMParser != "undefined")
    {
        try
        {
            var xmlString = new DOMParser().parseFromString(strText, "text/xml");
            return xmlString;
        }
        catch (e)
        {
            return e;
        }

    }
    else
    {
        if (typeof ActiveXObject != "undefined")
        {
            var doc = getXMLParser();
            doc.async = "false";
            doc.loadXML(strText);
            return doc;
        }
        else
        {
            var url = "data:text/xml;charset=utf-8," + escape(strText);
            var request = new XMLHttpRequest();
            request.open("GET", url, false);
            request.send(null);
            return request.responseXML;
        }
    }
}

function CloneObject(myObj, type)
{
	if(myObj == null) 
	    return myObj;
	if(typeof(myObj) != 'object') 
	    return myObj;
	if (type == null)
	    type = Object;
	    
	var myNewObj = new type();

	for(var i in myObj)
		myNewObj[i] = CloneObject(myObj[i]);

	return myNewObj;
}


function viewObject(pageID, classID, value, bEdit)
{
    var iValue = (bEdit) ? getDomElement(value).NUMERIC_VALUE : value;
    
    if(iValue>0)
    {
        if(classID==PROJECT_CLASS_ID)
            openSMSWindow(pageID, iValue, classID);
        else
            openSMSPopup(pageID, iValue, classID);
    }
}



function nbsp(txt)
{
    if (txt == null || txt == '')
        return '&nbsp;';
    return txt;
}



//firefox fixes below
var m_bIsFirefox = false;

if (typeof HTMLElement!="undefined" && !HTMLElement.prototype.attachEvent)
{
    m_bIsFirefox = true;
    
    var attach_event = function(eventName, handler)
                   {
                       if (eventName.slice(0,2) == 'on')
                           eventName = eventName.slice(2);
                       this.addEventListener(eventName, handler, false);
                   }

    
    HTMLElement.prototype.attachEvent = attach_event;
    window.attachEvent = attach_event;
    
    
    //document.addEventListener("DOMContentLoaded", function() {document.readyState = 'complete';}, false);

    
    
    window.createPopup = function()
    {
        //create popup
    }
    
    
}




// insertAdjacentHTML(), insertAdjacentText() and insertAdjacentElement()
// for Netscape 6/Mozilla by Thor Larholm me@jscript.dk
// Usage: include this code segment at the beginning of your document
// before any other Javascript contents.

if (typeof HTMLElement!="undefined" && !HTMLElement.prototype.insertAdjacentElement)
{
    HTMLElement.prototype.insertAdjacentElement = function (where,parsedNode)
    {
        switch (where)
        {
            case 'beforeBegin':
                this.parentNode.insertBefore(parsedNode,this)
                break;
            case 'afterBegin':
                this.insertBefore(parsedNode,this.firstChild);
                break;
            case 'beforeEnd':
                this.appendChild(parsedNode);
                break;
            case 'afterEnd':
                if (this.nextSibling)
                    this.parentNode.insertBefore(parsedNode,this.nextSibling);
                else 
                    this.parentNode.appendChild(parsedNode);
            break;
        }
    }

    HTMLElement.prototype.insertAdjacentHTML = function (where,htmlStr)
    {
        var r = this.ownerDocument.createRange();
        r.setStartBefore(this);
        var parsedHTML = r.createContextualFragment(htmlStr);
        this.insertAdjacentElement(where,parsedHTML)
    }


    HTMLElement.prototype.insertAdjacentText = function (where,txtStr)
    {
        var parsedText = document.createTextNode(txtStr)
        this.insertAdjacentElement(where,parsedText)
    }
    
    HTMLElement.prototype.removeNode = function()
    {
        if (this.parentNode != null)
            this.parentNode.removeChild(this);
    }
}




function ff_setEvent(e)
{
    window.event = e;
    window.event.srcElement = e.target;
    window.event.toElement = e.relatedTarget;
    window.event.fromElement = e.relatedTarget;
}

if (window.addEventListener) //not IE
{
    //var event;
    
    window.addEventListener('mouseover', ff_setEvent, true);
    window.addEventListener('mouseout', ff_setEvent, true);
    window.addEventListener('click', ff_setEvent, true);
        
    window.addEventListener('DOMSubtreeModified', chgSectionForm, false);
    
}




if (!window.ActiveXObject) {

    Element.prototype.selectNodes = function(sXPath) 
    {
        var oEvaluator = new XPathEvaluator();
        var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
        var aNodes = new Array();
        if (oResult != null) {
            var oElement = oResult.iterateNext();
            while(oElement) {
                aNodes.push(oElement);
                oElement = oResult.iterateNext();
            }
        }
        return aNodes;
    }

    Element.prototype.selectSingleNode = function(sXPath) 
    {
        var oEvaluator = new XPathEvaluator();
          // FIRST_ORDERED_NODE_TYPE returns the first match to the xpath.
        var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
        if (oResult != null)
             return oResult.singleNodeValue;
        else
            return null;
                      

    }
}





///----------------------------------------------former separate files--------------


//----------------base64.js----------------

//EJF -- note this is not a standard Base64.  The final character should be =, 
//       but I replaced it with _ to not break URLs
var base64KeyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/_";


function encodeBase64(input) {
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   do {
      chr1 = input.charCodeAt(i++);
      chr2 = input.charCodeAt(i++);
      chr3 = input.charCodeAt(i++);

      enc1 = chr1 >> 2;
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
      enc4 = chr3 & 63;

      if (isNaN(chr2)) {
         enc3 = enc4 = 64;
      } else if (isNaN(chr3)) {
         enc4 = 64;
      }

      output = output + base64KeyStr.charAt(enc1) + base64KeyStr.charAt(enc2) + 
         base64KeyStr.charAt(enc3) + base64KeyStr.charAt(enc4);
   } while (i < input.length);
   
   return output;
}

function decodeBase64(input) {
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
   input = input.replace(/[^A-Za-z0-9\+\/_]/g, "");

   do {
      enc1 = base64KeyStr.indexOf(input.charAt(i++));
      enc2 = base64KeyStr.indexOf(input.charAt(i++));
      enc3 = base64KeyStr.indexOf(input.charAt(i++));
      enc4 = base64KeyStr.indexOf(input.charAt(i++));

      chr1 = (enc1 << 2) | (enc2 >> 4);
      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
      chr3 = ((enc3 & 3) << 6) | enc4;

      output = output + String.fromCharCode(chr1);

      if (enc3 != 64) 
         output = output + String.fromCharCode(chr2);
      if (enc4 != 64) 
         output = output + String.fromCharCode(chr3);
   } while (i < input.length);

   return output;
}





//----------------smsgeneral.js----------------


// permissions

var m_arClassActions = new Array();

function ClassAction(ClassID, Number, Allowed)
{
	this.ClassID = ClassID;
	this.Number  = Number;
	this.Allowed = (1 == Allowed);		
}

function isActionAllowed(ClassID, ActionNumber)
{
	if (null == m_arClassActions) return (false);
	
	for (var iIndex = 0; iIndex < m_arClassActions.length; iIndex++)
	{
		var cAction = m_arClassActions[iIndex];
		if ((ClassID == cAction.ClassID) && (ActionNumber == cAction.Number))
			return (cAction.Allowed);
	}
	// default
	return (false);
}



// ~permissions

function openSMSWindow(PageID, ClassInstance, ClassID, ParentClassInstance, ParentClassID, SubType, extraUrlParams)
{
	var sUrl = createGeminiURL(PageID, ClassInstance, ClassID, ParentClassInstance, ParentClassID, null, SubType);
	// add debug info
	if (location.href.indexOf('debug=true') > 0)
		sUrl += "&debug=true";		
	if (extraUrlParams != null && extraUrlParams != '')
	    sUrl += '&' + extraUrlParams;		
	
	    top.navigateTo(sUrl);	
}

function openSMSPopup(PageID, ClassInstance, ClassID, ParentClassInstance, ParentClassID, SubType, VirtualParentObjectID, VirtualParentClassID, extraUrlParams)
{
    
	var sUrl = createGeminiURL(PageID, ClassInstance, ClassID, ParentClassInstance, ParentClassID, null, SubType, VirtualParentObjectID, VirtualParentClassID);
	// add debug info
	if (location.href.indexOf('debug=true') > 0)
		sUrl += "&debug=true";
    if (extraUrlParams != null && extraUrlParams != '')
	    sUrl += '&' + extraUrlParams;
		
	openUrl (sUrl, true);
}	

function openSMSPopupEx(PageID, ClassInstance, ClassID, ParentClassInstance, ParentClassID, SubType, extraUrlParams)
{
	var sUrl = createGeminiURL(PageID, ClassInstance, ClassID, ParentClassInstance, ParentClassID, null, SubType);
	// add debug info
	if (location.href.indexOf('debug=true') > 0)
		sUrl += "&debug=true";
    if (extraUrlParams != null && extraUrlParams != '')
	    sUrl += '&' + extraUrlParams;
    
	return(openUrl (sUrl, true));
}	

function navigateSMSPopup(PageID, ClassInstance, ClassID, ParentClassInstance, ParentClassID, SubType, extraUrlParams, VirtualParentObjectID, VirtualParentClassID)
{
	var sUrl = createGeminiURL(PageID, ClassInstance, ClassID, ParentClassInstance, ParentClassID, null, SubType, VirtualParentObjectID, VirtualParentClassID);
	// add debug info
	if (location.href.indexOf('debug=true') > 0)
		sUrl += "&debug=true";
    if (extraUrlParams != null && extraUrlParams != '')
	    sUrl += '&' + extraUrlParams;
    
	location.href = sUrl;
}	

function reloadSMSWindow()
{
	location.reload();
}	

function showSMSHelp()
{
	var helpURL = 'http://www.siterra2.com/wiki/process_login.php?domain_id=' + getUserProfile("DOMAIN_ID");
	window.open (helpURL,"helpwindow","resizable=1,scrollbars=1");
}



//-------------statusbar.js--------------

////////////////////////////////////////////  set status (start timer thread) ///////////////////////////////////
function SetStatus(Text, Interval)
{	
	Interval = (Interval == null) ? 0 : Interval; 
	
	var sCommand = 'writeStatus(unescape("' + escape(Text) + '"))';
	m_iStatusTimer = window.setTimeout(sCommand, Interval);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////insert status marquee ///////////////////////////////////////////
function writeStatus(Text)
{	
	var bChanged = false;
			
	status = Text;
	
	// insert merquee
	var oStatusBar = getStatusBar();
	if (oStatusBar == null) return;
	
	var iOriginalWidth = oStatusBar.clientWidth;
	// tool tip
	oStatusBar.title=Text;
	// show the message
	var sHTML = '&#160;<LABEL Class="Message">' + Text + '</LABEL>';
	oStatusBar.innerHTML = sHTML;
	// cut the string if it's too long
	while (oStatusBar.clientWidth > iOriginalWidth)
	{		
		bChanged = true;		
		Text = Text.substr(0, Text.length-1);
		oStatusBar.childNodes[1].innerHTML = Text;				
	}
	if (bChanged)
	{
		Text = Text.substr(0, Text.length-3);
		Text += '...';
		oStatusBar.childNodes[1].innerHTML = Text;				
	}
	// and send a clear command after 15 seconds						
	if (Text != '')
	{
		// clear after couple of secs
		SetStatus('', 15000)
	}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////


function setProgress(Percent, Text)
{
	var oStatusBar = getStatusBar();
	if (oStatusBar == null) return;		
	
	var iMaxWidth = parseInt(oStatusBar.clientWidth);					
	var iWidth = parseInt((Percent * iMaxWidth) / 100);
				
	var oProgressBar = getProgressBar();
	
	if (oProgressBar == null)
	{
		var sHTML = '<SPAN ID="SPN_PROGRESS" Class="ProgressBar" style="width:"' + iWidth + '"></SPAN><LABEL ID="LBL_PROGRESS" class="ProgressBarText">' + (Text + '') + '</LABEL>';										
		oStatusBar.innerHTML = sHTML;			
	}
	else
	{
		oProgressBar.style.width = iWidth;	
		getStatusBarItem('LBL_PROGRESS').innerHTML = Text;
	}
}

function getProgressBar()
{
	return (getStatusBarItem('SPN_PROGRESS'));
}	

///////////////////////////////////////////////// get alerts bar ///////////////////////////////////////////////////
function getAlertsBar()
{
	return (getStatusBarItem('Cell_Alerts'));
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////////////// get grid bar ///////////////////////////////////////////////////
function getGridBar()
{
	return (getStatusBarItem('Cell_GridBar'));
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	



///////////////////////////////////////////////// get status bar ///////////////////////////////////////////////////
function getStatusBar()
{
	return (getStatusBarItem('Cell_StatusBar'));
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


function getStatusBarItem(name)
{
	// from self
	var oStatusBarItem = getDomElement(name);	
	if (oStatusBarItem != null)
		return (oStatusBarItem);
	else if (top != null)
		return(top.getDomElement(name));
}

function setAuditingIconVisibility(visibility)
{
//		var oAuditingIcon = getDomElement('Cell_Info');
//		if (oAuditingIcon == null) 
		return;
		

	oAuditingIcon.className =  'Hidden';//visibility ? 'SB_Balloon' : 'Hidden';
	oAuditingIcon.title = '';//m_sAuditingInfo;
}









//-----------------windows.js-------------------


function geminiURL(Page, 
				   ClassInstance, 
				   Class, 
				   ParentClassInstance, 
				   ParentClass, 
				   VirtualClassInstance, 
				   VirtualClass, 
				   Task, 
				   SubType, 					   
				   ShowHeader, 
				   IsSecured,
				   IsResizable,
				   IsScrollable, 
				   StaticLevel,
				   Method)
{
	// members
	this.Method				  = (Method != null) ? Method : '';				
	this.Page				  = (Page != null) ? Page : 0;
	this.ClassInstance		  = (ClassInstance != null) ? ClassInstance : -1;
	this.Class				  = (Class != null) ? Class : 0;
	this.ParentClassInstance  = (ParentClassInstance != null) ? ParentClassInstance : m_ObjectID;
    this.ParentClass		  = (ParentClass != null) ? ParentClass : m_ClassID;	
    this.VirtualClassInstance = (VirtualClassInstance != null) ? VirtualClassInstance : m_VirtualParentObjectID;
    this.VirtualClass		  = (VirtualClass != null) ? VirtualClass : m_VirtualParentClassID;
    this.Task				  = (Task != null) ? Task : m_TaskID;
    this.SubType			  = (SubType != null) ? SubType : m_SubType;
    this.ShowHeader			  = (ShowHeader != null) ? ShowHeader : 0;
    this.IsSecured			  = (IsSecured != null) ? IsSecured : false;
    this.StaticLevel		  = (StaticLevel != null) ? StaticLevel : 0;	    
    this.IsScrollable		  = (IsScrollable != null) ? IsScrollable : 0;
    this.IsResizable		  = (IsResizable != null) ? IsResizable : 0;
    // methods
    this.toString = URLToString;
}


function URLToString()
{
	var sURL = ''
	var IsSecuredSite = false;
	var today = new Date();
	var sVersion = (this.StaticLevel == 1) ? today.getMonth() + today.getDate() : getRandom();
	var sProtocol=''
	
	
	var IsSecuredSite = (getUserProfile('SECURED_SITE') == '1');
			
	if (this.Method != '')
	{
	
		try
		{	
			sProtocol =window.location.protocol;
		}
		catch(e)
		{
			sProtocol = getUserProfile('PROTOCOL');
		}
			
		sURL = 'http';
		if (IsSecuredSite || this.IsSecured || sProtocol == 'https:')
			sURL += 's';
		
		try
		{	
			sURL += '://' + location.host + '' + location.pathname;
		}
		catch(e)
		{
			sURL += '://' + getUserProfile('HOST') + '' + getUserProfile('PATH'); 		
		}
			
		 		
		sURL += '?Do=' + this.Method;
	}
	
	if ((this.Page != 0) && (this.Class != 0))
	{
		sURL += '&PageID=' + this.Page;
		sURL += '&ClassID=' + this.Class;
	}
	else if ((this.Page == 0) && (this.Class != 0))
		sURL += '&ClassID=' + this.Class;
	else if ((this.Page != 0) && (this.ClassID == 0))
		sURL += '&PageID=' + this.Page;
	else if ((this.Page == 0) && (this.Class == 0))
		return;
	
	if ((this.VirtualClassInstance == -1) && (this.VirtualClass == this.ParentClass))
		this.VirtualClassInstance = this.ParentClassInstance;
	
	sURL += '&ObjectID=' + this.ClassInstance;
	sURL += '&ParentObjectID=' + this.ParentClassInstance;	
	sURL += '&ParentClassID=' +  this.ParentClass;
	sURL += '&VirtualParentObjectID=' + this.VirtualClassInstance;					
	sURL += '&VirtualParentClassID=' + this.VirtualClass;	
	sURL += '&TaskID=' +  this.Task;	
	sURL += '&SubType=' + this.SubType;		
	sURL += '&ShowHeader=' + this.ShowHeader;
	sURL += '&Scroll=' + this.IsScrollable;
	sURL += '&Resize=' + this.IsResizable;
	sURL += '&v=' + sVersion;
					
	return sURL;		
}

function ShowSplitView(URLs, Width, Directon, AfterElementName, FrameName, Height)
{
	var oElement;
	var sURL;

	FrameName = (FrameName == null) ? 'SPLIT' : FrameName;

	sURL = createSplitViewURL(URLs, Width);

	if (AfterElementName==null)
		openUrl(sURL);
	else
	{
		oElement = getDomElement(AfterElementName);
		if (oElement == null) return;
		if (!Height)
			Height=' height="100%" '
		else
			Height=' style="height:' + Height + '" ';
		oElement.insertAdjacentHTML('afterbegin','<IFRAME SRC="' + sURL + '" + ID="' + FrameName + '" NAME="' + FrameName + '" width="100%" ' + Height + ' framespacing="0" border="0" frameborder="0"></IFRAME>');
	}
}

function createSplitViewURL(URLs, Width, Direction)
{
	
	var sURL = '';
	Width = (Width != null) ? Width : '180px,*';
	Direction = (Direction != null) ? Direction : "Cols"
	
	if (URLs[0].Method == '') 
	    URLs[0].Method = 'Split';
	
	for (var iIndex = 0; iIndex < URLs.length; iIndex++)
		sURL += URLs[iIndex].toString();
	
	sURL += '&Width=' + escape(Width);
	sURL += '&Direction=' + Direction;
	//sURL += '&CanvasColor='  + escape(getClassAttribute('.Canvas','backgroundColor'));
	
	return (sURL);		
}

function createGeminiURL(PageID, 
						 ObjectID, 
						 ClassID, 
						 ParentObjectID, 
						 ParentClassID, 
						 TaskID, 
						 SubType, 
						 VirtualParentObjectID, 
						 VirtualParentClassID, 
						 ShowHeader, 
						 IsSecured, 
						 StaticLevel)
{
	var oGeminiURL = new geminiURL(PageID, 
								   ObjectID, 
								   ClassID, 
								   ParentObjectID, 
								   ParentClassID, 
								   VirtualParentObjectID, 
								   VirtualParentClassID, 
								   TaskID, 
								   SubType, 
								   ShowHeader, 
								   IsSecured, 
								   0, 
								   0, 
								   StaticLevel, 
								   'Output');
	
	var sURL = oGeminiURL.toString();							   
	return sURL;
}

function openGeminiWindow(PageID, 
						  ObjectID, 
						  ClassID, 
						  ParentObjectID, 
						  ParentClassID, 
						  TaskID, 
						  SubType, 
						  VirtualParentObjectID, 
						  VirtualParentClassID,
						  IsSecured,
						  ShowHeader,
						  StaticLevel,
						  IsNewInstance)
{
	var oGeminiURL = new geminiURL(PageID, 
								   ObjectID, 
								   ClassID, 
								   ParentObjectID, 
								   ParentClassID, 
								   VirtualParentObjectID, 
								   VirtualParentClassID, 
								   TaskID, 
								   SubType, 
								   ShowHeader, 
								   IsSecured, 
								   0, 
								   0, 
								   StaticLevel, 
								   'Output');

	return(openGeminiWindowEx(oGeminiURL, ShowHeader, IsNewInstance));
								   	
}	

function openGeminiWindowEx(geminiURL, ShowHeader, IsNewInstance)
{
	geminiURL.ShowHeader  = (ShowHeader == null) ? 0 : ShowHeader;		
	var sURL = geminiURL.toString();
	
	return(openUrl(sURL, IsNewInstance));
}	

function openGeminiDialog(Top, 
						  Left, 
						  Width, 
						  Height, 
						  PageID, 
						  ObjectID, 
						  ClassID, 
						  ParentObjectID, 
						  ParentClassID, 
						  TaskID, 
						  SubType, 
						  VirtualParentObjectID, 
						  VirtualParentClassID,
						  IsSecured,
						  ShowHeader,
						  StaticLevel)
{
	var oGeminiURL = new geminiURL(PageID, 
								   ObjectID, 
								   ClassID, 
								   ParentObjectID, 
								   ParentClassID, 
								   VirtualParentObjectID, 
								   VirtualParentClassID, 
								   TaskID, 
								   SubType, 
								   ShowHeader, 
								   IsSecured, 
								   0, 
								   0, 
								   StaticLevel, 
								   'Output');
								   	
	//openGeminiDialogEx(oGeminiURL, Top, Left, Width, Height);
	openGeminiWindowEx(oGeminiURL,ShowHeader,true);
}	

function openGeminiDialogEx(geminiURL, Top, Left, Width, Height, Timeout)
{	
	var sFeatures = 'dialogWidth: ' + Width + 'px';
	sFeatures += ';dialogHeight: ' + Height + 'px';
	sFeatures += ';dialogTop: ' + Top + 'px';
	sFeatures += ';dialogLeft :' + Left + 'px';
	sFeatures += ';center: no';
	sFeatures += ';resizable: no'; 
	sFeatures += ';status: no';
	sFeatures += ';help: no';
	
	var sURL = geminiURL.toString();
	if (Timeout==null)
		showModelessDialog(sURL, self, sFeatures);
	else
		setTimeout('showModelessDialog("'+sURL+'", self, "'+sFeatures+'")', Timeout);
	
}

function checkClientDateFormat(sDate)
{
    var sClientDate = getClientDateFormat();
    var sServerDate = getServerDateFormat();

    if(sClientDate!=sServerDate)
        sDate = ConvertDateFormat(sDate, sClientDate, sServerDate, false);
	
	return sDate;
}

function returnClientDateFormat(sDate)
{
    var sClientDate = getClientDateFormat();
    var sServerDate = getServerDateFormat();

    if(sClientDate!=sServerDate)
        sDate = ConvertDateFormat(sDate, sServerDate, sClientDate, false);
	
	return sDate;
}



function escapeWellFormXML(value)
{	
    if ((value == null) || (value == 'undefined') || (value == '')) return ('');		   
    value = value.replace(/&amp;/g,'&');   
    value = value.replace(/&lt;/g,'<');
    value = value.replace(/&gt;/g,'>');
    value = value.replace(/&quot;/g,'"');
    value = value.replace(/&apos;/g,'\'');
    return (value);
}



function viewObjectLog(ClassID, ClassInstance)
{
    openSMSPopup(760030200, ClassInstance, ClassID);
}


function NameValuePair(Name, Value)
{
    // members
    this.Name = Name;
    this.Value = Value; 
} 

//core form address stuff
function countryChange(thisObject)
{
    var iCountryID = getfieldID(thisObject + "country");
    var iStateID = getfieldID(thisObject + "state");
    var iStateValue = '';
    
    //make sure there is a state dropdown available
    if(iStateID != null && iStateID != '' && iStateID != '-1')
    {
        var stateElem = getDomElement(iStateID);
        
        var index = stateElem.selectedIndex;//get the current index on the drop-down
        iStateValue = (index > 0) ? stateElem.options[index].value : "";
        
        getStates(iCountryID, iStateID);   

        if(iStateValue.length > 0)
        {
            //try to set that value in the current drop-down
            stateElem.value = iStateValue;
            
            //if the new dropdown values dont have the old value & it has values in it then just reset it
            if(stateElem.selectedIndex < 0 && stateElem.options.length > 0)
                stateElem.selectedIndex = 0;
                
        }    
        
        stateChange(thisObject);    
    }
}

function stateChange(thisObject)
{
    var iStateID = getfieldID(thisObject + "state");
    var iCountyID = getfieldID(thisObject + "county");
    
    getCounties(iStateID, iCountyID, null);
}


//address general stuff
function getStates(CountryElementID, StateElementID)
{   
    getGBSTreeNodes(CountryElementID, StateElementID, 'states');				    
}

function getCounties(StateElementID, CountyElementID, CountyOtherElementID)
{
    return;//functionality temporarily disabled
	    
    getGBSTreeNodes(StateElementID, CountyElementID, 'counties');
    
    var oCounty = getDomElement(CountyElementID);
    var oCountyOther = getDomElement(CountyOtherElementID);
    
    if (oCounty != null && oCountyOther != null)
    {
        if (oCounty.options.length <= 1)
        {
            oCounty.style.display = 'none';
            oCountyOther.style.display = '';
        }
        else
        {
            oCounty.style.display = '';
            oCountyOther.style.display = 'none';
        }
    }
}

function getGBSTreeNodes(ParentElementID, ChildElementID, type)
//type = 'states', 'counties'
{
    var oParent = getDomElement(ParentElementID);
    var oChild = getDomElement(ChildElementID);
    if (oParent == null || oChild == null)
        return;
    
    var brokerMethod;
    switch (type)
    {
        case 'states':
            brokerMethod = 5;
            break;
        case 'counties':
            brokerMethod = 9;
            break;
        default:
            return;
    }
        
    var iParentID = oParent.options[oParent.selectedIndex].value;
    
    var oArguments = new Array();
    oArguments.push(new brokerParam('ParentID', iParentID));
    	    
    var Response = sendThroughBroker(74000000, brokerMethod, oArguments);
    if (!Response.getResult()) 
	    return;
	
	var Arguments = Response.getArguments();			
	if (Arguments == null) 
	    return;
	    
	oChild.options.length = 0;
	addOption(oChild, "- Not Selected -", -1, true);
			
	for (var iIndex=0; iIndex<Arguments.Count(); iIndex++)
	{
	    if(Arguments.Item(iIndex).getValue().search(new RegExp (';', 'gi'))!='0')
			aID = Arguments.Item(iIndex).getValue().split(";");
		else
			aID[0] = Arguments.Item(iIndex).getValue();
					
		var aNameSymbol = Arguments.Item(iIndex).getName().split(",");
		
		addOption(oChild, aNameSymbol[0], aID[0], false);
	}
}

function addOption(parentElement, text, value, selected)
{
	var oOption = document.createElement("OPTION");
	
	oOption.text = text;
	oOption.value = value;
    oOption.selected = selected;		
    
    parentElement.options.add(oOption, parentElement.options.length);
				
    oOption = null;
}
function getCaption(sElement)
{
    if (sElement == null) return ;
        return (m_arCaptions[sElement]);
}