var fldCalledFrom //used for focus() after exit
var eleIDName //used to identify the actual field that will the the person_ID value


function c360BrowseSetup(flag,master_ID,id,pre,paramStr,isPopup) {
 
        id = id==null?" ":id 
        paramStr = paramStr==null?"":paramStr //any additional parameters in the format 1:value;, where 1 is the param ID number, could also be a label
        //if paramStr is not empty, then the ID IS IGNORED mpal 9/13/08, 9/3/09 probably orphaned concept mpal
        var frm= pre + "Frm"
        var myAction = pre + "Show"
        var dView
        var d
        var myBody
        var addInnerHTML
        var newRow
        var str
        var aryHTMLFlags = ['show','open','next','prev','first','last','all']
        var mimeType = arrayFind(aryHTMLFlags,flag)?"text/html":"text/json"
        var spanButtonSave
        var firstField
        var objCells, cn, rtnvars
        var afterDelete = ""
        var divName = pre
    
        //target div named pre + "Div"
        var addMode = id==0
 
 		if (flag.toLowerCase()=="addauto") {e(pre + "AddAuto").value="Y";flag="add"} 
		else if (flag.toLowerCase()=="add" && e(pre + "AddAuto")) {e(pre + "AddAuto").value= ""} //6/2/2010 mpal test for existence, retrofit
   
         //input/checkbox/radiobutton values from calling HeaderFrm
        //get params here because embedded browse windows get wiped below (losing param values) mpal 3/22/09
 
             if (e(pre + "HeaderFrm")) { 
 
            if (paramStr != "" && paramStr.substr(paramStr.length - 1,1) != ";") {paramStr += ";"} //be sure passed in param end with semicolon
            var frmObj = e(pre+"HeaderFrm").elements 
            for (i=0;i<frmObj.length;i++) {
            paramStr += frmObj[i].id + ":" + frmObj[i].value + ";" //combine with passed in parameters
 
          }}  
 
		 //mpal 9/3/09 check if name for shared div is passed in
		 var aParam = paramStr.split(";")
		 var aTemp
		 for (var i=0;i<aParam.length;i++) {
		    aTemp = aParam[i].split(":")
		     if (aTemp[0].toLowerCase() == "divselect") {divName = aTemp[1].toLowerCase();break}
		 }
 
        if (flag=="del") {  
            if (!confirm("Delete this record?")){return false}
            else {if (e(pre + "afterDelete" ) && e(pre + "afterDelete" ).value != "") { afterDelete = e(pre + "afterDelete" ).value }}
        } //delete
        else if (flag=="save") { 
        	if (e(pre + "afterSave" ) && e(pre + "afterSave" ).value != "") { 
       	 afterSave = e(pre + "afterSave" ).value
         } 
        }
        else if (flag=="show" || flag=="open") { 
            var msgStr = "<span style='font-style:italic;font-size: smaller;'>  Loading..</span>." 
            if (isPopup == "y" ) {  
                c360_makeLoading(e(divName + "Div"), msgStr)
            } else {
        
       			if (pre != "promptdev") { //kludge for prompdev. should generalize 3/4/09
	                //if (!e(pre + "Div")) {alert("Error 345: C360BrowseSetup missing Div: " + pre + "Div")
	                if (!e(divName + "Div")) {alert("Error 345: C360BrowseSetup missing Div: " + divName + "Div")
	                } else {
	                //e(pre + "Div").innerHTML = msgStr
	                e(divName + "Div").innerHTML = msgStr
                }
        		}
            }

        }
        else if ((flag=="edit" || flag=="add") && e("isEdit") && e("isEdit").value == "y") {alert("Please save selected record before editing another record.");return false}
        else if (arrayFind(aryHTMLFlags,flag)) { 
            if (e("span_" + pre + "RecMoveMsgTop")) { e("span_" + pre + "RecMoveMsgTop").innerHTML = "<i>Loading...</i>"} 
            if (e("span_" + pre + "RecMoveMsgBottom")) { e("span_" + pre + "RecMoveMsgBottom").innerHTML = "<i>Loading...</i>"} 
        }
 
        if (e("span_" + pre + "_buttons" + id)) { 
             spanButtonSave = e("span_" + pre + "_buttons" + id).innerHTML //save here. Restore if Save function fails below
            e("span_" + pre + "_buttons"   + id).innerHTML =  "<span style='font-family:times;font-size:9px;font-style:italic'> Working...</span>"}
 
            var bindArgs = {
            url: "ajaxForm.cfm",
            content: {ajaxSubform: "_c360_browsedef2_setup.cfm", master_ID: master_ID, flag: flag, item_ID: id, pre:pre,paramStr:paramStr },
            method: "post",
            mimetype: mimeType, //html for show
            formNode: frm,
           // error: fncDojoBindError,
		    error: function(type, data, evt){ 
		    
  
			  if (data.message.substr(0, 49) == "XMLHttpTransport Error: 500 Internal Server Error") { 
			  	//2/8/10 mpal throwing transport ERROR 500 when > 2 browse windows open at same time 
			  	//skip
				e(divName + "Div").innerHTML = data.message
			} else if (data.message.substr(0, 16) == "XMLHttpTransport") { 
			 	alert("C360BrowseSetup: " + data.message)
				 //console.log(evt)
			  } else { 
					alert(data.message)
					//console.log(evt)
       			 	alert("An error occurred: " + data + " " + type + " " + evt); 
				}      
           	 },
            load: function(type, data, evt){  
 
			try { //skip if OK
			 if (data.substr(0,10) == "ERROR 410:") {c360_makeAlert(data + "<br /><br />PRE: " + pre + "<br />");return false} //query error mpal 6/29/10
 			} catch(ex) { }
 
   			 try {
          if (flag=="add" ) {  
 
                    d = data
 
       				//if add returns error (such as master_id_req), display and return
        			if (data.errcode && data.errcode!="") { 
               			 c360_makeAlert(data.errcode + ": " + data.msg + "[c360BrowseSetup]") 
            			return false
        			}
        
                    var rowCnt = 0
                    var c = d.cells  
                    var objCells 
                    var fn
                    var newCell
                    var tempName
                    var fnList = c.fieldnames.split(",")
					var nextInsertRow = 0
 
					//mpal 4/12/10 can pass in param addrowindex:Number to force position of next row, see _teachingGuestLect.cfm
 					for (var i=0;i<aParam.length;i++) {
		    			aTemp = aParam[i].split(":")
		     			if (aTemp[0].toLowerCase() == "addrowindex") {nextInsertRow = parseInt(aTemp[1]);break}
		 			}
 
 try {
 
                           newRow = e("tbody" + pre).insertRow(nextInsertRow)
 
                    newRow.id = "row" + d.item_id + "_" +  pre + "_0" //seq recs with multiple rows
    
                    cellNowOn = 0 //position in current row, reset if new row
                    var myHiddenInnerHTML = ""
                    var myHiddenFN = ""
                    var isFirstField=false
                    var firstField = ""
           } catch(ex) {alert(ex)}
 
                    for (var i=0;i<fnList.length;i++) {
                        fn = fnList[i].toLowerCase() 
                        if (fn == '<tr>') {
                            rowCnt++
                            cellNowOn = 0
                            newRow = e("tbody" + pre).insertRow(rowCnt)
                            newRow.id = "row" + d.item_id + "_" + pre +  "_" + rowCnt
                        } else if (fn=="") {
                            //skip
                        } else {
                            newCell = newRow.insertCell(cellNowOn)
                            if (fn!="<td>") { // if td, no innerhtml content
                                newCell.id = "cell_" + pre + "_" + fn
                 
                                try{ newCell.innerHTML = c[fn].innerhtml 
                                    newCell.colSpan = c[fn].colspan 
                                    newCell.style.textAlign = c[fn].style.textalign 
                                    newCell.style.verticalAlign="top" //force top allows help text under field 2/27/mpal
                                    newCell.className = c[fn].classname 
                                } catch(ex) { }  //skip nulls 
                    
                            } else {newCell.innerHTML=" " }
                            cellNowOn++ //position in current row
        
                        } //if tr
                    } //for each field
                    //push in hiddenFields
              
                    if (c[c.hiddenname] != "") {e("cell_" + pre + "_" + c.buttonsname).innerHTML += c[c.hiddenname]}
                        //focus on first editable text field 
                    firstField = false
                    objCells = e("row0" + "_" + pre + "_0").cells //get existing cells
                    //find first child node in cell that is not hidden. Input ele might have a name different than the cell name
                    try{
                    for (i=0;i<objCells.length;i++) {
                        cn = objCells[i].childNodes
                        for (j=0;j<cn.length;j++) {
                            if (cn[j].id != null ) {
                                tempField = cn[j].id.split("+")[0] //split for concantenated field names like areacode+phone
                                if (e(tempField).type != "hidden") {e(tempField).focus();firstField=true;break;}
                            }
                        }
                        if (firstField) { break}
                    }
                    } catch(ex) { }
     
                    } //add
      
          else if (arrayFind(aryHTMLFlags,flag)){ //SHOW all records in ro mode, refresh after del , show/next/prev/first/last/all
                    var afterShow = "" 
 //showConsole(data);alert(data)
                    if (isPopup=="y") {  
  
                        c360_makeLoading(divName + "Div",data,0) 
                    } else {
                  
                        if (pre == "promptdev") { //3/4/09 mpal should generalize for popups
                            c360_makePopup("",data,"800px") 
                        } else { 
                       e(divName + "Div").innerHTML =  data 
                        }
 
   
                        //show message if no match 
          
                        if (e("tbody" + pre).innerHTML.length<20 && flag != "open") {
                        try {
                        e("tbody" + pre).innerHTML="<tr><td colspan=30>&nbsp;&nbsp;No matches for this criteria</td></tr>"
                        } catch(ex) {} //mpal 2/24/09 can't write to tbody.innerHTML in IE. Kludge (just skip). Should fix
                            
                        }
          
                    } //ispopup
 
                    //highlight on click
 
 	var mytbody = e("tbody" + pre)
 	var rows = mytbody.getElementsByTagName("tr")
  
 	for (var i = 0; i < rows.length; i++) {
 	
 		rows[i].oldClassName = rows[i].className
 		
 		rows[i].onmouseover = function(){
 		
 			var xrows = e("tbody" + pre).getElementsByTagName("tr")
 			
 			for (var x = 0; x < xrows.length; x++) {
 				xrows[x].className = xrows[x].oldClassName
 			} //clear highlight from all visible rows
				if (this.className.indexOf("highlight") != -1) {
					this.className = this.oldClassName
				}
				else {
					var rowID = this.id.substr(0, this.id.indexOf(pre + "_")) //3/4/09 mpal row id format row###_pre_incr; strip row name without increment 
					for (var j = 0; j < 10; j++) {
						//highlight all rows for this record, id format row#####_0, row#####_1, etc
						
						try {
							addClass(e(rowID + pre + "_" + j), "highlight")
						} 
						catch (ex) {
							break;
						}
					}
				}
			}
			
		}
	                  
                    if (e(pre+"AfterShow")) {afterShow = e(pre+"AfterShow").value} 
                    try{if (afterShow != "") {eval(afterShow)}} catch(ex) {alert("Error 331: browseOpen afterShow: " + ex)} 
                 
                    c360BrowseFmtRunningHead(pre) 
                    
          } else if (flag=="save" || flag=="nosave") { //after save, push readonly values into existing cells
    				//NOTE: 12/16/09 mpal If this is Save and more than 1 rec returned, then myID in cfc GET is not set
 
                	if (data==false) {alert("Error: 200 - No record returned in C360BrowseSetup: Save/ID " + pre + " rec " + id );}
       					//mpal 5/27/10 check for error code. would always be fatal
                     d = data  
  //console.log(d)				
                    	if (d.rtnvars) {var rtnvars = d.rtnvars} //3/31/09 mpal d.rtnvars is elements from structRtn initialized in object Save function 
					  		if ( d.validationmsg && d.validationmsg != "") { //11/20/2008 retrofit for old Save action 
                        e("span_" + pre + "_buttons" + id).innerHTML = spanButtonSave
                        c360_makeAlert(d.validationmsg) 
                  	} else if (d.errcode && d.errcode != "") {  
                        e("span_" + pre + "_buttons" + id).innerHTML = spanButtonSave
						      if (d.msg && d.msg != "") {
						 	   	c360_makeAlert(d.errcode + " " + d.msg)
								}else {
									alert("Error 591: " + d.errcode); 
								}
						} else if (d.recordcount > 1) { 
 
                        e("span_" + pre + "_buttons" + id).innerHTML = spanButtonSave
                        c360_makeAlert("More than one record returned after Save. Check c360_browse_" + pre + " Get/myID")
 
                    } else {  

        //mpal 12/18/08 if GET call after Save fails, this will return with no fields.  
            if (data.cells.fieldnames=="") {alert("Error: 206 - No fields returned. Check GET function for " + pre + ", Item_ID: " + data.item_id);return false;}
                    //if Add, cells and rows will have suffix 0. replace with new id
                    var afterSave = "" 
                    if (e(pre + "afterSave")) {afterSave = e(pre + "afterSave").value} //get afterSave function before cells updated

                    var c = d.cells 
                    var fnList = c.fieldnames.split(",")

                    for (var i=0;i<10;i++) { // rename row from row0_0 to item_ID. loop for multi row records , assume rec won't have > 10 internal rows
                        try{e("row0_" + pre + "_" + i).id = "row"  + d.item_id + "_" + pre + "_" + i} catch(ex) { break;} } 
            
                    if (e("span_" + pre + "_buttons0")){//replace cell ID (with 0 suffix) with new item_ID if this is new rec
     
                        for (var i=0;i<fnList.length;i++) {
        
                            if (fnList[i] != "" && fnList[i].substr(0,1) != "<") //skip formatting codes <tr><td> 
                            {           
                
                            if (e("cell_" + pre + "_" + fnList[i].toLowerCase().replace(d.item_id,0))) {
                                //rename cell
                                 
                                e("cell_" + pre + "_" + fnList[i].toLowerCase().replace(d.item_id,0)).id = "cell_" + pre + "_" + fnList[i].toLowerCase()
                                //rename cell
                            } else {
                                
                                //if cell not exist, then this is hidden field; rename its id from field name to field name plus id number mpal 2/23/09
        
                                //mpal 3/18/09 NAMING CONVENTION: hidden fields are in cell called cell_#pre#_buttons0.
                                //if this field not have that as parent, don't replace (it's somewhere else on the form)
		/*
 console.log(fnList)
		 console.log( "fnlist:" + i + " " +   e(fnList[i]))
*/
                                if ( e(fnList[i].toLowerCase().replace(d.item_id,"")).parentNode.id == "cell_" + pre + "_buttons0") { 
                                	e(fnList[i].toLowerCase().replace(d.item_id,"")).id = fnList[i].toLowerCase()
											}
                                
                            }
                    
                             } //if not a formatting code
                             
                        } //for
                 
                 
                        e("cell_" + pre + "_buttons0").innerHTML='<span id="span_' + pre + '_buttons'  + d.item_id + '"></span>' 
                        e("cell_" + pre + "_buttons0").id = "cell_" + pre + "_buttons" + d.item_id
             
                //mpal 12/17/08 clear button cell after record save. It will have hidden edit fields
                         
                    } //we are updating a new saved record. Cell suffix is zero (0) 
                    for (var i=0;i<fnList.length;i++) { 
     
                        try {
                        if ("cell_" + pre + "_" + fnList[i].toLowerCase()) {

                        e("cell_" + pre + "_" + fnList[i].toLowerCase()).innerHTML = c[fnList[i].toLowerCase()]}} catch(ex) {} //skip blank recs
                     }  
                    try { e("span_" + pre + "_" + c.hiddenname).innerHTML = " "}  catch(ex){} //clear hidden fields, edit only, error ok, suppress msg
 
                    try{e("cell_" + pre + "_buttons" + d.item_id).innerHTML='<span id="span_' + pre + '_buttons' + d.item_id + '"></span>' } 
                    catch(ex) {alert("ERROR: 411 - Make sure Get function returning correct item_ID value for cell: " + ex + "cell_" + pre + "_buttons"  + d.item_id)}
                    try {if (c.buttonsname  != "") {e("span_" + pre + "_" + c.buttonsname).innerHTML = c[c.buttonsname]}} catch(ex){alert("buttons: " + ex)}
                    if (e("isEdit")) {e("isEdit").value = "n"}
                    } //end if save OK
     
                    c360BrowseFmtRunningHead(pre)
      
        
                    if (afterSave != "") {eval(afterSave)} 
					//mpal 4/20/10 if in autoadd mode, stay in autoadd mode
                    var myAddMode = pre + "Show('addauto','" + master_ID + "')"
                    if (e(pre + "AddAuto")) {

                    if (addMode && e(pre + "AddAuto").value.toUpperCase() == "Y") {eval(myAddMode)} //addAuto:Y setting, add new row automatically during Add
                    }
 
       } else if (flag=="edit") { 
                    //push into existing cells, format cell_fieldName_#UniqueID#
 

 try {
            var d = data 
            var c = d.cells 
            var fnList = c.fieldnames.split(",")
  
            var isFirstField = false
            var firstField = ""
            var i
 				if (d.item_id=="") {alert("Error 557: No item_id. Check id value in calling function.")}
            var objCells = e("row" + d.item_id + "_" + pre + "_0").cells //get existing cells
 
            //4/23/09 mpal check for rows hidden because no current value. Show all hidden rows (up to row 9)
            for (i = 1; i < 10; i++) {
                if (e("row" + d.item_id + "_" + pre + "_" + i)) {
                    e("row" + d.item_id + "_" + pre + "_" + i).style.display = "";
                }
                else {
                    break;
                }
            }
 
            var tempName
            for (i = 0; i < fnList.length; i++) {
                fn = fnList[i].toLowerCase()
				 
                if (fn == '<tr>' || fn == "<td>") {
                //formatting codes/skip in edit mode
                }
                else {
                    newCell = e("cell_" + pre + "_" + fn) //use existing cells
                    try {  
                        newCell.innerHTML = c[fn].innerhtml
                        newCell.colSpan = c[fn].colspan
                        //11/10/2008 don't change td alignment during edit.
                        //newCell.style.textAlign = c[fn].style.textalign 
			 
			 
                        newCell.className = c[fn].classname
                        eleWidth = newCell.offsetWidth * .95 
 						//e(fn ).style.width = eleWidth + "px" 
                        e(fn.replace(d.item_id, "")).style.width = eleWidth + "px"  
                    } 
                    catch (ex) { /*console.log(ex + ": " + fn */ 
                    } //skip nulls
                } //if tr
            } //for each field
  
            for (i = 0; i < 9; i++) {
                try {
                    e("row" + d.item_id + "_" + pre + "_" + i).className = "highlight"
                } 
                catch (ex) {
                    break;
                }
            }
            //highlight all rows in record
 
            if (c[c.hiddenname] != "") {
                e("cell_" + pre + "_" + c.buttonsname).innerHTML += c[c.hiddenname]
            }
            
            if (c.datectlfieldnames != "") {
                var calFn = c.datectlfieldnames.split(",")
                for (i = 0; i < calFn.length; i++) {
                    try {
                        makeCalendar(calFn[i])
                    } 
                    catch (ex) {
                        alert(ex.message)
                    }
                }
            }
        
            //focus on first editable text field. must be last process or IE moves cursor to top of browser
            try {
                for (i = 0; i < objCells.length; i++) {
    
                    tempName = objCells[i].id.replace(d.item_id, "").replace("cell_" + pre + "_", "") //get fieldname
                    tempName = tempName.split("+")[0] //split for concantenated field names like areacode+phone
                    e(tempName).select()
                    if (e(tempName).type != "hidden") {
                        e(tempName).focus();
                        break;
                    }
                }
            } 
            catch (ex) {/*console.log(tempName + ": " + ex)*/
            }
        } catch(ex) {alert("ERROR 552: C360_browse_fmt - Edit: " + ex)}
		
	 
                } else if (flag=="del") {
                    //nothing
                    
                    if (data.errcode && data.errcode != "") {   
                    e("span_" + pre + "_buttons"  + id).innerHTML = spanButtonSave
                         
                    c360_makeAlert(data.msg) }
                    else { //don't delete if error
                    for (var i=0;i<10;i++) { //delete first visible row, which will be the Add row, loop for multi row records
                        myRow = "row" + id + "_" + pre + "_" + i
        //alert("row: " + myRow)
                        if (e(myRow)) {
                             myIndex = e(myRow).rowIndex -2 //NOTE: 11/20/2008 first row is RecMove counter but not always visible, so decrement 2 
                            e("tbody" + pre).deleteRow(myIndex) 
                        } else {break}
                    }
          
                    c360BrowseFmtRunningHead(pre)
                    if (afterDelete != "") {eval(afterDelete)}
                    }
                }
} catch(ex) { alert("Error 550: c360BrowseSetup: " + flag + "/" + pre + "  " + ex.message)}   
         
            } //load
            
            } //bindargs
        dojo.io.bind(bindArgs);
	 
        }
        
        
    function c360BrowseFmtRunningHead(pre) {
            //12/3/08 mpal needs to allow for multi total fields in header
            var cnLabel = 0
            var cnTableName = 2
            var cnFieldName = 3
            var cnKeyFieldName = 4
            var cnMaster_ID = 5
 try {
            if (!e(pre + "runningTotal") || e(pre + "runningTotal").value == ""){return}
            var setupStr = e(pre + "runningTotal").value
            var myLabel = ""
            var bindArgs = {
                url: "c360_fmt.cfc",
                content: {method: "runningTotal", setupStr:setupStr},
                method: "get",          
                mimetype: "text/json",
                error: fncDojoBindError,
                load: function(type, data, evt){    
				
                    if (e(pre + "HeaderSpan")) {e(pre + "HeaderSpan").innerHTML= '<span style="margin-right:12px">' + data.mylabel + ": " + formatDec2(data.mytotal)+'</span>'}
				
                }
            }
            dojo.io.bind(bindArgs);
  } catch(ex) {alert("Running Total: " + ex)}      
        }
 
