<!--<html>-->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              









<!-- version 10.6.5 -->


function handleError(msg,errDocUrl,line)
{
	var errorUrl = "http://store.march-hare.com/core/pages/logJavascriptError.nl?c=460774";
    var postData;

    postData = "mesg=" + escape(msg) + "&";
    postData = postData + "winHref=" + escape(window.location.href) + "&";
    postData = postData + "line=" + escape(line) + "&";
    postData = postData + "isinited=" + escape(window.isinited);

    if (window.parent != window)
	{
		postData = postData + "&parHref=" + escape(window.parent.location.href);
	}

    if (errDocUrl != window.location.href)
    {
        postData = postData + "&errDocUrl=" + escape(errDocUrl);
    }

    // Create a request object and post the xml document
    var xmlReq= new ActiveXObject("Microsoft.XMLHTTP");
   	xmlReq.Open("POST", errorUrl, true);
	xmlReq.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  	xmlReq.Send(postData);

	return false; // show the default error message
}
window.onerror = handleError;


function debugAlert(sMsg){}
function debugStartTimer(){}
function debugGetTime(){}



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;
}

var ieDiffWidth=0;
var ieDiffHeight=0;

function initOuter() {

  var w, h, offW, offH, diffW, diffH;
  var fixedW = 800;
  var fixedH = 600;
  if (document.all) {
    offW = document.body.offsetWidth;
    offH = document.body.offsetHeight;
    window.resizeTo(fixedW, fixedH);
    diffW = document.body.offsetWidth  - offW;
    diffH = document.body.offsetHeight - offH;
    w = fixedW - diffW;
    h = fixedH - diffH;
    ieDiffWidth  = w - offW;
    ieDiffHeight = h - offH;
    window.resizeTo(w, h);
  }
}

function outerWd() {

  if (document.all)
  {
    if (ieDiffHeight==0) initOuter();
    return document.body.offsetWidth  + ieDiffWidth;
  }
  else
    return window.outerWidth;
}

function outerHt() {

  if (document.all)
  {
    if (ieDiffHeight==0) initOuter();
    return document.body.offsetHeight  + ieDiffHeight;
  }
  else
    return window.outerHeight;
}

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()
{
    
    if(document.getElementById("resetdivwascalled") != null)
	    resetDivSizes();
}
window.onbeforeprint = onBeforePrint;
window.onafterprint = onAfterPrint;

function resetDivSizes()
{
    
    if(document.getElementById("resetdivwascalled") == null)
    {
        var hasBeenCalled = document.createElement("input");
        hasBeenCalled.type = "hidden";
        hasBeenCalled.value = "T";
        hasBeenCalled.id = "resetdivwascalled";
        document.body.appendChild(hasBeenCalled);
    }

	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; 

    // we never want vertical scroll bars, but horizontal scroll bars are ok if necessary
    // There should never be Y-overflow since we are sizing all of the elements to fit and scrolling individually
    document.body.style.overflowY = "hidden";

    

	
	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.offsetWidth : nav.scrollWidth;

	}
   	list.style.width = Math.max( docwidth, 0 );

	
	nHeight = getDocumentHeight() - 10;
	nHeight -= getHeight(header) + getHeight(footer) + getHeight(title) + getHeight(label) + 4;
	list.style.height = ( nHeight > 0 ? nHeight : 0);
	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);
	}
	
	if (label != null )
	{
		label.style.width = list.clientWidth;
		label.style.left = -document.getElementById('div__body').scrollLeft;
	}

    
    

	
	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;
                
                if (col.offsetWidth > (lab.offsetWidth - col.offsetWidth))
                    lab.style.width = col.offsetWidth - (lab.offsetWidth - 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 ? elem.offsetHeight : 0;
}

function makeVisible(elem)
{
	if (elem != null)
		elem.style.visibility = 'visible';
}

function display(elem, on )
{
	if (elem != null)
		elem.style.display = on ? '' : 'none';
}

function visible(elem, on )
{
	if (elem != null)
		elem.style.visibility = on ? 'inherit' : 'hidden';
}



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)
  {
    if ( bIsCanada )
        alert('Please enter a valid '+n+' digit Postal Code.');
    else
        alert('Please enter a valid '+n+' digit Zip Code.');
    return false;
  }
  return true;
}

function isValidUSZipCode(value) 
{
    var re = /^\d{5}([\-]\d{4})?$/;
    return (re.test(value));
}

