function handleError(msg,errDocUrl,line)
{
	var errorUrl = "/core/pages/logJavascriptError.nl";

    xmlDoc = new ActiveXObject("Msxml.DOMDocument");
	xmlDoc.loadXML("<JSERROR/>");
    jsErrorNode = xmlDoc.documentElement;

    var msgNode = xmlDoc.createElement('MSG');
	msgNode.appendChild( xmlDoc.createTextNode(msg ) );
    jsErrorNode.appendChild( msgNode );

    var winHrefNode = xmlDoc.createElement('WINHREF');
	winHrefNode.appendChild( xmlDoc.createTextNode(window.location.href ) );
    jsErrorNode.appendChild( winHrefNode );

    var lineNode = xmlDoc.createElement('LINE');
	lineNode.appendChild( xmlDoc.createTextNode(line) );
    jsErrorNode.appendChild( lineNode );

    var isInitedNode = xmlDoc.createElement('ISINITED');
	isInitedNode.appendChild( xmlDoc.createTextNode(window.isinited) );
    jsErrorNode.appendChild( isInitedNode );

	if (window.parent != window)
	{
        var parHrefNode = xmlDoc.createElement('PARENTHREF');
        parHrefNode.appendChild( xmlDoc.createTextNode(window.parent.location.href) );
        jsErrorNode.appendChild( parHrefNode );
	}
    if (errDocUrl != window.location.href)
    {
        var errDocUrlNode = xmlDoc.createElement('ERRORDOCURL');
        errDocUrlNode.appendChild( xmlDoc.createTextNode(errDocUrl) );
        jsErrorNode.appendChild( errDocUrlNode );
    }

    // Create a request object and post the xml document
    var xmlReq= new ActiveXObject("Microsoft.XMLHTTP");
   	xmlReq.Open("POST", errorUrl, true);
  	xmlReq.Send(xmlDoc);

	return false; // show the default error message
}
window.onerror = handleError;



function encode(text)
{
    return escape(text);
}

function alphafirst(str)
{
    var re = new RegExp("([A-Za-z].*)");
    return (re.exec(str)!=null && RegExp.$1==str);
}

function scrollDiv()
{


		document.getElementById('div__label').scrollLeft = document.getElementById('div__body').scrollLeft;

}

function getDocumentHeight()
{
	if (window.innerHeight)
		return window.innerHeight;
	else 
		return document.body.clientHeight;
}
function getDocumentWidth()
{
	if (window.innerWidth)
		return window.innerWidth ;
	else  
		return document.body.clientWidth;
}


function onBeforePrint()
{
	var t= document.getElementById('div__label');
	if (t != null)
	{
		t.style.width = null ;
        t.style.height = null;
	};
    t = document.getElementById('div__body');
	if (t != null)
	{
		t.style.width = null ;
        t.style.height = null;
	}
	document.body.scroll = 'auto';
}
function onAfterPrint()
{
	resetDivSizes();
}
window.onbeforeprint = onBeforePrint;
window.onafterprint = onAfterPrint;

function resetDivSizes()
{
	var header = document.getElementById('div__header');
	var title = document.getElementById('div__title');
	var label = document.getElementById('div__label'); 
	var list = document.getElementById('div__body');
	var nav = document.getElementById( 'div__nav');
	var footer = document.getElementById('div__footer');

	if (list == null)
		return; 
	document.body.scroll = 'no';

	
	var nHeight = getDocumentHeight() - 10;
	nHeight -= getHeight(header) + getHeight(footer) + getHeight(title) + getHeight(label) + 4;
	list.style.height = ( nHeight > 0 ? nHeight : 0);
	
	list.clientWidth;
	
	var docwidth = getDocumentWidth() - 10;
	if ( nav != null )
	{
		nHeight += getHeight( label ) + getHeight( title ) - getHeight( document.getElementById( 'div__nav_img') );
	    document.getElementById('div__nav_on').style.height = ( nHeight > 0 ? nHeight : 0);
		docwidth -= isIE ? nav.clientWidth : nav.scrollWidth;

	}
   	list.style.width = Math.max( docwidth, 0 );

	
	if (label != null )
	{
		label.style.width = isIE ? list.clientWidth : list.scrollWidth;
	}
	
	for (var i=1; document.getElementById('div__labcol'+ i ) != null; i++)
	{
		var col = document.getElementById('div__labcol'+i);
		var lab = document.getElementById('div__lab'+i);
		if (lab != null )
		{
			
			if ( isIE || lab.tagName == 'TD' )
				lab.style.width = col.offsetWidth;
			else
				lab.offsetParent.style.width = col.offsetWidth;
		}
	}

	
 	makeVisible(label);
	makeVisible(list);
	makeVisible(footer);

	hideInvisibleRows();
}



function hideInvisibleRows()
{
	var div = document.getElementById("squeezeBox");
	if (div == null)
		return;
	var trs = div.getElementsByTagName("tr");
	var hiddenHeight = 0;
	for (var i=0; i < trs.length; i++)
	{
		
		if (trs[i].className == "labelRow" && isValEmpty(trs[i].getAttribute("squeezeBox")) )
		{
			hiddenHeight += trs[i].offsetHeight + 1;
			trs[i].setAttribute("squeezeBox","T");
		}
	}
	if (hiddenHeight > 0)
	{
		div.style.overflow = "hidden";
		div.style.height = div.offsetHeight - hiddenHeight + (isIE ? 0 : 28);
	}
}



function resizePopupWindow()
{
	var list = document.getElementById('div__body');
	if (list == null)
		return; 
	var docwidth = getDocumentWidth()-10;
	var maxspanwidth = getMaxContentWidth(list.getElementsByTagName("span"));
	var maxdivwidth = getMaxContentWidth(list.getElementsByTagName("div"));
	var maxwidth = Math.max(list.scrollWidth,Math.max(maxspanwidth,maxdivwidth));
    
	if ( maxwidth > docwidth )
	   	window.resizeBy(maxwidth -docwidth,0);
}

function getMaxContentWidth(elems)
{
	var size = 0;
	for ( i = 0; i < elems.length; i++ )
	{
		if ( elems[i].scrollWidth > size )
			size = elems[i].scrollWidth;;
	}
	return size;
}

function getHeight(elem)
{
	if (elem == null)
		return 0;
	else
		return elem.offsetHeight;
}

function makeVisible(elem)
{
	if (elem != null)
		elem.style.visibility = 'visible';
}

function display(elem, on )
{
	if (elem != null)
		elem.style.display = on ? '' : 'none';
}



function trim(str)
{
    return str.replace(/^\s+/,"").replace(/\s+$/,"");
}
function onlydigitsandchars(str)
{
    var re = new RegExp("([A-Za-z0-9]+)");
    return (re.exec(str)!=null && RegExp.$1==str);
}
function onlydigits(str)
{
    var re = new RegExp("([0-9]+)");
    return (re.exec(str)!=null && RegExp.$1==str);
}
function checkzipcode(f, bIsCanada)
{
  var v = f.value;
  var n = bIsCanada? 6:5;
  if(!onlydigits(f) || v.length != n)
  {
    alert('Please enter a valid '+n+' digit '+(bIsCanada?'Postal':'Zip')+' Code.');
    return false;
  }
  return true;
}


function splitIntoRows( value )
{
	return value != null ? value.split(String.fromCharCode(2)) : null;
}
function splitIntoCells( value )
{
	return value != null ? value.split(String.fromCharCode(1)) : null;
}

function checkemailvalue(s_email,alrt)
{

    if ((s_email.length < 6) ||
       (s_email.indexOf('@',0) < 1) ||
       (s_email.lastIndexOf('@') != s_email.indexOf('@',0)) ||
       (s_email.lastIndexOf('@') > (s_email.length - 5)) ||
       (s_email.lastIndexOf('.') > (s_email.length - 3)) ||
       (s_email.lastIndexOf('.') < (s_email.length - 5)) ||
       (s_email.indexOf('..',0) > -1) ||
       (s_email.indexOf('@.',0) > -1))
    {
        if (alrt)
        {
            alert('Please enter a valid e-mail address.');
        }
        return false;
    }

	if ((s_email.indexOf(' ',0) > -1) ||
		(s_email.indexOf(',',0) > -1) ||
		(s_email.indexOf('"',0) > -1) ||
		(s_email.indexOf('\'',0) > -1) ||
		(s_email.indexOf('>',0) > -1) ||
		(s_email.indexOf('<',0) > -1))
	{
		if (alrt)
		{
			alert('Please enter a valid e-mail address. NetSuite does not accept e-mail addresses with apostrophes, quotation marks, commas, spaces, or greater than or less than signs.');
		}
		return false;
	}

    
    if ((s_email.indexOf('.@',0) > -1))
    {
        if (alrt)
        {
            alert('Please proofread this email address.  It may contain an error.');
        }
    }
    return true;
}

function checkemailprefix(s_email)
{

    if (s_email.indexOf('@',0) >= 2 &&
        s_email.lastIndexOf('@') == s_email.indexOf('@',0) &&
        s_email.indexOf('..',0) < 0 &&
        s_email.indexOf(' ',0) < 0  &&
        s_email.indexOf(',',0) < 0  &&
	    s_email.indexOf('"',0) < 0  &&
	    s_email.indexOf('>',0) < 0  &&
	    s_email.indexOf('<',0) < 0)
    {
        return true;
    }
    return false;
}

function checkemail(fld1,emptyok,alrt)
{
    
    fld1.value = trim(fld1.value);
    return checkemail2(fld1,fld1,emptyok,alrt);
}
function checkemail2(fld1,fld2,emptyok,alrt)
{
    var s_email = fld1.value;

    if (s_email != fld2.value)
    {
        alert('E-mail addresses must match');
        return false;
    }
    if (emptyok && s_email.length==0)
    {
        return true;
    }
    return checkemailvalue(s_email,alrt);
}



