
var trimc=0;
var trimp=0;

function trimPlus(field) {
 with (field){
  s= value;
  if (s.substr(0,3) == '+44' && s.length>2) { s = s.substr(3,9999); trimc=1;}
  while (s.substr(0,1) == '+' && s.length>1) { s = s.substr(1,9999); trimp=1; }
  if(trimp>0)
  if (s.substr(0,2) == '44' && s.length>1) { s = s.substr(2,9999); trimc=1;}
  value=s;
 }
}

function trimZero(field) {
 with (field){
  s= value;
  if(trimp<1 || trimc<1)
  while (s.substr(0,1) == '0' && s.length>1) { s = s.substr(1,9999); }
  if (s.substr(0,2) == '44' && s.length>1) { s = s.substr(2,9999); trimcode=1;}
  s='+44'+s;
  value=s;
 }
}

function IsNumeric(sText){
   var ValidChars = "0123456789";
   var IsNumber=true;
   var Char;
   for (i = 0; i < sText.length && IsNumber == true; i++) { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) {
         IsNumber = false;
      }
   }
   return IsNumber;
}

function validate_required(field,alerttxt){
  with (field){
    if (value==null||value=="")
      {alert(alerttxt);return false;}
    else {return true}
  }
}

function validate_select(field,alerttxt){
  with (field){
    if (field.selectedIndex==0)
      {alert(alerttxt);return false;}
    else {return true}
  }
}

function validate_other(field,field2,alerttxt){
 othval = field2.value;
  with (field){
    if ((field.options[field.selectedIndex].value=='Other') && (othval==null||othval==""))
      {alert(alerttxt);return false;}
    else {return true}
  }
}

function validate_number(field,alerttxt){
  with (field){
	if(!IsNumeric(value))
      {alert(alerttxt);return false;}
    else 
      {return true}
  }
} 

function validate_email(field,alerttxt){
  with (field){
    isspace=value.indexOf(" ");  	
    apos=value.indexOf("@");
    dotpos=value.lastIndexOf(".");
    endpos=value.length;
    alert(apos + " : " + dotpos + " : " + endpos + " : " + isspace);
    if (apos<1||dotpos-apos<2||endpos-dotpos<2||isspace>0) 
      {alert(alerttxt);return false;}
    else {return true;}
  }
}

function validate_form(thisform){
  with (thisform){
    if (validate_select(title,"Please enter a title")==false)
      {title.focus();return false;}
    if (validate_required(firstname,"Please enter your first name")==false)
      {firstname.focus();return false;}
    if (validate_required(surname,"Please enter your surname")==false)
      {surname.focus();return false;}
    if (validate_select(country,"Please select your country")==false)
      {country.focus();return false;}
//    if (validate_required(phone,"Please enter your phone number!")==false)
//      {phone.focus();return false;}
//    trimPlus(mobile);
//    if (validate_number(phone,"Please enter a valid phone number! eg: +44xxxxxxxxxx")==false)
//      {phone.focus();return false;}
//    trimZero(mobile);
	if (!ValidateForm(phone))
      {phone.focus();return false;}
    if (validate_required(email,"Please enter your email address!")==false)
      {email.focus();return false;}
    if (emailCheck(email.value)==false)
    {email.focus();return false;}

//    if (validate_email(email,"Please enter a valid email address!")==false)
//    {email.focus();return false;}
    if (validate_select(service_type,"Please select the service type you expect to build")==false)
      {service_type.focus();return false;}
 }
}

function toggleField(val) { 
    var o = document.getElementById('others'); 
    (val == 'Other')? o.style.display = 'block' : o.style.display = 'none'; 
} 

function limitText(limitField, limitCount, limitNum) {
	if (limitField.value.length > limitNum) {
		limitField.value = limitField.value.substring(0, limitNum);
	} else {
		limitCount.value = limitNum - limitField.value.length;
	}
}

/**
 * DHTML phone number validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */

// Declaring required variables
var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 10;

function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}
function trim(s)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not a whitespace, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (c != " ") returnString += c;
    }
    return returnString;
}
function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function checkInternationalPhone(strPhone){
var bracket=3
strPhone=trim(strPhone)
if(strPhone.indexOf("+")>1) return false
if(strPhone.indexOf("-")!=-1)bracket=bracket+1
if(strPhone.indexOf("(")!=-1 && strPhone.indexOf("(")>bracket)return false
var brchr=strPhone.indexOf("(")
if(strPhone.indexOf("(")!=-1 && strPhone.charAt(brchr+2)!=")")return false
if(strPhone.indexOf("(")==-1 && strPhone.indexOf(")")!=-1)return false
s=stripCharsInBag(strPhone,validWorldPhoneChars);
return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}