function splitIntoRows( value )
{
	return value != null ? (value.length > 0 ? value.split(String.fromCharCode(2)) : new Array()) : 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) ||
		(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, colons, 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>20)
    {
        alert("Credit card numbers must contain between 13 and 20 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;

    val = new String(val);
	return (val.length == 0) || (val.search(/\S/) < 0);
}


function isHTMLValEmpty(val)
{
    if (val == null || val.length == 0) 
        return true;
    val = val.replace(/&nbsp;|<[^>]*>/gi, '');
    return val.search(/\S/) < 0;
}


function isempty(fld1,nam)
{
    var val = fld1.value;
    return isValEmpty(val,nam);
}

function nvl(val,val2)
{
    return val == null ? val2 : val;
}

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.floor((b * 100000.0)+0.5) / 100000.0 + 0.000001;
  b = Math.floor((b * 100.0)+0.5) / 100.0;
  b = b * (a >= 0.0 ? 1.0 : -1.0);
  if( b == 0.0 )
    return 0.0;
  return b;
}
function round_float(a)
{
  var b = Math.abs(a);
  b = Math.floor((b * 100000.0)+0.5) / 100000.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_textfield_maxlen(field, maxlen, doalert)
{
    if (field.value == null || field.value.length == 0)
    {
        window.isvalid = true;
        return true;
    }
    var validflag = true;
    var err = '';
    if (stringByteLength(field.value) > maxlen)
    {
        err = "\n[TRUNCATED - LIMIT REACHED]: "+maxlen;
        newval = truncateStringInUnicode(field.value,maxlen);
        field.truncatedValue = true;
    }
    else
        field.truncatedValue = false;
    if (err != '')
    {
        if (doalert) alert(err);
        field.value = newval;
        validflag = true;
    }
    window.isvalid = validflag;
    return validflag;
}

function truncateStringInUnicode(str, maxlen)
{
	var totalnum = 0;
	var sLower = 128;
	var sHigher = 2048;
	var strOut = "";
	for (var i=0; i < str.length; i++ )
	{
		var chnum = str.charCodeAt(i);
		if ( chnum < sLower )
			totalnum += 1;
		else if ( chnum >= sLower && chnum < sHigher )
			totalnum += 2;
		else if ( chnum >= sHigher )
			totalnum += 3;
		if ( totalnum < maxlen )
			strOut = strOut + str.charAt(i);
	}
	return strOut;
}
function stringByteLength(str)
{
	var totalnum = 0;
	var sLower = 128;
	var sHigher = 2048;
	for (var i=0; i < str.length; i++ )
	{
		var chnum = str.charCodeAt(i);
		if ( chnum < sLower )
			totalnum += 1;
		else if ( chnum >= sLower && chnum < sHigher )
			totalnum += 2;
		else if ( chnum >= sHigher )
			totalnum += 3;
	}
	return totalnum;
}

function validate_field(field, type, doalert, autoplace, minval, maxval, mandatory, separator)
{
	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 = trim(field.value.toLowerCase());
        
        
		if (!(val.indexOf('/') == 0 || val.indexOf('http://') == 0 || val.indexOf('https://') == 0 || val.indexOf('ftp://') == 0 || val.indexOf('file://') == 0))
		{
            
			if (val.indexOf('://') != -1)
			{
				if (doalert)
					alert("Invalid url. Url must start with http://, https://, ftp://, or file://");
				validflag = false;
			}
	        else
	            field.value = 'http://' + trim(field.value);
		}
        
        if ( val.indexOf( ' ' ) > 0 || val.indexOf( '\t' ) > 0 )
        {
            if (doalert)
                alert("Invalid url. Spaces are not allowed in the URL");
            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)>=(maxval == 1.0e+11 ? 1.0e+11 : 1.0e+10))
        {
            if (doalert) alert(maxval == 1.0e+11 ? "Invalid currency value. Values must be numbers up to 99,999,999,999.99" : "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;
		// Depending on the user date format, the valid formats are [MMYY, MMYYYY, MM/DD/YYYY, MM/DD/YY] or [MMYY, MMYYYY, DD/MM/YYYY, DD/MM/YY]
        var fmterr =  "MMYY, MMYYYY, " + ((window.dateformat == "DD/MM/YYYY" || window.dateformat == "DD.MM.YYYY" || window.dateformat == "DD-MM-YYYY") ? "DD/MM/YY, DD/MM/YYYY" : "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("/");
				// We want users who normally write the day first to enter "01/03/2004" and
				// get "03/2004" instead of "01/2004".  European users expect this.
				// If the user date format has day first (e.g. "DD/MM/YYYY"), parse the input
				// using "DD/MM/YYYY".  Otherwise, parse the input using "MM/DD/YYYY".
				// Even though we don't support "-" or "." as a delimiter in this field, we'll still
				// look at date formats of the type "DD-MM-YYYY" and "DD.MM.YYYY" to determine whether
				// to use "DD/MM/YYYY" or "MM/DD/YYYY".
				var bIsDayFirst = (window.dateformat == "DD/MM/YYYY" || window.dateformat == "DD-MM-YYYY" || window.dateformat == "DD.MM.YYYY");
				if (comps[2] == null)
				{
					month = parseInt(comps[0],10);
					year = parseInt(comps[1],10);
				}
				else
				{
					day = parseInt(comps[bIsDayFirst ? 0 : 1],10);
					month = parseInt(comps[bIsDayFirst ? 1 : 0],10);
					year = parseInt(comps[2],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" || type == "ccvalidfrom")
    {
        

        validflag = true;
        var m=0, y=0;
        if(field.value.indexOf('/') != -1)
        {
            var dToday = new Date();
            var Y = dToday.getFullYear();
            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(type == "ccexpdate" && (y < Y || (y==Y && m < M)) ||
			   type == "ccvalidfrom" && (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)
			{
				if (type == "ccexpdate") alert("Please enter an expiration date in MM/YYYY format");
				else alert("Please enter a Valid From / Start Date in 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 = round_float(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 am_str = "AM";
        var pm_str = "PM";

        
        var re;
        var result;
        var fldvalue = field.value;

        
        fldvalue = hhmmtotimestring( fldvalue );

        re = /([0-9][0-9]?)(:[0-5][0-9])\s?([\S]+)/
        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.toLowerCase() == am_str.toLowerCase() ) ? "" : pm_str;
        }
        if (hours > 0 && hours <=12 && minutes >= 0 && minutes < 60)
        {
			if (amorpm == "") amorpm = am_str;
            field.value = hours + ":" + (minutes < 10 ? "0" : "") + minutes + " " + amorpm;
            validflag = true;
        }
        else if (hours > 12 && hours <= 25 && minutes >= 0 && minutes < 60 && amorpm == "")
        {
			amorpm = pm_str;
			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 bademails = new Array();
        var validcount = 0;
        if (!separator) separator = /[,;]/;
        var emails = field.value.split(separator);
		for (var j=0; j < emails.length; j++)
		{
			if (validflag && !isValEmpty(emails[j]))
			{
				var semail = emails[j].replace(/\s/g,'');
				if (checkemailvalue(semail, false))
					validcount += 1;
				else
					bademails.push(emails[j]);
			}
		}
        if (bademails.length > 0)
        {
            validflag = false;
            if (doalert) alert('Invalid email(s) found: '+bademails.join('; '));
        }
        else if (validcount < 1)
        {
            validflag = false;
            if (doalert) alert('No valid emails found in \"'+field.value+'\"');
        }
        else
            validflag = true;
    }
    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 extidx = val.search(/[A-Za-z]/);
            var ext = '';
            if (extidx >= 0)
            {
                ext = ' '+val.substring(extidx);
                val = val.substring(0,extidx);
            }
            var re = /^[0-9()-.\s]+$/;
            if (re.test(val))
            {
              var digits = val.replace(/[()-.\s]/g,'');
              if (digits.length == 7)
                 field.value=window.phoneformat.replace(window.phoneformat.substring(0,window.phoneformat.indexOf('4')),'').replace('456',digits.substring(0,3)).replace('7890',digits.substring(3)) + ext;
              else if (digits.length == 10)
                 field.value=window.phoneformat.replace('123',digits.substring(0,3)).replace('456',digits.substring(3,6)).replace('7890',digits.substring(6)) + ext;
              else if (digits.length == 11 && digits.substring(0,1) == '1')
                 field.value='1 '+window.phoneformat.replace('123',digits.substring(1,4)).replace('456',digits.substring(4,7)).replace('7890',digits.substring(7)) + ext;
            }
        }
    }
    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 validatePeriodRange(fldPeriodStart, fldPeriodEnd)
{
    if( getSelectIndex(fldPeriodEnd) < getSelectIndex(fldPeriodStart) )
    {
        alert('Please enter a valid date range. The From date must precede the To date.');
        return false;
    }

    return true;
}


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 != null && navigator.appName == "Netscape")
    {
        if (d.getFullYear=="undefined")
            return d.getYear();
    }
    return d.getFullYear();
}
function nlSetFullYear(d,val)
{
    if (navigator != null && 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 if (window.dateformat == "YYYY/MM/DD")
        return nlGetFullYear(d)+"/"+(d.getMonth()+1)+"/"+d.getDate();
    else
        return (d.getMonth()+1)+"/"+d.getDate()+"/"+nlGetFullYear(d);
}
function getdefaultformatdatestring(d)
{
    return (d.getMonth()+1)+"/"+d.getDate()+"/"+nlGetFullYear(d);
}
function gettimestring(time)
{
    return gettimestring(time,'am','pm');
}
function gettimestring(time,amvar,pmvar)
{
	var hours = time.getHours();
   	var minutes = time.getMinutes();
    var ampm = hours < 12 ? amvar : pmvar;
    return timestr = (hours%12 < 1 ? 12 : hours%12) + ':' + (minutes < 10 ? '0'+minutes.toString() : minutes) + ' ' + ampm;
}
function getdatetimestring(date)
{
    return getdatestring(date) + " " + gettimestring(date);
}
function getmmyydatestring(d)
{
    if (window.dateformat == "DD-Mon-YYYY")
    {
        var m = "JanFebMarAprMayJunJulAugSepOctNovDec";
        return m.substring(d.getMonth()*3,d.getMonth()*3+3)+"-"+nlGetFullYear(d);
    }
    else if (window.dateformat == "DD.MM.YYYY")
        return (d.getMonth()+1)+"."+nlGetFullYear(d);
    else if (window.dateformat == "DD/MM/YYYY")
        return (d.getMonth()+1)+"/"+nlGetFullYear(d);
    else if (window.dateformat == "YYYY/MM/DD")
        return (d.getMonth()+1)+"/"+nlGetFullYear(d);
    else
        return (d.getMonth()+1)+"/"+nlGetFullYear(d);    
}
function stringtodate(arg, dateformat)
{
    var comps;
	var month, day, year;
    var datetime = arg.split(" ");
    var d = datetime[0];
    if (d.indexOf("/") != -1)
    {
        comps = d.split("/");
        if ( dateformat == null )
            dateformat = window.dateformat;
        if (comps.length == 2)
        {
        	month = parseInt(comps[0],10)-1;
	        day = 1;
	        year = parseInt(comps[1],10);
        }
        else if (dateformat == "DD/MM/YYYY")
        {
	        day = parseInt(comps[0],10);
	        month = parseInt(comps[1],10)-1;
	        year = parseInt(comps[2],10);
	    }
        else if (dateformat == "YYYY/MM/DD")
        {
	        year = parseInt(comps[0],10);
	        month = parseInt(comps[1],10)-1;
	        day = 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 = ms.indexOf(comps[0].toUpperCase())/3;
	        year = parseInt(comps[1], 10);
	    }
	    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(result, year+2000);
    else if (year < 100)
        nlSetFullYear(result, year+1900);
    return result;
}

function stringtotime(date, time)
{
     var flddate = date != null ? stringtodate( date ) : new Date();
     var result = time.match( /(\d\d?):([0-5]\d)\s*([ap])?/i );
     var hours = parseInt(result[1]);
     var minutes = parseInt(result[2]);
     var isPM = result[3].toUpperCase() == 'P';
     if (!isPM && hours == 12)
        hours = 0;
     else if (isPM && hours < 12)
        hours += 12;
     flddate.setHours(hours,minutes,0,0);
     return flddate;
}

function hhmmtotime( hhmm )
{
    return stringtotime( null, hhmmtotimestring( hhmm ) );
}

// -- handle shorthand time notation i.e. 5p -> 5:00 pm, 18 -> 6:00 pm, 900 -> 9:00 am, 1433p -> 2:33 pm
function hhmmtotimestring( hhmm )
{
    var fldvalue = hhmm;
    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, 10 ) == 0 ? 12 : ( parseInt( hh, 10 ) > 12 ? parseInt( hh, 10 ) % 12 : hh );
            var mm = "00";
            var ampm = RegExp.$1 ? (RegExp.$1.toLowerCase() == 'p' ? "pm" : "am") : ( parseInt( fldvalue, 10 ) > 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, 10 ) == 0 ? 12 : ( parseInt( hh, 10 ) > 12 ? parseInt( hh, 10 ) % 12 : hh );
            var mm = RegExp.$1 ? fldvalue.substring(2,4) : fldvalue.substring(2);
            var ampm = parseInt( fldvalue.substring(0,2), 10 ) > 11 ? "pm" : "am";
            ampm = RegExp.$1 ? (RegExp.$1.toLowerCase() == 'p' ? "pm" : "am") : ampm;
            fldvalue = hh + ":" + mm + " "+ampm;
        }
    }
    return fldvalue;
}

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 isLeapYear(year)
{
    return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
}

MONTH_LENGTH = [[31,28,31,30,31,30,31,31,30,31,30,31],[31,29,31,30,31,30,31,31,30,31,30,31]];

function getMonthLength(year, month)
{
	return MONTH_LENGTH[isLeapYear(year)?1:0][month];
}

function addmonths(d, mtoadd)
{
	if (mtoadd != 0)
	{
		var year = nlGetFullYear(d);
		var dom = d.getDate();
		var month = d.getMonth() + mtoadd;
		if (month < 0)
		{
			month += 1;
			nlSetFullYear(d, year + Math.ceil(month / 12) - 1);
			month = 11 + (month % 12);
		}
		else if (month > 11)
		{
			nlSetFullYear(d, year + Math.floor(month / 12));
			month %= 12;
		}
		eom = getMonthLength(year, month);
		if (dom > eom) d.setDate(eom);
		d.setMonth(month);
    }
    return d;
}

function addhours(d, hourstoadd)
{
    var d2 = new Date(d.getTime() + 3600 * hourstoadd * 1000);
    d.setTime(d2.getTime());
    return d;
}

function setDate(d, day, noRollover)
{
    if (noRollover)
    {
        var eom = getMonthLength(nlGetFullYear(d), d.getMonth());
        day = Math.min(eom, day);
    }
    d.setDate(day);
}



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 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 ).removeAll();
	else if (sel.type == "select-multiple")
	{
		for ( i=sel.length-1; i >=0 ; i-- )
			sel.options[i].selected = false;
	}
    else
    {
        sel.value='';
        sel.form.elements[sel.name+'_display'].value='';
    }
}

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 getnamevaluelistdata(val)
{
	if (val.length == 0)
    	return "";
	var nvarray = val.split(String.fromCharCode(4));
	var result = "";
	for (i=0; i < nvarray.length; i++)
	{
        if (i>0)
            result += String.fromCharCode(4);
		var nv = nvarray[i].split(String.fromCharCode(3));
		var v = nv.length>3?nv[3]:"";
	    result += nv[0]+String.fromCharCode(3)+v;
	}
	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)
{
    var fldDisp = list.form.elements[list.name+"_display"];
	fldDisp.value = getnamevaluelisttext(list.value,"\n", true);
    if(fldDisp.onchange)
    {
        fldDisp.onchange();
    }
}


function NLNameValueList_onKeyPress(evt, sFieldName, sOptionHelperSuffix)
{
    var keyCode = getEventKeypress(evt);

    if( keyCode == 32 ) 
    {
        
        var ndAction = document.getElementById(sFieldName + '_helper_' + sOptionHelperSuffix);
        if( ndAction && ndAction.click)
        {
            ndAction.click();
        }
    }
    return 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 if (list.type == 'select-one')
	{
		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;
		    }
		}
	}
    else
		 list.value = val;
}
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);
		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))
	{
		if ( typeof val != "string" )
			val = val.join( String.fromCharCode(5) );
		var dd = getMultiDropdown(list);
		dd.setValues(val);
	}
	else if (list.type != "select-multiple")
	{
		list.form.elements[list.name].value = val;
	}
	else
	{
		if ( typeof val == "string" )
			val = val.split( String.fromCharCode(5) );
		for ( var i=0; i < val.length; i++)
		{
			for ( var j=0; j < list.length; j++)
			{
				if (list.options[j].value == val[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).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 (isMultiSelect(sel))
        returnMe = getMultiSelectValues(sel);
    else if (sel.className == 'nldropdown')
		returnMe = getDropdown(sel).getValue();
    else if (isNLMultiDropDown(sel))
		returnMe = getMultiDropdown(sel).getSelectedValues();
    else
        returnMe = sel.value;
    return returnMe;
}
function getSelectValueArray(sel)
{
	var returnMe;
    if (sel.type == "select-one" || sel.type == "select-multiple")
	{
		returnMe = new Array(sel.length);
		for ( var 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).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" || sel.type == "select-multiple")
	{
		returnMe = new Array(sel.length);
		for ( var 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).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 copySelectValue(sel, sel2)
{
    if (sel2.type == "hidden" && sel2.form != null && getFormElement(sel2.form,sel2.name+'_display') != null)
    {
        sel2.value = getSelectValue(sel);
        if (sel2.value.length > 0)
            getFormElement(sel2.form,sel2.name+'_display').value = getSelectText(sel);
    }
    else
        setSelectValue(sel2,getSelectValue(sel));
}

function setSelectValue(sel, val)
{
	if (sel.className == 'nldropdown')
	{
		var dd = getDropdown(sel);
		var idx = dd.getIndexForValue(val);
        if (idx == null)
            return false;
		dd.setIndex(idx, true );
	}
	else if (isNLMultiDropDown(sel))
	{
		var dd = getMultiDropdown(sel);
		var idx = dd.getIndexForValue(val);
        if (idx == null)
            return false;
		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;
				return true;
			}
		}
        return false;
	}
	else if (sel.type == "select-multiple")
	{
		var opts = sel.options;
        var result = false;
		for (var i=0; i < opts.length; i++)
        {
			opts[i].selected = opts[i].value == val;
            result = result || opts[i].value == val;
        }
        return result;
	}
    else
        sel.value = val;
    return true;
}

function addMultiSelectValue(sel, val, name)
{
    if (isNLMultiDropDown(sel))
	{
		var dd = getMultiDropdown(sel);
		var idx = dd.getIndexForValue(val);
		dd.addIndex(idx);
    }
	else if (sel.type == "select-multiple")
	{
		var opts = sel.options;
		for (var i=0; i < opts.length; i++)
			if ( opts[i].value == val )
				opts[i].selected = true;
	}
    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;
            sel.form.elements[sel.name+"_labels"].value = name;
        }
        else
        {
            sel.value += String.fromCharCode(5)+val;
            sel.form.elements[sel.name+"_labels"].value += String.fromCharCode(5)+name;
            var lines = sel.form.elements[sel.name+"_display"].value.split(/\n|\r/);
            if (lines.length == values.length)
                sel.form.elements[sel.name+"_display"].value += "\n"+name;
            else
            {
                lines[values.length] = name;
                sel.form.elements[sel.name+"_display"].value = lines.join("\n");
            }
        }
    }
}

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, 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).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
	{
		return sel.selectedIndex;
	}
}
function setSelectIndex(sel, val)
{
	if (sel.className == 'nldropdown')
	{
		return getDropdown(sel).setIndex(val, true );
	}
	else if (isNLMultiDropDown(sel))
	{
		return getMultiDropdown(sel).setIndex(val);
	}
	else
	{
		sel.selectedIndex = val;
	}
}
function setMultiSelectValues(sel, val)
{
	syncmultiselectlist( sel, val );
}
function getMultiSelectValues( sel, returnArray )
{
    if (isMultiSelect(sel))
    {
		var val = '';
		if ( isNLMultiDropDown(sel) )
			val = getMultiDropdown(sel).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);
			}
		}

		if ( returnArray )
			val = val.split( String.fromCharCode(5) )

        return val;
    }
    else
        return sel.value;
}
function getMultiSelectText(sel,inmachine)
{
    if ( isMultiSelect(sel) )
    {
		var val = '';
		if ( isNLMultiDropDown(sel) )
			val = getMultiDropdown(sel).getSelectedText(inmachine ? '\n' : ', ');
		else
		{
			var i, numParams = 0;
			for (i=0; i < sel.length; i++)
			{
				if (sel.options[i].selected)
					val += ((numParams++ == 0 ? '' : (inmachine ? '\n' : ', ')) + 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,labelsfld)
{
    fld.value = val;
    labelsfld.value = displayval;
    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,win);
		dd.addOption(text, value, selected);
	}
	else
	{
		var opt = doc.createElement('OPTION');
		opt.text= text;
		opt.value= value;
		sel[sel.length] = opt;

		if (selected !== false)
		{
			opt.selected = true;
			
			if (isIE)
				sel.selectedIndex = sel.length - 1;
		}
	}
}

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 getCascadedStyle(object, property, attribute)
{
	if ( object.currentStyle )
		return object.currentStyle[property];
	else if ( window.getComputedStyle )
	{
        
        if ( object.nodeType != 1 )
            return null;
		var objStyle = window.getComputedStyle(object, "");
		return objStyle.getPropertyValue( attribute );
	}
    return null;
}
function isFocusable( fld )
{
    if ( fld == null || fld.type == "hidden" || fld.disabled )
        return false;

    var elem = fld;
    while ( elem != null )
    {
        var visibility = getCascadedStyle(elem, "visibility", "visibility");
        var display = getCascadedStyle(elem, "display", "display");
        if ( display == 'none' || visibility == 'hidden' || visibility == 'hide' )
            return false;
        elem = elem.parentNode;
    }
    return true;
}
function isSelect(sel)
{
	return	sel != null && ( sel.type == "select-one" || isNLDropDown( sel ) );
}
function isNLDropDown(sel)
{
	return sel != null && sel.className == 'nldropdown';
}
function isMultiSelect(sel)
{
	return	sel != null && (isNLMultiDropDown(sel) || sel.multiple || sel.type == 'select-multiple');
}
function isNLMultiDropDown(sel)
{
	return sel != null && sel.nlmultidropdown != null;
}

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).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")
        {
            if ( isFocusable( sel ) )
			    sel.focus();
        }
		else if (sel.className == 'nldropdown')
        {
            if ( isFocusable( getDropdown(sel,win).getContainer( ) ) )
			    getDropdown(sel,win).setFocus();
        }
		else if (isNLMultiDropDown(sel))
        {
            if ( isFocusable( getMultiDropdown(sel,win).getContainer( ) ) )
			    getMultiDropdown(sel,win).setFocus();
        }
		else
        {
            if ( isFocusable( sel.form.elements[sel.name+"_display"] ) )
    			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, 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).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).getText(idx);
		}
	}
}