function checkccnumber(fld1,fld2)
{

    var cardnum = fld1.value;
    if(cardnum.length > 0) cardnum = cardnum.replace(/ /gi,'');
    if(cardnum.length > 0) cardnum = cardnum.replace(/-/gi,'');

    if (cardnum.length<13 || cardnum.length>16)
    {
        alert("Credit card numbers must contain between 13 and 16 digits.");
        return false;
    }
    if (!onlydigits(cardnum))
    {
        alert("Credit card numbers must contain only digits.");
        return false;
    }

    

    var no_digit = cardnum.length;
    var oddoeven = no_digit & 1;
    var sum = 0;

    for (var count = 0; count < no_digit; count++)
    {
        var digit = parseInt(cardnum.charAt(count),10);
        if (!((count & 1) ^ oddoeven))
        {
            digit *= 2;
            if (digit > 9)
            digit -= 9;
        }
        sum += digit;
    }
    if (sum % 10 != 0)
    {
        alert("Credit card number is not valid.  Please check that all digits were entered correctly.");
        return false;
    }

    if (fld2 != null)
        fld2.value = cardnum;
    else
        fld1.value = cardnum;
    return true;
}


function isValEmpty(val,nam)
{
    if (val == null)
        return true;

    if (val.length == 0)
        return true;
    re = / /gi;
    val = val.replace(re,'');
    return (val.length == 0)
}

function isempty(fld1,nam)
{
    var val = fld1.value;
    return isValEmpty(val,nam);
}


function emptyIfNull(val)
{
	return val == null ? '' : val;
}


function checknotempty(fld1,nam)
{
    if (isempty(fld1))
    {
        alert( chooseAorAn(nam, true) +" "+ nam +" must be entered");
        
         try { 
			fld1.focus();
			fld1.select();
         } catch (e) { } 
        return false;
    }

    return true;
}


function amount_string(amount)
{
    var cents = Math.floor((amount-Math.floor(amount))*100+0.5);
    var centstring = (cents < 10) ? '0'+cents.toString() : cents.toString();
    var dollarstring = dollars_string(Math.floor(amount));
    return dollarstring.charAt(0).toUpperCase() + dollarstring.substr(1) + 'and ' + centstring + '/100';
}
function format_rate(a,p)
{
  var returnMe;
    if (isNaN(parseFloat(a)))
  {
        returnMe= '';
  }
  else
  {
    var s=(a<0);
    if (s) a=-a;
   var d=Math.floor(a);
   var c=Math.floor((a-d)*(p?10:100)+0.5);
    if (a == d+c/(p?10:100))
    {
      if (c==(p?10:100)) {d++;c=0;}
      var cs=p?c.toString():((c < 10)?'0'+c.toString():c.toString());
      returnMe = (s?'-':'')+d.toString()+'.'+cs+(p?'%':'');
   }
    else
      returnMe = (s?'-':'')+a+(p?'%':'');
  }
  return returnMe;
}
function round_currency(a)
{
  var b = Math.abs(a);
  b = Math.round(b * 10000000.0) / 100000.0;
  b = Math.round(b) / 100.0;
  b = b * (a >= 0.0 ? 1.0 : -1.0);
  if( b == 0.0 )
    return 0.0;
  return b;
}
function pad_to_atleast_two_decimal_places(a)
{
  var s;
    if(a == null)
    {
       s = '';
    }
  else
  {
    s = a.toString();
    var n = s.indexOf('.');
    if(n == -1)
    {
      s = s + '.00';
    }
    else if(n == s.length-1)
    {
      s = s + '00';
    }
    else if(n == s.length-2)
    {
      s = s + '0';
    }
    if (n == 0)
    {
      s = '0' + s;
    }
  }
  return s;
}
function format_currency(a, bDoNotRound)
{
var returnMe;
if(isNaN(a))
{
    return '';
}
else if( !(bDoNotRound == true)) 
{
    returnMe = round_currency(a);
}
else
    returnMe = a;
returnMe = pad_to_atleast_two_decimal_places(returnMe);
return returnMe;
}




function validate_textarea(field, maxlen, doalert)
{
    if (field.value == null || field.value.length == 0)
    {
        window.isvalid = true;
        return true;
    }
    var validflag = true;
    var err = '';
    if (field.value.length > maxlen)
    {
        err = "Text too long (truncated at "+maxlen+" characters)";
        newval = field.value.substr(0,maxlen);
        field.truncatedValue = true;
    }
    else
        field.truncatedValue = false;
    if (err != '')
    {
        if (doalert) alert(err);
        field.value = newval;
        validflag = false;
    }
    window.isvalid = validflag;
    return validflag;
}


