function NLGetXMLDocument(url)
{
var response;

	var xmlReq = new ActiveXObject("Microsoft.XMLDOM");
	xmlReq.async='false';
	xmlReq.load(url);
	response = xmlReq;

return response;
}

function NLCreateXMLRoot(doc, name)
{
var response;

	doc.loadXML("<"+name+"/>");
	response = doc.documentElement;

return response;
}


function NLCreateXMLDocument()
{
var response;

	xmlDoc = new ActiveXObject("Msxml.DOMDocument");
	response = xmlDoc;

return response;
}

function NLPostXMLDocument(url, doc, async, callback)
{
var debugXml = false; 
var response;

    var xmlReq= new ActiveXObject("Microsoft.XMLHTTP");
   	xmlReq.Open("POST", url, async);
  	xmlReq.Send(doc);

	response = xmlReq.responseXml;



if( debugXml )
{
	alert(xmlReq.responseText);
}

var errors = response.getElementsByTagName('NLXMLERROR');
if( errors.length > 0 )
{
	alert('An error occured on the server while processing your request.');
}
return response;
}



function switchState( owner )
{
 var plusSign = document.getElementById( owner + "_p");
 var minusSign = document.getElementById( owner + "_m");
 var detailBody = document.getElementById( owner + "_detail");

 var switchState = plusSign.style.display;
 if ( 'none' == switchState )
 {
 	display( plusSign, true );
 	display( minusSign, false );
    display( detailBody, false );
 }
 else
 {
 	display( plusSign, false );
 	display( minusSign, true );
    display( detailBody, true );
 }
 resetDivSizes();
}

function displayNav( bOn )
{
   var divTabs = document.getElementById('div__nav_on');
   var divTD = document.getElementById('div__nav');
   display( divTabs, bOn);
   display( divTD, true );
   divTD.width = bOn ? 200 : 24 ;
   resetDivSizes();
}

function hideNavigation( doc )
{
   var divTabs = doc.getElementById('div__nav_on');
   var divTD = doc.getElementById('div__nav');
   display( divTabs, false);

   display( divTD, false );

   divTD.width = '';

   resetDivSizes();
}