function setRequired(fld,required)
{
	if ( fld.className == 'nldropdown')
		getDropdown(fld).setRequired(required);
    else if ( isNLMultiDropDown( fld ) )
        getMultiDropdown(fld).setRequired(required);
    else if ( getHtmlEditor( fld.name ) != null && getHtmlEditor(fld.name).setMandatory)
		getHtmlEditor( fld.name ).setMandatory( required );
	else
		fld.className='input' + (required ? 'req' : '');
}


function setDefaultOrNotRequired(fld, val)
{
    setRequired(fld, val ? hasAttribute(fld, 2048) : false);
}

function hasAttribute(fld,flag)
{
	if ( fld.className == 'nldropdown' )
		return getDropdown(fld).hasAttribute(flag);
    else if ( isNLMultiDropDown( fld ) )
        return getMultiDropdown(fld).hasAttribute(flag);
	else if ( getHtmlEditor( fld.name ) != null )
		return getHtmlEditor(fld.name).hasAttribute(flag);
	else
        return (fld.getAttribute("flags") & flag) != 0;
}

function getRequired(fld)
{
	if ( fld.className == 'nldropdown' )
		return getDropdown(fld).getRequired( );
    else if ( isNLMultiDropDown( fld ) )
        return getMultiDropdown(fld).getRequired( );
	else if ( getHtmlEditor( fld.name ) )
		return getHtmlEditor( fld.name ).getMandatory( );
    else if ( fld.form != null && fld.form.elements[fld.name+"_display"] != null )
        return fld.form.elements[fld.name+"_display"].className == 'inputreq';
	else
		return fld.className == 'inputreq';
}

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;
        
        var docObj = (fld.document) ? fld.document : document;
        var datelink = docObj.getElementById(fld.name+"_helper_calendar");
        if(datelink != null)
            datelink.style.visibility = val ? "hidden" : "inherit";
    }
}