function nameQuickLkup(category, ele, eleID, lkupAdd) { //eleID is the id name of the field that will get the person_ID
	//for new name, set this value to 0, then new name will be created when form saved. Validation will accept 0 as a valid entry
	//2/20/09 mpal lkupAdd revised: N=Name, P=Phones/Email, H=Home Address, B=Business Address: show fields based on codes
	//parse into firstName, lastName
	//if ele is null, close view
	//8/18/11 mpal if zero passed in as category, it skips Selectg
	category = category==null?"":category
	if (!e("div_nameQuickLkup")) {alert("Missing: div_nameQuickLkup");return;}
	var myDiv = e("div_nameQuickLkup")
 
	if (ele==null ) {//clear popup 6/3/11
 	try {
			if (category != "select" && category != 0 ) { //if called after new name saved (category=select), don't clear target field
			//otherwise, clear target field for another attempt
				try {
				targetField = e("nameQuickFieldID").value.toLowerCase()
				e(targetField).value = "";
				e(targetField).focus();
				} catch(ex) {}
				
 			}
 			
 	} catch(ex){alert(ex)} 
			myDiv.style.display="none";myDiv.innerHTML = "";
			myDiv.style.height="";myDiv.style.overflow="auto";
			return 
	
	}
	
 
 	var lkupAdd = lkupAdd==null?"":lkupAdd.toLowerCase() //allow add when in lookup menu 2/4/09
 	if (lkupAdd=="y") {lkupAdd = "n"} //retrofit for Y code to allow add. Assume add Name only
	var ln="", fn="", a, delim, msg
	var regExp = / /g
 	var str = ""
	var s = ele.value
	var fieldList
	var firstCol
	var eleName = ele.id
	var firstRec, i
	var tempVal
	fldCalledFrom = ele.name //global
	eleIDName = eleID //globalget
	if (s=="") {return}
	msg=s
	var str = '<span style="font-style:italic">Loading...</span>'
	c360_makeLoading(myDiv.id, str, "200px")
	
	if (s.indexOf(",")>=0) { //embedded comma: lastName, firstName
		a = s.split(",")
		if (a.length==1) {ln = a[0].replace(regExp,"");msg="Last name: " + ln}
		else if (a.length==2) {ln =  a[0].replace(regExp,"");fn= a[1].replace(regExp,"");msg="Last name: " + ln + "\n\nFirst name: " + fn}
		else {msg = "lastName, firstName: Entry unclear, Too many commas"}
	} else {
		a = s.split(" ")
		if (a.length==1) {ln =  a[0].replace(regExp,"");msg="Last name: " + ln}
		else if (a.length==2) {fn =  a[0].replace(regExp,"");ln= a[1].replace(regExp,"");msg="First name: " + fn + "\n\nLast name: " + ln}
		else {msg = "lastName firstName: Entry unclear, Too many spaces"}
	}
	
	//if no comma, assume first name SPACE lastName
		var bindArgs = {
				url: "ajaxForm.cfm",
				content: { action: category, ajaxSubform: "_nameQuickLkup.cfm", ln:ln,fn:fn,fieldName:eleID}, //name of field on form
				method: "post",			
				mimetype: "text/json",
				error: fncDojoBindError,
				load: function(type, data, evt){	
try {				
					var d = data.data
					 // console.log(data)
					//query field format:
					//col_##_fieldname ::= visible columns
	 
					str = ""
					str += '<div class="pageHeaderDef" style="width:580px">'
					str += '<a href="javascript:void(0)" class="buttonDef" title="Move window to the right" onClick="nameQuickLkupRight()" style="float:right">&gt;</a>'
					str += 'Matching Names: ' + data.recordcount + '&nbsp;&nbsp;'
					str += ' <a href="javascript:void(0)" class="buttonDef" onClick="nameQuickLkup()">Exit</a>'
					str += '<input type="hidden" name="selectfieldlist" id="selectfieldlist" value="' + data.columnlist.toLowerCase() + '">'
					str += '<input type="hidden" name="nameQuickFieldID" id="nameQuickFieldID" value="' + ele.name + '"></div>' //calling field, use in select for focus
					str += "<table class='dataFormBrowse' id='tblNameLkup' style='width:600px'>"
	
			if (data.recordcount>0) {
					str += "<thead>"
					str += '<tr><td colspan="20" style="height: 25px"> Click the Name you would like to select.</td></tr>'
					//loop through col_## fields to get headers 10/15/08 mpal
					fieldList = data.columnlist.split(",")
					str += '<tr>'
					for (i=0;i<fieldList.length;i++) {
						 
						if (fieldList[i].substr(0,4)=="COL_") {str+='<td>' + fieldList[i].substr(7) + '</td>'}
					}
					str += '</tr></thead>'
					 firstRec = 0
			
					for (i=0;i<data.recordcount;i++) {//once per matching rec
						firstCol= true //flag to put link around value of first visible col
						if (firstRec==0) {firstRec = "lkup" + d.PK[i];} //get iD of first rec for focus
						str += "<tr>"
						for (var j=0;j<fieldList.length;j++) { //once per field
							if (fieldList[j].substr(0,4)=="COL_") { //one per visible col
								if (firstCol) {
									str += "<td><a href='javascript:void(0)' id='lkup" + d.PK[i] + "' class='default' onClick='nameQuickLkupSelect(" + d.PK[i] + ")'>" 
									+ d[fieldList[j]][i] + "</a></td>"
									firstCol = false //set flag so this just hits first visible col
								} else {
									str += "<td>" + d[fieldList[j]][i] 
								} 	
								str += "</td>"
							} else {//if not visible
								fieldName = fieldList[j].toLowerCase()
								//if character field made up of all numbers passed in, use ^ as prefix in calling query, parse out here mpal 10/21/09 kludge
								 tempVal = d[fieldList[j]][i]
								 
								 // 10/9/09 mpal if number, throws error; just skip
								 try {
								 	if (tempVal.substr(0,1) == "^") {tempVal = tempVal.substr(1,tempVal.length)}
								 } catch(ex) { }
								 
								str += '<input type="hidden" name="' + fieldName + '" id="' + fieldName + d.PK[i] + '" value="' + tempVal + '">'
							}
						} //field
							str += "</tr>"
						
					} //rec
					 str += '<tr><td   colspan="20"> <input type="hidden" name="quickEleName" id="quickEleName">' 
					 str += '<a href="javascript:void(0)" class="buttonDef" onClick="nameQuickLkup()">Exit</a></td></tr>'
					str += '<tr id="rowNameLkupMsg"><td class="" style="height: 30px" colspan="20">'
	 
	  				//if (lkupAdd.indexOf("n") >= 0 || lkupAdd=="") {
					if (lkupAdd.indexOf("n")== -1 || lkupAdd=="") { //"n" means allow add of name
						str += 'No matches. Click <a href="javascript:void(0)" class="buttonDef" onclick="popupNamesDefault()" title="Add New Name">[New]</a>'
						str += 'to add the name to the Address Book and search again.'
						
					}else {
 
						str += 'If there is no match, review the First and Last Name below, then click [Save]<br />to add this as a NEW name to the Address Book'
						
						str +='</td>'
						str +='</tr>'
					
					}
					str += "</td></tr>"
				} else { //data recordcount 0
					str += '<tr><td   colspan="20"> <input type="hidden" name="quickEleName" id="quickEleName">' 
					str += '<a href="javascript:void(0)" class="buttonDef" onClick="nameQuickLkup()">Exit</a></td></tr>'
					str += '<tr id="rowNameLkupMsg"><td class="" style="height: 30px" colspan="20">'
 
					if (lkupAdd.indexOf("n") >=0) {
						str += 'No matches. Review First and Last Name below, then click [Save] to add this as a NEW name<br /> or [Exit] and try another search.'
					} else {
 
						str += 'No matches. Click <a href="javascript:void(0)" class="buttonDef" onclick="popupNamesDefault()" title="Add New Name">[New]</a>'
						str += ' to add the name to the Address Book and search again.'
					}
					str += "</td></tr>"
				}
					if (lkupAdd.indexOf("n") >=0) {
						str += '<tr><td colspan="20"><span class="rhRO">First name</span> '
						str += '<input type="text" name="newFN" id="newFN" style="width:75px"> '
						str += '<span class="rhRO">Last name</span>  <input type="text" name="newLN" id="newLN" style="width:120px"> '
						
						str +='<a href="javascript:void(0)" class="buttonDef" onClick="nameQuickNew()">Save</a> As New Name'
						str +='</td>'
						str +='</tr>'
					}
					str += "</table>"
	} catch(ex) {alert(ex)}		
					try {
					c360_makeLoading(myDiv.id)
					c360_makeLoading(myDiv.id, str, "600px", 5)
					
					if (e("quickEleName")) {
			 		e("quickEleName").value = eleName //put in calling ele name so we can push value back into it
					} //hidden if no add
			 		var callingEle = e(eleName) 
			 		
					if (firstRec!=null) {e(firstRec).focus()}
					else if (e("newFN")) {
					 e("newFN").value = fn.substr(0,1).toUpperCase() + fn.substr(1,fn.length)
					 e("newLN").value = ln.substr(0,1).toUpperCase() + ln.substr(1,ln.length)
					 e("newFN").focus()}
					 }
					 catch(ex) {alert(ex.message)}
		    	}
			}
			
			dojo.io.bind(bindArgs);
	
}
function nameQuickLkupRight() {
 
	var ele = e("div_nameQuickLkup")
	var myLeft =  ele.style.left.replace("px","")
	var myNewLeft = parseInt(myLeft) + parseInt(300)
	ele.style.left = myNewLeft + "px"

}
function nameQuickNew() {
	//push first/last name values into calling fields
	//new name record must be saved by calling func
	var eleName = e("quickEleName").value
 
	e(eleIDName).value = 0 //push zero into person_ID field on form to signal new record. Validation accepts 0 as OK (not "")
	e(eleName + "_newfn").value = e("newFN").value
	e(eleName + "_newln").value = e("newLN").value
 
	e(eleName).value = e("newFN").value + " " + e("newLN").value + " (NEW)"
	nameQuickLkup("select") //exit
	//9/24/09 mpal from popup_pers: show Add Personnel button after new name
	if (e("personnelForm")) { e("rowAddPersonnel2").style.display=""}
}
function nameSearchParse(s) {
	//pass in name (s) as firstName Lastname or LastName, firstName
	var a
	var fn="",ln=""
	var regExp = / /g
	var msg=""
	if (s.indexOf(",")>=0) { //embedded comma: lastName, firstName
		a = s.split(",")
		if (a.length==1) {ln = a[0].replace(regExp,""); }
		else if (a.length==2) {ln =  a[0].replace(regExp,"");fn= a[1].replace(regExp,""); }
		else {msg = "lastName, firstName: Entry unclear, Too many commas"}
	} else {
		a = s.split(" ")
		if (a.length==1) {ln =  a[0].replace(regExp,""); }
		else if (a.length==2) {fn =  a[0].replace(regExp,"");ln= a[1].replace(regExp,""); }
		else {msg = "lastName firstName: Entry unclear, Too many spaces"}
	}
	if (msg!="") {alert(msg);return ""}
	else {return ln + "," + fn //pass to CF as ln,fn
	}

}
function nameQuickLkupSelect(pk){
    //eleIDName is global name of primary key field
    var f = e("selectfieldlist").value.split(",")
    var targetField
	var myPerson_id = ""
 
    targetField = e("nameQuickFieldID").value.toLowerCase()
 
    //console.log(e("selectfieldlist").value)
    //if values found on calling form, update
    //NOTE 10/8/09 mpal since lkup form is on z-index, pushed values not showing in IE. Had to capture values (first loop), close popup, then push values
    var v = new Array()
    var i
    //get values
    for (i = 0; i < f.length; i++) {
    
        if (e(f[i] + pk)) {
		 
            v[i] = e(f[i] + pk).value  //pk is person_ID
        }
        else {
            v[i] = ""
        }
    }
    
    nameQuickLkup() //close
 
    for (i = 0; i < f.length; i++) { //assumes field names unique on document, no offset on form field names
  //alert("e: " + e(f[i]));alert(f[i])
        if (e(f[i])) {
	 
			 //mpal 11/15/09 If this is secondary instance of name lkup on form, suppress auto update of fields,
			 //except key field and keyfield_lkup
			if (f[i]==eleIDName || f[i]==eleIDName + "_lkup" || !e(eleIDName + "_noname")) {
            e(f[i]).value = v[i].toString()
			}
 
			if (f[i] =="person_id") {myPerson_id = v[i]} //9/24/09 mpal load person_id for personnelForm (below)
			
        }
        else 
            if (f[i] == "last_first_name_fmt") {
                e(targetField).value = v[i] //push name into target field	
            }
            else 
                if (f[i] == "person_id") {
                    //target field in format keyfieldname_lkup. keyfield element on form will be target fieldname without "_lkup"
                    e(targetField.substr(0, targetField.length - 5)).value = v[i] //push name into target field		
					
                }
    }
     
    e(eleIDName + "_lkup").style.display = "none"
    e(eleIDName + "_link").innerHTML = e(targetField).value
    e(eleIDName + "_link").style.display = ""
    e(eleIDName + "_link").focus()
    
    if (e(eleIDName + "_clear")) {
        e(eleIDName + "_clear").style.display = ""
    } //show link and clear button, if no rights, clear button not there
    //e(targetField).focus() //calling field name saved on form when opened
 	
   if (myPerson_id != "") {if (e("personnelForm")) {showPersonnelRO (myPerson_id)}}
}
function nameQuickClear(eleID,clearFields,ynMsg) {
	//clearField "+" delimited list of fields to clear
	ynMsg = ynMsg==null?"Y":ynMsg
	if (ynMsg=="Y") {if (!confirm("Clear name from select record?")) {return}}
	e(eleID).value = "" //clear current value

	if (clearFields!=null) {
		var aFlds = clearFields.split("+")
		for (var i=0;i<aFlds.length;i++) {
			try{e(aFlds[i]).value = ""} catch(ex) {} //skip blank or missing fields
		}
	}
	
	if (e(eleID + "_clear")) {e(eleID + "_clear").style.display="none"} //might be hidden if no clear allow
	e(eleID + "_link").style.display="none"
	e(eleID + "_lkup").value=""
	e(eleID + "_lkup").style.display=""
	e(eleID + "_lkup").focus()

}
function busQuickLkup(ele, category, eleID,loadaction,allowNew) { //eleID is the id name of the field that will get the person_ID
	//for new name, set this value to 0, then new name will be created when form saved. Validation will accept 0 as a valid entry
	//parse into search1, search2
	//if ele is null, close view
	//loadaction: reload for Bus Directory to load selected business into popup form
	//allowNew: Y/N show New button and allow return to calling field if launched from Business Directory
	loadaction = loadaction==null?"":loadaction
	allowNew = allowNew==null?"N":allowNew
	if (!e("div_nameQuickLkup")) {alert("Missing: div_nameQuickLkup");return;}
	var myDiv = e("div_nameQuickLkup")
	if (ele==null) {e("div_nameQuickLkup").style.display="none";e("div_nameQuickLkup").innerHTML = "";
	e("div_nameQuickLkup").style.height="";e("div_nameQuickLkup").style.overflow="auto";try{e(fldCalledFrom).focus()} catch(ex){};return}
 
 	category=category==""?"default":category
	var ln="", fn="", a, delim, msg
	var regExp = / /g
 	var str = ""
	var s = ele.value
	var fieldList
	var firstCol
	var eleName = ele.id
	var firstRec
	fldCalledFrom = ele.name //global
	eleIDName = eleID //globalget
	if (s=="") {return}
	msg=s
	var str = '<span style="font-style:italic">Loading...</span>'
	c360_makeLoading(myDiv.id, str, "200px")
	
		var bindArgs = {
				url: "ajaxForm.cfm",
				content: { action: category, ajaxSubform: "_busQuickLkup.cfm", param: s,eleName:eleName},
				method: "post",			
				mimetype: "text/json",
				error: fncDojoBindError,
				load: function(type, data, evt){	
					var d = data.data
					 //console.log(data)
					//query field format:
					//col_##_fieldname ::= visible columns
 
					str = ""
					str += '<div class="pageHeaderDef">Matching Businesses: ' + data.recordcount + '&nbsp;&nbsp;'
					str += ' <a href="javascript:void(0)" class="buttonDef" id="btnBusQuickLkupExit" onClick="nameQuickLkup()">Exit</a>'
					if (allowNew=="N") {
						str += ' <a href="javascript:void(0)" class="buttonDef" id="btnBusDir" onClick="popup_busDir()">BusDir</a>'
					} else { //allowNew Y, in BusDir, don't clear new value
							str += ' <a href="javascript:void(0)" class="buttonDef" id="btnBusNew" onClick="nameQuickLkup(0)">New</a>'
					}
						str += '<input type="hidden" name="selectfieldlist" id="selectfieldlist" value="' + data.columnlist.toLowerCase() + '">'
					//changed from ele.name to ele.id to accommodate multiple references of a field in a browse view (old version) 6/22/11
					//str += '<input type="hidden" name="nameQuickFieldID" id="nameQuickFieldID" value="' + ele.name + '"></div>' //calling field, use in select for focus
					str += '<input type="hidden" name="nameQuickFieldID" id="nameQuickFieldID" value="' + ele.id + '"></div>' //calling field, use in select for focus
					str += "<table class='dataFormBrowse' style='width:100%'>"
					if (data.recordcount>0) {
					str += "<thead>"
					str += '<tr><td colspan="20" style="height: 25px"> Click the Business you would like to select.</td></tr>'
					//loop through col_## fields to get headers 10/15/08 mpal
					fieldList = data.columnlist.split(",")
					str += '<tr>'
					for (i=0;i<fieldList.length;i++) {
						if (fieldList[i].substr(0,4)=="COL_") {str+='<td>' + fieldList[i].substr(7) + '</td>'}
					}
					str += '</tr></thead>'
		 
					 firstRec = 0

					for (i=0;i<data.recordcount;i++) {//once per matching rec
						firstCol= true //flag to put link around value of first visible col
						if (firstRec==0) {firstRec = "lkup" + d.PK[i];} //get iD of first rec for focus
						str += "<tr>"
						for (var j=0;j<fieldList.length;j++) { //once per field
							if (fieldList[j].substr(0,4)=="COL_") { //one per visible col
								if (firstCol) { 
								    if (loadaction == "reload") {
									 str += "<td><a href='javascript:void(0)' id='lkup" + d.PK[i] + "' class='default' onClick='ajaxBusDir(" + d.PK[i] + ")'>"
									} else { 
									   str += "<td><a href='javascript:void(0)' id='lkup" + d.PK[i] + "' class='default' onClick='busQuickLkupSelect(" + d.PK[i] + ")'>" 
									}
									str += d[fieldList[j]][i] + "</a></td>"
									firstCol = false //set flag so this just hits first visible col
								} else {
									str += "<td>" + d[fieldList[j]][i] 
								} 	
								str += "</td>"
							} else {//if not visible
								fieldName = fieldList[j].toLowerCase()
								str += '<input type="hidden" name="' + fieldName + '" id="' + fieldName + d.PK[i] + '" value="' + d[fieldList[j]][i] + '">'
							}
						} //field
							str += "</tr>"
						
					} //rec

					str += '<tr><td class="rhRO" style="height: 30px; text-align:center;" colspan="20">'
					str += 'To add a new Business, click [Exit] then click [Bus] in the toolbar.</td></tr>'
					} else {
					str += '<thead><tr><td colspan="20">No matches. Click [BusDir] and Add NEW business, then [Exit] and try another search.</td></tr></thead>'
					} //end recordcount
					str +='<input type="hidden" name="quickEleName" id="quickEleName">'
					/*str += '<tr><td colspan="20"><span class="rhRO">NEW First name</span> '
					str += '<input type="text" name="newFN" id="newFN"> '
					str += '<span class="rhRO">NEW Last name</span>  <input type="text" name="newLN" id="newLN"> '
					str +='<input type="hidden" name="quickEleName" id="quickEleName">'
					str +='<a href="javascript:void(0)" class="buttonDef" onClick="nameQuickNew()">Save</a>'
					str +='</td>'
					str +='</tr>'*/
					str += "</table>"
			
			//mpal 11/5/08 this needs to be fixed for Businesses
					try {
					c360_makeLoading(myDiv.id)
					c360_makeLoading(myDiv.id, str, "0",5)

			 		e("quickEleName").value = eleName //put in calling ele name so we can push value back into it
			 		var callingEle = e(eleName) 
				
					if (firstRec!=null) {e(firstRec).focus()} else {e("btnBusQuickLkupExit").focus(); }
					 }
					 catch(ex) {alert(ex)}
		    	}
			}
			
			dojo.io.bind(bindArgs);
	
}

