
function validate(field,type,min,max,casesensitive){

  // min and maximum values
  if (field.value.length<parseInt(min) && parseInt(min)>0){
     if(type == "1"){
       alert('Please enter at least '+min+' digits.');
     }else{
       alert('Please enter at least '+min+' characters.');
     }
     field.value="";
     
  }
 
  if (field.value.length>parseInt(max) && parseInt(max)>0){
     if(type == "1"){
       alert('You have exceeded the maximum number of digits ('+max+' max) for this field!');
     }else{
       alert('You have exceeded the maximum number of characters ('+max+' max) for this field!');
     }
     field.value=field.value.substring(0,max);
     
  }
  
  if (field.value!=""){
  
  
  // case sensitivity
  if(parseInt(casesensitive)==1){  // all uppercase
    field.value=field.value.toUpperCase();  
  }else if(parseInt(casesensitive)==2){ // all lowercase
    field.value=field.value.toLowerCase();     
  }else if(parseInt(casesensitive)==3){  // capitalise first letter
    field.value=initialCap(field);  
  }else{  
  }
  
    
  if (type == "0"){
    checkChar(field);
  }
  else if(type == "1"){
    field.value = removeSpaces(field.value);
    
    if ((checkInteger(field.value)) == false){
       alert('Please enter a whole number');
       field.value="";
    }
  }
  else if(type == "2"){
    if (field.value.indexOf(".")>-1){
       integer = field.value.substring(0,field.value.indexOf('.'));
       if (integer.length>9){ alert('Number too large!') ;field.value="" ;}     
    }else{
       if (field.value.length>9){ alert('Number too large!');field.value=""; }
    }
    field.value = checkDecimal(field.value,4);
  }
  else if(type == "3"){
    if (field.value.indexOf(".")>-1){
       integer = field.value.substring(0,field.value.indexOf('.'));
       if (integer.length>9){ alert('Number too large!') ;field.value="" ;}     
    }else{
       if (field.value.length>9){ alert('Number too large!') ;field.value=""; }
    }
    field.value = checkDecimal(field.value,4);
  }
  else if(type == "4"){
    vDateType='3';
    field.value = field.value.substring(0,10);
    DateFormat(field,field.value);
  }
  else if(type == "5"){
    if (checkEmail(field.value)==false){
       alert('This Email Address is invalid. Please check.');
       field.value="";
    }
  }
  else if(type == "6"){
    if (field.value.indexOf(".")>-1){
       integer = field.value.substring(0,field.value.indexOf('.'));
       if (integer.length>9){ alert('Number too large!') ;field.value="" ;}     
    }else{
       if (field.value.length>9){ alert('Number too large!') ;field.value=""; }
    }
    field.value = checkDecimal(field.value,4);
  }
  else if(type == "7"){
    field.value = removeSpaces(field.value);
    if(!checkCreditCard(field.value)){
       alert('Invalid Credit Card Number. Please check.');
       field.value="";
    }
    
  }
  else if(type == "8"){
    field.value = removeSpaces(field.value);
    if(!PFcheckURL(field)){
       
    }
    
  }
  
  }
  
  
}