function checkpassword(fld1,fld2,alrt)
{
    return checkpassword(fld1,fld2,alrt,true);
}
function checkpassword(fld1,fld2,alrt,strict,fld3)
{
    var val = fld1.value;
    msg = "";

    if (fld1.value != fld2.value)
    {
        msg += "Passwords don't match.\n";
    }
    else if (!strict)
    {
        if (val.length == 0)
            msg = "Passwords cannot be empty.\n";
    }
    else
    {
        if (val.length < 6)
        {
            msg += "Passwords must be at least 6 characters long.\n";
        }
        if (!/[A-Za-z]/.test(val))
        {
            msg += "Passwords must contain at least one letter (A-Z).\n";
        }
        if (!/[0-9!@#$%^&*.:;~'`*",_|= \<\>\/\\\+\?\-\(\)\[\]\{\}]/.test(val))
        {
            msg += "Passwords must contain at least one number or special character.\n";
        }
        if (!/^[A-Za-z0-9!@#$%^&*.:;~'`*",_|= \<\>\/\\\+\?\-\(\)\[\]\{\}]+$/.test(val))
        {
            msg += "Passwords may contain only letters, numbers, and special characters.\n";
        }
    }
    if (msg.length == 0 && fld3 != null)
    {
        var oldval = fld3.value;
        var charDiffCount = 0;
        for (i=0;i < val.length; i++)
        {
            var c = val.charAt(i);
            if (oldval.indexOf(c) == -1)
                charDiffCount++;
        }
        if (charDiffCount < 2)
            msg = "Old and new passwords are too similar.";
    }
    if (msg.length > 0) {
        if (alrt) alert(msg);
        return false;
    } else {
        return true;
    }
}

/**
 * This function will apply javascript validation to an oracle password
 **/
function checkoraclepassword(fld1)
{
	var val = fld1.value;
	msg = "";

	if (val.length < 6)
	{
		msg += "Passwords must be at least 6 characters long.\n";
	}
	if (!/[A-Za-z]/.test(val))
	{
		msg += "Passwords must contain at least one letter (A-Z).\n";
	}
	if (!/^[A-Za-z]/.test(val))
	{
		msg += "Passwords must begin with a letter (A-Z).\n";
	}
	if (!/[0-9$#_= \<\>\/\\\+\?\-\(\)\[\]\{\}]/.test(val))
	{
		msg += "Passwords must contain at least one number or special character including the underscore (_), dollar sign ($), and pound sign (#).\n";
	}
	if (!/^[A-Za-z0-9#$_= \<\>\/\\\+\?\-\(\)\[\]\{\}]+$/.test(val))
	{
		msg += "Passwords can only contain alphanumeric characters and the underscore (_), dollar sign ($), and pound sign (#).\n";
	}

	if (msg.length > 0) {
		alert(msg);
		return false;
	} else {
		return true;
	}
}


function checkacctname(fld1)
{
    var val = fld1.value;
    if (!onlydigitsandchars(val))
    {
        alert("Company login names must contain only letters and digits.");
        return false;
    }
    if (val.length < 4)
    {
        alert("Company login names must be at least 4 characters long.");
        return false;
    }
    if (!alphafirst(val))
    {
        alert("Company login names must begin with a letter");
        return false;
    }
    return true;
}

function checkusername(fld1)
{
    var val = fld1.value;
    if (!onlydigitsandchars(val))
    {
        alert("User names must contain only letters and digits.");
        return false;
    }
    if (val.length < 4)
    {
        alert("User names must be at least 4 characters long.");
        return false;
    }
    if (!alphafirst(val))
    {
        alert("Usernames must begin with a letter.");
        return false;
    }
    return true;
}




function chooseAorAn(sField, capsflag)
{
    
    var sReturn = (capsflag ? "A":"a");
    var cVowels = ['a','e','i','o','u'];
    var iLength = cVowels.length;
    sField = sField.toLowerCase();

    for (var i = 0; i < iLength; i++)
    {
      if (sField.charAt(0) == cVowels[i])
      {
        sReturn = sReturn + "n";
        break;
      }
    }

    return sReturn;
}

function dollars_string(amount)
{
    var temp = amount;
    DigitStrings = new Array('zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine');
    TeenStrings = new Array('ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eightteen', 'nineteen');
    DecadeStrings = new Array('zero', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety');
    result = '';
    if (temp >= 1000)
    {
        result = result + dollars_string(Math.floor(temp/1000)) + 'thousand ';
        temp = temp % 1000;
    }
    if (temp >= 100)
    {
        result = result + DigitStrings[Math.floor(temp/100)] + ' hundred ';
        temp = temp % 100;
    }
    if (temp >= 20)
    {
        result = result + DecadeStrings[Math.floor(temp/10)] + ' ';
        temp = temp % 10;
    }
    if (temp >= 10)
    {
        result = result + TeenStrings[Math.floor(temp-10)] + ' ';
        temp = temp - Math.floor(temp);
    }
    else if ((amount == 0) || (temp > 0))
    {
        result = result + DigitStrings[Math.floor(temp)] + ' ';
        temp = temp - Math.floor(temp);
    }
    return result;
}



function validate_html(field, val_type)
{
	var doalert = true;
	if (field.value == null || field.value.length == 0 || val_type == null)
    {
        window.isvalid = true;
        return true;
    }

    html = field.value.toLowerCase().replace(/\n/g,"").replace(/\t/g," ");
    var validflag = true;
    var err = '';

	
    if (val_type == 'html')
    {
		if (html.indexOf('<html') == -1)
			err = "HTML document must begin with an <HTML> tag";
		else if (html.indexOf('</html') == -1)
			err = "HTML document must end with a </HTML> tag";
		else if (html.indexOf('</html') < html.indexOf('<html') || html.indexOf('</html') < html.lastIndexOf('<'))
			err = "</HTML> tag is in the wrong place";
		else if (html.indexOf('<body') == -1)
			err = "HTML document is missing <BODY> tag.";
		else if (html.indexOf('<body') < html.indexOf('<html'))
			err = "<BODY> tag is in the wrong place.";
		else if (html.indexOf('</body') == -1)
			err = "HTML document is missing </BODY> tag.";
		else if (html.indexOf('</body') < html.indexOf('<body') || html.indexOf('</body') > html.indexOf('</html'))
			err = "</BODY> tag is in the wrong place";
		else
			val_type = "table";
    }
    else
    {
		if (html.indexOf('<html') != -1 || html.indexOf('</html') != -1 || html.indexOf('<body') != -1 || html.indexOf('</body') != -1)
		{
			err = "Only an HTML fragment is expected here, not a whole HTML document.  There should be no <HTML> or <BODY> tags";
		}
    }

	var index = 0;
	var len = 0;
    if (err == '')
    {
		var expectedtags = "<"+val_type+">";
		var newindex;
		var bFirst = true;
		var iNestLevel = 0;
		var scriptSave;
		var attributeIdx;
		
		while ((newindex = html.indexOf("<", index)) != -1)
		{
			if (newindex < attributeIdx) newindex = attributeIdx;
			index = newindex+1;
			var tag = html.substring(newindex);
			if (tag.indexOf(">") != -1)
				tag = tag.substring(0, tag.indexOf(">"));
			if (tag.indexOf(" ") != -1)
				tag = tag.substring(0, tag.indexOf(" "));

			
			if (tag == "<!--")
			{
				index = html.indexOf("-->", index);
				if (index == -1) index = html.length;
				continue;
			}

			
			if (tag.substring(0,2) == "<"+"%")
			{
				var endindex = html.indexOf("%"+">", index);
				if (endindex == -1) { err='Missing substitution closing tag sequence %'+'> for open tag at character '+(index); break; }
				index = endindex;
				continue;
			}

			tag += ">"
			len = tag.length;

			
			attributeIdx = newindex+len-1;
			var openQuoteIdx;
			var bInSingQuot = false;
			var bInDoubQuot = false;
			while (attributeIdx < html.length)
			{
				var c = html.charAt(attributeIdx);
				if (c == '\\') { attributeIdx+=2; continue; }
				else if (c == '\'') { if (!bInDoubQuot) {bInSingQuot=!bInSingQuot; if (bInSingQuot)openQuoteIdx=attributeIdx;} }
				else if (c == '\"') { if (!bInSingQuot) {bInDoubQuot=!bInDoubQuot; if (bInDoubQuot)openQuoteIdx=attributeIdx;} }
				else if (c == '>' && !(bInSingQuot || bInDoubQuot)) { break; }
				attributeIdx++;
			}
			if (bInSingQuot || bInDoubQuot)
			{
				index = openQuoteIdx+1;
				len = 1;
				err = "Missing closing quote on tag attribute at character "+(index-newindex)+" for:\n"+html.substring(newindex, attributeIdx+1);
				break;
			}

			
			if (tag != "<td>" && tag != "</td>"
			 && tag != "<tr>" && tag != "</tr>"
			 && tag != "<table>" && tag != "</table>"
			 && tag != "<script>" && tag != "</script>")
				continue;

			
			if (tag.substring(0,2) == "</")
				iNestLevel--;
			else
			    iNestLevel++;

			if (iNestLevel < 0)
			{
				err = "There are too many closing table tags due to tag "+tag.toUpperCase()+" at character "+newindex;
				break;
			}

			
			if (bFirst)
			{
				if (tag != '<script>' && tag != '</script>')
				{
					bFirst = false;
					if (expectedtags.indexOf(tag) == -1)
					{
						err = "The first table tag in your HTML must be a "+expectedtags.toUpperCase()+" tag, not "+tag.toUpperCase();
						break;
					}
				}
			}
			else
			{
				if (expectedtags.indexOf(tag) == -1)
				{
					var list = expectedtags.replace(/></g,'> or <');
					err = "Expected "+list+" at character "+newindex+", but found a "+tag.toUpperCase()+" tag";
					break;
				}
			}

			
			if (tag == "<table>" || tag == "</tr>")
			{
				expectedtags = "</table><tr><script>";
			}
			else if (tag == "<td>" || tag =="</table>")
			{
				expectedtags = "</td><table><script>";
			}
			else if (tag == "<tr>" || tag == "</td>")
			{
				expectedtags = "</tr><td><script>";
			}
			else if (tag == "<script>")
			{
				scriptSave = expectedtags; expectedtags = "</script>";
			}
			else if (tag == "</script>")
			{
				expectedtags = scriptSave; scriptSave = "";
			}
		}

		if (err == '' && iNestLevel > 0)
		{
			err = "Not all table tags were closed ("+iNestLevel+").  Your HTML is missing a closing "+expectedtags.substring(0, expectedtags.indexOf('>'))+"> tag at the end";
		}
    }

    if (err != '')
    {
        if (doalert)
			alert(err);
		validflag = false;
		setSelectionRange(field, index-1, index+len-1);
    }

    window.isvalid = validflag;
    return validflag;
}

function validate_tag(str)
{
	if (str == null) return true;
	if (str.length>=2 && str.substring(0,2)=="__") return false;
    var re = new RegExp("([A-Za-z0-9_]+)");
    return (re.exec(str)!=null && RegExp.$1==str);
}


function adddays(d, daystoadd)
{
    var d2 = new Date(d.getTime() + 86400 * daystoadd * 1000);
    if (d2.getHours() != d.getHours())
    {
    if ((d.getHours() > 0 && d2.getHours() < d.getHours()) || (d.getHours() == 0 && d2.getHours() == 23))
      d2.setTime(d2.getTime() + 3600*1000);
    else
      d2.setTime(d2.getTime() - 3600*1000);
  }
  d.setTime(d2.getTime());
  return d;
}
function addmonths(d, mtoadd)
{
    var curmonth = d.getMonth()+mtoadd;
    while (curmonth < 0)
    {
        curmonth += 12;
        nlSetFullYear(d, nlGetFullYear(d)-1);
    }
    while (curmonth > 11)
    {
        curmonth -= 12;
        nlSetFullYear(d,nlGetFullYear(d)+1);
    }
    d.setMonth(curmonth);
    return d;
}


function modifydate(d, val, mmyyyy)
{
    timenow = d;
    
    var v = val.split(",");
    var num = 0;
    for (var i=0; i<3; i++)
    {
        if (v[i] == "-")
        {
            continue;
        }
        else if (v[i].charAt(0) == "-" || v[i].charAt(0) == "+")
        {
            num = parseInt(v[i],10);
            if (i==0) 
                adddays(timenow, num);
            else if (i==1)
                addmonths(timenow, num);
            else if (i==2)
                nlSetFullYear(timenow,nlGetFullYear(timenow)+num);
        }
        else
        {
            num = parseInt(v[i],10);
            if (i==0)
                timenow.setDate(num);
            else if (i==1)
                timenow.setMonth(num);
            else if (i==2)
                nlSetFullYear(timenow,num);
        }
    }
    if (v[3] == "0"||v[3] == "1"||v[3] == "2")
    {
        var qstart = parseInt(v[3],10);
        num = timenow.getMonth();
        addmonths(timenow, 0-((num-qstart+3)%3));
    }
    if (v[4] == "Y")
    {
        adddays(timenow,-1);
    }
    if (v[5] == "E")
    {
        
        num = timenow.getDay(); 
        adddays(timenow, ((5+window.weekstart-num)%7));
    }
    else if (v[5] == "B")
    {
        
        num = timenow.getDay(); 
        adddays(timenow, -((num+1-window.weekstart) % 7));
    }
    else if (v[5] == "C")
    {
        

    }
    return (mmyyyy ? getmmyydatestring(timenow) : getdatestring(timenow));
}


function nlutil_getmodifieddate(type,which,fm,mmyyyy)
{
    var curdate = new Date();
    if (type=="ALL")
        return "";
    if (type.substr(0,2) == 'SO')
    {
        type = type.substr(2);
        which = 1;
    }
    timenow = new Date();
    if (type.substr(1,3) == 'AGO' || type.substr(1,2) == 'FN')
    {
        var unit = type.substr(0,1);
        var past = type.substr(1,3) == 'AGO';
        var count = (past ? -1 : 1)*parseInt(type.substr(past ? 4 : 3));
        if (unit == "D")
            modifier = count+",-,-,N,N,-";
        else if (unit == "W")
            modifier = count*7+",-,-,N,N,-";
        else if (unit == "M")
            modifier = "-,"+count+",-,N,N,-";
        else if (unit == "Q")
            modifier = "-,"+count*3+",-,N,N,-";
        else if (unit == "Y")
            modifier = "-,-,"+count+",N,N,-";
    }
    else if (type=="TODAY")
        modifier =  (which==1 ? "-,-,-,N,N,-" : "-,-,-,N,N,-");
    else if (type=="TMTD")
        modifier =  (which==1 ? "1,-,-,N,N,-" : "-,-,-,N,N,-");
    else if (type=="OY")
        modifier =  (which==1 ? "+1,-,-1,N,N,-" : "-,-,-,N,N,-");
    else if (type=="OQ")
        modifier =  (which==1 ? "+1,-3,-,N,N,-" : "-,-,-,N,N,-");
    else if (type=="YESTERDAY")
        modifier =  (which==1 ? "-1,-,-,N,N,-" : "-1,-,-,N,N,-");
    else if (type=="TOMORROW")
        modifier =  (which==1 ? "+1,-,-,N,N,-" : "+1,-,-,N,N,-");
    else if (type=="OW")
        modifier =  (which==1 ? "-6,-,-,N,N,-" : "-,-,-,N,N,-");
    else if (type=="TW")
        modifier =  (which==1 ? "-,-,-,N,N,B" : "-,-,-,N,N,E");
    else if (type=="LW")
        modifier =  (which==1 ? "-7,-,-,N,N,B" : "-7,-,-,N,N,E");
    else if (type=="LWTD")
        modifier =  (which==1 ? "-7,-,-,N,N,B" : "-7,-,-,N,N,-");
    else if (type=="TWTD")
        modifier =  (which==1 ? "-,-,-,N,N,B" : "-,-,-,N,N,-");
    else if (type=="TY")
        modifier =  (which==1 ? "1,0,-,N,N,-" : "31,11,-,N,N,-");
    else if (type=="TM")
        modifier =  (which==1 ? "1,-,-,N,N,-" : "1,+1,-,N,Y,-");
    else if (type=="OM")
        modifier =  (which==1 ? "+1,-1,-,N,N,-" : "-,-,-,N,N,-");
    else if (type=="LM")
        modifier =  (which==1 ? "1,-1,-,N,N,-" : "1,-,-,N,Y,-");
    else if (type=="LMTD")
        modifier =  (which==1 ? "1,-1,-,N,N,-" : "-,-1,-,N,N,-");
    else if (type=="NW")
        modifier =  (which==1 ? "+7,-,-,N,N,B" : "+7,-,-,N,N,E");
    else if (type=="N4W")
        modifier =  (which==1 ? "+7,-,-,N,N,B" : "+29,-,-,N,N,E");
    else if (type=="NM")
        modifier =  (which==1 ? "1,+1,-,N,N,-" : "1,+2,-,N,Y,-");
    else if (type=="NOW")
        modifier =  (which==1 ? "+1,-,-,N,N,-" : "+7,-,-,N,N,-");
    else if (type=="NOM")
        modifier =  (which==1 ? "+1,-,-,N,N,-" : "-,+1,-,N,N,-");
    else if (type=="NOQ")
        modifier =  (which==1 ? "+1,-,-,N,N,-" : "-,+3,-,N,N,-");
    else if (type=="NOY")
        modifier =  (which==1 ? "+1,-,-,N,N,-" : "-,-,+1,N,N,-");
    else if (type=="SMLFQ")
        modifier =  (which==1 ? "1,-3,-,N,N,-" : "1,-2,-,N,Y,-");
    else if (type=="SMLFY")
        modifier =  (which==1 ? "1,-,-1,N,N,-" : "1,+1,-1,N,Y,-");
    else if (type=="SMLFQTD")
        modifier =  (which==1 ? "1,-3,-,N,N,-" : "-,-3,-,N,N,-");
    else if (type=="SMLFYTD")
        modifier =  (which==1 ? "1,-,-1,N,N,-" : "-,-,-1,N,N,-");
    else if (type=="CUSTOM")
        modifier =  (which==1 ? "-,-,-,-,N,-" : "-,-,-,-,N,-");
    else if (type=="")
        modifier =  (which==1 ? "" : "");
    else if (type.search("FQ")!=-1)
    {
        var curmonth = curdate.getMonth();
        var monthmod=0;
        var yearmod;
        var endmodifier;
        if (which==1)
        {
            modifier = "1,";
            yearmod = (type == "SFQLFY" || type == "SFQLFYTD") ? "-1" : "-";
            endmodifier = yearmod+","+(fm%3)+",N,-";
            if (type=="LFQTD" || type=="LFQ")
                monthmod +=  -3;
            else if (type=="TFQTD" || type=="SFQLFYTD")
                monthmod += 0;
            else if (type=="TFQ" || type == "SFQLFY")
                monthmod += 0;
            else if (type=="NFQ")
                monthmod += 3;
        }
        else
        {
            if (type=="LFQTD" || type=="TFQTD" || type=="SFQLFYTD")
            {
                modifier = "-,";
                yearmod = type=="SFQLFYTD" ? "-1" : "-"
                endmodifier = yearmod+",N,N,-";
            }
            else
            {
                modifier = "1,";
                yearmod = type=="SFQLFY" ? "-1" : "-"
                endmodifier = yearmod+","+(fm%3)+",Y,-";
            }
            if (type=="TFQTD" || type=="LFQ" || type=="SFQLFYTD")
                monthmod =  0; 
            else if (type=="LFQTD")
                monthmod += -3;
            else if (type=="TFQ" || type=="SFQLFY")
                monthmod += 3;
            else if (type=="NFQ")
                monthmod +=  6;
        }

        if (monthmod < 0)
            modifier += monthmod+",";
        else if (monthmod == 0)
            modifier += "-,";
        else if (monthmod > 0)
            modifier += "+"+monthmod+",";

        modifier += endmodifier;
    }
    else if (type.search("FY")!=-1)
    {
        var curmonth = curdate.getMonth();
        var yearmod = (curmonth< fm) ? -1 : 0;
        var endmodifier;
        if (which==1)
        {
            modifier = "1,"+fm+",";
            endmodifier = "N,N,-";
            if (type=="LFYTD" || type=="LFY")
                yearmod +=  -1;
            else if (type=="TFYTD" || type=="TFY")
                yearmod += 0;
            else if (type=="NFY")
                yearmod +=  1;
        }
        else
        {
            if (type=="LFYTD" || type=="TFYTD")
            {
                modifier = "-,-,";
                endmodifier = "N,N,-";
            }
            else
            {
                modifier = "1,"+fm+",";
                endmodifier = "N,Y,-";
            }
            if (type=="TFYTD")
                yearmod =  0; 
            else if (type=="LFY")
                yearmod +=  0;
            else if (type=="LFYTD")
                yearmod += -1;
            else if (type=="TFY")
                yearmod += 1;
            else if (type=="NFY")
                yearmod +=  2;
        }

        if (yearmod < 0)
            modifier += yearmod+",";
        else if (yearmod == 0)
            modifier += "-,";
        else if (yearmod > 0)
            modifier += "+"+yearmod+",";

        modifier += endmodifier;
    }
    else
        return "";
    return modifydate(curdate, modifier,mmyyyy);
}


function nlTestDrivePopup(taskid,usertype)
{
    var dest = '/core/help/testdrivepopup.nl?taskid='+taskid+'&seqnum=0&usertype='+usertype;
    createTDWindow(dest);
}

function createTDWindow(dest)
{

  var wide = screen.width*(0.35);
  var high = screen.height*(0.3);
  if(wide<150 || high<150)
  {
    wide = 150;
    high = 150;
  }
  var leftpos = screen.width-(wide+20);
  var toppos =  screen.height-(high+60);
  window.open(dest,'test','scrollbars=yes,width='+wide+',height='+high+',left='+leftpos+',top='+toppos);
}

function displayHelpSearch(sSearchString)
{
    var searchwindow = window.open('/core/help/helpindex.nl?searchstring='+sSearchString,'helpSearch','');
    searchwindow.focus();
    return false;
}

function nlCustomHelp(id)
{
    var customwindow = window.open('/core/help/customhelp.nl?htext='+id,'customhelp','scrollbars=no,width=350,height=150');
    customwindow.focus();
    return false;
}

function nlPopupHelp(taskId, usertype, anchor, seqnum)
{
    var dest;
    if (usertype == null)
        dest = '/core/help/helpindex.nl?key='+taskId;
    else
    {
        dest = '/core/help/helpindex.nl?taskid='+taskId;
        if(anchor != null && anchor.length>0)
            dest += '&anchor='+anchor;
        if(seqnum != null)
            dest += '&seqnum='+seqnum;
    }
    var newWin = window.open(dest,'popuphelp','toolbar=yes,menubar=yes,scrollbars=yes,location=yes,resizable=yes,height=400,width=800');
    newWin.focus();
}

function nlPopupHelpEdit(taskId)
{
    var dest = '/core/help/helpadmin.nl?taskid='+taskId;
    var newWin = window.open(dest,'helpedit','toolbar=yes,menubar=yes,scrollbars=yes,location=yes,resizable=yes');
    newWin.focus();
}



function setTextUnderline(val, bSet)
{
  var n = val.className.indexOf('hover');
  if(n >= 0 && bSet == false)
  {
    val.className = val.className.substring(0,n);
  }
  else if(n < 0 && bSet == true)
  {
    val.className += 'hover';
  }
  return true;
}



function getFieldSetDisplayField(field, fields)
{
	var returnMe = null;
	if ( field.indexOf('_display') != -1 )
		returnMe = field;
	else
	{
	 	for (var i = 0; i < fields.length; i++ )
		{
		 	if ( fields[i] == field+'_display' )
				returnMe = fields[i];
		}
	}
	return returnMe;
}

function syncFieldSet( mach, data )
{
	var dataFields = data.split(String.fromCharCode(6) );
	var slct = dataFields[0];
	var fields = dataFields[1].split(String.fromCharCode(8) );
	var types = dataFields[2].split(String.fromCharCode(8) );
	var labels = dataFields[3].split(String.fromCharCode(8) ) ;
	var dataContent = dataFields[4].split(String.fromCharCode(7) );

	var sOutput = "";
	var inpField = null;
	for (var i = 0; i < fields.length; i++)
	{
		if ( dataContent[i] )
		{
			var curType = types[i];
			var curName = fields[i];
			var curElement = mach.miniform.elements[curName];

			if (curType == "select" || curType == "slaveselect")
			{
				if ( isMultiSelect(curElement) )
					syncmultiselectlist( curElement ,dataContent[i] );
				else
					synclist( curElement,dataContent[i], false );
			}
			else if ( curType == "radio" )
				syncradio( curElement,dataContent[i], false );
			else if (curType == "currency")
				curElement.value = format_currency( parseFloat(dataContent[i]) );
			else if ( curType == "checkbox" )
				curElement.checked = (dataContent[i] == "T");
			else if ( curType == "fieldset" )
				curElement.value = syncFieldSet( mach, dataContent[i] );
			else if ( curType == "namevaluelist" )
			{
				curElement.value = dataContent[i];
				syncnamevaluelist( curElement );
			}
			else 
				curElement.value = dataContent[i];
		}
	}
}


function openMapWindow(address)
{
    

  address = trim(address);
  if (address.length == 0)
  {
    alert("You must enter an address before you can view a map.");
    return;
  }

  var lines = address.split("\n");
  var line, streetAddress, cityStateZip;
  var i = 0;

  
  for (; i < lines.length; i++)
  {
    line = trim(lines[i]);
    if (line.length == 0)
      continue;
    if (/^\d/.exec(line))
    {
      streetAddress = escape(line);
      break;
    }
  }
  if (i >= lines.length)
  {
    alert("Cannot find a street address.");
    return;
  }

  
  var j = lines.length - 1;
  var ukaddress = false;
  cityStatezip = " ";
  

  for (; j >= 0; j--)
  {
    line = trim(lines[j]);
    if (line.length == 0)
      continue;
  
    if ( (/\d{5}/.exec(line)) || (/\s/.exec(line) && !/United\s*States/i.exec(line)))
    {
      cityStateZip = escape(line);
      break;
    }

  
  }


  var mapUrl;

     
          if (j <= i)
  {
    alert("Cannot find a line containing city, state, and zip.");
    return;
  }

        mapUrl = "http://maps.yahoo.com/py/maps.py?Pyt=Tmap&GET%A0Map=Get+Map&addr="+streetAddress+"&csz="+cityStateZip;
    

    window.open(mapUrl);
}

function getHexValueFromDecimal(val)
{
	if ( isNaN(val) )
		return null;

	var returnMe = "#";
	for ( var i = 0; i < 3; i++ )
	{
		var myByte = val & 0xFF;
		val >>= 8;
		var lsNybble = myByte & 0x0F;
		var msNybble = (myByte >> 4) & 0x0F;
		returnMe += msNybble.toString(16);
		returnMe += lsNybble.toString(16);
	}
     
    var re = /^#[0-9ABCDEFabcdef]{6,}$/;
    if ( !re.test(returnMe) )
        returnMe = null;
	return returnMe.toUpperCase();
}

function getTwoDigitHexString(val)
{
  var hex = (new Number(val % 256)).toString(16).toUpperCase();
  if (hex.length == 1)
    hex = "0"+hex;
  return hex;
}

function setHexColor(fld)
{
  fld.value = "#" + getTwoDigitHexString(fld.form.elements[fld.name+"Red"].value) + getTwoDigitHexString(fld.form.elements[fld.name+"Green"].value) + getTwoDigitHexString(fld.form.elements[fld.name+"Blue"].value);
}

function setColorComponents(fld)
{
  fld.form.elements[fld.name+"Red"].value=parseInt(fld.value.substr(1,2),16);
  fld.form.elements[fld.name+"Green"].value=parseInt(fld.value.substr(3,2),16);
  fld.form.elements[fld.name+"Blue"].value=parseInt(fld.value.substr(5,2),16);
}

function setColorFromHSL(fld)
{
  var h=parseFloat(fld.form.elements[fld.name+"Hue"].value)/360.0;
  var s=parseFloat(fld.form.elements[fld.name+"Sat"].value)/100.0;
  var l=parseFloat(fld.form.elements[fld.name+"Lum"].value)/100.0;
  var r,g,b;
  if (s==0)
  {
    r = Math.round(l*255.0);
    g = r;
    b = r;
  }
  else
  {
    var v = l < 0.5 ? l*(1.0+s) : (l+s - l*s);
    if (v <= 0)
    {
      r = 0;
      g = 0;
      b = 0;
    }
    else
	{
	  var m = l+l-v;
	  var sv= (v - m) /v
	  h *= 6.0;
	  var sextant = Math.floor(h);
	  var fract = h - sextant;
	  vsf = v * sv * fract;
	  mid1 = m + vsf;
	  mid2 = v - vsf;
	  switch (sextant) {
		case 0: r = v; g = mid1; b = m; break;
		case 1: r = mid2; g = v; b = m; break;
		case 2: r = m; g = v; b = mid1; break;
		case 3: r = m; g = mid2; b = v; break;
		case 4: r = mid1; g = m; b = v; break;
		case 5: r = v; g = m; b = mid2; break;
		case 6: r = v; g = mid1; b = m; break;
	  }
	  r = Math.round(r*255.0);
	  g = Math.round(g*255.0);
	  b = Math.round(b*255.0);
    }
  }
  fld.form.elements[fld.name+"Red"].value=r;
  fld.form.elements[fld.name+"Green"].value=g;
  fld.form.elements[fld.name+"Blue"].value=b;
  fld.value = "#"+getTwoDigitHexString(r)+getTwoDigitHexString(g)+getTwoDigitHexString(b);
}

function setHSLFromColor(fld)
{
  var r=parseFloat(fld.form.elements[fld.name+"Red"].value)/255.0;
  var g=parseFloat(fld.form.elements[fld.name+"Green"].value)/255.0;
  var b=parseFloat(fld.form.elements[fld.name+"Blue"].value)/255.0;

  var v = Math.max(Math.max(r,g),b);
  var m = Math.min(Math.min(r,g),b);
  l = (v + m)/2.0;
  if (v == m)
  {
    s = 0;
    h = 0;
  }
  else
  {
    var vm = v-m;
    s = vm/(l < 0.5 ? v+m : 2.0-v-m);


    var r2 = (v - r) / vm;
    var g2 = (v - g) / vm;
    var b2 = (v - b) / vm;

    if (r == v)
      h = (g == m ? 5.0 + b2 : 1.0 - g2);
    else if (g==v)
      h = (b == m ? 1.0 + r2 : 3.0 - b2);
    else
      h = (r == m ? 3.0 + g2 : 5.0 - r2);
  }
  fld.form.elements[fld.name+"Hue"].value=Math.round(60.0*h);
  fld.form.elements[fld.name+"Sat"].value=Math.round(100.0*s);
  fld.form.elements[fld.name+"Lum"].value=Math.round(100.0*l);
}



function ie55fix(bFromMachine)
{
  var max = document.all.length;
  for(var i = 0; i < max; i++)
  {
    var obj = document.all[i];
    if(obj.tagName == 'SPAN' || obj.tagName == 'DIV')
    {
        var vis = obj.style.visibility;
      obj.style.visibility = (vis == 'hidden' ? 'visible' : 'hidden');
      obj.style.visibility = vis;
    }
  }
}


function setGraph(file)
{
	document.graph.src = '/app/center/snapshotgraph.nl?g='+file;
}



function validate_AbaRoutingNumber(routing)
{
	if (routing == null || routing.length == 0)
    {
        window.isvalid = true;
        return true;
    }
	var maxlen = 9;
	var validflag = true;
    var err = '';
    if (routing.length != maxlen)
    {
        err = "ABA Routing Numbers must be nine characters.";
        validflag = false
    }
	var t = routing;
	var n = 0;
    for (i = 0; i < t.length; i += 3)
    {
        n += parseInt(t.charAt(i), 10) * 3 + parseInt(t.charAt(i + 1), 10) * 7 +  parseInt(t.charAt(i + 2), 10);
    }

	if (n != 0 && n % 10 == 0)
	{
        validflag = true;
	}
	else
	{
		err = "The specfied routing number failed validation for ABA Routing Numbers.("+routing+")";
        validflag = false;
	}


    if (err != '')
    {
		alert(err);
    }
    window.isvalid = validflag;
    return validflag;
}



function resetIframeSource(windowName)
{
	// we must use setTimeout here, but I'm not sure why...  without it the browser just hangs
	setTimeout("document.getElementById('"+windowName+"').src='/empty.html';",10);
}


function secureOneWayHash(cleartext)
{
    var mlen = Math.floor(cleartext.length/2);
    if (cleartext.length%2 != 0)
        mlen++;
    var bitlen = mlen*32;

    var pad = 16-(mlen%16);
    if (pad < 16)
        mlen += pad;

    if (pad < 3)
        mlen += 16;
    var M = new Array(mlen);
    var charx = 0;
    var intx = 0;
    for ( ; charx < cleartext.length; charx += 2, intx += 1)
    {
        var value = cleartext.charCodeAt(charx);
        if (charx+1 < cleartext.length)
            value += (cleartext.charCodeAt(charx+1) << 16);
        M[intx] = value;
    }

    if (intx != mlen)
    {
        M[intx++] = 0x80000000;

        for ( ; intx < mlen-1; intx++)
            M[intx] = 0;

        M[intx] = bitlen;
    }

    var A = 0x67452301;
    var B = 0xefcdab89;
    var C = 0x98badcfe;
    var D = 0x10325476;
    var E = 0xc3d2e1f0;
    var a, b, c, d, e;

    var K = new Array(0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6);
    var W = new Array(80);

    var block;
    for (block = 0; block < Math.floor(mlen/16); block++)
    {
        a = A; b = B; c = C; d = D; e = E;

        var t;
        for (t = 0; t < 80; t++)
        {
            if (t < 16)
                W[t] = M[block*16 + t];
            else
                W[t] = leftCircShift(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16], 1);
        }

        for (t = 0; t < 80; t++)
        {
            var round = Math.floor(t/20);
            var temp = safe_add(leftCircShift(a, 5),safe_add(e,safe_add(W[t],K[round])));
            if (round == 0)
                temp = safe_add(temp, ((b&c) | ((~b)&d)));
            else if (round == 2)
                temp = safe_add(temp, ((b&c) | (b&d) | (c&d)));
            else
                temp = safe_add(temp,(b ^ c ^ d));
            e = d;
            d = c;
            c = leftCircShift(b, 30);
            b = a;
            a = temp;
        }
        A = safe_add(A,a); B = safe_add(B,b); C = safe_add(C,c); D = safe_add(D,d); E = safe_add(E,e);
    }
    return unsignedToHex(A) + unsignedToHex(B) + unsignedToHex(C) + unsignedToHex(D) + unsignedToHex(E);
}

function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >>> 16) + (y >>> 16) + (lsw >>> 16);
  return ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
}

function leftCircShift(value, numbits)
{
    var top = (value << numbits) & 0xFFFFFFFF;
    var bottom = (value >>> (32 - numbits));
    return top | bottom;
}

function unsignedToHex(x)
{
    var lsw = x & 0xFFFF;
    var msw = (x >>> 16) & 0xFFFF;
    return msw.toString(16)+lsw.toString(16);
}




var NLDate_pnDaysInMonths = new Array(31,28,31,30,31,30,31,31,30,31,30,31);


function NLDate_getLastDayOfMonth(dDate)
{
    var m = dDate.getMonth();
    var days = NLDate_pnDaysInMonths[m];

    if(m == 1) 
    {
        var y = dDate.getYear();
        if ( (y% 400 == 0) || ((y % 4 == 0) && (y % 100 != 0)) )
        {
            days++;
        }
    }
    return days;
}