function busQuickLkupSelect(pk) {
	var f = e("selectfieldlist").value.split(",")
	var targetField
 
	targetField = e("nameQuickFieldID").value.toLowerCase()
 
	//if values found on calling form, update
	//NOTE 10/8/09 mpal since lkup form is on z-index, pushed values not showing. Had to capture values (first loop), close popup, then push values
	//fields in calling query must be named same as fields on form
	var v = new Array()
	var i 
	//get values
	for ( i=0;i<f.length;i++) {
		 
		if (e(f[i] + pk)) {
			 v[i] = e(f[i] + pk).value  
		} else {
			v[i]=""
		}
	}
	
	nameQuickLkup() //close, uses save div as nameQuickLukup
	for ( i=0;i<f.length;i++) { 
			//alert(e(f[i]))
		if (e(f[i])) {
			  
			//mpal 1/29/10 prefix field span_ if value returned to span instead of input control
			if (f[i].substring(0, 5) == "span_") {
				e(f[i]).innerHTML = v[i]
			}
			else {
		 
			e(f[i]).value = v[i]
		}
		} 
	}

	e(targetField).focus() //calling field name saved on form when opened
}
function busQuickClear(eleID,clearFields,ynMsg) {
	//clearField "+" delimited list of fields to clear
	ynMsg = ynMsg==null?"Y":ynMsg
	clearFields==null?"":clearFields
	if (ynMsg=="Y") {if (!confirm("Clear business from selected record?")) {return}}
	e(eleID).value = "" //clear current value
	e(eleID + "_oldvalue").value = "" //10/1/10
	if (clearFields!="") {
		var aFlds = clearFields.split("+")
		for (var i=0;i<aFlds.length;i++) {
			try{e(aFlds[i]).value = ""} catch(ex) {} //skip blank or missing fields
		}
	}
	
	if (e(eleID + "_clear")) {e(eleID + "_clear").style.display="none"} //might be hidden if no clear allow
	e(eleID + "_link").style.display="none"
	e(eleID + "_lkup").value=""
	e(eleID + "_lkup").style.display=""
	e(eleID + "_lkup").focus()

}

	
 