function setOptionsFromMachineField( machine_name, field_name, selectObject, alternate_label, test_field, test_value )
{
	deleteAllSelectOptions( selectObject, window );
	var doc = window.document;
	var mch = eval( machine_name + '_machine');
	addSelectOption( doc, selectObject, "",  "", true, window );
	var bNewOptions = false;
	for ( var i = 1; i <= getLineCount(machine_name); i++)
	{
		if (mch.getMachineIndex() == i || ( test_field != null && getEncodedValue( machine_name, i, test_field) != test_value ) )
			continue;
		bNewOptions = true;
		addSelectOption( doc, selectObject,  getEncodedValue( machine_name,i, alternate_label != null ? alternate_label :field_name + '_display'),  getEncodedValue( machine_name,i,field_name ), false, window);
	}
	return bNewOptions;
}


window.linearrayArray = new Array();
function getLineArray(machine_name)
{
    if( window.linearrayArray[machine_name] == null )
    {
        if ( document.forms[0].elements[machine_name+'data'] != 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) != null ? getLineArray(machine_name).length : 0;
}

function getEncodedFieldPosition(machine_name, fieldname)
{
    var fieldnames = getFieldNamesArray(machine_name);
    for (var i=0; i < fieldnames.length; i++)
        if (fieldnames[i] == fieldname)
		return i;
	return -1;
}

function hasEncodedField(machine_name, fieldname)
{
	if (getEncodedFieldPosition(machine_name, fieldname) < 0)
    return false;
	return true;
}

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 getFieldLineNum(machine_name, fld)
{
	var fieldnames = getFieldNamesArray(machine_name);
    var fieldname = fld.name;
    var linenum = -1;

	for ( var i = 0; i < fieldnames.length; i++ )
    {
        var re = new RegExp("^"+fieldnames[i]+"([0-9]+)$");
   	    if ( re.test(fieldname) )
        {
            linenum = parseInt(RegExp.$1, 10);
            break;
        }
    }
	return linenum;
}

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] );
    if ( linedata == null ) linedata = new Array();
    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 ( isValEmpty( fieldnames[i] ) )
            continue;
        if ((fieldflags[i] & 4) == 0)
            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 if ((fieldflags[i] & 8) != 0)
                fld = form.elements[fieldnames[i+1]+linenum.toString()+"_display"];
            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 if (fld.type == "textarea")
                linedata[i] = fld.value.replace(/\r/g,'').replace(/\n/g,String.fromCharCode(5));
            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 getSyncFunctionName(fldname, machine)
{
    var syncFuncName = "Sync"+fldname;
    if ( machine != null )
    {
        var machSyncFunc = syncFuncName + machine;
        if ( eval( "window." + machSyncFunc ) != null )
            return machSyncFunc;
    }
    return syncFuncName;
}