function validate_field(field, type, doalert, autoplace, minval, maxval, mandatory)
{
	type = type.toLowerCase();
    if (field.value == null || field.value.length == 0)
    {
		if (mandatory == true)
		{
		    if (doalert) alert("Field must contain a value.");
		    field.focus();
		    field.select();
			window.isvalid = false;
			return false;
		}
		else
		{
		    window.isvalid = true;
		    return true;
		}
    }
    var validflag = true;
    if (type =="url")
	{
		var val = field.value;
		if ( val.indexOf('http://') == -1 && val.indexOf('https://') == -1)
		{
            if (doalert)
				alert("Invalid url. Url must start with http:// or https://");
            validflag = false;
		}
	}
	else if (type == "currency" || type == "currency2" || type == "poscurrency")
    {
        var val = field.value.replace(/\$/g,"");
        val = val.replace(/\ /g,"");
		val = val.replace(/,/g,"");
        val = val.toLowerCase();
        if(val.charAt(0) == '=') val = val.substr(1);

        

        if (val.substr(1).search(/[\+\-\*\/]/g) != -1)
        {
            
            var c = val.charAt(0);
            if(val.charAt(0) >='a' && val.charAt(0) <='z')
            {
                value = "error";
            }
            else
            {

          
        
        try {
        
                  val = eval(val);
        
        } catch (e) { val = "error"; }
        
                autoplace = false;
            }
        }
        numval = parseFloat(val);
        if (isNaN(numval) || Math.abs(numval)>=1.0e+10)
        {
            if (doalert) alert("Invalid currency value. Values must be numbers up to 9,999,999,999.99");
            validflag = false;
        }
        if (type == "poscurrency" && numval < 0)
        {
            if (doalert) alert("Invalid currency value. Value can not be negative.");
            validflag = false;
        }
        if (validflag)
        {
            

            if(autoplace && val.indexOf(".") == -1) numval/=100;
            if(type == "currency" || type == "poscurrency")
                field.value = format_currency(numval);
            else
                field.value = format_currency(numval, true);
        }
    }
    else if (type == "date")
    {
        var dt = NLDate_parseString(field.value, doalert);

        if(dt == null)
        {
            validflag = false;
        }
        else
        {
            validflag = true;
            field.value = getdatestring(dt);
        }
    }
    else if (type == "mmyydate")
    {
        var month;
        var day = 0;
        var year;
        var fmterr = "MMYY, MMYYYY, MM/DD/YY, MM/DD/YYYY";

        if(window.dateformat == "DD-Mon-YYYY" && field.value.indexOf("/") == -1 && !onlydigits(field.value))
        {
            var ms = "JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC";
            var val = field.value;
            if (val.indexOf("-") != -1)
            {
                var c = val.split("-");
                month = (ms.indexOf(c[0].toUpperCase())+3)/3;
                year=parseInt(c[1],10);
            }
            else
            {
                var l = val.length, str;
                str = val.substr(0,3); if (ms.indexOf(str.toUpperCase()) >= 0) month = (ms.indexOf(str.toUpperCase())+3)/3;
                str = val.substr(3);
                year=parseInt(str,10);
            }
            fmterr = "Mon-YY, Mon-YYYY, MonYY or MonYYYY";
        }
        else
        {
			if (field.value.indexOf("/") == -1)
			{
				var l = field.value.length;
				month = parseInt(field.value.substr(0,2-l%2),10);
				year = parseInt(field.value.substr(2-l%2),10);
			}
			else
			{
				var comps = field.value.split("/");
				month = parseInt(comps[0],10);
				if (comps[2] != null)
				{
					day  = parseInt(comps[1],10);
					year = parseInt(comps[2],10);
				}
				else
					year = parseInt(comps[1],10);
			}
		}
        if (month >= 1 && month <= 12 && ((year >= 0 && year < 100) || (year > 1900 && year <2100)))
        {
            if (year < 50)
                year += 2000;
            else if (year < 100)
                year += 1900;
            if (day == 0 || day > 31)
            {
                if (month == 2)
                {
                    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
                        day = 29;
                    else
                        day = 28;
                }
                else if (month == 4 || month == 6 || month == 9 || month == 11)
                    day = 30;
                else
                    day = 31;
            }
            field.value = getmmyydatestring(new Date(year, month-1, day));
            validflag = true;
        }
        else
        {
            if (doalert) alert("Invalid date value (must be "+fmterr+")");
            validflag = false;
        }
    }
    else if (type == "ccexpdate")
    {
        

        validflag = true;
        var m=0, y=0;
        if(field.value.indexOf('/') != -1)
        {
            var dToday = new Date();
            var Y = dToday.getYear();
            var M = dToday.getMonth() + 1;
            if(Y <= 999) Y += 1900;         

            var c = field.value.split('/');
            if(onlydigits(c[0])) m = parseInt(c[0],10);
            if(onlydigits(c[1])) y = parseInt(c[1],10);

            if(m<1) m=1; else if(m>12) m=12;
            if(y<100) y+=((y>=70)?1900:2000);

            if(y<Y || (y==Y && m<M))
            {
                if (doalert) alert("Notice: The credit card appears to be incorrect");
            }
            field.value = (m<10?'0':'')+m+'/'+y;
        }
        else
        {
            if (doalert) alert("Please enter an expiration date int MM/YYYY format");
            validflag = false;
        }

    }
    else if (type == "ccnumber") 
    {
        validflag = checkccnumber(field);
    }
    else if (type == "rate")
    {
        var numval;
        var minclip=-10000000;
        var maxclip=10000000;

        var val = field.value;
        val = val.replace(/,/g,"");
        var pctidx = val.lastIndexOf("%");
        if (pctidx!=-1)
            val = val.substr(0,pctidx);

        numval = parseFloat(val);
        if (isNaN(numval))
        {
            if (doalert) alert("Invalid number or percentage");
            validflag = false;
        }
        else if  (numval >= maxclip)
        {
            if (doalert) alert("Number exceeds maximum value");
            validflag = false;
        }
        else if  (numval <= minclip)
        {
            if (doalert) alert("Number is less than minimum value");
            validflag = false;
        }
        else
        {
            if(autoplace && pctidx == -1 && val.indexOf(".") == -1) numval/=100;
            field.value = format_rate(numval,pctidx!=-1);
            validflag = true;
        }
    }
    else if (type == "integer" || type == "posinteger" || type == "float" || type == "posfloat" || type == "percent")
    {
        var numval;
        var custrange=false;
        if ((minval != null || maxval != null) || type == "percent")
          custrange=true;
        var minclip= minval == null ? (type == "percent" ? 0 : -Math.pow(2,32)) : minval;
        var maxclip = maxval == null ?(type == "percent" ? 100 : Math.pow(2,64)) : maxval;
        var val = field.value;
        val = val.replace(/,/g,"");
        val = val.replace(/%/g,"");

        if (type == "integer")
            numval = parseInt(val,10);
        else if (type == "posinteger")
        {
            numval = parseInt(val,10);
            minclip=0;
        }
        else if (type == "posfloat")
        {
            numval = parseFloat(val);
            minclip=0;
        }
        else
            numval = parseFloat(val);
        if (isNaN(numval) || (custrange && (numval > maxclip || numval < minclip)) || (!custrange && (numval >= maxclip || numval <= minclip)))
        {
      if (doalert)
      {
      	if (type == "percent")
      	{
      	  alert("Invalid percentage (must be between 0 and 100)");
      	}
        else if (custrange == true)
        {
          if (minval == null)
			alert("Invalid number (must be at most "+maxclip+")");
		  else if (maxval == null)
            alert("Invalid number (must be at least "+minclip+")");
          else
          alert("Invalid number (must be between "+minclip+" and "+maxclip+")");
        }
        else if (type=="posinteger" || type=="posfloat")
            alert("Invalid number (must be positive)");
        else if (type=="integer" || type=="float")
        {
            if (isNaN(numval))
                alert('You may only enter numbers into this field');
            else
                alert("Illegal number: " + numval);
        }
        else
            alert("Invalid number (must be greater than -4.29B");
         }
         validflag = false;
        }
        else
        {
            if (type == "percent")
            {
                if (numval == Math.floor(numval))
                    field.value = numval + ".0%";
                else
                    field.value = numval + "%";
            }
            else
            	field.value = numval;
            validflag = true;
        }
    }
    else if (type == "address")
    {
        var err = '';
        if (field.value.length>999)
        {
            err = "Address too long (truncated at 1000 characters)";
            newval = field.value.substr(0,999);
        }
        if (err != '')
        {
            if (doalert) alert(err);
            field.value = newval;
        }
    }
    else if (type == "time" || type == "timetrack")
    {
        var hours;
        var minutes;

        var re = /([0-9][0-9]?)?(:[0-5][0-9])?/
        var result = re.exec(field.value)
        if (result==null || result.index > 0 || result[0].length != field.value.length)
        {
            timeval = parseFloat(field.value);
            if (isNaN(timeval))
                hours = -1;
            else
            {
                hours = Math.floor(timeval);
                minutes = Math.floor((timeval-hours)*60+0.5);
            }
        }
        else
        {
            if (RegExp.$1.length > 0)
                hours = parseInt(RegExp.$1,10);
            else
                hours = 0;
            if (typeof(RegExp.$2) != "undefined" && RegExp.$2.length > 0)
                minutes = parseInt(RegExp.$2.substr(1),10);
            else
                minutes = 0;
        }
        if (hours >= 0 && minutes >= 0 && minutes < 60)
        {
            field.value = hours + ":" + (minutes < 10 ? "0" : "") + minutes;
            validflag = true;
        }
        else
        {
            if (doalert) alert("Invalid time value (must be HH:MI)");
            validflag = false;
        }
    }
    else if (type == "timeofday")
    {
        var hours;
        var minutes;
        var amorpm;

        var re;
        var result;
        var fldvalue = field.value;

        
        re = /^[0-9]{1,4}([a|p])?$/;
	    if ( re.test(fldvalue) )
	    {
	        if ( fldvalue.length < 3 || ( fldvalue.length == 3 && RegExp.$1 ) )
	        {
		        var hh = RegExp.$1 ? fldvalue.substring(0,fldvalue.length-1) : fldvalue;
		        hh = parseInt( hh ) == 0 ? 12 : ( parseInt( hh ) > 12 ? parseInt( hh ) % 12 : hh );
		        var mm = "00";
		        var ampm = RegExp.$1 ? (RegExp.$1.toLowerCase() == 'p' ? "pm" : "am") : ( parseInt( fldvalue ) > 11 ? "pm" : "am" );
				fldvalue = hh + ":" + mm + " "+ampm;
	        }
		    else if (fldvalue.length == 3 || (fldvalue.length == 4 && RegExp.$1) )
		    {
		        var hh = fldvalue.substring(0,1) == "0" ? "12" : fldvalue.substring(0,1);
		        var mm = RegExp.$1 ? fldvalue.substring(1,3) : fldvalue.substring(1);
		        var ampm = RegExp.$1 ? (RegExp.$1.toLowerCase() == 'p' ? "pm" : "am") : "am";
				fldvalue = hh + ":" + mm + " "+ampm;
			}
		    else
		    {
 		        var hh = fldvalue.substring(0,2);
		        hh = parseInt( hh ) == 0 ? 12 : ( parseInt( hh ) > 12 ? parseInt( hh ) % 12 : hh );
		        var mm = RegExp.$1 ? fldvalue.substring(2,4) : fldvalue.substring(2);
		        var ampm = parseInt( fldvalue.substring(0,2) ) > 11 ? "pm" : "am";
		        ampm = RegExp.$1 ? (RegExp.$1.toLowerCase() == 'p' ? "pm" : "am") : ampm;
				fldvalue = hh + ":" + mm + " "+ampm;
			}
		}

        re = /([0-9][0-9]?)(:[0-5][0-9])\s?([AaPp])?[Mm]?/
        result = re.exec(fldvalue)
        if (result==null || result.index > 0 || result[0].length != fldvalue.length)
            hours = -1;
        else
        {
            if (RegExp.$1.length > 0)
                hours = parseInt(RegExp.$1,10);
            else
                hours = -1;
            if (typeof(RegExp.$2) != "undefined" && RegExp.$2.length > 0)
                minutes = parseInt(RegExp.$2.substr(1),10);
            else
                minutes = -1;
            amorpm = (RegExp.$3.length == 0 || RegExp.$3 == 'a' || RegExp.$3 == 'A') ? "" : "pm";
        }
        if (hours > 0 && hours <=12 && minutes >= 0 && minutes < 60)
        {
			if (amorpm == "") amorpm = "am";
            field.value = hours + ":" + (minutes < 10 ? "0" : "") + minutes + " " + amorpm;
            validflag = true;
        }
        else if (hours > 12 && hours <= 25 && minutes >= 0 && minutes < 60 && amorpm == "")
        {
			amorpm = "pm";
			hours -= 12;
            field.value = hours + ":" + (minutes < 10 ? "0" : "") + minutes + " " + amorpm;
        }
        else
        {
            if (doalert) alert("Enter the time of day as HH:MI or HH:MI AM/PM. You can enter hours from 1 to 12 and minutes from 0 to 59.");
            validflag = false;
        }
    }
    else if (type == "visiblepassword")
    {
        if (checkpassword(field, field, doalert))
            validflag = true;
        else
            validflag = false;
    }
    else if (type == "email")
    {
        if (checkemail(field, true, doalert))
            validflag = true;
        else
            validflag = false;
    }
    else if (type == "emails")
    {
        var bademail;
        var emails1 = field.value.split(',');
        for (var i=0; i<emails1.length; i++)
        {
            if (validflag && !isValEmpty(emails1[i]))
            {
				var emails = emails1[i].split(';');
				for (var j=0; j<emails.length; j++)
				{
					if (validflag && !isValEmpty(emails[j]))
					{
						var semail = emails[j].replace(/ /gi,'');
						validflag = checkemailvalue(semail, false);
						if (!validflag)
							 bademail = emails[j];
					}
				}
            }
        }
        if (!validflag)
            if (doalert) alert("Invalid email found:"+bademail);
    }
    else if (type == "printerOffset")
    {
        var maxclip =  2.0;
        var minclip = -2.0;
        var val = field.value;
        val = val.replace(/,/g,"");

        numval = parseFloat(val);
        if (isNaN(numval) || numval >= maxclip || numval <= minclip)
        {
      if (doalert)
      {
        if (numval >= maxclip)
            alert("Invalid number (must be lower than " + maxclip + ").");
        else if (numval <= minclip)
            alert("Invalid number (must be greater than " + minclip + ").");
        else
            alert("Illegal number: " + numval);
            }
            validflag = false;
        }
        else
        {
            
            validflag = true;
        }
    }
    else if (type == "metricPrinterOffset")
    {
        var maxclip =  50.0;
        var minclip = -50.0;
        var val = field.value;
        val = val.replace(/,/g,"");

        numval = parseFloat(val);
        if (isNaN(numval) || numval >= maxclip || numval <= minclip)
        {
      if (doalert)
      {
        if (numval >= maxclip)
            alert("Invalid number (must be lower than " + maxclip + ").");
        else if (numval <= minclip)
            alert("Invalid number (must be greater than " + minclip + ").");
        else
            alert("Illegal number: " + numval);
            }
            validflag = false;
        }
        else
        {
            
            validflag = true;
        }
    }
    else if (type == "phone"  || type == "fullphone")
    {
        var val = field.value;
        
        if(val.length!=0 && val.length<7)
        {
            if (doalert) alert("Phone number should have seven digits or more.");
            validflag = false;
        }

        if (validflag && type == "fullphone")
        {
            
            if(val.length!=0 && val.length<10)
            {

                if (doalert) alert("Please include the area code for phone number: " + val);
                validflag = false;
            }
        }
        if (autoplace && validflag)
        {
           var re = /^[0-9]+$/;
           if (re.test(val))
           {
             if (val.length == 7)
                field.value=val.substring(0,3)+"-"+val.substring(3);
             else if (val.length == 10)
                field.value = "("+val.substring(0,3)+") "+val.substring(3,6)+"-"+val.substring(6);
            }
        }

    }
    else if (type == "color")
    {
        var val = field.value;
        if (val.substring(0,1) == "#")
            val = val.substring(1);
        
        var re = /^[0-9ABCDEFabcdef]{6,}$/;
        if (val.length > 6 || !re.test(val))
        {
            if (doalert) alert("Color value must be 6 hexadecimal digits of the form: #RRGGBB.  Example: #FF0000 for red.");
            validflag = false;
        }
        else
            field.value = "#"+val;
    }
    else if (type == "identifier")
    {
        var val = field.value;
        var re = /^[0-9A-Za-z_]+$/;
        if (!re.test(val))
        {
            if (doalert) alert("Identifiers can contain only digits, alphabetic characters, or \"_\" with no spaces");
			validflag = false;
		}
	    else
	      field.value = val.toLowerCase();
    }
    if (mandatory == true)
    {
		if (field.value.length == 0)
		{
            if (doalert) alert("Field must contain a value.");
            validflag = false;
		}
	}
    if (!validflag)
    {
        field.focus();
        field.select();
    }
    window.isvalid = validflag;
    return validflag;
}