function listQuickLkup(ele, category, eleID, lkupGroup, format,afterSelect){ //eleID is the id name of the field that will get the person_ID
	//for new name, set this value to 0, then new name will be created when form saved. Validation will accept 0 as a valid entry
	//parse into search1, search2
	//if ele is null, close view
	//lkup group is query criteria
	//format::= added 5/24/10 mpal pass in lkupOnly to force only lookup field and ID field to populate, ie, list management popup
 	afterSelect = afterSelect==null?"":afterSelect //6/16/11 mpal function to run after Select
	if (!e("div_nameQuickLkup")) {alert("Missing: div_nameQuickLkup");return;}
	clearLkup(ele)
	var myDiv = e("div_nameQuickLkup")
	if (ele==null) {e("div_nameQuickLkup").style.display="none";e("div_nameQuickLkup").innerHTML = "";
	e("div_nameQuickLkup").style.height="";e("div_nameQuickLkup").style.overflow="auto";try{e(fldCalledFrom).focus()} catch(ex){};return}
 	format=format==null?"":format
 	category=category==""?"default":category
	lkupGroup=lkupGroup==""?"":lkupGroup
	var ln="", fn="", a, delim, msg
	var regExp = / /g
 	var str = ""
	var s = ele.value
	var fieldList
	var firstCol
	var eleName = ele.id
	var firstRec
	if (s==" ") {if(!confirm("No search value entered. Search for all items (this might take a while)?")) {return false}}
	fldCalledFrom = ele.name //global
	eleIDName = eleID //globalget
	if (s=="") {return}
	msg=s
	var str = '<span style="font-style:italic">Loading...</span>'
	c360_makeLoading(myDiv.id, str, "200px")
 
 
		var bindArgs = {
				url: "ajaxForm.cfm",
				content: { action: category, ajaxSubform: "_listQuickLkup.cfm", param: s, lkupGroup:lkupGroup},
				method: "post",			
				mimetype: "text/json",
				error: fncDojoBindError,
				load: function(type, data, evt){
 
  
 var d = data.data
 
 
			if (data.recordcount >50) {
				c360_makeLoading(myDiv.id)
				c360_makeLoading(myDiv.id, "Formatting selections: " + data.recordcount + " matching records", 0)
			}		
try {			
					str = ""
					str += '<div class="pageHeaderDef">Matching Codes: ' + data.recordcount + '&nbsp;&nbsp;'
					str += ' <a href="javascript:void(0)" class="buttonDef" onClick="nameQuickLkup()">Exit</a>'
					str += '<input type="hidden" name="selectfieldlist" id="selectfieldlist" value="' + data.columnlist.toLowerCase() + '">'
					str += '<input type="hidden" name="nameQuickFieldID" id="nameQuickFieldID" value="' + ele.name + '"></div>' //calling field, use in select for focus
					str += "<table class='dataFormBrowse' style='width:100%'>"
					if (data.recordcount>0) {
					str += "<thead>"
					str += '<tr><td colspan="20" style="height: 25px"> Click the Code you would like to select.</td></tr>'
					//loop through col_## fields to get headers 10/15/08 mpal
					fieldList = data.columnlist.split(",")
					str += '<tr>'
					for (i=0;i<fieldList.length;i++) {
						if (fieldList[i].substr(0,4)=="COL_") {str+='<td>' + fieldList[i].substr(7) + '</td>'}
					}
					str += '</tr></thead>'
		 
					 firstRec = 0

					for (i=0;i<data.recordcount;i++) {//once per matching rec
						firstCol= true //flag to put link around value of first visible col
						if (firstRec==0) {firstRec = "lkup" + d.PK[i];} //get iD of first rec for focus
						str += "<tr>"
						for (var j=0;j<fieldList.length;j++) { //once per field
							if (fieldList[j].substr(0,4)=="COL_") { //one per visible col
								if (firstCol) {
									str += "<td><a href='javascript:void(0)' id='lkup" + d.PK[i] + "' class='default' onClick='listQuickLkupSelect(\"" + d.PK[i] + "\",\"" + format + "\")'>" 
									+ d[fieldList[j]][i] + "</a></td>"
									firstCol = false //set flag so this just hits first visible col
								} else {
									str += "<td>" + d[fieldList[j]][i] 
								} 	
								str += "</td>"
							} else {//if not visible
								fieldName = fieldList[j].toLowerCase()
								str += '<input type="hidden" name="' + fieldName + '" id="' + fieldName + d.PK[i] + '" value="' + d[fieldList[j]][i] + '">'
							}
						} //field
							str += "</tr>"
						
					} //rec
					 str += '<tr><td class="rhRO" id="listNoMatch" style="height: 30px" colspan="20">'
					str += 'If Code not found. Click [Exit], then try again..</td></tr>'
					} else {
					str += '<thead><tr  id="listNoMatch"><td colspan="20">No matches.</td></tr></thead>'
					}
					 
					str +='<input type="hidden" name="quickEleName" id="quickEleName">'
		 
				 if (category == "programs" || category=="projects") {
					str +='<tr id="createNewList"><td><span class="rhRO">Create new Code</span> <a href="javascript:void(0)" class="buttonDef"'
					str += ' title="Create New Code" onClick="listQuickLkupNewShow()">New</a></td></tr>'
					}
					 str += "</table>" 
					
					 str += '<form id="listNewFrm">'
					 str += '<table class="dataFormEdit" id="newListTable" method="post" style="width:100%;display:none">'
					str += '<tr><td class="rh">Code/Nickname*</td><td><input type="text" name="newbudgetnickname" id="newbudgetnickname" style="width: 120px"'
					 str += 'value="' + s + '" ></td></tr>'
					 str += '<tr><td class="rh">Title*</td><td><input type="text" name="newbudgetfullname" id="newbudgetfullname" style="width: 225px"></td></tr>'
				 
			 var myCurrentStatus = category=="programs"?"y":"n" //if program code, status is Y	, Active for Projects mpal 8/19/09				
					 
					 str += '<tr><td class="rh">Dept*</td><td><select name="newHomeDept" id="newHomeDept"><option value="">=Select</option>'
					str += '<option value="CHS">CHS</option>'
					str += '<option value="DO">Deans Office</option>'
					str += '<option value="FHCN">FHCN</option>'
					str += '<option value="IHA">IHA</option>'
					str += '<option value="PN">PN</option>'
					str += '<option value="SBS">SBS</option>'
					str += '<option value="SOM">School of Medicine</option>'
					str += '<option value="SOD">School of Dentistry</option>'
					str += '<option value="MC2">Medical Center</option>'
					str += '<option value="UCSF">UCSF Campus Accnts</option>'
		var today = new Date();today=formatDate(today,"MM/dd/yyyy");			 
					str += '</select></td></tr>'
					str += '<tr><td class="rh">Start date*</td><td><input type="text" name="newStartDate" id="newStartDate" onChange="isValidDate(this)" style="width: 75px"' 
					str += 'value="' + today + '"'
					str += '></td></tr>'
					str += '<tr><td class="rh">End date</td><td><input type="text" name="newEndDate" id="newEndDate" onChange="isValidDate(this)" style="width: 75px"</td></tr>' 
					str += '<tr><td class="rh">Note</td><td><input type="text" name="newdescription" id="newdescription" style="width: 225px"></td></tr>'
					str += '<tr><td class="rh"></td><td style="font-style:italic"> * required fields</td></tr>'
					str += '<tr><td class="rh"></td><td><a href="javascript:void(0)" class="buttonDef" title="Save New Code" '
					str += 'onClick="listNewSave()">Save</a>'
					str += '<input type="hidden" name="newstatus" id="newstatus" value="A">'
					str += '<input type="hidden" name="newcurrentstatus" id="newcurrentstatus" value="' + myCurrentStatus + '">'
					str += '</td></tr>' //pass in ID of element
	 
					str += '</table></form>' 
			 
			 
					c360_makeLoading(myDiv.id)
					c360_makeLoading(myDiv.id, str, 0,3)
	
			 		e("quickEleName").value = eleName //put in calling ele name so we can push value back into it
			 		var callingEle = e(eleName) 
} catch(ex) {alert(ex)}			 		
					if (firstRec!=null) {e(firstRec).focus()}
 				 
				 
		    	}
			} 
			dojo.io.bind(bindArgs);

}
function clearLkup(ele) {
	//mpal 6/3/11 if visible listLkup field is cleared of value, clear the hidden ID
	//which is in a field w/o the _lkup suffixe, eg, myVal_lkup/myVal (strip last 5 chars)
	var targetField = ele.id
 
	try { 
	if (ele.value=="" && e(targetField.substr(0,targetField.length-5)).value != "" ) {e(targetField.substr(0,targetField.length-5)).value = ""; return true } 
	} catch(ex) { }
}
//function zIndex(eleName) {alert("zindex: " + e(eleName).style.zIndex)}
function listQuickLkupNewShow() {try { e("createNewList").style.display="none";e("listNoMatch").style.display="none";e("newListTable").style.display="" } catch(ex) {alert(ex)}}
function listNewSave() {
	//globalAccntFieldName set in calling func
try {
	var fn=0,fl=1
	var aFld
	var aReqFields = new Array("newbudgetnickname:NEW Code/Nickname","newbudgetfullname:Title","newHomeDept:Dept","newStartDate:Start Date")
	var msg = ""
	for (var i=0;i<aReqFields.length;i++) {
		aFld = aReqFields[i].split(":")
		if (e(aFld[fn]).value =="") {msg += aFld[fl] + " is Required<br />"}
	}
	if (msg!="") {msg = '<b>The record could not be saved:</b><br /><br />' + '<div style="padding-left: 20px">' + msg + "</div>";c360_makeAlert(msg);return}
	var bindArgs = {
				url: "c360_browse_accnt.cfc?method=newList",
				content: {},
				method: "post",			
				mimetype: "text/json",
				formNode: "listNewFrm",
				error: fncDojoBindError,
				load: function(type, data, evt){	
	//console.log(data) 
					var err = data.errcode
					var item_ID = data.item_id
			nameQuickLkup()
					 if (err == "not_unique") {c360_makeAlert(data.msg);return} //can't add this account, already exists, msg/exit
					//push in new accountcode, fundyYear ID
					 
		try {		
					 
						e(eleIDName + "_lkup").value = data.accountcode //eleIDName is global, set in calling func
						e(eleIDName).value = data.account_id
					
					 
	} catch(ex) {alert("List Save 305: " + ex)}	
				
				}
			}
				dojo.io.bind(bindArgs);
} catch(ex) {alert(ex)}
}
function listQuickLkupSelect(pk,format,afterSelect) {
 	//mpal 5/24/10 pass in lkupOnly as format to supress any fields from populating except _lkup and ID field, see List Management
	var f = e("selectfieldlist").value.split(",")
	var targetField
	var myValue=""
	targetField = e("nameQuickFieldID").value.toLowerCase()
	//if values found on calling form, update
	//NOTE 10/8/09 mpal since lkup form is on z-index, pushed values not showing. Had to capture values (first loop), close popup, then push values
	//fields in calling query must be named same as fields on form
	var v = new Array()
	var i 
	//get values
	for ( i=0;i<f.length;i++) {
		if (e(f[i] + pk)) {
			 v[i] = e(f[i] + pk).value  
		} else {
			v[i]=""
		}
	}
	
	nameQuickLkup() //close, uses save div as nameQuickLukup
 
	for ( i=0;i<f.length;i++) {
		//alert(e(f[i]))
  
  
  		if ( f[i] == "pk") {  
			//target field in format keyfieldname_lkup. keyfield element on form will be target fieldname without "_lkup"
			 e(targetField.substr(0,targetField.length-5)).value = v[i] //push name into target field	
		} else if ( f[i] == targetField) {  
			//target field  
			 e(targetField).value = v[i] //push name into target field	
		} else if (format =="lkupOnly") {
			//skip, only populate pk above and targetfield below
		} else if (e(f[i])) {  
			 e(f[i]).value = v[i]  
 
		} else if (f[i]=="prgnickname") { //mpal 2/20/09 this is too specific. Generalize
 
			  myValue = v[i]
		} else if (f[i]=="rtnvalue") { //mpal 2/20/09 this is too specific. Generalize 
			  myValue = v[i] 
		}  
	}
	/*if (e(targetField).value=="" && myValue != "") { //mpal 2/20/09 just for program code or create rtnvalue field in query with value of display field (see template lkup)
 		e(targetField).value = myValue
	}*/
	if (myValue != "") { //mpal 2/20/09 just for program code or create rtnvalue field in query with value of display field (see template lkup) 
 		e(targetField).value = myValue
	}
	 
	if (afterSelect != null && afterSelect != "") {  eval(afterSelect) }
	e(targetField).focus() //calling field name saved on form when opened
}
function listQuickClear(eleID,clearFields,ynMsg) {
	//clearField "+" delimited list of fields to clear
	ynMsg = ynMsg==null?"Y":ynMsg
	if (ynMsg=="Y") {if (!confirm("Clear code from selected record?")) {return}}
	e(eleID).value = "" //clear current value

	if (clearFields!=null) {
		var aFlds = clearFields.split("+")
		for (var i=0;i<aFlds.length;i++) {
			try{e(aFlds[i]).value = ""} catch(ex) {} //skip blank or missing fields
		}
	}
	
	if (e(eleID + "_clear")) {e(eleID + "_clear").style.display="none"} //might be hidden if no clear allow
	if (e(eleID + "_link")) {e(eleID + "_link").style.display="none"}
	if (e(eleID + "_span")) {e(eleID + "_span").style.display="none"}
	e(eleID + "_lkup").value=""
	e(eleID + "_lkup").style.display=""

}
 
function paytoQuickLkup(ele, category, eleID) { //eleID is the id name of the field that will get the person_ID
	//for new name, set this value to 0, then new name will be created when form saved. Validation will accept 0 as a valid entry
	//parse into firstName, lastName
	//if ele is null, close view
	if (!e("div_nameQuickLkup")) {alert("Missing: div_nameQuickLkup");return;}
	var myDiv = e("div_nameQuickLkup")
	if (ele==null) {myDiv.style.display="none";myDiv.innerHTML = "";
	myDiv.style.height="";myDiv.style.overflow="auto";try{e(fldCalledFrom).focus()} catch(ex){};return}
	category=category==null || category==""?"payto":category
	var ln="", fn="", a, delim, msg
	var regExp = / /g
 	var str = ""
	var s = ele.value
	var fieldList
	var firstCol
	var eleName = ele.id
	var firstRec, i
	fldCalledFrom = ele.name //global
	eleIDName = eleID //globalget
	if (s=="") {return}
	msg=s
	var str = '<span style="font-style:italic">Loading...</span>'
	c360_makeLoading(myDiv.id, str, "200px")
	
		var bindArgs = {
				url: "ajaxForm.cfm",
				content: { action: category, ajaxSubform: "_paytoQuickLkup.cfm", param:s},
				method: "post",			
				mimetype: "text/json",
				error: fncDojoBindError,
				load: function(type, data, evt){	
	 
					var d = data.data
		//console.log(data) 
					//query field format:
					//col_##_fieldname ::= visible columns
 
	try {
					str = ""
					str += '<div class="pageHeaderDef">'
					str += '<a href="javascript:void(0)" class="buttonDef" title="Move window to the right" onClick="nameQuickLkupRight()" style="float:right">&gt;</a>'
					str += 'Matching Records: ' + data.recordcount + '&nbsp;&nbsp;'
					str += ' <a href="javascript:void(0)" class="buttonDef" onClick="nameQuickLkup()">Exit</a>'
					str += '<input type="hidden" name="selectfieldlist" id="selectfieldlist" value="' + data.columnlist.toLowerCase() + '">'
					str += '<input type="hidden" name="nameQuickFieldID" id="nameQuickFieldID" value="' + ele.name + '"></div>' //calling field, use in select for focus
					str += "<table class='dataFormBrowse' style='width:100%'>"
					if (data.recordcount>0) {
					str += "<thead>"
					str += '<tr><td colspan="20" style="height: 25px"> Click the Name you would like to select.</td></tr>'
					//loop through col_## fields to get headers 10/15/08 mpal
	 //console.log(d)
					fieldList = data.columnlist.split(",")
					str += '<tr>'
					for (i=0;i<fieldList.length;i++) {
						 
						if (fieldList[i].substr(0,4)=="COL_") {str+='<td>' + fieldList[i].substr(7) + '</td>'}
					}
					str += '</tr></thead>'
					//str += '<tr><td>Name</td><td>Home</td><td>Cell</td><td>Email</td><td>PersonID</td></tr></thead>'
					
					 firstRec = 0
					for (i=0;i<data.recordcount;i++) {//once per matching rec
						firstCol= true //flag to put link around value of first visible col
						if (firstRec==0) {firstRec = "lkup" + d.PK[i];} //get iD of first rec for focus
						str += "<tr>"
						for (var j=0;j<fieldList.length;j++) { //once per field
							if (fieldList[j].substr(0,4)=="COL_") { //one per visible col
								if (firstCol) {
									str += "<td><a href='javascript:void(0)' id='lkup" + d.PK[i] + "' class='default' onClick='paytoQuickLkupSelect(" + d.PK[i] + ")'>" 
									+ d[fieldList[j]][i] + "</a></td>"
									firstCol = false //set flag so this just hits first visible col
								} else {
				
									str += "<td>" + d[fieldList[j]][i] 
								} 	
								str += "</td>"
							} else {//if not visible
								fieldName = fieldList[j].toLowerCase()
					 
								str += '<input type="hidden" name="' + fieldName + '" id="' + fieldName + d.PK[i] + '" value="' + d[fieldList[j]][i] + '">'
							}
						} //field
							str += "</tr>"
						
					} //rec
					str += '<tr><td class="rhRO" style="height: 30px" colspan="20">'
					str += 'If PayTo not found, add to Address Book or Business Directory and try again.</td></tr>'
					} else {
					str += '<thead><tr><td colspan="20">No matches. Click [Exit] and Add to Address Book or Business Directory, then try again.</td></tr></thead>'
					}
					str +='<input type="hidden" name="quickEleName" id="quickEleName">'
					/*str += '<tr><td colspan="20"><span class="rhRO">NEW First name</span> '
					str += '<input type="text" name="newFN" id="newFN"> '
					str += '<span class="rhRO">NEW Last name</span>  <input type="text" name="newLN" id="newLN"> '
					
					str +='<a href="javascript:void(0)" class="buttonDef" onClick="nameQuickNew()">Save</a>'
					*/
					str +='</td>'
					str +='</tr>'
					str += "</table>"
			
					try {
					c360_makeLoading(myDiv.id)
					c360_makeLoading(myDiv.id, str, 0, 5)
			 		e("quickEleName").value = eleName //put in calling ele name so we can push value back into it
			 		var callingEle = e(eleName) 
			 		
					if (firstRec!=null) {e(firstRec).focus()}
					 /*("newFN").value = fn
					 e("newLN").value = ln*/}
					 catch(ex) {alert(ex.message)}
} catch(ex) {alert(ex)}
		    	}
			}
			
			dojo.io.bind(bindArgs);
	
}
function paytoQuickNew() {
	//push first/last name values into calling fields
	//new name record must be saved by calling func
	//NOTE: Not modified for payto yet 11/24/08
	var eleName = e("quickEleName").value
	e(eleIDName).value = 0 //push zero into person_ID field on form to signal new record. Validation accepts 0 as OK (not "")
	e(eleName + "_newFN").value = e("newFN").value
	e(eleName + "_newLN").value = e("newLN").value
	e(eleName).value = e("newLN").value + ", " + e("newFN").value
	nameQuickLkup() //exit
}