function PFcheckURL(formfield){
        
        var httpreg = /^(http|ftp|https):\/\/[\w]+(\.[\w]+)+([\w\-\.,@?^=%&!$:\/~\+#]*[\w\-\@?^=%&!$\/~\+#])?/gi;
	if (formfield.value.indexOf("http://")==0 || formfield.value.indexOf("https://")==0 || formfield.value.indexOf("ftp://")==0){
	}else{
	   formfield.value="http://"+formfield.value;
	}
	var value=formfield.value;
	if(value==""){
	  formfield.value='';
	  return true;
	}else{

	  if(value.match(httpreg)!=value){
	       alert("Invalid Link.\nPlease specify a full URL like http://www.google.com");          
	       formfield.value='';
	       return false;
	     }else{ 
	       return true;
	     }
	}
}



//Initial Caps
function initialCap(field){

        var word= field.value;
        var firstLetter = word.substring(0, 1).toUpperCase();
        var restOfWord = word.substring(1, word.length);
        
        return firstLetter + restOfWord; // re-assign it back to the array and move on
    
}

function checkURL(field,errstmt){
        var httpreg = /^(http|ftp|https):\/\/[\w]+(\.[\w]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?/gi;

	var value=field.value;
	if(value==""){
	  field.value='http://';
	  return true;
	}else{

	  if(value.match(httpreg)!=value){
	       if(value!="http://"){
		  alert("Invalid Link.");
	       }
	       field.value='http://';
	       return false;
	     }else{
	       return true;
	     }
	}
}



//Check Standard Field Type 1
function checkChar(field){
  trimTrailing(field);
  trimLeading(field); 
}

function checkDecimal(num, places) {
  num = num.toString().replace(/[^\d\.]/g,'');
  if(isNaN(num))
  num = "0";
  
   if (places > 0) {
      if ((num.toString().length - num.toString().lastIndexOf('.')) > (places + 1)) {
         var Rounder = Math.pow(10, places);
         num = Math.round(num * Rounder) / Rounder;
       
         return num.toString();
      
      }else{
         if(num.toString().indexOf('.')==0){
	   num="0"+num.toString();	            
         }
         return num.toString();
      }
   }
   else return Math.round(num);
}

// Check that a string contains only letters and numbers
function checkInteger(string) {
	if (string.search) {
		if (string.search(/^\d+$/) == -1) return false;
	}

	return true;
}

// Remove characters that might cause security problems from a string 
function removeBadCharacters(string) {
	if (string.replace) {
		string.replace(/[<>\"\'%;\)\(&\+]/, '');
	}
	return string;
}

// Remove all spaces from a string
function removeSpaces(string) {
	var newString = '';
	for (var i = 0; i < string.length; i++) {
		if (string.charAt(i) != ' ') newString += string.charAt(i);
	}
	return newString;
}

// Remove Trailing Spaces
function trimTrailing(field){
  while(''+field.value.charAt(field.value.length-1)==' ')field.value=field.value.substring(0,field.value.length-1)
}

// Remove Leading Spaces
function trimLeading(field){
  while(''+field.value.charAt(0)==' ')field.value=field.value.substring(1,field.value.length)
}

function stripcharacters(input,filteredValues) {
	s = input.value;
	var i;
	var returnString = "";
	for (i = 0; i < s.length; i++) {  // Search through string and append to unfiltered values to returnString.
	var c = s.charAt(i);
	if (filteredValues.indexOf(c) == -1) returnString += c;
	}
	input.value = returnString;
}


// Check that an email address is valid based on RFC 821 (?)
function checkEmail(emailStr) {
	
	var emailPattern = /^(([a-zA-Z0-9_\-']+([\.][a-zA-Z0-9_\-']+)*)@(([a-zA-Z0-9]+([\._\-][a-zA-Z0-9]+)*[\.][a-zA-Z]{2,6})|((([0-9]{1,3}[\.]){3})([0-9]{1,3}))))$/;
	
	if (!emailPattern.test(emailStr)) {	 
	  return false;
	}else{
	  return true;
	}
}

// Check that a credit card number is valid based using the LUHN formula (mod10 is 0)
function checkCreditCard(number) {
	number = '' + number;
	
	if (number.length > 16 || number.length < 13 ) return false;
	else if (getMod10(number) != 0) return false;
	else return true;
}

// Returns a checksum digit for a number using mod 10
function getMod10(number) {
	
	// convert number to a string and check that it contains only digits
	// return -1 for illegal input
	number = '' + number;
	number = removeSpaces(number);
	if (!checkInteger(number)) return -1;
	
	// calculate checksum using mod10
	var checksum = 0;
	for (var i = number.length - 1; i >= 0; i--) {
		var isOdd = ((number.length - i) % 2 != 0) ? true : false;
		digit = number.charAt(i);
		
		if (isOdd) checksum += parseInt(digit);
		else {
			var evenDigit = parseInt(digit) * 2;
			if (evenDigit >= 10) checksum += 1 + (evenDigit - 10);
			else checksum += evenDigit;
		}
	}
	return (checksum % 10);
}

function DateFormat(dtform,dtfield) {
  var err = 0;
  string = dtfield;
  
  var valid = "0123456789/";
  var temp;
  for (var i=0; i< string.length; i++) {
  temp = "" + string.substring(i, i+1);
  if (valid.indexOf(temp) == "-1") err = 1;
  }
  if (string.length != 10) err=1;
  b = string.substring(0, 2); // day
  c = string.substring(2, 3); // '/'
  d = string.substring(3, 5); // month
  e = string.substring(5, 6); // '/'
  f = string.substring(6, 10); // year
  
  if(!checkInteger(b)) err = 2;
  if(!checkInteger(d)) err = 2;  
  if(!checkInteger(f)) err = 2;
  if (b<1 || b>31) err = 2;
  if (c != '/') err = 1;
  if (d<1 || d>12) err = 2;
  if (e != '/') err = 1;
  if (f<1900 || f>2099) err = 2;
  if (d==4 || d==6 || d==9 || d==11){
  if (b==31) err=2;
  }
  if (d==2){
    var g=parseInt(f/4);
    if (isNaN(g)) {
     err=2;
    }
    if (b>29) err=2;
    if (b==29 && ((f/4)!=parseInt(f/4))) err=2;
  }
 
  //var dt = new Date();
  //var curr_year = dt.getFullYear();
  //if(f>curr_year) err = 2;
  
  if (err==1) {
    alert('The Date must be entered in dd/mm/yyyy format.');
    if(dtform){ dtform.value=""; }
    return false;
  }else if (err==2){
    alert('Please enter a valid Date (dd/mm/yyyy).');
    if(dtform){ dtform.value=""; }
    return false;
  }else {
  return true;
  }
}