function setSelectionRange(input, selectionStart, selectionEnd) {
  if (input.setSelectionRange) {
    input.focus();
    input.setSelectionRange(selectionStart, selectionEnd);
  }
  else if (input.createTextRange) {
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionEnd);
    range.moveStart('character', selectionStart);
    range.select();
  }
}


function nlGetFullYear(d)
{
    if (navigator.appName == "Netscape")
    {
        if (d.getFullYear=="undefined")
            return d.getYear();
    }
    return d.getFullYear();
}
function nlSetFullYear(d,val)
{
    if (navigator.appName == "Netscape")
    {
        if (d.setFullYear=="undefined")
            d.setYear(val);
    }
    d.setFullYear(val);
}


function getdatestring(d)
{
    if (window.dateformat == "DD-Mon-YYYY")
    {
        var m = "JanFebMarAprMayJunJulAugSepOctNovDec";
        return d.getDate()+"-"+m.substring(d.getMonth()*3,d.getMonth()*3+3)+"-"+nlGetFullYear(d);
    }
    else if (window.dateformat == "DD.MM.YYYY")
        return d.getDate()+"."+(d.getMonth()+1)+"."+nlGetFullYear(d);
    else if (window.dateformat == "DD/MM/YYYY")
        return d.getDate()+"/"+(d.getMonth()+1)+"/"+nlGetFullYear(d);
    else
        return (d.getMonth()+1)+"/"+d.getDate()+"/"+nlGetFullYear(d);
}
function gettimestring(time)
{
	var hours = time.getHours();
   	var minutes = time.getMinutes();
    var ampm = hours < 12 ? 'am' : 'pm';
    return timestr = (hours%12 < 1 ? 12 : hours%12) + ':' + (minutes < 10 ? '0'+minutes.toString() : minutes) + ' ' + ampm;
}

function getmmyydatestring(d)
{
    return ((d.getMonth()+1) < 10 ? "0" : "") + (d.getMonth()+1) + "/" + nlGetFullYear(d);
}
function stringtodate(arg)
{
    var comps;
	var month, day, year;
    var datetime = arg.split(" ");
    var d = datetime[0];
    if (d.indexOf("/") != -1)
    {
        comps = d.split("/");
        if (comps.length == 2)  
        {
        	month = parseInt(comps[0],10)-1;
	        day = 1;
	        year = parseInt(comps[1],10);
        }
        else if (window.dateformat == "DD/MM/YYYY")
        {
	        day = parseInt(comps[0],10);
	        month = parseInt(comps[1],10)-1;
	        year = parseInt(comps[2],10);
	    }
        else
        {
	        month = parseInt(comps[0],10)-1;
	        day = parseInt(comps[1],10);
	        year = parseInt(comps[2],10);
	    }
    }
    else if (d.indexOf(".") != -1)
    {
        comps = d.split(".");
        if (comps.length == 2)  
        {
	        day = 1;
	        month = parseInt(comps[0],10);
	        year = parseInt(comps[1],10)-1;
	    }
	    else
	    {
	    	day = parseInt(comps[0],10);
	        month = parseInt(comps[1],10)-1;
	        year = parseInt(comps[2],10);
	    }
    }
    else if (d.indexOf("-") != -1)
    {
        comps = d.split("-");
        var ms = "JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC";
        if (comps.length == 2)  
        {
	        day = 1;
	        month = parseInt(comps[0],10);
	        year = ms.indexOf(comps[1].toUpperCase())/3;
	    }
	    else
	    {
	     	day = parseInt(comps[0],10);
	        month = ms.indexOf(comps[1].toUpperCase())/3;
	        year = parseInt(comps[2],10);
	    }
    }
    var result;
    var t = datetime[1];
    if (t != null)
    {
        comps = t.split(":");
	    var hour = parseInt(comps[0],10);
	    var min  = parseInt(comps[1],10);
        var sec  = (comps[2] != null ? parseInt(comps[2],10) : 0);
        if (datetime[2].toLowerCase() == "pm")
            hour += 12;
        result = new Date(year,month,day,hour,min,sec);
    }
    else
        result = new Date(year,month,day);
    if (year < 50)
        nlSetFullYear(r, year+2000);
    else if (year < 100)
        nlSetFullYear(r, year+1900);
    return result;
}





function nlFieldHelp(db,p,f,fld)
{
    nlOpenWindow('/core/help/fieldhelp.nl?fld='+f+'&perm='+p,'fieldhelp',350,150,fld);
    return false;
}

function nlFieldHelpEdit(db,p,f,fld)
{
    nlOpenWindow('/core/help/admin/helpfieldeditform.nl?perm='+p+'&field='+f,'fieldhelpedit',450,250,fld);
    return false;
}

function DoFieldFocus(form)
{
    if (form == null)
        return;
    var i;
    for (i=0;i< form.elements.length;i++)
    {
        var el = form.elements[i];
        if (el.type == "text" || el.type == "select-one" || el.type == "checkbox")
        {
            el.focus();
            return;
        }
    }
}


function clearMultiSelect(sel)
{
	if ( isNLMultiDropDown(sel) )
		getMultiDropdown(sel.name).removeAll();
	else
	{
		for ( i=sel.length-1; i >=0 ; i-- )
			sel.options[i].selected = false;
	}
}

function getnamevaluelisttext(val,delim,alllabels)
{
	if (val.length == 0)
    	return "";
	var nvarray = val.split(String.fromCharCode(4));
	var result = "";
	for (i=0; i < nvarray.length; i++)
	{
		var nv = nvarray[i].split(String.fromCharCode(3));
		var dv = nv.length==5?nv[4]:nv[3];
		if (dv.length > 0 || alllabels == true)
		{
			if (!isValEmpty(result)) result += delim;
			result += nv[2]+": "+dv;
		}
	}
	return result;
}

function getnamevaluelistvalue(nvlist,name)
{
	if (nvlist.length == 0)
    	return null;
	var nvarray = nvlist.split(String.fromCharCode(4));
	for (i=0; i < nvarray.length; i++)
	{
		var nv = nvarray[i].split(String.fromCharCode(3));
        if (nv[0].toLowerCase() == name.toLowerCase())
            return nv[3];
    }
    return null;
}

function getnamevaluelistdisplayvalue(nvlist,name)
{
	if (nvlist.length == 0)
    	return null;
	var nvarray = nvlist.split(String.fromCharCode(4));
	for (i=0; i < nvarray.length; i++)
	{
		var nv = nvarray[i].split(String.fromCharCode(3));
        if (nv[0].toLowerCase() == name.toLowerCase())
            return nv.length==5?nv[4]:nv[3];
    }
    return null;
}

function setnamevaluelistvalue(nvlist,name,value)
{
	if (nvlist.length == 0)
    	return "";
	var nvarray = nvlist.split(String.fromCharCode(4));
	for (i=0; i < nvarray.length; i++)
	{
		var nv = nvarray[i].split(String.fromCharCode(3));
        if (nv[0].toLowerCase() == name.toLowerCase())
        {
            nv[3] = value;
            nvarray[i] = nv.join(String.fromCharCode(3));
            break;
        }
    }
    return nvarray.join(String.fromCharCode(4));
}

function syncnamevaluelist(list)
{
	list.form.elements[list.name+"_display"].value = getnamevaluelisttext(list.value,"\n", true);
}