function paytoQuickLkupSelect(pk) {
	var f = e("selectfieldlist").value.split(",")
 
	var targetField
	targetField = e("nameQuickFieldID").value.toLowerCase()
	//console.log(e("selectfieldlist").value)
	//if values found on calling form, update
	//NOTE 10/8/09 mpal since lkup form is on z-index, pushed values not showing in IE. Had to capture values (first loop), close popup, then push values
	var v = new Array()
	var i 
	var payToStr = ""
	//get values
	for ( i=0;i<f.length;i++) {
		//alert(e(f[i]))
		if (e(f[i] + pk)) {
			 v[i] =  e(f[i] + pk).value  //pk is person_ID
		} else {
			v[i]=""
		}
		 
	}
	 
	//if this is person but payto Address is business, show company name
	if (e("paytoname" + pk).value !="" && e("paytocompany" + pk).value != ""){payToStr += e("paytocompany" + pk).value + "<br />"}
	 
	if (e("paytoadrline1" + pk).value != "") {payToStr += e("paytoadrline1" + pk).value + "<br />"}
	if (e("paytoadrline2" + pk).value != "") {payToStr += e("paytoadrline2" + pk).value + "<br />"}
	if (e("paytocitystzip" + pk).value != "") {payToStr += e("paytocitystzip" + pk).value + "<br />"}
	if (e("paytophone1" + pk).value != "") {payToStr += e("paytophone1" + pk).value}  
	
	nameQuickLkup() //close
 
 try {

	for ( i=0;i<f.length;i++) { //assumes field names unique on document, no offset on form field names
		//alert(e(f[i]))
	
		if (e(f[i])) {
			 e(f[i]).value = v[i] 
		} else if ( f[i] == "paytofmt") {
			e(targetField).value = v[i] //push name into target field	
 
		} else if ( f[i] == "pk") {
			//target field in format keyfieldname_lkup. keyfield element on form will be target fieldname without "_lkup"
			 e(targetField.substr(0,targetField.length-5)).value = v[i] //push name into target field			
		}
		
	}
	if (e("span_purchdetail_tmppaytofmt")) {
		e("span_purchdetail_tmppaytofmt").innerHTML = payToStr
	}
 
 e(eleIDName + "_lkup").style.display="none"
 
 e(eleIDName + "_link").innerHTML = e(targetField).value
    e(eleIDName + "_link").style.display=""
    e(eleIDName + "_link").focus()
 
    if (e(eleIDName + "_clear")) {e(eleIDName + "_clear").style.display=""} //show link and clear button, if no rights, clear button not there
 
} catch(ex) {alert(ex)}
	
	//e(targetField).focus() //calling field name saved on form when opened
}
function paytoQuickClear(eleID,clearFields,ynMsg) {
	//clearField "+" delimited list of fields to clear
	ynMsg = ynMsg==null?"Y":ynMsg
	if (ynMsg=="Y") {if (!confirm("Clear name from select record?")) {return}}
	e(eleID).value = "" //clear current value

	if (clearFields!=null) {
		var aFlds = clearFields.split("+")
		for (var i=0;i<aFlds.length;i++) {
			try{e(aFlds[i]).value = ""} catch(ex) {} //skip blank or missing fields
		}
	}
	
	if (e(eleID + "_clear")) {e(eleID + "_clear").style.display="none"} //might be hidden if no clear allow
	e(eleID + "_link").style.display="none"
	e(eleID + "_lkup").value=""
	e(eleID + "_lkup").style.display=""
	e(eleID + "_lkup").focus()
	e("paytoadrline1").value ="" //clear hidden payto fields
	e("paytoadrline2").value =""
	e("paytocitystzip").value =""
	e("paytophone").value =""
	e("paytoname").value =""
	e("paytocompany").value =""
	e("paytodept").value =""
	if (e("span_purchdetail_tmppaytofmt")) {
		e("span_purchdetail_tmppaytofmt").innerHTML = ""
	}
	 
	if (e("span_purchdetail_tmppaytofmt")) {e("span_purchdetail_tmppaytofmt").innerHTML=""}

}

 
function accountQuickLkup(ele, category,eleID,lkupGroup,lkupFmt) { //eleID is the id name of the field that will get the person_ID
	 //Can't add accounts in this view
	//if ele is null, close view
	//category dpafund, funddpa
 
	if (!e("div_nameQuickLkup")) {alert("Missing: div_nameQuickLkup");return;}
	var myDiv = e("div_nameQuickLkup")
	if (ele==null) {myDiv.style.display="none";myDiv.innerHTML = "";
	myDiv.style.height="";myDiv.style.overflow="auto";try{e(fldCalledFrom).focus()} catch(ex){};return}
	category=category==null || category==""?"payto":category
	var ln="", fn="", a, delim, msg
	var regExp = / /g
 	var str = ""
	var s = ele.value
	if (s.length > 6 && s.indexOf("-") == -1) {s = s.substr(0,6) + "-" + s.substr(6)} //if string longer than 6, then push in hyphen (account is 6 chars, so this must include fund)
	 
	var fieldList
	var firstCol
	var eleName = ele.id
	var firstRec, i
	fldCalledFrom = ele.name //global
	eleIDName = eleID //globalget
	if (s=="") {return}
	 
	msg=s
	var str = '<span style="font-style:italic">Loading...</span>'
	c360_makeLoading(myDiv.id, str, "300px")
	
		var bindArgs = {
				url: "ajaxForm.cfm",
				content: { action: category,lkupGroup:lkupGroup,lkupFmt:lkupFmt, ajaxSubform: "_accountQuickLkup.cfm", param:s},
				method: "post",			
				mimetype: "text/json",
				error: fncDojoBindError,
				load: function(type, data, evt){	
	 
					var d = data.data
				
			if (category.toLowerCase() == "activeaccountonly" && data.recordcount == 1 && ele.value == d.ACCOUNTCODE[0]) {
				//mpal 4/3/ 09 exact match on one account, no Popup needed, push in account_ID and return. account code must be exact full match
 
				c360_makeLoading(myDiv.id)
				e(eleID).value = d.ACCOUNT_ID[0]
				return
			}
	 
	//console.log(d) 
	 //alert("recordcount: " + data.recordcount)
					//query field format:
					//col_##_fieldname ::= visible columns
 
	try {
					str = ""
					str += '<div class="pageHeaderDef">Matching Records: ' + data.recordcount + '&nbsp;&nbsp;'
					str += ' <a href="javascript:void(0)" class="buttonDef" onClick="nameQuickLkup()">Exit</a>'
					str += '<input type="hidden" name="selectfieldlist" id="selectfieldlist" value="' + data.columnlist.toLowerCase() + '">'
					str += '<input type="hidden" name="nameQuickFieldID" id="nameQuickFieldID" value="' + ele.name + '"></div>' //calling field, use in select for focus
					str += "<table class='dataFormBrowse' style='width:100%'>"
					if (data.recordcount>0) {
					str += "<thead>"
					str += '<tr><td colspan="20" style="height: 25px"> Click the Account you would like to select.</td></tr>'
					//loop through col_## fields to get headers 10/15/08 mpal
					fieldList = data.columnlist.split(",")
					str += '<tr>'
					for (i=0;i<fieldList.length;i++) {
						 
						if (fieldList[i].substr(0,4)=="COL_") {str+='<td>' + fieldList[i].substr(7) + '</td>'}
					}
					str += '</tr></thead>'
					//str += '<tr><td>Name</td><td>Home</td><td>Cell</td><td>Email</td><td>PersonID</td></tr></thead>'
					
					 firstRec = 0
					for (i=0;i<data.recordcount;i++) {//once per matching rec
						firstCol= true //flag to put link around value of first visible col
						if (firstRec==0) {firstRec = "lkup" + d.PK[i];} //get iD of first rec for focus
						str += "<tr>"
						for (var j=0;j<fieldList.length;j++) { //once per field
							if (fieldList[j].substr(0,4)=="COL_") { //one per visible col
								if (firstCol) {
									str += "<td><a href='javascript:void(0)' id='lkup" + d.PK[i] + "' class='default' onClick='accountQuickLkupSelect(" + d.PK[i] + ")'>" 
									+ d[fieldList[j]][i] + "</a></td>"
									firstCol = false //set flag so this just hits first visible col
								} else {
									str += "<td>" + d[fieldList[j]][i] 
								} 	
								str += "</td>"
							} else {//if not visible
								fieldName = fieldList[j].toLowerCase()
								str += '<input type="hidden" name="' + fieldName + '" id="' + fieldName + d.PK[i] + '" value="' + d[fieldList[j]][i] + '">'
							}
						} //field
							str += "</tr>"
						
					} //rec
		
					str += '<tr><td class="rhRO" id="accountNoMatch" style="height: 30px" colspan="20">'
					str += 'If Account not found. Click [Exit], then try again..</td></tr>'
					} else {
					str += '<thead><tr id="accountNoMatch"><td colspan="20">No matches. Click [Exit], then try again.</td></tr></thead>'
					}
					str +='<input type="hidden" name="quickEleName" id="quickEleName">'
					 
					str +='</td>'
					str +='</tr>'
					str +='<tr id="createNewAccount"><td><span class="rhRO">Create new External Account</span> <a href="javascript:void(0)" class="buttonDef" title="Create New Acount Record" onClick="accountQuickLkupNewShow()">New</a></td></tr>'
					str += "</table>"
					str += '<form id="accountNewFrm">'
					str += '<table class="dataFormEdit" id="newAccountTable" method="post" style="width:100%;display:none">'
					str += '<tr><td class="rh">NEW DPA-Fund*</td><td><input type="text" name="newAccountCode" id="newAccountCode" style="width: 100px"'
					str += 'value="' + s + '" onChange="return accntFmt(this)"></td></tr>'
					str += '<tr><td class="rh">Fund year*</td><td><input type="text" name="newFundYear" id="newFundYear" style="width: 30px"></td></tr>'
					str += '<tr><td class="rh">Account name*</td><td><input type="text" name="newAccountName" id="newAccountName" style="width: 225px"></td></tr>'
					str += '<tr><td class="rh">Nickname</td><td><input type="text" name="newAccountNickname" id="newAccountNickname" maxLength="20" style="width: 120px"></td></tr>'
				//	<cfmodule template="fs.cfm" label="Dept" layout="fieldOnly" fn="newHomeDept"  eleType="lkup" lkupFmt="display" lkupGroup="fiscal" lkupCode="campus_dept"  >
					//b &= "homeDept,label:Dept,eleType:lkup,lkupCode:campus_dept,lkupFmt:code,lkupMsg:none,eleWidth:75px,defValue:#session.userSetup.dept#,endrow:n;";
									
					//str += '<tr><td class="rh">External dept</td><td><input type="text" name="newHomeDept" maxLength="10" id="newHomeDept" style="width: 50px"></td></tr>'
					str += '<tr><td class="rh">Dept*</td><td><select name="newHomeDept" id="newHomeDept"><option value="">=Select=</option>'
					str += '<option value="CHS">CHS</option>'
					str += '<option value="DO">Deans Office</option>'
					str += '<option value="FHCN">FHCN</option>'
					str += '<option value="IHA">IHA</option>'
					str += '<option value="PN">PN</option>'
					str += '<option value="SBS">SBS</option>'
					str += '<option value="SOM">School of Medicine</option>'
					str += '<option value="SOD">School of Dentistry</option>'
					str += '<option value="MC2">Medical Center</option>'
					str += '<option value="UCSF">UCSF Campus Accnts</option>'
					 
					str += '</select></td></tr>'
					str += '<tr><td class="rh">FY start date*</td><td><input type="text" name="newStartDate" id="newStartDate" onChange="isValidDate(this)" style="width: 75px"></td></tr>'
					str += '<tr><td class="rh">FY end date*</td><td><input type="text" name="newEndDate" id="newEndDate" onChange="isValidDate(this)" style="width: 75px"</td></tr>' 
					str += '<tr><td class="rh">Note</td><td><input type="text" name="newNote" id="newNote" style="width: 225px"></td></tr>'
					str += '<tr><td class="rh"></td><td style="font-style:italic"> * required fields</td></tr>'
					str += '<tr><td class="rh"></td><td><a href="javascript:void(0)" class="buttonDef" title="Save New Account" '
					str += 'onClick="accountNewSave()">Save</a></td></tr>' //pass in ID of element
					str += '</table></form>' 
					try {
					c360_makeLoading(myDiv.id)
					c360_makeLoading(myDiv.id, str, 0, 5)
			 		e("quickEleName").value = eleName //put in calling ele name so we can push value back into it
			 		var callingEle = e(eleName) 
			 		
					if (firstRec!=null) {e(firstRec).focus()}
					 /*("newFN").value = fn
					 e("newLN").value = ln*/}
					 catch(ex) {alert(ex.message)}
} catch(ex) {alert(ex)}
		    	}
			}
			
			dojo.io.bind(bindArgs);
	
}
function accntFmt(ele ) {
	if (ele.value == "") {alert("DPA-Fund required");return false}
	if (ele.value.substr(6,1) != "-") {alert("Please enter DPA-Fund in this format: 123456-12345");ele.value="";return false}
}
function accountQuickLkupNewShow() {e("createNewAccount").style.display="none";e("accountNoMatch").style.display="none";e("newAccountTable").style.display=""}
function accountNewSave() {
	//globalAccntFieldName set in calling func

	var fn=0,fl=1
	var aFld
	var aReqFields = new Array("newAccountCode:NEW DPA-Fund","newFundYear:Fund Year","newAccountName:Account Name","newHomeDept:Dept","newStartDate:FY Start Date","newEndDate:FY End Date")
	var msg = ""
	for (var i=0;i<aReqFields.length;i++) {
		aFld = aReqFields[i].split(":")
		if (e(aFld[fn]).value =="") {msg += aFld[fl] + " is Required<br />"}
	}
	if (msg!="") {msg = '<b>The record could not be saved:</b><br /><br />' + '<div style="padding-left: 20px">' + msg + "</div>";c360_makeAlert(msg);return}
	var bindArgs = {
				url: "c360_browse_accnt.cfc?method=newAccount",
				content: {},
				method: "post",			
				mimetype: "text/json",
				formNode: "accountNewFrm",
				error: fncDojoBindError,
				load: function(type, data, evt){	
	//console.log(data) 
					var err = data.errcode
					var item_ID = data.item_id
			nameQuickLkup()
					 if (err == "not_unique") {c360_makeAlert(data.msg);return} //can't add this account, already exists, msg/exit
					//push in new accountcode, fundyYear ID
					if (err=="new_fund_year") {c360_makeAlert(data.msg)}
		try {		
					if (e("fundyear_idaccount_lkup")) {
					e("fundyear_idaccount_lkup").value = data.accountcode.toString() + " FY: " + data.fundyear
					if (e("span_accountname")) {e("span_accountname").innerHTML = data.accountname}
					e("fundyear_idaccount").value = data.item_id
					//reload speedchart
			 
			 /*
					if (e("newponumber")) { //only on disbursements
					if (data.speedchart!="") {
						e("newponumber").options.length=0 //clear existing speedcharts
						var mylist = data.speedchart.split(";")
						for (i=0;i<myList.length;i++) {
							var aryVal = myList[i].split(":")
							insertOptionFirst("newponumber", aryVal[1], aryVal[0])
						}
						insertOptionFirst("newponumber", "=Select=", "")
					}
					} //po
			*/
					} else { //not on disbursement view
						e(eleIDName + "_lkup").value = data.accountcode //eleIDName is global, set in calling func
						e(eleIDName).value = data.account_id
					
					}
	} catch(ex) {alert("Account Save 304: " + ex)}	
				
				}
			}
				dojo.io.bind(bindArgs);

}
function accountQuickLkupSelect(pk) {

	var myAccount_ID = e("account_id" + pk).value
//must included Account_ID on form
	var bindArgs = {
				url: "c360_browse_accnt.cfc?method=getSpeedchart",
				content: {account_ID:myAccount_ID },
				method: "post",			
				mimetype: "text/json",
				error: fncDojoBindError,
				load: function(type, data, evt){	
	 	 
				//load speedchart is visible
				if (e("newponumber")) {
				var ele = e("newponumber")
				ele.options.length = 0 //clear existing options
				insertOptionFirst("newponumber", "=Select=", "")
				for (i=0;i<data.recordcount;i++) {
					insertOptionFirst("newponumber", data.data.SPEEDCHART[i], data.data.SPEEDCHART[i])
				}
				
				}
				var f = e("selectfieldlist").value.split(",")
				var targetField
				targetField = e("nameQuickFieldID").value.toLowerCase()
				//alert("targetfield: " + targetField)
				 //console.log(e("selectfieldlist").value)
				//if values found on calling form, update
				//NOTE 10/8/09 mpal since lkup form is on z-index, pushed values not showing in IE. Had to capture values (first loop), close popup, then push values
				var v = new Array()
				var i 
				var payToStr = ""
				//get values
				for ( i=0;i<f.length;i++) {
					//alert(e(f[i]))
					if (e(f[i] + pk)) {
						 v[i] = e(f[i] + pk).value  //pk is person_ID
					} else {
						v[i]=""
					}
				}
				 
				nameQuickLkup() //close
			 
			 try {  
				for ( i=0;i<f.length;i++) { //assumes field names unique on document, no offset on form field names
		 
					// alert("field: " + e(f[i]))
					if (e(f[i])) {
						if (f[i].substr(0,5)=="span_") {
							e(f[i]).innerHTML = v[i] //check if ele is a span
						} else {
							//alert("v:" + i + " " + v[i] +  " " + f[i])
							e(f[i]).value = v[i]  
						} 
		
					} else if ( f[i] == "pk") {
		 
						//target field in format keyfieldname_lkup. keyfield element on form will be target fieldname without "_lkup"
						 e(targetField.substr(0,targetField.length-5)).value = v[i] //push name into target field	
						 var myAccount_ID = v[i]		
					} else if (f[i] == "accountcode") {
						var quickaccountcode = v[i]
					}
				}
				//need query to return field name that matches target lkup field name 12/3/08 mpal, should generalize
				
			} catch(ex) {alert(ex)}
				e(targetField).value = quickaccountcode
	 
				e(targetField).focus() //calling field name saved on form when opened
	
				}
			}
				dojo.io.bind(bindArgs);


	
}
function accountQuickClear(eleID,clearFields,ynMsg) {
	//clearField "+" delimited list of fields to clear
	ynMsg = ynMsg==null?"Y":ynMsg
	if (ynMsg=="Y") {if (!confirm("Clear account from select record?")) {return}}
	e(eleID).value = "" //clear current value

	if (clearFields!=null) {
		var aFlds = clearFields.split("+")
		for (var i=0;i<aFlds.length;i++) {
			try{e(aFlds[i]).value = ""} catch(ex) {} //skip blank or missing fields
		}
	}
	if (e(eleID + "_clear")) {e(eleID + "_clear").style.display="none"} //might be hidden if no clear allow
	if (e(eleID + "_link")) {e(eleID + "_link").style.display="none"}
	if (e("span_accountname")) {e("span_accountname").innerHTML = ""}
	e(eleID + "_lkup").value=""
	e(eleID + "_lkup").style.display=""
	e(eleID + "_lkup").focus()

}


