// 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 = 9;

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 checkInternationalPhoneConsistency(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 checkEmailConsitency(email) {
   var reg = new RegExp("^([A-Za-z0-9]{1,}([-_\.&'][A-Za-z0-9]{1,}){0,}){1,}@(([A-Za-z0-9]{1,}[-]{0,1})\.){1,}[A-Za-z]{2,6}$");
   if(email.value.match(reg) == null) {
      return false;
   }
}

function getRequiredInput(elem) {
	for (j=0; j < elem.length; j++) {
		var subElem = elem.elements[j]
		if (subElem.type == "text")
			return subElem
	}
}

// check required form elements
function ValidateForm(doc){
	var pass = true
	var Phone=document.createContactForm["PERSON.CONTACTS.CONTACT.mobile"]
	var Email=document.createContactForm["PERSON.CONTACTS.CONTACT.email"]
	for (i=0; i < doc.length; i++) {
		var elem = doc.elements[i]
		if (elem.classList.contains("validate")) {
			var subInputElem = elem
			if (subInputElem.value == '') {
				pass = false
				subInputElem.focus()
			}
			
			if (elem.classList.contains("phone")) {
				Phone = subInputElem
				if((Phone.value==null)||(Phone.value=="")) {
					alert("Please enter your phone number")
					Phone.focus()
					return false
				}
				if (checkInternationalPhoneConsistency(Phone.value)==false) {
					alert("Please enter a valid phone number")
					Phone.value=""
					Phone.focus()
					return false
				}
			}
			else if (elem.classList.contains("email")) {
				Email = subInputElem
				if((Email.value==null)||(Email.value=="")) {
					alert("Please enter your e-mail")
					Email.focus()
					return false
				}
				if (checkEmailConsitency(Email)==false) {
					alert("Please enter a valid e-mail")
					Email.value=""
					Email.focus()
					return false
				}
			}
			
			if (!pass)
				break
		}
	}
	if (!pass){
		alert("One or more of the required elements are not completed. Please complete them, then submit again!")
		return false
	}
	else
		return true
}