function synclist(list,val,makedefault)
{
	if (list.className == 'nldropdown')
	{
		var dd = getDropdown(list);
		if(dd != null)
		{
			var idx = dd.getIndexForValue(val);
			dd.setIndex(idx, true );
			if (makedefault)
				dd.setDefaultIndex(idx);
		}
	}
	else
	{
		for (var i=0; i < list.length; i++)
		{
		    if (list.options[i].value == val)
		    {
		        list.selectedIndex=i
		        if (makedefault)
		            list.options[i].defaultSelected = true;
		        break;
		    }
		}
	}
}
function syncpopup(list,val,name)
{
    var i;
    if (list.className == 'nldropdown')
	{
		var dd = getDropdown(list);
		var idx = dd.getIndexForValue(val);
		dd.setIndex(idx, true );
	}
    else if (isNLMultiDropDown(list))
	{
		var dd = getMultiDropdown(list.name);
		dd.setValues(val);
	}
    else if (list.type == "select-one" || list.type == "select-multiple")
    {
		for (i=0; i < list.length; i++)
		if (list.options[i].value == val)
		{
			list.selectedIndex=i
			break;
		}
    }
    else
    {
		list.value = val;
		var dispfld = list.form.elements[list.name+"_display"];
		if (val.length > 0 || (name != null && name.length > 0))
			dispfld.value = name;
		else
			dispfld.value = dispfld.type == 'text' ? _popup_help : _mult_popup_help;
	}
}
function syncmultiselectlist(list,val)
{
    clearMultiSelect(list);
    if (isNLMultiDropDown(list))
	{
		var dd = getMultiDropdown(list.name);
		dd.setValues(val);
	}
	else if (list.type != "select-multiple")
	{
		list.form.elements[list.name].value = val;
	}
	else
	{
		var selvals = val.split(String.fromCharCode(5));
		for (i=0; i < selvals.length; i++)
		{
			for (j=0; j < list.length; j++)
			{
				if (list.options[j].value == selvals[i])
					list.options[j].selected = true;
			}
		}
	}
}
function syncradio(radio,val,makedefault)
{
    var i;
    for (i=0; i < radio.length; i++)
    {
        if (radio[i].value == val)
        {
            radio[i].checked=true;
            if (makedefault)
                radio[i].defaultChecked = true;
            break;
        }
    }
}
function getlisttext(list, val, frommultisel)
{
	if (list.className == 'nldropdown')
		return getDropdown(list).getTextForValue(val);
	if (list.type != "select-one" && !frommultisel)
	    return '';
	for (var i=0; i < list.length; i++)
	    if (list.options[i].value == val)
	        return list.options[i].text;
	return "";
}
function getmultiselectlisttext(list, val)
{

	if ( isNLMultiDropDown(list) )
	{
		return getMultiDropdown(list.name).getSelectedTextFromValues(val, '<br>');
	}
	else if (list.type != "select-multiple")
	{
		return '';
	}
	else
	{
	    var selvals = val.split(String.fromCharCode(5));
		var label = '';
	    for (i=0; i < selvals.length; i++)
	    {
			if (i > 0) label += '<br>';
				label += getlisttext(list, selvals[i], true);
	    }
	    return label;
	}
}
function getradiotext(radio, val)
{
    var i;
    for (i=0;i< radio.length;i++)
        if (radio[i].value == val)
            return radio[i].textValue;
    return "";
}
function getRadioValue(radio)
{
    var val = '';
    for (var i=0; i < radio.length; i++)
    {
        if (radio[i].checked == true)
        {
            val = radio[i].value;
            break;
        }
    }
    return val;
}

function getFieldSetSpan( fldset )
{
	return fldset.document.getElementById( fldset.id + "_slct" );
}

function getFieldSetValue( fldset, mach )
{
	var encodedData = new Array();
	if ( mach != null )
	{
		var types = mach.getFieldSetSelectedTypes( fldset ); 
		var fields = mach.getFieldSetSelectedFields( fldset );
		var delimData = new Array();

		for ( var i = 0; i < fields.length - 1 ; i++ )
		{
			var inpField = getFormElement(mach.miniform,fields[i]);
			var val = '';
			if (inpField != null)
			{
				
				var spanName = (fields[i].indexOf( '_display' ) == -1 ? fields[i] : fields[i].substring(0,fields[i].indexOf('_display'))) + '_fs';
				var inpSpan = document.getElementById( spanName );
				if (inpSpan == null || inpSpan.style.display != 'none')
				{
					if ( types[i] == 'checkbox' )
						val = inpField.checked ? 'T' : 'F';
					else
						val = inpField.value;
				}
			}
			delimData[i] = val;
		}
		encodedData.push( mach.getFieldSetSelected( fldset ) );
		encodedData.push( fields.join(String.fromCharCode( 8) ) );
		encodedData.push( types.join(String.fromCharCode( 8 ) ) );
		encodedData.push( mach.getFieldSetSelectedLabels( fldset ).join(String.fromCharCode( 8 ) ) );
		encodedData.push( delimData.join( String.fromCharCode( 7 ) ) );
	}
	return encodedData.join( String.fromCharCode(6) );
}

function getFieldSetText( fldset, data, mach, nohtml )
{
	var sOutput = "";
	if ( nohtml == null )
		nohtml = false;
	if ( data != null && data.length > 0)
	{
		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 inpField = null;
		var nCount = 0;

		for( var i=0; i < fields.length; i++ )
		{
			if ( dataContent[i] && dataContent[i].length > 0 && curType != 'checkbox' )
			{
				nCount ++;
			}
		}

		for (var i = 0; i < fields.length; i++)
		{
			if ( dataContent[i] && dataContent[i].length > 0)
			{
				var curType = types[i];
				var bCheckBox = curType == 'checkbox';
				var bWriteLabel = labels[i].length > 0 && ( (!bCheckBox && nCount>1) || dataContent[i] == 'T');
				if ( bWriteLabel )
				{
					sOutput += labels[i];
					if ( !bCheckBox )
						sOutput += ": ";
				}
				if ( !bCheckBox )
				{
					var dataCell = dataContent[i];
					var curName = fields[i];
					var curElement = mach.miniform.elements[curName];
					var pos = curName.indexOf("_display");

					if ( getFieldSetDisplayField(curName, fields) != null )
					{
						if ( pos != -1 && !isValEmpty(dataCell) )
							sOutput += dataCell.replace(/\n/g,  nohtml ? ' ' : '<br>');
					}
					else if ( curType == "select" || curType == "slaveselect")
					{
						if ( isMultiSelect( curElement ) )
							sOutput += getmultiselectlisttext( curElement ,dataCell );
						else
							sOutput += getlisttext( curElement, dataCell )  ;
					}
					else if (curType == "currency")
						sOutput += format_currency( parseFloat( dataCell ) );
					else if (curType == "radio")
						sOutput += getradiotext( curElement, dataCell );
					else if (curType == "namevaluelist")
						sOutput += getnamevaluelisttext( dataCell , nohtml ? " " : "<br>" );
					else if (curType == "fieldset")
						sOutput += getFieldSetText( curName, dataCell, mach );
					else
						sOutput += dataCell.replace(/\n/g,  nohtml ? ' ' : '<br>');
				}

				if ( i + 1 != fields.length && bWriteLabel )
					sOutput +=  nohtml ? " " : "<br>";
			}
		}
	}
	return sOutput;
}



function getSelectValue(sel)
{
	var returnMe;
    if (sel.type != null && sel.type == "select-one")
        returnMe = (sel.options.length == 0 || sel.selectedIndex == -1 || sel.selectedIndex >= sel.options.length) ? '' :  sel.options[sel.selectedIndex].value;
    else if (sel.className == 'nldropdown')
		returnMe = getDropdown(sel).getValue();
    else if (isNLMultiDropDown(sel))
		returnMe = getMultiDropdown(sel.name).getSelectedValues();
    else
        returnMe = sel.value;
    return returnMe;
}
function getSelectValueArray(sel)
{
	var returnMe;
    if (sel.type == "select-one")
	{
		returnMe = new Array(sel.length);
		var i = 0;
		for ( i = 0; i < sel.length; i++ )
			returnMe[i] = sel.options[i].value;
	}
    else if (sel.className == 'nldropdown')
		returnMe = getDropdown(sel).valueArray;
    else if (isNLMultiDropDown(sel))
		returnMe = getMultiDropdown(sel.name).valueArray;
    return returnMe;
}

function getSelectTextForValue(  sel, val )
{
    var textArray = getSelectValueArray(sel);
    var i;
    for (i = 0; i < textArray.length; i++)
    {
        if (textArray[i] == val)
            return getSelectTextAtIndex(sel, i);
    }
    return null;
}
function getSelectTextArray(sel)
{
	var returnMe;
    if (sel.type == "select-one")
	{
		returnMe = new Array(sel.length);
		var i = 0;
		for ( i = 0; i < sel.length; i++ )
			returnMe[i] = sel.options[i].text;
	}
    else if (sel.className == 'nldropdown')
		returnMe = getDropdown(sel).textArray;
    else if (isNLMultiDropDown(sel))
		returnMe = getMultiDropdown(sel.name).textArray;
    return returnMe;
}
function getSelectText(sel)
{
    if (sel.type == "select-one")
        return (sel.options.length == 0 || sel.selectedIndex == -1 || sel.selectedIndex >= sel.options.length) ? null : sel.options[sel.selectedIndex].text;
    else if (sel.className == 'nldropdown')
		return getDropdown(sel).getText();
    else if ( isMultiSelect(sel) )
        return getMultiSelectText( sel );
	else if (sel.type == "hidden" && sel.form != null && getFormElement(sel.form,sel.name+'_display') != null)
		return getFormElement(sel.form,sel.name+'_display').value;
    else
        return sel.text;
}
function setSelectValue(sel, val)
{
	if (sel.className == 'nldropdown')
	{
		var dd = getDropdown(sel);
		var idx = dd.getIndexForValue(val);
		dd.setIndex(idx, true );
	}
	else if (isNLMultiDropDown(sel))
	{
		var dd = getMultiDropdown(sel.name);
		var idx = dd.getIndexForValue(val);
		dd.setIndex(idx);
	}
	else if (sel.type == "select-one")
	{
		var opt = sel.options;
		for (var i=0; i < opt.length; i++)
		{
			if (opt[i].value==val)
			{
				sel.selectedIndex=i;
				break;
			}
		}
	}
    else
        sel.value = val;
}

function addMultiSelectValue(sel, val, name)
{
    if (isNLMultiDropDown(sel))
	{
		var dd = getMultiDropdown(sel.name);
		var idx = dd.getIndexForValue(val);
		dd.addIndex(idx);
    }
    else
    {
        var values = sel.value.split(String.fromCharCode(5));
        for (var i=0;i<values.length;i++)
            if (values[i] == val) return;
        if (values.length == 0 || values[0].length == 0)
        {
            sel.value = val;
            sel.form.elements[sel.name+"_display"].value = name;
        }
        else
        {
            sel.value += String.fromCharCode(5)+val;
            sel.form.elements[sel.name+"_display"].value += "\n"+name;
        }
    }
}

