var CFExtFunctionHandles = new Array();

function CFLink(label) 
{
    this.items = new Array();
    this.actions = new Array();
    this.grpordinals = new Array();
    this.grpdescriptions = new Array();
    this.icons = new Array();
    this.grplinkordinals = new Array();
    this.inline = new Array();
    this.grpvisible = new Array();
    this.pages = new Array();
    this.functions = new Array();
    this.link_ids = new Array();
    this.link_parms = new Array();
    this.formnames = new Array();
    this.microhelp = new Array();
    this.current = new Array();
    this.currentLinkOid = -1;
    this.DisableLinkExecution = false;
        
	this.parm = "";
	this.addedparm = "";
	this.enableBeforeLink = false ;

    this.addLinkItem = addItem;
    
    this.addLinkItemEx = addItemEx;
    
    this.addMenuItem = addItem;
    this.addGroupItem = addGroup;
    this.buildLinks = buildLinks;
    this.closeExtLink = CFCloseExtLinks;
}

function addItem(label, action,linkgrp_id,icon) 
{
    this.items[this.items.length] = label;
    this.actions[this.actions.length] = action;
    this.grplinkordinals[this.grplinkordinals.length] = linkgrp_id;
    this.icons[this.icons.length] = icon;
}

function addItemEx(label, pagename, function_id, link_id, parameters, formname ,linkgrp_id, icon, link_isinline, link_microhelp, current) 
{
	var i;

	if(!link_isinline) {
		for(i=0;i<this.grpvisible.length;i++) {
			if(this.grpordinals[i]==linkgrp_id) {
				this.grpvisible[i] = true;
				break;
			}
		}
	}

    this.items[this.items.length] = label;
    this.pages[this.pages.length] = pagename;
    this.functions[this.functions.length] = function_id;
    this.link_ids[this.link_ids.length] = link_id;
    this.formnames[this.formnames.length] = formname;
    this.link_parms[this.link_parms.length] = parameters;
    this.actions[this.actions.length] = "CFExecuteLink('" + pagename + "', " + function_id + ", " + link_id + ", '" + parameters + "', '" + formname + "')";
    this.grplinkordinals[this.grplinkordinals.length] = linkgrp_id;
    this.icons[this.icons.length] = icon;
    this.inline[this.inline.length] = link_isinline;
    this.current[this.current.length] = current;
    if (typeof(link_microhelp)=='undefined') {
		link_microhelp = '' ;
    }
    
    if (link_microhelp == null) {
		link_microhelp = '' ;
    }
    
    if (link_microhelp == '-') {
		link_microhelp = '' ;
    }
    
    this.microhelp[this.microhelp.length] = link_microhelp;
}

function CFAddLinkByOid(pLinkOid) 
{
	var lpos;

	if(this.top!=this) {
		if(typeof(pLinkOid)!='undefined' ) {
			lpos = CFExistLink(pLinkOid);			
			if(lpos == -1) {
				cfmonitorframe.cfaddlink(pLinkOid,CfLinkMenu.items[lpos],CfLinkMenu.actions[lpos],'',CfLinkMenu.icons[lpos],CfLinkMenu.grplinkordinals[lpos]);
			}	
		}
	}
}

function CFRemoveLinkByOid(pLinkOid) 
{
	var lpos;

	if(this.top!=this) {
		if(typeof(pLinkOid)!='undefined' ) {
			lpos = CFExistLink(pLinkOid);			
			if(lpos != -1) {
				cfmonitorframe.cfremovelink(pLinkOid);
			}	
		}
	}
}


function CFExistLink(plinkoid) 
{
	var li,lfound;
	
	lfound=-1;
	for(li=0;li<CfLinkMenu.link_ids.length;li++) {
		if(CfLinkMenu.link_ids[li]==plinkoid) {
			lfound = li;
		}
	}
	return lfound;
}


function addGroup(linkgrp_id,linkgrp_des) 
{
	this.grpvisible[this.grpvisible.length] = false;
	this.grpordinals[this.grpordinals.length] = linkgrp_id;
	this.grpdescriptions[this.grpdescriptions.length] = linkgrp_des;
}


function buildLinks() 
{
	for (i=0; i< this.items.length; i++) {
		this.actions[i] = this.actions[i].replace(/%27/g, "\\'");	
	}
	return true;
}