function ValidateForm(phone){
//	var Phone=document.frmSample.txtPhone
	
	if ((phone.value==null)||(phone.value=="")){
//		alert("Please Enter your Phone Number")
//		phone.focus()
//		return false
// NOT A REQUIRED FIELD
		return true
	}
	if (checkInternationalPhone(phone.value)==false){
		alert("Please enter a valid Phone Number")
		phone.value=""
		phone.focus()
		return false
	}
	return true
 }
 
/**
 * end DHTML phone number validation script.
 */
 
 
 /***
 * email validation
 */
 
 function emailCheck (emailStr) {
 
 /* The following variable tells the rest of the function whether or not
 to verify that the address ends in a two-letter country or well-known
 TLD.  1 means check it, 0 means don't. */
 
 var checkTLD=0;
 
 /* The following is the list of known TLDs that an e-mail address must end with. */
 
 var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
 
 /* The following pattern is used to check if the entered e-mail address
 fits the user@domain format.  It also is used to separate the username
 from the domain. */
 
 var emailPat=/^(.+)@(.+)$/;
 
 /* The following string represents the pattern for matching all special
 characters.  We don't want to allow special characters in the address. 
 These characters include ( ) < > @ , ; : \ " . [ ] */
 
 var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
 
 /* The following string represents the range of characters allowed in a 
 username or domainname.  It really states which chars aren't allowed.*/
 
 var validChars="\[^\\s" + specialChars + "\]";
 
 /* The following pattern applies if the "user" is a quoted string (in
 which case, there are no rules about which characters are allowed
 and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
 is a legal e-mail address. */
 
 var quotedUser="(\"[^\"]*\")";
 
 /* The following pattern applies for domains that are IP addresses,
 rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
 e-mail address. NOTE: The square brackets are required. */
 
 var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
 
 /* The following string represents an atom (basically a series of non-special characters.) */
 
 var atom=validChars + '+';
 
 /* The following string represents one word in the typical username.
 For example, in john.doe@somewhere.com, john and doe are words.
 Basically, a word is either an atom or quoted string. */
 
 var word="(" + atom + "|" + quotedUser + ")";
 
 // The following pattern describes the structure of the user
 
 var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
 
 /* The following pattern describes the structure of a normal symbolic
 domain, as opposed to ipDomainPat, shown above. */
 
 var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
 
 /* Finally, let's start trying to figure out if the supplied address is valid. */
 
 /* Begin with the coarse pattern to simply break up user@domain into
 different pieces that are easy to analyze. */
 
 var matchArray=emailStr.match(emailPat);
 
 if (matchArray==null) {
 
 /* Too many/few @'s or something; basically, this address doesn't
 even fit the general mould of a valid e-mail address. */
 
 alert("Please enter a valid email address (check @ and .'s)");
 return false;
 }
 var user=matchArray[1];
 var domain=matchArray[2];
 
 // Start by checking that only basic ASCII characters are in the strings (0-127).
 
 for (i=0; i<user.length; i++) {
 if (user.charCodeAt(i)>127) {
 alert("Please enter a valid email address (contains invalid characters)");
 return false;
    }
 }
 for (i=0; i<domain.length; i++) {
 if (domain.charCodeAt(i)>127) {
 alert("Please enter a valid email address (domain name contains invalid characters)");
 return false;
    }
 }
 
 // See if "user" is valid 
 
 if (user.match(userPat)==null) {
 
 // user is not valid
 
 alert("Please enter a valid email address");
 return false;
 }
 
 /* if the e-mail address is at an IP address (as opposed to a symbolic
 host name) make sure the IP address is valid. */
 
 var IPArray=domain.match(ipDomainPat);
 if (IPArray!=null) {
 
 // this is an IP address
 
 for (var i=1;i<=4;i++) {
 if (IPArray[i]>255) {
 alert("Please enter a valid email address");
 return false;
    }
 }
 return true;
 }
 
 // Domain is symbolic name.  Check if it's valid.
  
 var atomPat=new RegExp("^" + atom + "$");
 var domArr=domain.split(".");
 var len=domArr.length;
 for (i=0;i<len;i++) {
 if (domArr[i].search(atomPat)==-1) {
 alert("Please enter a valid email address (domain name does not seem to be valid)");
 return false;
    }
 }
 
 /* domain name seems valid, but now make sure that it ends in a
 known top-level domain (like com, edu, gov) or a two-letter word,
 representing country (uk, nl), and that there's a hostname preceding 
 the domain or country. */
 
 if (checkTLD && domArr[domArr.length-1].length!=2 && 
 domArr[domArr.length-1].search(knownDomsPat)==-1) {
 alert("Please enter a valid email address");
 return false;
 }
 
 // Make sure there's a host name preceding the domain.
 
 if (len<2) {
 alert("Please enter a valid email address (missing a hostname)!");
 return false;
 }
 
 // If we've gotten this far, everything's valid!
 return true;
}

 /***
 * end email validation
 */