function getSelectValueForText(sel, txt)
{
    var textArray = getSelectTextArray(sel);
    var i;
    for (i = 0; i < textArray.length; i++)
    {
        if (textArray[i] == txt)
            return getSelectValueAtIndex(sel, i);
    }
    return null;
}

function deleteAllSelectOptions(sel, win)
{
	if (sel.className == 'nldropdown')
	{
		getDropdown(sel, win).deleteAllOptions();
	}
	else if (isNLMultiDropDown(sel))
	{
		getMultiDropdown(sel.name, win).deleteAllOptions();
	}
	else if (sel.type == 'select-one' || sel.type == 'select-multiple')
	{
		sel.options.length = 0;
	}
	else
	{
		sel.form.elements[sel.name+"_display"].value = "";
		sel.value = "";
	}
}

function deleteOneSelectOption(sel, value)
{
	if (sel.className == 'nldropdown')
	{
		getDropdown(sel).deleteOneOption(value);
	}
	else if (isNLMultiDropDown(sel))
	{
		getMultiDropdown(sel.name).deleteOneOption(value);
	}
	else if (sel.type == 'select-one' || sel.type == 'select-multiple')
	{
		var opts = sel.options;
		for (var i=0; i < opts.length; i++)
			if (opts[i].value == value)
				opts[i] = null;
	}
	else
	{
		sel.form.elements[sel.name+"_display"].value = "";
		sel.value = "";
	}
}

function getSelectIndex(sel,win)
{
	if (sel.className == 'nldropdown')
	{
		return getDropdown(sel,win).getIndex();
	}
	else
	{
		sel.selectedIndex;
	}
}
function setSelectIndex(sel, val)
{
	if (sel.className == 'nldropdown')
	{
		return getDropdown(sel).setIndex(val, true );
	}
	else if (isNLMultiDropDown(sel))
	{
		return getMultiDropdown(sel.name).setIndex(val);
	}
	else
	{
		sel.selectedIndex = val;
	}
}
function getMultiSelectValues(sel)
{
    if (isMultiSelect(sel))
    {
		var val = '';
		if ( isNLMultiDropDown(sel) )
			val = getMultiDropdown(sel.name).getSelectedValues();
		else
		{
			var i;
			var numParams = 0;
			for (i=0; i < sel.length; i++)
			{
				if (sel.options[i].selected)
					val += ((numParams++ ==0 ? '' : String.fromCharCode(5)) + sel.options[i].value);
			}
		}
        return val;
    }
    else
        return sel.value;
}
function getMultiSelectText(sel)
{
    if ( isMultiSelect(sel) )
    {
		var val = '';
		if ( isNLMultiDropDown(sel) )
			val = getMultiDropdown(sel.name).getSelectedText();
		else
		{
			var i, numParams = 0;
			for (i=0; i < sel.length; i++)
			{
				if (sel.options[i].selected)
					val += ((numParams++ == 0 ? '' : ', ') + sel.options[i].text);
			}
		}
        return val;
    }
	else if (sel.type == "hidden" && sel.form != null && getFormElement(sel.form,sel.name+'_display') != null )
		return getFormElement(sel.form,sel.name+'_display').value;
    else
        return sel.text;
}
function updateMultiSelectValue(fld,displayfld,val,displayval)
{
    fld.value = val;
    var sellabels = displayval.split(String.fromCharCode(5));
    var displaytempval = '', numParams = 0;
    for (i=0; i < sellabels.length; i++)
    {
        displaytempval += ((numParams==0 ? '' : '\n') + sellabels[i]) ;
        numParams++;
    }
    displayfld.value = displaytempval;
}

function addSelectOption(doc,sel,text,value,selected,win)
{
	if (sel.className == 'nldropdown')
	{
		var dd = getDropdown(sel,win);
		dd.addOption(text, value);
		if (selected !== false)
		{
			var idx = dd.getIndexForValue(value);
			dd.setIndex(idx, true );
		}
	}
	else if (isNLMultiDropDown(sel))
	{
		var dd = getMultiDropdown(sel.name,win);
		dd.addOption(text, value, selected);
	}
	else
	{
		var opt = doc.createElement('OPTION');
		opt.text= text;
		opt.value= value;

		if (selected !== false)
		{
			opt.selected = true;
			
			if (isIE)
				sel.selectedIndex = sel.length;
		}
		sel[sel.length] = opt;
	}
}

function setSelectOptionText(sel,value,text,win)
{
	if (sel.className == 'nldropdown')
	{
		var dd = getDropdown(sel,win);
        dd.setOptionText(value,text);
    }
	else if (sel.type == 'select-one' || sel.type == 'select-multiple')
	{
		var opts = sel.options;
		for (var i=0; i < opts.length; i++)
			if (opts[i].value == value)
				opts[i].text = value;
	}
 }

function isMultiSelect(sel)
{
	return	sel != null && (isNLMultiDropDown(sel) || sel.multiple || sel.type == 'select-multiple');
}
function isNLMultiDropDown(el)
{
	return el != null && (el.isddmultiselect || el.className == 'nlmultidropdown');
}

function resetlist(sel)
{
	if ( sel != null )
	{
		if (sel.type == "select-one" || sel.type == 'select-multiple')
		{
			var i;
			for (i=0; i < sel.length; i++)
			{
				if (sel.options[i].defaultSelected)
				{
					sel.selectedIndex=i;
					return;
				}
			}
			sel.selectedIndex=0;
		}
		else if (sel.className == 'nldropdown')
		{
			getDropdown(sel).resetDropDown();
		}
		else if (isNLMultiDropDown(sel))
		{
			getMultiDropdown(sel.name).resetDropDown();
		}
		else
        {
			sel.value = sel.defaultValue;
            sel.form.elements[sel.name+"_display"].value = sel.form.elements[sel.name+"_display"].defaultValue;
        }
	}
}

function setSelectFocus(sel,win)
{
	if ( sel != null )
	{
		if (sel.type == "select-one" || sel.type == "select-multiple")
			sel.focus();
		else if (sel.className == 'nldropdown')
			getDropdown(sel,win).setFocus();
		else if (isNLMultiDropDown(sel))
			getMultiDropdown(sel.name,win).setFocus();
		else
			sel.form.elements[sel.name+"_display"].focus();
	}
}

function disableSelect(sel, val, win)
{
	if ( sel != null )
	{
	    var doc = win != null ? win.document : sel.document != null ? sel.document : window.document;
		if (sel.type == "select-one" || sel.type == "select-multiple")
			sel.disabled = val;
		else if (sel.className == 'nldropdown')
			getDropdown(sel, win).setDisabled(val);
		else if (isNLMultiDropDown(sel))
			getMultiDropdown(sel.name, win).setDisabled(val);
		else
		{
			sel.form.elements[sel.name+"_display"].disabled=val;
            var listlink = doc.getElementById(sel.name+"_popup_list");
			if(listlink != null)
				listlink.style.visibility = val ? "hidden" : "inherit";
			var searchlink = doc.getElementById(sel.name+"_popup_search");
			if (searchlink != null)
				searchlink.style.visibility = val ? "hidden" : "inherit";
			var alllink = doc.getElementById(sel.name+"_popup_all");
			if (alllink != null)
				alllink.style.visibility = val ? "hidden" : "inherit";
		}
        var newlink = isNS4x ? null : doc.getElementById(sel.name+"_popup_new");
        if (newlink != null)
            newlink.style.visibility = val ? "hidden" : "inherit";
        var linklink = isNS4x ? null : doc.getElementById(sel.name+"_popup_link");
        if (linklink != null)
            linklink.style.visibility = val ? "hidden" : "inherit";
	}
}

function getSelectValueAtIndex(sel, idx)
{
	if ( sel != null )
	{
		if (sel.type == "select-one" || sel.type == "select-multiple")
		{
			if ((sel.options != null) && (sel.options.length > idx))
				return sel.options[idx].value;
			else
				return null;
		}
		else if (sel.className == 'nldropdown')
		{
			return getDropdown(sel).getValueAtIndex(idx);
		}
		else if (isNLMultiDropDown(sel))
		{
			return getMultiDropdown(sel.name).getValue(idx);
		}
	}
}

function getSelectTextAtIndex(sel, idx)
{
	if ( sel != null )
	{
		if (sel.type == "select-one" || sel.type == "select-multiple")
		{
			if ((sel.options != null) && (sel.options.length > idx))
				return sel.options[idx].text;
			else
				return null;
		}
		else if (sel.className == 'nldropdown')
		{
			return getDropdown(sel).getTextAtIndex(idx);
		}
		else if (isNLMultiDropDown(sel))
		{
			return getMultiDropdown(sel.name).getText(idx);
		}
	}
}

function setRequired(fld,required)
{
	if ( fld.className == 'nldropdown' )
		getDropdown(fld).setRequired(required);
	else
		fld.className='input' + (required ? 'req' : '');
}

function disableField(fld, val)
{
	if (fld == null)
		return;
    if (fld.className == 'nldropdown' || isNLMultiDropDown(fld) || fld.form.elements[fld.name+"_display"] != null)
        disableSelect(fld, val);
    else if ( getHtmlEditor( fld.name ) != null )
        getHtmlEditor( fld.name ).setDisabled( val );
    else
        fld.disabled = val;
}

window.linearrayArray = new Array();
function getLineArray(machine_name)
{
    if( window.linearrayArray[machine_name] == null )
    {
    	window.linearrayArray[machine_name] = splitIntoRows( document.forms[0].elements[machine_name+'data'].value );
    }
    return window.linearrayArray[machine_name];
}
window.fieldnamesArray = new Array();
function getFieldNamesArray(machine_name)
{
    if( window.fieldnamesArray[machine_name] == null )
    {
    	window.fieldnamesArray[machine_name] = splitIntoCells( document.forms[0].elements[machine_name+'fields'].value );
    }
    return window.fieldnamesArray[machine_name];
}

function getLineCount(machine_name)
{
    return getLineArray(machine_name).length;
}

function hasEncodedField(machine_name, fieldname)
{
    var fieldnames = getFieldNamesArray(machine_name);
    for (var i=0; i < fieldnames.length; i++)
        if (fieldnames[i] == fieldname)
            return true;
    return false;
}