function courseQuickLkup(ele, category,eleID,lkupGroup,lkupFmt) { //eleID is the id name of the field that will get the person_ID
	 //Can't add courses in this view
	//if ele is null, close view
	 
	if (!e("div_nameQuickLkup")) {alert("Missing: div_nameQuickLkup");return;}
	var myDiv = e("div_nameQuickLkup")
	if (ele==null) {myDiv.style.display="none";myDiv.innerHTML = "";
	myDiv.style.height="";myDiv.style.overflow="auto";try{e(fldCalledFrom).focus()} catch(ex){};return}
	category=category==null || category==""?"payto":category
	var ln="", fn="", a, delim, msg
	var regExp = / /g
 	var str = ""
	var s = ele.value
	var fieldList
	var firstCol
	var eleName = ele.id
	var firstRec, i
	fldCalledFrom = ele.name //global
	eleIDName = eleID //globalget
	if (s=="") {return}
	msg=s
	var str = '<span style="font-style:italic">Loading...</span>'
	c360_makeLoading(myDiv.id, str, "200px")
	
		var bindArgs = {
				url: "ajaxForm.cfm",
				content: { action: category,lkupGroup:lkupGroup,lkupFmt:lkupFmt, ajaxSubform: "_courseQuickLkup.cfm", param:s},
				method: "post",			
				mimetype: "text/json",
				error: fncDojoBindError,
				load: function(type, data, evt){	
	 
					var d = data.data
		//console.log(data) 
					//query field format:
					//col_##_fieldname ::= visible columns
 
	try {
					str = ""
					str += '<div class="pageHeaderDef">Matching Records: ' + data.recordcount + '&nbsp;&nbsp;'
					str += ' <a href="javascript:void(0)" class="buttonDef" onClick="nameQuickLkup()">Exit</a>'
					str += '<input type="hidden" name="selectfieldlist" id="selectfieldlist" value="' + data.columnlist.toLowerCase() + '">'
					str += '<input type="hidden" name="nameQuickFieldID" id="nameQuickFieldID" value="' + ele.name + '"></div>' //calling field, use in select for focus
					str += "<table class='dataFormBrowse' style='width:100%'>"
					if (data.recordcount>0) {
					str += "<thead>"
					str += '<tr><td colspan="20" style="height: 25px"> Click the Account you would like to select.</td></tr>'
					//loop through col_## fields to get headers 10/15/08 mpal
					fieldList = data.columnlist.split(",")
					str += '<tr>'
					for (i=0;i<fieldList.length;i++) {
						 
						if (fieldList[i].substr(0,4)=="COL_") {str+='<td>' + fieldList[i].substr(7) + '</td>'}
					}
					str += '</tr></thead>'
					//str += '<tr><td>Name</td><td>Home</td><td>Cell</td><td>Email</td><td>PersonID</td></tr></thead>'
					
					 firstRec = 0
					for (i=0;i<data.recordcount;i++) {//once per matching rec
						firstCol= true //flag to put link around value of first visible col
						if (firstRec==0) {firstRec = "lkup" + d.PK[i];} //get iD of first rec for focus
						str += "<tr>"
						for (var j=0;j<fieldList.length;j++) { //once per field
							if (fieldList[j].substr(0,4)=="COL_") { //one per visible col
								if (firstCol) {
									str += "<td><a href='javascript:void(0)' id='lkup" + d.PK[i] + "' class='default' onClick='courseQuickLkupSelect(" + d.PK[i] + ")'>" 
									+ d[fieldList[j]][i] + "</a></td>"
									firstCol = false //set flag so this just hits first visible col
								} else {
									str += "<td>" + d[fieldList[j]][i] 
								} 	
								str += "</td>"
							} else {//if not visible
								fieldName = fieldList[j].toLowerCase()
								str += '<input type="hidden" name="' + fieldName + '" id="' + fieldName + d.PK[i] + '" value="' + d[fieldList[j]][i] + '">'
							}
						} //field
							str += "</tr>"
						
					} //rec
					str += '<tr><td class="rhRO" id="accountNoMatch" style="height: 30px" colspan="20">'
					str += 'If Course not found. Click [Exit], then try again..</td></tr>'
					} else {
					str += '<thead><tr id="courseNoMatch"><td colspan="20">No matches. Click [Exit], then try again.</td></tr></thead>'
					}
					str +='<input type="hidden" name="quickEleName" id="quickEleName">'
					
					str +='</td>'
					str +='</tr>'
					/*str +='<tr id="createNewAccount"><td><span class="rhRO">Create new External Account</span> <a href="javascript:void(0)" class="buttonDef" title="Create New Acount Record" onClick="accountQuickLkupNewShow()">New</a></td></tr>'
					str += "</table>"
					str += '<form id="accountNewFrm">'
					str += '<table class="dataFormEdit" id="newAccountTable" method="post" style="width:100%;display:none" >'
					str += '<tr><td class="rh">NEW DPA-Fund</td><td><input type="text" name="newAccountCode" id="newAccountCode" style="width: 100px"></td></tr>'
					str += '<tr><td class="rh">Fund year</td><td><input type="text" name="newFundYear" id="newFundYear" style="width: 30px"></td></tr>'
					str += '<tr><td class="rh">Account name</td><td><input type="text" name="newAccountName" id="newAccountName" style="width: 225px"></td></tr>'
					str += '<tr><td class="rh">Nickname</td><td><input type="text" name="newAccountNickname" id="newAccountNickname" maxLength="20" style="width: 120px"></td></tr>'
					str += '<tr><td class="rh">External dept</td><td><input type="text" name="newHomeDept" maxLength="10" id="newHomeDept" style="width: 50px"></td></tr>'
					str += '<tr><td class="rh">FY start date</td><td><input type="text" name="newStartDate" id="newStartDate" onChange="isValidDate(this)" style="width: 75px"></td></tr>'
					str += '<tr><td class="rh">FY end date</td><td><input type="text" name="newEndDate" id="newEndDate" onChange="isValidDate(this)" style="width: 75px"</td></tr>' 
					str += '<tr><td class="rh">Note</td><td><input type="text" name="newNote" id="newNote" style="width: 225px"></td></tr>'
					str += '<tr><td class="rh"></td><td><a href="javascript:void(0)" class="buttonDef" title="Save New Account" onClick="accountNewSave()">Save</a></td></tr>'*/
					str += '</table></form>' 
					try {
					c360_makeLoading(myDiv.id)
					c360_makeLoading(myDiv.id, str, 0, 5)
			 		e("quickEleName").value = eleName //put in calling ele name so we can push value back into it
			 		var callingEle = e(eleName) 
			 		
					if (firstRec!=null) {e(firstRec).focus()}
					 /*("newFN").value = fn
					 e("newLN").value = ln*/}
					 catch(ex) {alert(ex.message)}
} catch(ex) {alert(ex)}
		    	}
			}
			
			dojo.io.bind(bindArgs);
	
}

function courseQuickLkupSelect(pk) { 
		var f = e("selectfieldlist").value.split(",")
		var targetField
		targetField = e("nameQuickFieldID").value.toLowerCase()
		 
	
		//console.log(e("selectfieldlist").value)
		//if values found on calling form, update
		//NOTE 10/8/09 mpal since lkup form is on z-index, pushed values not showing in IE. Had to capture values (first loop), close popup, then push values
		var v = new Array()
		var i 
		var payToStr = ""
		//get values
		for ( i=0;i<f.length;i++) {
			//alert(e(f[i]))
			if (e(f[i] + pk)) {
				 v[i] = e(f[i] + pk).value  //pk is person_ID
			} else {
				v[i]=""
			}
		}
 
		nameQuickLkup() //close
 
	 try {
	 	
		for ( i=0;i<f.length;i++) { //assumes field names unique on document, no offset on form field names
			//alert(e(f[i]))
			if (e(f[i])) {
				if (f[i].substr(0,5)=="span_") {
					e(f[i]).innerHTML = v[i] //check if ele is a span
				} else if (f[i]=="course_id_link") {
					e("course_id_link").innerHTML = v[i] //hard code. doesn't have a span prefix
				} else {
					e(f[i]).value = v[i]  
				} 
			
			} else if ( f[i] == "pk") {
 
				//target field in format keyfieldname_lkup. keyfield element on form will be target fieldname without "_lkup"
				 e(targetField.substr(0,targetField.length-5)).value = v[i] //push name into target field	
				 var myAccount_ID = v[i]		
			}
		}
		if (e("course_id_link")) { //if New record, these fields are created
		e("course_id_lkup").value=""
		e("course_id_lkup").style.display="none" 
		e("course_id_link").style.display=""
		e("course_id_clear").style.display=""
		}
		
		 	//strip LKUP, get value of fieldname_specialFmt field
		baseField = targetField.replace("_lkup","")
	 	
		fieldSpecial = baseField + "_specialfmt"
		specialAction =   e(fieldSpecial).value 
		if (specialAction == "FOR") {
			//push in faculty of record for this course 
			 var bindArgs = {
            url: "c360_browse_programplan.cfc?method=setupMeet_ID" ,
				method: "post",
				content: {term:e("term").value,course_id:e("course_id").value},
            mimetype: "text/json",
           	error: fncDojoBindError,
            load: function(type, data, evt){  
             showConsole(data)
             	//load speedchart is visible
				 
				var ele = e("meet_id")
				ele.options.length = 0 //clear existing options
				insertOptionFirst("meet_id", "=Select=", "")
				for (i=0;i<data.recordcount;i++) {
					insertOptionFirst("meet_id", data.data.DISPLAY[i], data.data.CODE[i])
				}
           }  
        } 
        dojo.io.bind(bindArgs);
		
		}
		
	} catch(ex) {alert(ex)}
		 
		e(targetField).focus() //calling field name saved on form when opened
		
		
 
}
function courseQuickClear(eleID,clearFields,ynMsg) {
	//clearField "+" delimited list of fields to clear
	ynMsg = ynMsg==null?"Y":ynMsg
	if (ynMsg=="Y") {if (!confirm("Clear course from selected record?")) {return}}
	e(eleID).value = "" //clear current value

	if (clearFields!=null) {
		var aFlds = clearFields.split("+")
		for (var i=0;i<aFlds.length;i++) {
			try{e(aFlds[i]).value = ""} catch(ex) {} //skip blank or missing fields
		}
	}
	if (e(eleID + "_clear")) {e(eleID + "_clear").style.display="none"} //might be hidden if no clear allow
	if (e(eleID + "_link")) {e(eleID + "_link").style.display="none"}
	//e("span_course_id").innerHTML = ""
	e(eleID + "_lkup").value=""
	e(eleID + "_lkup").style.display=""
	e(eleID + "_lkup").focus()

}