function safeSetDocumentLocation(url)
{
     try { 
        document.location = url;
     } catch (e) {} 
}

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 ? (sep == "?" ? "?"+url.substr(endIndex+1) : url.substr(endIndex)) : "");
    }
    return url;
}

function previewMedia(mediaid, bIsHref, document)
{
    if (bIsHref)
        mediaid = mediaid.substr(mediaid.lastIndexOf('/')+1);
    var url = '/core/media/previewmedia.nl?id='+mediaid;
    preview(url, 'prevmedia');
}

function siteMedia(mediaid, bIsHref, document)
{
    if (bIsHref)
        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 (evnt, sorted)
{
    keyString = String.fromCharCode (getEventKeypress(evnt)).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 (evnt, SelectKeyPressTypedString);
        else
            option = SelectKeyPressLookupNext (evnt, SelectKeyPressTypedString);
    }
    else
        option = SelectKeyPressLookupLinear (evnt, SelectKeyPressTypedString);
    setEventPreventDefault(evnt);
    if (option != -1)
    {
        getEventTarget(evnt).selectedIndex = option;
        getEventTarget(evnt).onchange();
    }

    return false;
}
var SelectKeyPressTypedString = "";
    SelectKeyPressTimeoutID = null;
function SelectKeyPressTimeout ()
{
    SelectKeyPressTypedString = "";
    SelectKeyPressTimeoutID = null;
}
function SelectKeyPressLookupFirst (evnt, str)
{
    select = getEventTarget(evnt);
    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 (evnt, str)
{
    select = getEventTarget(evnt);
    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 (evnt, str)
{
    select = getEventTarget(evnt);
    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 == "YYYY/MM/DD")
    {
        if (val.indexOf("/") != -1)
        {
            var c = val.split("/");
            if(onlydigits(c[0])) y = parseInt(c[0],10);
            if(onlydigits(c[1])) m = parseInt(c[1],10);
            if(onlydigits(c[2])) d = parseInt(c[2],10);
            year=c[0];
        }
        else
        {
            var l = val.length, str;
            str = val.substr(0,2-l%2); if(onlydigits(str)) y = 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)) d = parseInt(str,10);
            year=str;
        }
        fmterr = "YY/MM/DD, YYYY/MM/DD, YMMDD or YYYYMMDD";
    }
    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()).getFullYear();  
        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()).getFullYear();

        year = y;
        rtnDate = new Date(y, m-1, d);
    }

    return rtnDate;
}

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;
}