function getEncodedValue(machine_name, linenum, fieldname)
{
	var linearray = getLineArray(machine_name);

    if( linearray[linenum - 1] == null )
         return null;
    var linedata = splitIntoCells( linearray[linenum-1] );
    var fieldnames = getFieldNamesArray(machine_name);
    for (var i=0; i < fieldnames.length; i++)
        if (fieldnames[i] == fieldname)
            return linedata[i];
    return '';
}

function findEncodedValue(machine_name, fieldname, value)
{
	var linearray = getLineArray(machine_name);
	var i;
	var fieldnames = getFieldNamesArray(machine_name);

	for (i=0; i < fieldnames.length; i++)
		if (fieldnames[i] == fieldname)
			break;
	if (i == fieldnames.length)
		return -1;
	for (linenum=0;linenum<linearray.length;linenum++)
	{
	    var linedata = splitIntoCells( linearray[linenum] );
		if (value == linedata[i])
			return linenum+1;
	}
	return -1;
}

function setEncodedValue(machine_name, linenum, fieldname, value)
{
	if ( !document.forms[0].elements[machine_name+'data'] )
		return;
	var linearray = getLineArray(machine_name);

    var linedata = splitIntoCells( linearray[linenum-1] );
    var fieldnames = getFieldNamesArray(machine_name);
    for (var i=0; i < fieldnames.length; i++)
        if (fieldnames[i] == fieldname)
        {
            linedata[i] = value;
            break;
        }
    linearray[linenum-1] = linedata.join(String.fromCharCode(1));
    document.forms[0].elements[machine_name+'data'].value = linearray.join(String.fromCharCode(2));
}

function setEncodedValues(machine_name, linenum, form)
{
	if ( !document.forms[0].elements[machine_name+'data'] )
		return;
	var linearray = getLineArray(machine_name);

    var fieldnames = getFieldNamesArray(machine_name);
    var fieldflags = splitIntoCells( document.forms[0].elements[machine_name+'flags'].value );
    var linedata = new Array(fieldnames.length);
    var olddata = splitIntoCells( linearray[linenum-1] );
    for (var i=0; i < fieldnames.length; i++)
    {
        if (fieldflags[i] == 'F')
            linedata[i] = olddata[i];
        else
        {
            var fld;
            if (form.elements[fieldnames[i]] != null && form.elements[fieldnames[i]][0] != null && form.elements[fieldnames[i]][0].type == "radio")
                fld = form.elements[fieldnames[i]][linenum-1];
            else
                fld = form.elements[fieldnames[i]+linenum.toString()];
            if (fld.type == "checkbox" || fld.type == "radio")
                linedata[i] = fld.checked ? 'T' : 'F';
            else if (fld.type == "select-one")
                linedata[i] = fld.options[fld.selectedIndex].value;
            else
                linedata[i] = fld.value;
        }
    }
    linearray[linenum-1] = linedata.join(String.fromCharCode(1));
    document.forms[0].elements[machine_name+'data'].value = linearray.join(String.fromCharCode(2));
}

function addParamToURL(url, param, value,replace)
{
    if (replace == true)
        url=removeParamFromURL(url,param);
    return url + ((url.indexOf("?") == -1) ? "?" : "&") + param + "=" + value;
}

function removeParamFromURL(url, param)
{
    var sep = "&";
    var startIndex = url.indexOf("&"+param+"=");
    if (startIndex == -1)
    {
        startIndex = url.indexOf("?"+param+"=")
        sep = "?";
    }
    if (startIndex != -1)
    {
        var endIndex = url.indexOf("&",startIndex+1);
        return url.substring(0,startIndex)+ (endIndex > 0 ? url.substr(endIndex) : "");
    }
    return url;
}

function previewMedia(mediaid, href, document)
{
    if (href)
        mediaid = mediaid.substr(mediaid.lastIndexOf('/')+1);
    var url = '/core/media/previewmedia.nl?id='+mediaid;
    preview(url, 'prevmedia');
}

function siteMedia(mediaid, href, document)
{
    if (href)
        mediaid = mediaid.substr(mediaid.lastIndexOf('/')+1);
    var url = '/app/site/media/sitemedia.nl?id='+mediaid;
    preview(url, 'sitemedia');
}

function preview(url, winname)
{
    var prms = 'location=no,width=600,height=500,menubar=yes,scrollbars=yes,resizable=yes';
    var win = window.open(url, winname, prms);
    win.focus();
}

function getCookieVal (offset)
{
    var endstr = document.cookie.indexOf (';', offset);
    if (endstr == -1)
        endstr = document.cookie.length;
    return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie (name)
{
    var arg = name + '=';
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen)
    {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg)
            return getCookieVal (j);
        i = document.cookie.indexOf(' ', i) + 1;
        if (i == 0) break;
    }
    return null;
}

function getStickyTag(tagName)
{
    var cbody = GetCookie('stickytags');
    if (cbody != null)
    {
        var b=cbody.indexOf(tagName+':');
        if (b>=0)
        {
             var e=cbody.indexOf(',',b);
             if (e<0)
                e=cbody.length;
             return unescape(cbody.substring(b+tagName.length+1, e));
        }
    }
    return null;
}

function getLmtPage(url, cookieName)
{
    return url + (url.indexOf('?') >= 0 ? '&t=' : '?t=') + getStickyTag(cookieName);
}

function gotoLmtPage(url,cookieName,framed)
{
	var newUrl = getLmtPage(url, cookieName);
    
     try { 
	    if (typeof(framed) == "number")
	        parent.frames[framed].document.location = newUrl;
	    else if (framed)
	        parent.document.location = newUrl;
	    else
	        document.location = newUrl;
   	
     } catch (e) { } 
}



var SelectKeyPressMaxKeyPause = 2000;   
function SelectKeyPressHandler (sorted)
{
    keyString = String.fromCharCode (window.event.keyCode).toUpperCase();
    if (!(keyString >= " "  &&  keyString <= "_"))
    {
        SelectKeyPressTypedString = "";
        return true;
    }
    if (SelectKeyPressTimeoutID != null)
        window.clearTimeout (SelectKeyPressTimeoutID);
    SelectKeyPressTimeoutID = window.setTimeout ("SelectKeyPressTimeout()",
                                                SelectKeyPressMaxKeyPause);
    SelectKeyPressTypedString += keyString;
    if (sorted)
    {
        if (SelectKeyPressTypedString.length == 1)
            option = SelectKeyPressLookupFirst (SelectKeyPressTypedString);
        else
            option = SelectKeyPressLookupNext (SelectKeyPressTypedString);
    }
    else
        option = SelectKeyPressLookupLinear (SelectKeyPressTypedString);
    window.event.returnValue = false;
    if (option != -1)
    {
        window.event.srcElement.selectedIndex = option;
        window.event.srcElement.onchange();
    }

    return false;
}
var SelectKeyPressTypedString = "";
    SelectKeyPressTimeoutID = null;
function SelectKeyPressTimeout ()
{
    SelectKeyPressTypedString = "";
    SelectKeyPressTimeoutID = null;
}
function SelectKeyPressLookupFirst (str)
{
    select = window.event.srcElement;
    options = select.options;
    low = 0;
    high = options.length;
    while (high - low > 1)
    {
        i = Math.floor ((high + low) / 2);
        if (str.charAt(0) <= options(i).text.charAt(0).toUpperCase())
            high = i;
        else
            low = i;
    }
    while (high > 0  &&
            str.charAt(0) == options(high - 1).text.charAt(0).toUpperCase())
        --high;
    if (high < options.length  &&
        str.charAt(0) == options(high).text.charAt(0).toUpperCase())
        return high;
    else
        return -1;
}
function SelectKeyPressLookupNext (str)
{
    select = window.event.srcElement;
    options = select.options;

    selIndex = select.selectedIndex;
    while (selIndex < options.length - 1  &&
            options(selIndex).text.toUpperCase() < str)
        ++selIndex;
    if (selIndex < options.length - 1  &&
            options(selIndex).text.substr(0, str.length).toUpperCase() == str)
        return selIndex;
    else
        return -1;
}
function SelectKeyPressLookupLinear (str)
{
    select = window.event.srcElement;
    options = select.options;

    for (i = 0; i < options.length; ++i)
        if (options(i).text.substr(0, str.length).toUpperCase() == str)
            return i;

    return -1;
}
function disableFilter(radio, disableVal, fld1,fld2)
{
    if (getRadioValue(radio) == disableVal)
    {
        fld1.disabled = true;
        if (fld2)
			fld2.disabled = true;
    }
    else
    {
        fld1.disabled = false;
        if (fld2)
			fld2.disabled = false;
    }
}