function addClass(element,value) {
  if (!element.className) {
    element.className = value;
  } else {
    newClassName = element.className;
    newClassName+= " ";
    newClassName+= value;
    element.className = newClassName;
  }
}

function c360_showFields(cnt) {e("fieldList" + cnt).style.display=""}
function c360_delRowInAdd(pre) { //11/20/08 mpal a rec move menu row added, so decrement rowIndex by 2
 	for (var i=0;i<10;i++) { //delete first visible row, which will be the Add row, loop for multi row records
		try{e("tbody" + pre).deleteRow(e("row0_" + pre + "_" + i).rowIndex -2)} catch(ex) {break;}
	}
}
function c360_extracts (pre,master_ID) {
	//get values/menu choices for Extracts, this pre code
	//alert(0)
	// try {
 
	var myComponent = "c360_actionMenu.cfc"
	if (!checkRecordcount(pre)) {return}
	var bindArgs = {
				url: myComponent,
				content: {method: "getExtracts", myPre:pre },
				method: "get",			
				mimetype: "text/json",
				error: fncDojoBindError,
				load: function(type, data, evt){	
		  // console.log(data)
				 
				var ele
				var sub
				var eleName
				var str = '<div style="font-weight:bold;color:black">Extract/Spreadsheet Menu (based on current view)</div>'
				var cnt=0
try {			
				str += '<table style="width:100%">'
				for (ele in data) {
					if (ele=="actionspeople") {
						//push current recs into Action view
						str += '<tr><td><a href="javascript:void(0)"  class="default" onClick="actionsPeople(\''   + pre +   '\',' + data[ele].field_list + ')">' + data[ele].title + '</a></td><td></td></tr>' 
						//str += '<div style="padding-left:10px; width:90%;display:none;color:gray;" id="fieldList' + cnt + '">' + data[ele].field_list + '</div>'
						if (data[ele].desc != "") {
						//str += '<div style="font-style:italic; padding-left: 10px; width:90%;color:gray;">' + data[ele].desc + '</div>'
						str += '<tr><td colspan="2" style="padding-left:10px;font-style:italic;color:gray;">' + data[ele].desc + '</td></tr>'
						}
					} else {
	 
						str += '<tr><td style="font-size:14px;font-family:arial,sans serif;"><a href="c360_actionExtract.cfm?p=' + pre + '&c=' + ele + '" target="_extracts" class="default" onClick="c360_makePopup()">' + data[ele].title + '</a></td>' 
						str += '<td> <a href="javascript:void(0)" title="View field list" class="default" onclick="viewFieldList(' + cnt + ')">[view fields]</a></td></tr>'
						str += '<tr id="fieldList' + cnt + '" style="display:none;"><td  colspan="2" style="padding-left:10px;color:gray;" >' + data[ele].field_list + '</td></tr>'
						if (data[ele].desc != "") {
						str += '<tr><td colspan="2" style="font-style:italic; padding-left: 10px; color:gray;">' + data[ele].desc + '</td></tr>'
						}
						var aFields = data[ele].field_list.split(",")
						str += '<tr id="showFields' + cnt + '" style="display:none;"><td  colspan="2" style="padding-left:20px;">'
						var rowCnt = 0
						for (var i=0;i<aFields.length;i++) { 
							str +=  aFields[i]
							if (i < aFields.length -1) {str += ",\n"}
							//str += "<br/>"  
						}
						str += '</td></tr>' 
					}  
					cnt++
					 
				}
				str += "</table>"
} catch(ex) {alert(ex)}		
				c360_makePopup("",str)
				}
			}
				dojo.io.bind(bindArgs);
	// } catch(ex) {alert(ex)}
}
function viewFieldList(cnt) { 
	var ele = e("showFields" + cnt)
	if (ele.style.display == "none") {ele.style.display = ""} else {ele.style.display = "none"} 
}
function actionsPeople(pre,pendingRecCnt) {
		//load records from session.getContacts into the Actions/People list. Person_ID only required field in getContacts
		//if there is already a pending list of names in session.lastNames, select replace or add
		 
		if (pendingRecCnt>0) {
		var str
		var str = "There are " + pendingRecCnt + " existing Names in Action:People\n\n" 
		
		str += "Click [OK] to Add the currently Selected Names to the existing Action:People names.\n\n"
		str += "Click [Cancel] to Replace the existing Action:People Names with the Selected Names."
		var action = confirm(str)
		actionSelect = action?"add":"replace"
		} else {
		actionSelect = "replace"
		if (!confirm("Add Selected Names to Action:People?")) {return false}
		
		}
		
		c360_makePopup() //if continue, close popup extract menu
		if (actionSelect == "replace") {
			c360_makePopup(0,"<b><i>Adding selected names to existing Actions: People list...</b></i>")
		
		} else {
			c360_makePopup(0,"<b><i>Creating new list in Actions:People with selected names...</b></i>")
		 
		}
		
		var bindArgs = {
			url: "ajaxForm.cfm",	
			content: {action: "selectActionNames", ajaxSubform: "_ajaxBus.cfm", actionSelect: actionSelect,pre:pre },		
			method: "post",
			mimetype: "text/json",
			error: fncDojoBindError,
			load: function(type, data, evt){	
				c360_makePopup()
				alert("All selected Names have been added to the Action/People view\n\nTotal selected names: " + data.reccnt + "\n\nClick Actions from the left menu to continue.")
	    	}
		}
			dojo.io.bind(bindArgs);
	}
function c360_labels (pre,master_ID) {
	//get values/menu choices for Extracts, this pre code
	var myComponent = "c360_actionMenu.cfc"
	if (!checkRecordcount(pre)) {return}
	var bindArgs = {
				url: myComponent,
				content: {method: "getLabels", myPre:pre },
				method: "get",			
				mimetype: "text/json",
				error: fncDojoBindError,
				load: function(type, data, evt){	
				  
				var ele
				var sub
				var eleName
				var str = '<div style="font-weight:bold;color:black;">Label Menu</div>'
				var cnt=0
				for (ele in data) {
					//if (str!="") {str += "<br />"}
					str += '<a href="c360_actionLabels.cfm?p=' + pre + '&c=' + ele + '" class="default" onClick="c360_makePopup()">' + data[ele].title + '</a>'
					//str += '&nbsp;&nbsp;<a href="javascript:void(0)"  onClick="c360_showFields(' + cnt + ')">[+]</a>'
					str += '<div style="padding-left:10px; width:90%;display:none;color:gray;" id="fieldList' + cnt + '">' + data[ele].field_list + '</div>'
					if (data[ele].desc != "") {
						str += '<div style="font-style:italic; padding-left: 10px; width:90%;color:gray;">' + data[ele].desc + '</div>'
					}
					str += "<br />"
					cnt++
					 
				}
				c360_makePopup("",str)
				}
			}
				dojo.io.bind(bindArgs);
}
		
function c360FormSetup(flag,master_ID,id,pre,paramStr,isPopup) { 
 		id = id==null?0:id 
 
		isPopup = isPopup==null?"y":isPopup.toLowerCase() //if not popup, style div directly+, y/n
		master_ID=master_ID==null?0:master_ID
		paramStr = paramStr==null?"":paramStr //any additional parameters in the format label:value; 
		//if paramStr is not empty, then the ID IS IGNORED mpal 9/13/08; 12/8/08 I think this is orphaned mpal
		var frm= pre + "Frm"
		var myAction = pre + "Show"
		var dView
		var d
		var myBody
		var addInnerHTML
		var newRow
		var afterSave
		var defaultUpdate
		var browseMaster_ID
		var mimeType = flag=="save" || flag=="del"?"text/json":"text/html"
		//target div named pre + "Div"
 
		if (!e(pre + "FormDiv")) {alert("Missing Div in C360FormSetup: " + pre + "FormDiv")}
 
		var ele = e(pre + "FormDiv")
 
		if (e(pre + "_statusmsg")) {e(pre + "_statusmsg").innerHTML = ""} //clear
		if (flag=="del") { 
			if (id=="") {alert("No selected record.");return}
			if (!confirm("Delete this record?"))
				{return}
		}
		else if (flag=="exit") { 
			ele.style.display = "none"
			ele.innerHTML = ""
			ele.style.height=""
			ele.style.width=""
			return
		} else if (flag=="edit" || flag=="view" || flag=="show") {
			var str ='<span style="font-style:italic;font-family:times">Loading...</span> '
			if (e("span_" + pre + "RecMoveCounter")) {e("span_" + pre + "RecMoveCounter").innerHTML = str}
 
			if (isPopup == "y" ) {
 
 
			c360_makeLoading(ele.id, str)
 
			} else {
 
				if (ele.innerHTML == "") {ele.innerHTML = str;ele.style.display=""}
				else {
				if (ele.style.display == "none") {
				ele.innerHTML = str}
	 
				}
				}
			} 
			//7/7/10 flag form immediately that Save is in progress. Stop second atttempt to save (on a double-click) until flag cleared.
			 if (flag=="save") { 
			 		if (e(pre + "keyFieldName") ) { 
						var myKeyFldName = e(pre + "keyFieldName").value
						if (e(myKeyFldName).value =="")  {
						e(myKeyFldName).value = "SAVING"
						} else if (e(myKeyFldName).value=="SAVING") {
							//7/7/10 if hit here and save still in process, exit
							alert("Record is saving...");return false;					
						}
					}
			 }
			var bindArgs = {
			url: "ajaxForm.cfm",
			content: {ajaxSubform: "_c360_browsedef2_setup.cfm", master_ID: master_ID, flag: flag, item_ID: id, pre:pre,paramStr:paramStr, formType:"form", isPopup:isPopup },
			method: "post",
			mimetype: mimeType,
			formNode: frm,
			error: fncDojoBindError,
			load: function(type, data, evt){	
 
	 		 if (flag=="xadd") {	
				 	
				} else if (flag=="view" || flag=="show") {
					if (isPopup == "y") {
						c360_makeLoading(ele.id, data, "0")
					} else {
						ele.innerHTML = data
						ele.style.display = "" 
					} 
				} else if (flag=="save") { //after save, push readonly values into existing cells	
					//returns data.msg (error message) and data.errcode  and data.item_id data.viewupdate with HTML to push back into calling cell 11/20/2008 
try {	    
//mpal 7/7/10 clear "SAVING" flag immediately
if (flag=="save") {
 //console.log(data)
	if (data==false) {alert("Error 217: Save failed in FormSetup: " + pre) ; return}
 		if (e(pre + "keyFieldName") ) { 
						var myKeyFldName = e(pre + "keyFieldName").value 
						e(myKeyFldName).value = "" 
		}
	 }    		
 
            var rtnvars = data // can call rtnVars from afterSave function with var(rtnvars) 
					 if (e(pre + "afterSave") && e(pre + "afterSave").value != "") {afterSave = e(pre + "afterSave").value}
					 if (e(pre + "defaultUpdate") && e(pre + "defaultUpdate").value != "") {defaultUpdate = "y"} 
					if (data.errcode && data.errcode=="VALIDATION") {  
						c360_makeAlert(data.msg);return;
					} else if (isPopup=="y"){  
					//clear screen close
						ele.style.display = "none"
						ele.innerHTML = ""
						ele.style.height=""
						ele.style.width=""  
						//if called from a browse view, push updated html back into calling cell
						if (e("cell_" + id) && data.viewupdate) {e("cell_" + id).innerHTML = data.viewupdate}
	
					} //if OK
					else { 
						if (e(pre + "_statusmsg")) {e(pre + "_statusmsg").innerHTML = "Record saved"} 
						//mpal 1/9/09 if rec saved is one-to-one child, don't need key field (use master key field, eg, c360_browse_demo, names, personnel
						if (e(pre + "keyField")){ 
							if (e(pre + "keyFieldName" + "_new")) { e(e(pre + "keyFieldName").value + "_new").value =  data.item_id 	}  
				 
							e(pre + "keyField").value =  data.item_id   
				 			if (e(e(pre + "keyFieldName").value)){
							e(e(pre + "keyFieldName").value).value =  data.item_id} 
						 } 

					} //end save 
  
					if (defaultUpdate == "y") { //in save create fieldname/value lists to push saved values back onto calling form
						var updtFields = data.fieldlist.split(";")
						var updtValues = data.valuelist.split(";")
						for (i=0;i<updtFields.length;i++) {
							try {e(updtFields[i]).value = updtValues[i]} catch(ex) {  }
						}
					} 

 
					//push new key field value into form
	try {
//alert("keyfieldname: " + pre + "keyFieldName");
					if (e(pre + "keyFieldName") ) { 
						var myKeyFldName = e(pre + "keyFieldName").value
						e(myKeyFldName).value = data.item_id
						e(pre + "keyField").value = data.item_id 
						if (e("span_" + pre + "_" + myKeyFldName)) {e("span_" + pre + "_" + myKeyFldName).innerHTML = data.item_id} 
					}
 } catch(ex) { } //3/17/09 mpal failing if save right after new, then add a rec in browse, then save again. Not sure why (user setup detail)
					updateBrowseDivs(pre)
 			 
 
 					
					if (afterSave != "") {eval(afterSave)} 
 
	} catch(ex) {alert("C360FormSetup-Save: " + ex)}	
				
				} else if (flag=="edit" || flag=="add") {
					//push into existing cells, format cell_fieldName_#UniqueID# 
 
					d = data 
	 				var myTableWidth = 0
					if (isPopup=="y") {c360_makeLoading(ele.id,d,myTableWidth)} 
					else {ele.innerHTML = d	}
					
					if (e("datectlfieldnames").value != "") {
							var calFn = e("datectlfieldnames").value.toLowerCase().split(",") 
						try {
							for (i=0;i<calFn.length;i++) {makeCalendar(calFn[i])}
						} catch(ex) {alert("C360FormSetup/Edit 345: " + ex.message)} 
					}
						
					if (true) {
		 
 					updateBrowseDivs(pre) //update sub browse divs
					}
					 var f = e(pre + "Frm").elements //focus on first visible field
	
					for (var o=0;o<f.length;o++) {if(f[o].type !="hidden" && f[o].style.display==""){f[o].focus();break;}}
	  
					if (e("onEdit") && e("onEdit").value != "") {eval(e("onEdit").value)}
 				
				} else if (flag=="del") {
		 
					tempMsg = data
					//if ERROR during delete, return an HTML message. del function is output="Yes"
	
					if (data.errcode != "") { 
						var delMsg = '<div style="color:#000;font-weight:bold;margin-bottom: 4px;">This record cannot be deleted:</div>'
						delMsg += data.msg
						c360_makeAlert(delMsg)
					} else {
					if (isPopup =="y") {
					 //clear/close popup
					ele.style.display = "none"
					ele.innerHTML = ""
					ele.style.height=""
					ele.style.width=""
					if (e("cell_" + id)) {e("cell_" + id).innerHTML = data.msg} //11/10/08 orphaned in Form?
					} else {
						//clear values on form, same as opening in New
						//c360FormSetup("edit",master_ID,0,pre,paramStr,isPopup)
						//nextid used if we are using recMove, return nextID or 0
						var myNextID = 0
						if (data.nextid && data.nextid !="") {myNextID = data.nextid}
						c360FormSetup("edit",master_ID,data.nextid,pre,paramStr,isPopup)
					}
					} //if delete OK
				}
				
			} //load
			} //bindargs
		dojo.io.bind(bindArgs);
		
		}