function CFExecuteFirstLinkToFunction(pFunctionOid, pInlineOnly, pParms, pFormname) 
{
	var li,lfound;
	var llinkid ;
	
	if(typeof(pInlineOnly)=='undefined') {
		pInlineOnly = false ;
	}
	
	lfound=-1;
	for(li=0; li<CfLinkMenu.functions.length; li++) {
		if (CfLinkMenu.inline[li] || (pInlineOnly == CfLinkMenu.inline[li])) {	
			if(CfLinkMenu.functions[li] == pFunctionOid) {
				if (lfound == -1) {
					lfound = li;
				}
			}
		}
	}
	
	if (lfound != -1) {
		llinkid = CfLinkMenu.link_ids[lfound] ;
		
		if(typeof(pParms)=='undefined') {
			CFExecuteLinkByOid(llinkid) ;
		} else {
		
			if(typeof(pFormname) == 'undefined') {
				CFExecuteLinkByOid(llinkid, pParms) ;
			} else {
				CFExecuteLinkByOid(llinkid, pParms, pFormname) ;
			}
	
		}
	}	
	
}

function CFExecuteLinkByOid(plinkoid,pParms,pFormname) 
{
	var lpos;
	var lparms;
	var lformname;

	CfLinkMenu.parm = '';
	CfLinkMenu.addedparm = '';


	lpos=CFExistLink(plinkoid);
	if(lpos!=-1) {
		if(typeof(pParms)!='undefined') {
			lparms = pParms;
		}
		else {
			lparms = CfLinkMenu.link_parms[lpos];
		}
		
		if(typeof(pFormname)!='undefined') {
			lformname = pFormname;
		}
		else {
			lformname = CfLinkMenu.formnames[lpos];
		}
		CFExecuteLink(CfLinkMenu.pages[lpos], CfLinkMenu.functions[lpos] , CfLinkMenu.link_ids[lpos], lparms, lformname);
	}
}

function CFExecuteLink(pPage, pPageOid, pLinkOid, pLinkParm, pFormName) 
{

	var re = new RegExp(":[A-Za-z][A-Za-z0-9_]*","");
	var lreplace ;
	var lvLinkVars;
	var lURL;
	var lNewUrlAddress;
	var lvActualVal = new Array();
	var lvLinkVars = new Array();
	var lvAssoc = new Array(); 
	var lNumVar, lIndex, lFormalParam, lActualParam;
	var lFormName ;
	var lCurrentValue ;
	var lIsLookUp = false;
	var lParmExists = false ;
	var lComputedValue ;
	var lSourceParam;
	var paramList;
	var continue_loop = true;
	var rightParm ;
	var lUserParm ;

	
	lNewUrlAddress = "";
	lFormName = pFormName ;
	
	if (CfLinkMenu.enableBeforeLink) {
		CfLinkMenu.DisableLinkExecution = false;
		CFUserBeforeLink(pLinkOid) ;
		if(CfLinkMenu.DisableLinkExecution) {
			return ;
		}
	}
	
	if (CfLinkMenu.parm != "") {
		lParmExists = true;
		lvActualParm = CfLinkMenu.parm.split("|");
		
		for (lIndex = 0; lIndex < lvActualParm.length; lIndex++) {
			lvSingleParm = lvActualParm[lIndex].split("=");
			lvActualVal[lvSingleParm[0].toUpperCase()] = lvSingleParm[1];
		}	
	}
	
	CfLinkMenu.currentLinkOid = pLinkOid;
	CfLinkMenu.DisableLinkExecution = false;
	
	lUserParm = CFUserGetLinkParm() ;
	
	if(CfLinkMenu.DisableLinkExecution) {
		return ;
	}
	
	if (typeof(lUserParm) != 'undefined') {
		if (lUserParm != "") {
			if (pLinkParm != "") {
				pLinkParm = "%26" + pLinkParm  ;
			}
			pLinkParm = lUserParm + pLinkParm ;
		}
	}
	
	if (CfLinkMenu.addedparm == "" ) {
		if (pLinkParm != "") {
			pLinkParm = unescape(pLinkParm)
			lNewUrlAddress = unescape(pLinkParm) ;
			rightParm = pLinkParm ;
		}
	} else {
		if (CfLinkMenu.addedparm != "" ) {
			pLinkParm = unescape(CfLinkMenu.addedparm)
			lNewUrlAddress = unescape(CfLinkMenu.addedparm) ;
			rightParm = CfLinkMenu.addedparm ;
		}	
	}	
	
	if (rightParm != "") {
		do {
			paramList = re.exec(rightParm);
			if (paramList != null) {
				//rightParm = RegExp.rightContext ;
				rightParm = rightParm.substr(paramList.index + paramList[0].length);
						
				//alert(paramList[0]);
				lCurrentValue = "" ;
						
				if (paramList[0].length > 0) {
					if (paramList[0].charAt(0) == ":" && paramList[0].length > 1) {
						lSourceParam = paramList[0].substr(1);
					}
				}
						
				if (lParmExists) {
					if (lSourceParam != "") {
						if (typeof(lvActualVal[lSourceParam.toUpperCase()]) != 'undefined') {
							lCurrentValue = lvActualVal[lSourceParam.toUpperCase()];
							lComputedValue = true ;
						} else {
							lComputedValue = false ;
						}
								
					}
				}
						
				if (!lComputedValue) {
							
					if (lFormName != "") { 
						if (lSourceParam != "") {
							try {
								eval("lCurrentValue = document." + lFormName + "." + lSourceParam + ".value") ;
							} catch (e) {
								lCurrentValue = "" ;
							}
							
						} else {
							lCurrentValue = "" ;
						}
					}
				}
						
				lreplace = "";
				lreplace = new RegExp(paramList[0],"g");
				lCurrentValue = lCurrentValue.replace(/\&/g, "%26");
				lNewUrlAddress = lNewUrlAddress.replace(lreplace, lCurrentValue);
						
			} else continue_loop = false ;
		} while (continue_loop) ;
	
	}
		
	if (pPageOid != "") {
		if (lNewUrlAddress != "") {
			lNewUrlAddress += '&';
		}
		lNewUrlAddress += "FUNID" + "=" + pPageOid + "" ;
	}
	
	if (pLinkOid != "") {
		if (lNewUrlAddress != "") {
			lNewUrlAddress += '&';
		}
		lNewUrlAddress += "LINKID" + "=" + pLinkOid + "" ;
	}
	
	
	if (pPage.indexOf("?") > 0 ) {
		lURL = pPage + "&" + lNewUrlAddress;
	}
	else {
		lURL = pPage + "?" + lNewUrlAddress;
	}

/*
	if (CfLinkMenu.addedparm != "" ) {
		if (lURL.indexOf("?") > 0 ) {
			lURL += "&";
		}
		else {
			lURL += "?";
		}
		lURL += CfLinkMenu.addedparm;
	}
*/	
	lURL = lURL.replace(/&amp;/g, "&");
	lURL = lURL.replace(/\ /g, "%20");
	
	var lCFOpenExt = 'CFOPENEXT=1';
	if (lURL.indexOf(lCFOpenExt) > 0 ) 
	{
		CFOpenExtLink(lURL);
	} 
	else 
	{		
		CFCloseExtLinks();	
		CFOpenLink(lURL);
	}
		
}


