// Author: Galen Cederqvist
var errcolour = '#cd0000';
var okcolour = '#008800';
var nulcolour = '#000000';
var errimg = '/images/form/error.gif'
var okimg = '/images/form/correct.gif'
var nulimg = '/images/spacer.gif'

var re_numeric = 0, re_text = 1, re_postal = 2, re_phone = 3, re_email = 4, re_money = 5, re_char = 6, re_noquote = 7;
var res = new Array( // fieldtype patterns
	new RegExp(/^[\d]+$/), // re_numeric
//	new RegExp(/^([+\x60\x22\x2d,#.,-]?[\w]+[+\s\w\x60\x22\x2d,#.,-]?)+$/), // re_text
	new RegExp(/^([+\x60\x22\x2d,#.,-]?[\w]+[+\s\w\x60\x22\x2d,#.,-]?)+/), // re_text
	new RegExp(/^[A-Za-z][0-9][A-Za-z](\s|-)?[0-9][A-Za-z]\d$/), // re_postal
	new RegExp(/^[(]?[\d]{3}(\x29|-)?[\s]?[\d]{3}(\s|-)?[\d]{4}$/), // re_phone
	new RegExp(/^[\w-\.]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,4}$/), // re_email
	new RegExp(/^[$]?[\d]*[.]?[\d]*$/), // re_money
	new RegExp(/^[a-zA-Z0-9]{1}$/), // re_char
	new RegExp(/^[^']+$/)); // re_noquote


function validateField(ofield, fn, oerr, showzerolenerror)
{
	var isValid = true;
	var value;
	if (showzerolenerror == "undefined") showzerolenerror = false;

	if (ofield && fn)
	{
	    if (ofield.type == 'select-one') // drop-down
	        value = ofield[ofield.selectedIndex].value;
	    else if (ofield.type == "text")
	        value = ofield.value;
	    else if (ofield.type == "checkbox") {
	        if (ofield.checked)
	            value = '1';
	        else
	            value = '';
	    }
	    else if (ofield.length != 'undefined' && ofield.length >= 1 && ofield[0].type == 'radio')
	    {
	        for (var x = 0; x < ofield.length; x++)
	        {
	            if (ofield[x].checked) {
	                value = ofield[x].value
	                break;
	            }
	        }
	        if (typeof (value) == 'undefined')
	            value = '';
	    }
		if (typeof(value) != 'undefined')
		{
			if (fn.test)
				isValid = fn.test(value);
			else
				isValid = fn(value);

			if (oerr) // display result
			{
/*			
			    alert(
			            ofield.name + '\n' +
			            'fn = ' + fn + '\n' +
			            'isValid = ' + isValid + '\n' +
			            'oerr.type = ' + oerr.type + '\n' +
			            'oerr.src = ' + oerr.src + '\n' +
			            'oerr.style = ' + oerr.style + '\n' +
			            'value.length = ' + value.length + '\n' +
			            'showzerolenerror = ' + showzerolenerror
			         );
*/			
//alert(ofield.name + ', isValid = ' + isValid + ', oerr.type = ' + oerr.type + ', value.length = ' + value.length + ', showzerolenerror = ' + showzerolenerror);
				if (oerr.type && oerr.type == 'text') { 
//alert('[text] name = ' + ofield.name + ', isValid = ' + isValid + ', value.length = ' + value.length + ', showzerolenerror = ' + showzerolenerror);
					if (value.length == 0 && !showzerolenerror)  oerr.style.background = nulcolour; //oerr.style.color = nulcolour;
					else {
						if (isValid)  oerr.style.background = okcolour; // oerr.style.color = '#0000cd';//okcolour;
						else  oerr.style.background = errcolour; //oerr.style.color = errcolour;
					}
				}
				else if (oerr.src) { // image
//alert('[img] name = ' + ofield.name + ', isValid = ' + isValid + ', value.length = ' + value.length + ', showzerolenerror = ' + showzerolenerror);
					if (value.length == 0 && !showzerolenerror)  oerr.src = nulimg;
					else {
						if (isValid)  oerr.src = okimg;
						else  oerr.src = errimg;
					}
				}
				else if (typeof(oerr.style) != 'undefined') { // set style.color
//alert('[style] name = ' + ofield.name + ', isValid = ' + isValid + ', value.length = ' + value.length + ', showzerolenerror = ' + showzerolenerror);
					if (value.length == 0 && !showzerolenerror)  oerr.style.color = nulcolour;
					else {
						if (isValid)  oerr.style.color = okcolour;
						else  oerr.style.color = errcolour;
					}
				}
			}
		}
	}
	return isValid;
}

function validateField_New(ofield, fn, oerr, showzerolenerror) {
    var isValid = true;
    var value;
    if (showzerolenerror == "undefined") showzerolenerror = false;

    if (ofield && fn) {
        if (ofield.type == 'select-one') // drop-down
            value = ofield[ofield.selectedIndex].value;
        else if (ofield.type == "text")
            value = LRTrim(ofield.value);
        else if (ofield.type == "checkbox") {
            if (ofield.checked)
                value = '1';
            else
                value = '';
        }
        else if (ofield.length != 'undefined' && ofield.length >= 1 && ofield[0].type == 'radio') {
            for (var x = 0; x < ofield.length; x++) {
                if (ofield[x].checked) {
                    value = ofield[x].value
                    break;
                }
            }
            if (typeof (value) == 'undefined')
                value = '';
        }
        if (typeof (value) != 'undefined') {
            if (fn.test)
                isValid = fn.test(value);
            else
                isValid = fn(value);

            if (oerr) // display result
            {
                /*			
                alert(
                ofield.name + '\n' +
                'fn = ' + fn + '\n' +
                'isValid = ' + isValid + '\n' +
                'oerr.type = ' + oerr.type + '\n' +
                'oerr.src = ' + oerr.src + '\n' +
                'oerr.style = ' + oerr.style + '\n' +
                'value.length = ' + value.length + '\n' +
                'showzerolenerror = ' + showzerolenerror
                );
                */
                //alert(ofield.name + ', isValid = ' + isValid + ', oerr.type = ' + oerr.type + ', value.length = ' + value.length + ', showzerolenerror = ' + showzerolenerror);
                if (oerr.type && oerr.type == 'text') {
                    //alert('[text] name = ' + ofield.name + ', isValid = ' + isValid + ', value.length = ' + value.length + ', showzerolenerror = ' + showzerolenerror);
                    if (value.length == 0 && !showzerolenerror) oerr.style.background = nulcolour; //oerr.style.color = nulcolour;
                    else {
                        if (isValid) oerr.style.background = okcolour; // oerr.style.color = '#0000cd';//okcolour;
                        else oerr.style.background = errcolour; //oerr.style.color = errcolour;
                    }
                }
                else if (oerr.src) { // image
                    //alert('[img] name = ' + ofield.name + ', isValid = ' + isValid + ', value.length = ' + value.length + ', showzerolenerror = ' + showzerolenerror);
                    if (value.length == 0 && !showzerolenerror) oerr.src = nulimg;
                    else {
                        if (isValid) oerr.src = okimg;
                        else oerr.src = errimg;
                    }
                }
                else if (typeof (oerr.style) != 'undefined') { // set style.color
                    //alert('[style] name = ' + ofield.name + ', isValid = ' + isValid + ', value.length = ' + value.length + ', showzerolenerror = ' + showzerolenerror);
                    if (value.length == 0 && !showzerolenerror) oerr.style.color = nulcolour;
                    else {
                        if (isValid) oerr.style.color = okcolour;
                        else oerr.style.color = errcolour;
                    }
                }
            }
        }
    }
    return isValid;
}
function format(expr, decplaces) {
  var str = "" + Math.round (eval(expr) * Math.pow(10,decplaces))
  while (str.length <= decplaces) {
    str = "0" + str
  }
  var decpoint = str.length - decplaces
  return str.substring(0,decpoint) + "." + str.substring(decpoint,str.length);
}
function dollarize (expr) {
  return "$" + format(expr,2)
}

function checkNumeric(evt) {
  evt = (evt) ? evt : window.event
  var charCode = (evt.which) ? evt.which : evt.keyCode
  if (charCode > 31 && (charCode < 48 || charCode > 57)) {
    status = "This field accepts numbers only."
    return false
  }
  status = ""
  return true
}

// Removes leading whitespaces
function LTrim(value) {

    var re = /\s*((\S+\s*)*)/;
    return value.replace(re, "$1");

}

// Removes ending whitespaces
function RTrim(value) {

    var re = /((\s*\S+)*)\s*/;
    return value.replace(re, "$1");

}

// Removes leading and ending whitespaces
function LRTrim(value) {

    return LTrim(RTrim(value));

}

