var nbsp = 160;		// non-breaking space char
var node_text = 3;	// DOM text node-type
var emptyString = /^\s*$/ ;
var global_valfield;	// retain valfield for timer thread
var REGMIN=2;
var REGMAX=9;
var VRCMIN=10;
var VRCMAX=10;
var NCTMIN=11;
var NCTMAX=12;
var CHASSISMIN=6;
var CHASSISMAX=17;
var MILEAGEMIN=3;
var MILEAGEMAX=7;
var UKREG= /^([A-Za-z]{1}[0-9]{1,3}[A-Za-z]{3})|([A-Za-z]{2}[0-9]{2}[A-Za-z]{3})$/;

function isUKReg(registration)
{  
  return UKREG.test(registration);
}
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); };

function creditCardNumberOK(number)
{
	var i, sum, weight;
	sum=0;
	for (i = 0; i < number.length - 1; i++) 
	{
		weight = number.substr(number.length - (i + 2), 1) * (2 - (i % 2));
		sum += ((weight < 10) ? weight : (weight - 9));
	}
	if (parseInt(number.substr(number.length-1)) == ((10 - sum % 10) % 10))
		return true;
	
	else 
		return false;
}

function validateCreditCard  (field) 
{
	if(!isNumber(field,'Credit Card',true))
		return false;

	if(field !=null)
		field.value=field.value.trim();
		
    if(!alertIfMissing(field, "Credit card", true))
	    return false;

    var result = creditCardNumberOK(field.value);
    if(!result)
       alert("Please enter a valid credit card number.");
    return result;
  }


// --------------------------------------------
//                  trim
// Trim leading/trailing whitespace off string
// --------------------------------------------

function trim(str)
{
  return str.replace(/^\s+|\s+$/g, '');
}


// --------------------------------------------
//                  setfocus
// Delayed focus setting to get around IE bug
// --------------------------------------------

function setFocusDelayed()
{
  global_valfield.focus();
}

function setfocus(valfield)
{
  // save valfield in global variable so value retained when routine exits
  global_valfield = valfield;
  setTimeout( 'setFocusDelayed()', 100 );
}

function exists(valfield)
{
  var real=false;
  real = valfield!=null;
  if(!real) return false;
  real = valfield.value!=null;
  if(!real) return false;
  real = !emptyString.test(valfield.value);
  return real;
}

function alertIfMissing  (valfield,   // element to be validated
						 name,		//name to show
                         required)   // true if required
{

  if (valfield==null || valfield.value==null || emptyString.test(valfield.value)) 
  {
    if (required) 
    {
      alert("Please enter "+name);  
      setfocus(valfield);
      return false;
    }
  }
  return true;
}

function alertIfIncorrect(valfield,   // element to be validated
						 name,		//the field name
                         min,		// min size of field
                         max)		// max size of field
{

  if(!alertIfMissing(valfield,name,true))
  	return false;
  	
  var minlength = min;
  var maxlength = max;
  if(minlength==maxlength)
  {
    if(eval(valfield.value.length)> eval(maxlength) || eval(valfield.value.length)< eval(minlength))
  	{
	  	alert(name+" can only be "+minlength+" characters long.");
	    setfocus(valfield);
	   	return false;
   	}
  }
  
  if(eval(valfield.value.length)> eval(maxlength))
  {
    alert("Maximum length of field is exceeded for "+name);
    setfocus(valfield);
   	return false;
   }
  if(eval(valfield.value.length)< eval(minlength))
  {
    alert("Minimum length of field is not reached for "+name);
    setfocus(valfield);
   	return false;
   }

    return true;
}

// --------------------------------------------
//            validatePresent
// Validate if something has been entered
// Returns true if so 
// --------------------------------------------

function validatePresent(valfield,   // element to be validated
                         name, 		// name of field
                         required,   // true if required
                         min,		// min size of field
                         max)		// max size of field
{
if(valfield!=null)
  valfield.value=valfield.value.trim();
  
  if(!alertIfMissing(valfield,name,required))
  	return false;
 
  if (valfield==null || valfield.value == null || emptyString.test(valfield.value))
  	return true; 

  return alertIfIncorrect(valfield,name,min,max);
 
}