function updateBrowseDivs(pre) {
	var browseMaster_ID
	var t //temp
    var aTemp //div name
	var myParams =""//params
		//system automatically store key item id in this field
		//The item_ID from the Form is the Master_ID for the sub browse views.
	if ( e(pre+"keyField") ) { //if not on master form, this won't exist, mpal, 12/10/08, skip
		browseMaster_ID = e(pre+"keyField").value 
 
		if (e(pre + "LoadDivs") && e(pre + "LoadDivs").value != "") { //show additional divs

				var aDivs = e(pre + "LoadDivs").value.split(";")
				//mpal added params option in the format divname,label:value+label:value 8/21/09 mpal
				for (i=0;i<aDivs.length;i++) {
					try{
	 
					   t = aDivs[i]
						aTemp = t.split(",") //ele 1 div, ele 2 params (opt)
			             if (aTemp.length==2) {myParams = aTemp[1];myParams = myParams.replace(/\+/g,";");}
			 
						//make sure preShow function created, otherwise error
						 
						  eval(aTemp[0] + 'Show("show","' + browseMaster_ID + '","","' + myParams + '")')
						 
				} catch(ex) {alert("Error 407: UpdateBrowseDivs: " + ex)
						
				} }
		}
}

}
 function getY( oElement )
{
var iReturnValue = 0;
while( oElement != null ) {
iReturnValue += oElement.offsetTop;
oElement = oElement.offsetParent;
}
return iReturnValue;
}



function actionButton(action,pre) {
	 
	if (action.toLowerCase()=="extract") {myForm = "out_extract_def.cfm"}
	var bindArgs = {
				url: myForm,
				content: {},
				method: "post",			
				mimetype: "text/json",
				error: fncDojoBindError,
				load: function(type, data, evt){	}
			}
				dojo.io.bind(bindArgs);
}
function checkRecordcount(pre){
	
	if (e(pre + "RecordcountVal") && e(pre+"RecordcountVal").value =="") {alert("Please select records before continuing");return false} else {return true}
	//if (e(pre + "Recordcount") && e(pre+"Recordcount").innerHTML =="") {alert("Please select records before continuing");return false} else {return true}
}
var gTableName, gKeyValue, gSessionQuery, gPre
 
function c360_email(pre,k,t,s) {
	//get values/menu choices for Extracts, this pre code

	var myComponent = "c360_actionMenu.cfc";
	//t: tableName, k: keyValue, s: name of sessionQuery (the part of the name following "session."
	//pre: pre code for browse
	//if email not linked to an event or article, keyfieldVal is ""
	if (!checkRecordcount(pre)) {return}
	 
	gTableName = t
	gKeyValue = k;
	gSessionQuery = s
	gPre = pre //new 9/27/10 mpal when getting prior emails, search for event_nickname or event_id
 
	var bindArgs = {
				url: myComponent,
				content: {method: "getEmail", myPre:pre },
				method: "get",			
				mimetype: "text/json",
				error: fncDojoBindError,
				load: function(type, data, evt){	
	 	 
				var ele
				var sub
				var eleName
				var str = '<div style="font-weight:bold;color:black;">Email Blast Menu</div>'
				var cnt=0
				for (ele in data) { 
					str +=  data[ele].title  
					if (data[ele].desc != "") {
						str += '<div style="font-style:italic; padding-left: 10px; width:90%;color:gray;">' + data[ele].desc + '</div>'
					}
					str += "<br />"
					cnt++
					 
				}
				c360_makePopup("",str)
	
				}
			}
				dojo.io.bind(bindArgs);
}

function c360_emailsOpenAll() {
	var winHousehold //tableName: events, keyFieldName
	 c360_makePopup( )
	winHousehold=window.open("popup_emailSetup.cfm?t=" + gTableName + "&v=" + gKeyValue + "&q=" + gSessionQuery + "&scope=all", 
		"popupEmailSetup", "width=850px,height=650px,top=50px,left=50px,scrollbars=1,location=0,menubar=1")	
	winHousehold.focus()	
}
function c360_emailsOpenUnique() {
	var winHousehold //tableName: events, keyFieldName, keyValue is Event_ID, can also pass in event_uniqueName as gPre
	 c360_makePopup( )
	winHousehold=window.open("popup_emailSetup.cfm?t=" + gTableName + "&v=" + gKeyValue + "&q=" + gSessionQuery + "&p=" + gPre + "&scope=unique", 
		"popupEmailSetup", "width=850px,height=650px,top=50px,left=50px,scrollbars=1,location=1,menubar=1")	
	winHousehold.focus()	
}
function findParent(pre) {
	var myDiv = e(pre + "FormDiv")
	myDiv.style.display="none"
	myDiv.style.innerHTML = ""
	myDiv.style.height=""
	myDiv.style.width=""
}
function isConfirm(ele,msg) {
//used in fs.cfm. starting value saved in ele.id_oldvalue
	msg=msg==null?"Are you sure you want to change the value of this existing record?":msg
	if (e(ele.id + "_oldvalue")) {
		if (e(ele.id + "_oldvalue").value=="") {return true} //empty always ok
		if (!confirm(msg)) {
			ele.value = e( ele.id  + "_oldvalue").value
		}
	}

}
function browseDetailToggle(browsePre,formPre,master_id,id,tabAction) {
	 	//show basic form
		//browsePre: pre for the browseViewl
		//formPre: pre for the form/detail
		//id: id of detail reocord (passed in as master_id
		//tabAction: "tab" to show tab div
		var myID, str, myPre
		 tabAction = tabAction==null?"":tabAction
 
		 if (id==null) {e(browsePre + "Div").style.display="" //return to browse, clear form
		 	e(browsePre + "Form").style.display="none"
		 	e(browsePre + "Header").style.display=""
			 e(browsePre + "Form").innerHTML=""
			 if ( e(formPre + "FormDiv")) { 
			 e(formPre + "FormDiv").style.display="none"
			 e(formPre + "FormDiv").innerHTML=""
			 }
		 	return
		 }
	 
		//show browse
		try {
		 if (e(browsePre + "Form").style.display == "none") { 
 
			e(browsePre + "Header").style.display="none"
			e(browsePre + "Div").style.display="none"
			//e(browsePre + "Form").innerHTML="xLoading..."

			e(browsePre + "Form").style.display=""

		}
 	} catch(ex) {alert(ex);alert("pre: " + browsePre)}
		//restore form div for detail
		if (!e(formPre + "FormDiv")) {
 
				str =  '<div id="' + formPre + 'FormDiv" style="width:100%;background-color:white"></div> '
				str += '<div id="' + formPre + 'Div" style="width:100%"></div>' 
				
				if (tabAction =="tab") {
				 str +='<div id="' + formPre + '_tabdiv" style="padding:5px;background-color:##fff;clear:both;"></div>'
				 } 
				//str += "</div>" 7/30/09 not needed?
				e(browsePre + "Form").innerHTML = str
		}
 
			//in this func, id is the master ID for the purch detail
			//9/17/2010 pass through pre of browsePre so that correct browse dataset is selected for record navigator
			//eval(formPre + 'Form("edit","' + master_id + '","' + id + '","browsePre:' + browsePre + '")') 
			eval(formPre + 'Form("edit","' + master_id + '","' + id  + '")')
	 }
	 
function postDate(fieldname) {
	  var curDate = new Date()
	e(fieldname).value = formatDate(curDate,"MM/dd/yyyy")
}
function saveAuto(fn, value, tableName,keyFieldName, keyValue){
	 
	var targetField = fn.replace(keyValue,"") //strip out seq ID from field name
	var myVal = value
 
 
    var bindArgs = {
                url: "c360_tbl_default.cfc",
                content: {method:"saveNow",keyFieldName:keyFieldName,keyValue:keyValue,tableName:tableName,targetField:targetField,myVal:myVal },
                method: "post",         
                mimetype: "text/plain",
                error: fncDojoBindError,
                load: function(type, data, evt){    }
            }
                dojo.io.bind(bindArgs); 
	
}
function saveNow(ele,tableName,keyFieldName,keyValue,targetField){
	//mpal 5/10/09 just text value now
	//targetField optional. If the current ele has the name of the targetField, it is derived
	//below. If not, (such as a formatted field) pass in field name mpal 4/5/11
 
	var myVal = ele.value 
	if (myVal=="on") {myVal = ele.checked} 
	if (targetField==null) {
	  targetField = ele.id.replace(keyValue,"") //strip out seq ID from field name
	} 
	//alert("targetField: " + targetField)
 
	var bindArgs = {
                url: "c360_tbl_default.cfc",
                content: {method:"saveNow",keyFieldName:keyFieldName,keyValue:keyValue,tableName:tableName,targetField:targetField,myVal:myVal },
                method: "post",         
                mimetype: "text/json",
                error: fncDojoBindError,
                load: function(type, data, evt){ 
                	showConsole(data)  
                	try {
                		if (data.errmsg != "") {alert(data.errmsg)}
                	} catch(ex) {alert(ex)}
                 }
            }
                dojo.io.bind(bindArgs); 
}
function previewReport(id) {
    
        runReport(id,"preview")
        
    }
	function runReport(id,action,ynPrompt) {
 
         ynPrompt=ynPrompt==null?"y":ynPrompt
        var winReport
        
    winReport=window.open("popup_report.cfm?i=" + id + "&a=" + action + "&p=" + ynPrompt, "popup_Report",
     "width=900x,height=600px,top=50px,left=25px,scrollbars=1,resizable=1")
     winReport.focus()  
    
    }
	
    function getNextHighestZindex(obj){  
    var highestIndex = 0;  
      var currentIndex = 0;  
       var elArray = Array();  
      if(obj){ elArray = obj.getElementsByTagName('*'); }else{ elArray = document.getElementsByTagName('*'); }  
       for(var i=0; i < elArray.length; i++){  
           if (elArray[i].currentStyle){  
             currentIndex = parseFloat(elArray[i].currentStyle['zIndex']);  
          }else if(window.getComputedStyle){  
             currentIndex = parseFloat(document.defaultView.getComputedStyle(elArray[i],null).getPropertyValue('z-index'));  
         }  
          if(!isNaN(currentIndex) && currentIndex > highestIndex){ highestIndex = currentIndex; }  
       }  
     return(highestIndex+1);  
     } 
//mpal 11/13/09 set and clear msg text in search field.  
function clearSearch(ele) {
			if (ele.value.substr(0,1)=="=") {
				ele.value=""
				}
}
	function setSearch(ele,msg) {
		msg=msg==null?"==Search==":msg //must start with "="
            if (ele.value=="") {
                ele.value=msg
                }
}
function onChangeDef(pre, myFunc) {
//4/1/10 not April Fool joke, mpal, in formSetup, pass in pre and base function so that change to any element in header will clear current selections
//var myFunc = function() {preShow()};onChangeDef(pre,myFunc)
		var aryInput = e(pre + "HeaderFrm").getElementsByTagName("input")
		var arySelect = e(pre + "HeaderFrm").getElementsByTagName("select"); 
		for (var i=0;i<aryInput.length;i++){aryInput[i].onchange = myFunc}
		for (var i=0;i<arySelect.length;i++){arySelect[i].onchange = myFunc} 
	}
	
function updateBrowseRows(ele,pre) {
	//console.log(ele)

	var bindArgs = {
                url: "c360_tbl_default.cfc",
                content: {method:"updateBrowseRows",pre:pre,maxRows:ele.value},
                method: "post",         
                mimetype: "text/plain",
                error: fncDojoBindError,
                load: function(type, data, evt){    }
            }
                dojo.io.bind(bindArgs); 
}
function participantsQuickLkup (eventnickname,lkupgroup,person_id) {

var bindArgs = {
                url: "c360_browse_lkup.cfc",
                content: {method:"rolesShow",eventnickname:eventnickname,lkupgroup:lkupgroup,person_id:person_id},
                method: "post",         
                mimetype: "text/html",
                error: fncDojoBindError,
                load: function(type, data, evt){    
                
               c360_makePopup(0, data,"800px")
                
                }
            }
                dojo.io.bind(bindArgs); 
}
function participantsQuickSave(eventnickname,lkupgroup,person_id,cnt) {
	if (e("participant_role").value =="") {alert("Role is a required field");return false}
var bindArgs = {
                url: "c360_browse_lkup.cfc",
                content: {method:"rolesSave"},
                method: "post",         
                mimetype: "text/html",
                formNode: "rolesFrm",
                error: fncDojoBindError,
                load: function(type, data, evt){    
                
               participantsQuickLkup (eventnickname,lkupgroup,person_id)
                
                }
            }
                dojo.io.bind(bindArgs); 
}
function participantsQuickAdd() {

}
var tWidth='383px';                  // width (in pixels)
var tHeight='34px';                  // height (in pixels)
var tcolour='#e2e2e2';               // background colour:
var moStop=true;                     // pause on mouseover (true or false)
var fontfamily = 'arial,sans-serif'; // font for content
var tSpeed=3;                        // scroll speed (1 = slow, 5 = fast)

// enter your ticker content here (use \/ and \' in place of / and ' respectively)
 //var tickerContent='Are you looking for loads of useful information <a href="http:\/\/javascript.about.com\/">About Javascript<\/a>? Well now you\'ve found it.';

// Simple Marquee / Ticker Script
// copyright 3rd January 2006, Stephen Chapman
// permission to use this Javascript on your web page is granted
// provided that all of the below code in this script (including this
// comment) is used without any alteration
var cps=tSpeed; 
var aw, mq; 
var fsz = parseInt(tHeight) - 16; 
function startticker(tickerContent ) {
 
 if (document.getElementById) 
{var tick = '<div style="position:relative;width:'+tWidth+';height:'+tHeight+';overflow:hidden;background-color:'+tcolour+'"'; 
if (moStop) tick += ' onmouseover="cps=0" onmouseout="cps=tSpeed"'; 
tick +='><div id="mq" style="position:absolute;left:0px;top:0px;font-family:'+fontfamily+';padding-top:4px;font-size:'+fsz+'px;white-space:nowrap;"><\/div><\/div>'; 
document.getElementById('ticker').innerHTML = tick; 
mq = document.getElementById("mq"); 
mq.style.left=(parseInt(tWidth)+10)+"px";  
mq.innerHTML='<span id="tx">'+tickerContent+'<\/span>'; 
aw = document.getElementById("tx").offsetWidth; 
lefttime=setInterval("scrollticker()",50);}
} 
function scrollticker(){mq.style.left = (parseInt(mq.style.left)>(-10 - aw)) ?parseInt(mq.style.left)-cps+"px" : parseInt(tWidth)+10+"px";} 
//window.onload=startticker;
function formatNumber(number) {
	//with commas, 2 digit dec
  number=number+'';
  return number.replace(/[^\d\.\-]/g, '')
    .replace(/(\.\d{2})[\W\w]+/g, '$1')
    .split('')
    .reverse()
    .join('')
    .replace(/(\d{3})/g,'$1,')
    .split('')
    .reverse()
    .join('')
    .replace(/^([\-]{0,1}),/, '$1')
    .replace(/(\.\d)$/, '$1'+'0')
    .replace(/\.$/, '.00');
}
                  