function CFCloseExtLinks() 
{
	var i;
	var win;

	try 
	{
		for (i in CFExtFunctionHandles)
		{
			try 
			{
				win = CFExtFunctionHandles[i];
				if (win && !win.closed) win.close();
			} 
			catch (e) {}
		}
	} 
	catch (e) {}	
}

function CFOpenExtLink(l)
{
	var lwin ;
	var ltarget = '';
	var lExtTargetPos;
	var lExtTargetEndChar;
	
	var lCFOpenExt = 'CFOPENEXT=1';
	var lCFExtTarget = 'CFEXTTARGET=';
		
	lExtTargetPos = l.indexOf(lCFExtTarget);
	if (lExtTargetPos > 0 )
	{
		lExtTargetPos += lCFExtTarget.length;						
		lExtTargetEndChar = l.indexOf("&", lExtTargetPos);
		if (lExtTargetEndChar > 0) 
		{				
			ltarget = l.substring(lExtTargetPos, lExtTargetEndChar);
		} 
		else 
		{
			ltarget = l.substr(lExtTargetPos);
		}		
	}
	lwin = window.open(l, ltarget, "WIDTH=530,HEIGHT=550,toolbar=yes,scrollbars=yes,menubar=yes,resizable=yes,status=yes");
	lwin.focus();
	
	if (ltarget != '') 
	{
		CFExtFunctionHandles[ltarget] = lwin;
	}
		
}

function CFOpenLink(l)
{
	window.location.href = l;
}

function CFExecuteLinkByNumber(pNumber, pActualParm, pAddedParm) 
{

	if (typeof(pNumber) == 'undefined') {
		pNumber = 0;
	}
		
	if (typeof(pActualParm) == 'undefined') {
		pActualParm = '';
	}

	if (typeof(pAddedParm) == 'undefined') {
		pAddedParm = '';
	}


	CfLinkMenu.parm = pActualParm;	
	CfLinkMenu.addedparm = pAddedParm;

	if (typeof(CfLinkMenu.actions[pNumber]) != 'undefined') {
		eval(CfLinkMenu.actions[pNumber]);
    }

    CfLinkMenu.parm = '';
    CfLinkMenu.addedparm = '';
	
}

