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.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;
}

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) {
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;
    
    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) {
				window.frames.top.frames['cfmonitor'].cfaddlink('cflink'+lpos,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) {
				//alert('cflink'+lpos);
				window.frames.top.frames['cfmonitor'].cfremovelink('cflink'+lpos);
			}	
		}
	}
}


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 ;
			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 ;
							}
						}
					}
					
					if (!lComputedValue) {
						if (lFormName != "") { 
							if (lSourceParam != "") {
								eval("lCurrentValue = document." + lFormName + "." + lSourceParam + ".value") ;
							} 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");
	CFOpenLink(lURL);	
}
function CFOpenLink(l) {
	var lwin ;
	if (l.indexOf("CFOPENEXT=1") > 0 ) {
		lwin = window.open(l, "", "WIDTH=530,HEIGHT=550,toolbar=yes,scrollbars=yes,menubar=yes,resizable=yes,status=yes");
		lwin.focus();
	} else {
		window.location.href = 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]);
	}
}