function setDateComponents(theDate, monthsToAdd, theDay, noRollover)
{
  var newDate  = new Date(theDate);

  if (typeof(noRollover) != 'boolean')
      noRollover = false;
  addmonths(newDate,monthsToAdd);
  setDate(newDate, theDay, noRollover);

  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 ((new String(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 ( window.getHtmlEditor != null && getHtmlEditor( fields[i].name ) != null )
    {
        if ( isValEmpty( fields[i].value.replace("<DIV></DIV>","") ) )
            result += (result.length ? "," : "") + labels[i];
    }
    else
    {
      if ( isempty(fields[i]) )
        result += (result.length ? "," : "") + labels[i];
    }
  }
  return result;
}


function nlOpenWindow(url, winname, width, height, fld, scrollbars)
{

	return 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 setFieldVisibility ( spanId, on )
{
	var spanInput = document.getElementById( spanId  );
	visible ( spanInput, on );
}
function setLabelVisibility ( spanId, on )
{
	var spanLabel = document.getElementById( spanId + "_lbl" );
	visible( spanLabel, on );
}
function setFieldAndLabelVisibility( spanId, on )
{
	setLabelVisibility( spanId, on );
	setFieldVisibility( spanId, on );
}
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 getLabel( spanId )
{
	var spanLabel = document.getElementById( spanId + "_lbl" );
    return spanLabel.innerHTML;
}
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 if (isMultiSelect(fld))
		syncmultiselectlist(fld, value);
    
    else if ( window.getHtmlEditor != null && getHtmlEditor( fld.name ) != null )
        return getHtmlEditor( fld.name ).setValue( value, true );
	else if (fld.nodeName == 'INPUT' || fld.nodeName == 'TEXTAREA')
		fld.value = value;
    else
        fld.innerHTML = value;
}
function getFormValue(fld, returnArray)
{
	if (fld == null)
		return null;
    if (fld.type == "checkbox")
        return fld.checked ? 'T' : 'F';
	else if (fld.type == "radio")
		return getRadioValue(fld);
    else if (fld.type == "select-one" || fld.className == 'nldropdown')
        return getSelectValue(fld);
    else if (isMultiSelect(fld))
		return getMultiSelectValues(fld, returnArray);
    
    else if ( window.getHtmlEditor != null && getHtmlEditor( fld.name ) != null )
        return getHtmlEditor( fld.name ).getValue( );
    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 getParameter( param )
{
    var re = new RegExp(".*[?&]"+param+"=([^&]*)");
    var matches = re.exec( document.location.href.toString() ) ;
    return matches != null && matches.length > 0 ? matches[1] : null;
}

function getBooleanParameter( param )
{
	return getParameter( param ) == "T";
}

function getParameterValuesArray( )
{
    var url = document.location.href.toString();    
    if ( url.indexOf('?') < 0 )
        return null;

    var pairs = url.substring( url.indexOf('?')+1 ).split("&");
    var a = new Array();
    for ( var i = 0; i < pairs.length; i++ )
    {
        var pair = pairs[i].split("=");
        a[a.length] = pair[0];
        a[a.length] = pair.length > 0 ? pair[1] : null;
    }
    return a;
}

function getFormElement(frm,fldname)
{
	var returnMe = null;
	if ( frm != null )
	{
        if ( fldname == 'language' )
        {
            var fields = frm.getElementsByTagName('INPUT');
            for ( var i = 0; fields != null && i < fields.length; i++ )
                if ( fields[i].name == fldname )
                    returnMe = fields[i];
        }
        else if ( isIE || fldname != 'item' )
            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;
}

function getFormElementViaFormName(frmName,fldname)
{
	return getFormElement( document.forms[ frmName ], fldname  );
}

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 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 getNodeInnerText(node)
{
    if(isIE)
    {
        return node.innerText;
    }
    else
    {
        while(node != null)
        {
            if(node.nodeName == "#text")
                return node.nodeValue;
             node = node.firstChild;
        }
    }
    return null;
}

function findUp(node, type)
{
	while ((node != null) && (node.nodeName != type))
		node = node.parentNode;
	return node;
}




function getEvent(evnt)
{
    return (typeof(evnt)!='undefined' && evnt) ? evnt : ((typeof(event)!='undefined' && event) ? event : null);
}


function getEventKeypress(evnt)
{
    evnt = getEvent(evnt);

    return (evnt) ? evnt.keyCode : null;

}


function getEventAltKey(evnt)
{
    evnt = getEvent(evnt);
    return (evnt) ? evnt.altKey : false;
}

function getEventCtrlKey(evnt)
{
    evnt = getEvent(evnt);
    return (evnt) ? evnt.ctrlKey : false;
}

function getEventShiftKey(evnt)
{
    evnt = getEvent(evnt);
    return (evnt) ? evnt.shiftKey : false;
}


function getEventTarget(evnt)
{
    evnt = getEvent(evnt);
    if (evnt)
    {
        if (evnt.srcElement)
            return evnt.srcElement;         
        if (evnt.target)
            return evnt.target;             
    }

    return null;                            
}


function getEventTargetType(evnt)
{
    evnt = getEventTarget(evnt);
    return (evnt) ? evnt.type : null;
}


function setEventPreventDefault(evnt)
{
    evnt = getEvent(evnt);
    if (evnt)
    {
        if (evnt.preventDefault)
            evnt.preventDefault();
        else
            evnt.returnValue = false;
    }
}


function setEventCancelBubble(evnt)
{
    evnt = getEvent(evnt);
    if (evnt)
    {
        if (evnt.stopPropagation)
            evnt.stopPropagation();
        else
            evnt.cancelBubble = true;
    }
}


function restoreHtmlEditors( frm )
{
	if ( window.htmleditors != null )
	{
		for ( i in window.htmleditors )
		{
			var editor = getHtmlEditor(String(i));
			if ( frm == null || editor.hddn.form == frm )
				editor.setValue( editor.hddn.value, true );
		}
	}
}

function nlFieldHelp(db,p,f,fld)
{
    var url = '/core/help/fieldhelp.nl?fld='+f+'&perm='+p;
    if ( window.isOLC )
        url = '/offline/pages/core/help/offlinefieldhelp.html?field='+f+'&recordType='+p.toLowerCase();
    nlOpenWindow( url ,'fieldhelp',350,150,fld );
    return false;
}


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);
	}
}


function NLAlert(msg,ignoreServerSide)
{
    alert(msg);
}




function setDateFormatByLocale(locale, nlsdate)
{
	if ( locale.indexOf('zh_') > -1 || locale.indexOf('ja_') > -1 )
	{
		setSelectValue(nlsdate,'YYYY/MM/DD');
		disableSelect(nlsdate, true);
	}
	else
		disableSelect(nlsdate, false);
}