// --------------------------------------------
//               validateEmail
// Validate if e-mail address
// Returns true if so (and also if could not be executed because of old browser)
// --------------------------------------------

function validateEmail  (valfield,   // element to be validated
                         required)   // true if required
{
  if(!alertIfMissing(valfield,"email address",required))
  	return false;

  var tfld = trim(valfield.value);  // value of field with whitespace trimmed off
  var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/  ;
  if (!email.test(tfld)) 
  {
    alert("Please enter a valid e-mail address");
    setfocus(valfield);
    return false;
  }

  var email2 = /^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/  ;
  if (!email2.test(tfld)) 
    alert("You have entered an unusual e-mail address, we will attempt to use it. If you do not receive an email within 3 minutes please contact us. Click OK to continue.");
  return true;
}

function validateChassis  (valfield, required)
{
if(valfield!=null)
  valfield.value=valfield.value.trim();
  
  if(!alertIfMissing(valfield,"chassis number",required))
  	return false;
  	
  if (emptyString.test(valfield.value))
  	return true; 
  	
  var tfld = trim(valfield.value);  // value of field with whitespace trimmed off
  var chassis = /i|I|o|O/;
  if (chassis.test(tfld)) 
  {
    alert("Chassis numbers do not contain o or i characters, please check to see if they are 0 or 1s ");
    setfocus(valfield);
    return false;
  }

  if(eval(valfield.value.length)> eval(CHASSISMAX))
  {
    alert("Chassis numbers cannot be longer than "+CHASSISMAX+" characters");
    setfocus(valfield);
   	return false;
   }
  if(eval(valfield.value.length)< eval(CHASSISMIN))
  {
    alert("Please enter the full chassis number");
    setfocus(valfield);
   	return false;
   }
  
  return true;
}



function validateTelephone  (valfield,   // element to be validated
                         required)   // true if required
{
var name="contact telephone number";
  if(!alertIfMissing(valfield,"your"+name,required))
  	return false;

  var tfld = trim(valfield.value);  // value of field with whitespace trimmed off
  var telnr = /^\+?[0-9 ()-]+[0-9]$/  ;
  if (!telnr.test(tfld)) {
    alert("Please enter a "+name+" using  digits");
    setfocus(valfield);
    return false;
  }

  var numdigits = 0;
  for (var j=0; j<tfld.length; j++)
    if (tfld.charAt(j)>='0' && tfld.charAt(j)<='9') numdigits++;

  if (numdigits<6) 
  {
    alert(name+" is too short");
    setfocus(valfield);
    return false;
  }

  if (numdigits>14)
  {
    alert(name+" is too long");
     setfocus(valfield);
    return false;
   }
  return true;
}


function isNumber    (valfield,   // element to be validated
						name,
                         required)   // true if required
{
  if (!emptyString.test(valfield.value)) 
  {
	  var tfld = trim(valfield.value);
	  valfield.value = tfld;
	  var ageRE = /^[0-9]+$/
	  if (!ageRE.test(tfld)) 
	  {
	    alert(name+" is not a valid number");
	    setfocus(valfield);
	    return false;
	  }
	}
	else
	{
		if(required)
		{	
			alert(name+" is not a valid number");
			return false;
		}
	}
  return true;
}
function currency    (valfield,   // element to be validated
						name)   // true if required
{

  if(!alertIfMissing(valfield,name,true))
  	return false;
  	
	var str = trim(valfield.value);
  if (/^[0-9]{1,6}(\.[0-9]{0,2})?$/.test(str) ) 
  {
        if (/\.[0-9]$/.test(str) ) 
            str += "0";
        else if (/\.$/.test(str)) 
            str += "00";
        else if (!/\.[0-9]{2}$/.test(str) )
            str += ".00";
       
        valfield.value= str;
        return true;
    }
    alert(name+" is not a valid amount!");
    return false;
}