function NLDate_parseString(sDate, bDoAlert)
{
    var m=0;
    var d=0;
    var y=0;
    var val = sDate;
    var fmterr;
    var year="";

    var rtnDate = null;

    if(!window.dateformat)
        window.dateformat = "MM/DD/YYYY";   

    if(window.dateformat == "MM/DD/YYYY")
    {
        if (val.indexOf("/") != -1)
        {
            var c = val.split("/");
            if(onlydigits(c[0])) m = parseInt(c[0],10);
            if(onlydigits(c[1])) d = parseInt(c[1],10);
    
            if ( d > 1970 )
            {
                year = y = d;
                d = 1;
            }
            else
            {
                if(onlydigits(c[2])) y = parseInt(c[2],10);
                year=c[2];
            }
        }
        else
        {
            var l = val.length, str;
            str = val.substr(0,2-l%2); if(onlydigits(str)) m = parseInt(str,10);
            str = val.substr(2-l%2,2); if(onlydigits(str)) d = parseInt(str,10);
            str = val.substr(4-l%2);   if(onlydigits(str)) y = parseInt(str,10);
            year=str;
        }
        fmterr = "MM/DD/YY, MM/DD/YYYY, MMDDYY or MMDDYYYY";
    }
    else if(window.dateformat == "DD/MM/YYYY")
    {
        if (val.indexOf("/") != -1)
        {
            var c = val.split("/");
            if(onlydigits(c[0])) d = parseInt(c[0],10);
            if(onlydigits(c[1])) m = parseInt(c[1],10);
            if(onlydigits(c[2])) y = parseInt(c[2],10);
            year=c[2];
        }
        else
        {
            var l = val.length, str;
            str = val.substr(0,2-l%2); if(onlydigits(str)) d = parseInt(str,10);
            str = val.substr(2-l%2,2); if(onlydigits(str)) m = parseInt(str,10);
            str = val.substr(4-l%2);   if(onlydigits(str)) y = parseInt(str,10);
            year=str;
        }
        fmterr = "DD/MM/YY, DD/MM/YYYY, DDMMYY or DDMMYYYY";
    }
    else if(window.dateformat == "DD.MM.YYYY")
    {
        if (val.indexOf(".") != -1)
        {
            var c = val.split(".");
            if(onlydigits(c[0])) d = parseInt(c[0],10);
            if(onlydigits(c[1])) m = parseInt(c[1],10);
            if(onlydigits(c[2])) y = parseInt(c[2],10);
            year=c[2];
        }
        else
        {
            var l = val.length, str;
            str = val.substr(0,2-l%2); if(onlydigits(str)) d = parseInt(str,10);
            str = val.substr(2-l%2,2); if(onlydigits(str)) m = parseInt(str,10);
            str = val.substr(4-l%2);   if(onlydigits(str)) y = parseInt(str,10);
            year=parseInt(str,10);
        }
        fmterr = "DD.MM.YY, DD.MM.YYYY, DDMMYY or DDMMYYYY";
    }
    else if(window.dateformat == "DD-Mon-YYYY")
    {
        var ms = "JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC";
        if (val.indexOf("-") != -1)
        {
            var c = val.split("-");
            if(onlydigits(c[0])) d = parseInt(c[0],10);
            m = (ms.indexOf(c[1].toUpperCase())+3)/3;
            if(onlydigits(c[2])) y = parseInt(c[2],10);
            year=c[2];
        }
        else
        {
            var l = val.length, str;
            str = val.substr(0,1+l%2); if(onlydigits(str)) d = parseInt(str,10);
            str = val.substr(1+l%2,3); if (ms.indexOf(str.toUpperCase()) >= 0) m = (ms.indexOf(str.toUpperCase())+3)/3;
            str = val.substr(4+l%2);   if(onlydigits(str)) y = parseInt(str,10);
            year=str;
        }
        fmterr = "DD-Mon-YY, DD-Mon-YYYY, DDMonYY or DDMonYYYY";
    }

    if(m==0 || d==0)
    {
        if(bDoAlert)
        {
            alert("Invalid date value (must be "+fmterr+")");
        }
    }
    else
    {
        if (y==0 && !onlydigits(year)) y = (new Date()).getYear();  
        if(m<1) m=1; else if(m>12) m=12;
        if(d<1) d=1; else if(d>31) d=31;
        if(y<100) y+=((y>=70)?1900:2000);
        if(y<1000) y*=10;
        if (y > 9999) y = (new Date()).getYear();

        year = y;
        rtnDate = new Date(y, m-1, d);
    }

    return rtnDate;
}

function setDateComponents(theDate, monthsToAdd, theDay)
{
  var newDate  = new Date(theDate);

  addmonths(newDate,monthsToAdd);
  newDate.setDate(theDay);

  return newDate;
}

function setDisabledState(elementid,enable)
{
    
    var childnodes=document.getElementById(elementid).getElementsByTagName('INPUT');
    for(var i=0;i<childnodes.length;i++)
    {
        if(childnodes[i].name.indexOf('_send')==-1)
            childnodes[i].disabled=!enable;
    }
    
    var childnodes=document.getElementById(elementid).getElementsByTagName('A');
    for(var i=0;i<childnodes.length;i++)
    {
        if(!enable && !childnodes[i].disabled)
        {
            childnodes[i].enabledonclick=childnodes[i].onclick;
            childnodes[i].onclick= new Function('return false;');
        }
        else if (enable && childnodes[i].enabledonclick!=null && childnodes[i].disabled)
        {
            childnodes[i].onclick=childnodes[i].enabledonclick;
        }
        childnodes[i].disabled=!enable;
    }

}

function checkMandatoryFields(fields,labels)
{
  var result = "";
  for (i=0; i < fields.length; i++)
  {
  	if (fields[i] == null)
  		continue;
    if (fields[i].type == "select-one")
    {
      var field = (fields[i].selectedIndex == -1? "" : fields[i].options[fields[i].selectedIndex]);
      var val = (field == null ? "" : field.value);
      if (val == null || val.length == 0 || val == -1)
        result += (result.length ? "," : "") + labels[i];
    }
    else if (fields[i].value.indexOf(String.fromCharCode(3)) != -1)
    {
		var nvarray = fields[i].value.split(String.fromCharCode(4));
		for (j=0; j < nvarray.length; j++)
		{
		  var nv = nvarray[j].split(String.fromCharCode(3));
		  if (nv[1] == 'T' && nv[3].length == 0)
		    result += (result.length ? "," : "") + nv[2];
		}
    }
    else
    {
      if ( isempty(fields[i]) )
        result += (result.length ? "," : "") + labels[i];
    }
  }
  return result;
}


function nlOpenWindow(url, winname, width, height, fld, scrollbars)
{

	window.open(url, winname, 'scrollbars='+(scrollbars ? 'yes' : 'no')+',width='+Math.min(screen.availWidth,width)+',height='+Math.min( screen.availHeight-40,height)+',left='+Math.min(screen.availWidth-width,getObjectLeft(fld))+',top='+Math.min( (screen.availHeight-40)-height,getObjectTop(fld))+',resizable=yes');

}


function getObjectLeft(obj)
{
	var offset=0;
	while (obj != null && obj != document.body)
	{
		offset += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	return offset + window.screenLeft;
}


function getObjectTop(obj)
{
	var offset=0;
	while (obj != null && obj != document.body)
	{
		offset += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return offset + window.screenTop;
}

function showField ( spanId, on )
{
	var spanInput = document.getElementById( spanId  );
	display ( spanInput, on );
}
function showLabel ( spanId, on )
{
	var spanLabel = document.getElementById( spanId + "_lbl" );
	display( spanLabel, on );
}
function setLabel( spanId, label)
{
	var spanLabel = document.getElementById( spanId + "_lbl" );
    spanLabel.innerHTML = label;
}
function showFieldAndLabel( spanId, on )
{
	showLabel( spanId, on );
	showField( spanId, on );
}

function showSpan( spanToShow, spanSet, mach )
{
	var children = spanSet.childNodes;
	var disp;
	for (var i=0; i < children.length; i++)
	{
		if (children[i].nodeName == 'SPAN')
		{
			var span = children[i];
			if ( span.id == spanToShow )
				disp = span;
			else if (span.style.display != 'none' )
				display( span, false );
		}
	}
	getFieldSetSpan( spanSet ).value = spanToShow;

	if ( disp != null )
		display( disp, true );

	if ( mach != null )
	{
		var table = document.getElementById(mach.getTableName());
		var newRow = table.rows[mach.getMachineIndex() ];
		moveButtons( mach.name, newRow );
	}
}

function setFormValue(fld,value)
{
	if (fld == null)
		return;
	if (fld.type == 'checkbox')
		fld.checked = value == 'T';
	else if (fld.type == 'select-one')
		synclist(fld,value);
	else if (fld.className == 'nldropdown')
		getDropdown(fld).setValue(value, true );
	else
		fld.value = value;
}
function getFormValue(fld)
{
	if (fld == null)
		return null;
    if (fld.type == "checkbox")
        return fld.checked ? 'T' : 'F';
    else if (fld.type == "select-one")
        return fld.options[fld.selectedIndex].value;
    else
        return fld.value;
}


function getEditFlag()
{
	var bReturnMe = false;
	if ( document.forms[0].elements['id'] )
	{
		if ( !isempty(document.forms[0].elements['id']) && document.forms[0].elements['id'].value != -1 )
			bReturnMe = true;
	}
    return bReturnMe;
}


function getFormElement(frm,fldname)
{
	var returnMe = null;
	if (isIE)
		returnMe = frm.elements[fldname];
	else
	{
		for ( var i = 0; i < frm.elements.length; i++ )
			if ( frm.elements[i].name == fldname )
				returnMe = frm.elements[i];
	}
	return returnMe;
}

var isIE = document.all ? true : false;
var isNS = document.addEventListener ? true : false;
var isNS4x = document.layers ? true : false ;
var NODE_TD = "TD";
var NODE_TR = "TR";
var NODE_TEXT = "#text";
var NODE_TABLE = "TABLE";


function findPosX(obj)
{
	var curleft = 0;
	if (document.getElementById || document.all)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (document.layers)
		curleft += obj.x;
	return curleft;
}


function findPosY(obj)
{
	var curtop = 0;
	if (document.getElementById || document.all)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (document.layers)
		curtop += obj.y;
	return curtop;
}



function getTarget(evnt)
{
	if (isIE)
	{
		return event.srcElement;
	}
	if (isNS)
	{
		
		var returnMe = evnt.target;
		return returnMe;
	}
}


function fireProperOnChange(elem, win)
{
	if(elem != null)
	{
		if(win == null)
			win = window;
		if(elem.getAttribute('onChangeFunc'))
			win.localEval(elem.getAttribute('onChangeFunc').replace(/this/g,'document.forms.'+elem.form.name+'.'+elem.name));
		else if(elem.onchange)
			elem.onchange();
	}
}

function findUp(node, type)
{
	while ((node != null) && (node.nodeName != type))
		node = node.parentNode;
	return node;
}


function dumpObj(obj)
{
	for(var prop in obj)
	{
		var str = prop + ": " + obj[prop];
		document.body.appendChild(document.createTextNode(str));
		document.body.appendChild(document.createElement("BR"));
	}
	if (obj.style)
	{
		document.body.appendChild(document.createTextNode("STYLE:"));
		document.body.appendChild(document.createElement("BR"));
		dumpObj(obj.style);
	}
}