function validate_required(field,alerttxt) {
    with (field){
        if (value==null||value=="") {
            alert(alerttxt);return false;
        } else {
            return true;
        }
    }
}

function validate_input_length(field, length, alerttxt) {
    with (field){
        if (value.length > length) {
            alert(alerttxt+' You have an excess of ' + (value.length - length) + ' characters.'); return false;
        } else {
            return true;
        }
    }
}

// Note: also '+; is allowed here
function isPhoneInteger(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")) && (c != "+")) return false;
        
    }
    // All characters are numbers.
    return true;
}


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 to check the remaining characters
// fieldname, warningname, remainingname, maxchars
function countSpecialChars(str, chr) {
	var origString = str;
	var characterToCount = chr;
	var counter = 0;
	
	var myArray = origString.toLowerCase().split('');
	
	for (i=0;i<myArray.length;i++) {
		if (myArray[i] == characterToCount)	{
			counter++;
		}
	}
	return counter;
}

function count_chars(msg) {
	var special = 0;
	special += countSpecialChars(msg, '^');
	special += countSpecialChars(msg, '{');
	special += countSpecialChars(msg, '}');
	special += countSpecialChars(msg, '\\');
	special += countSpecialChars(msg, '[');
	special += countSpecialChars(msg, '~');
	special += countSpecialChars(msg, ']');
	special += countSpecialChars(msg, '|');
	special += countSpecialChars(msg, '€');

	return msg.length + special;
	
}

function CheckFieldLength(fn,wn,rn,mc) {
  
  var len = count_chars(fn.value);
  if (len > mc) {
    fn.value = fn.value.substring(0,(fn.value.length-1));
    //fn.value = fn.value.substring(0,mc);
    len = mc;
  }
  
  var chrleft = mc - len;
  
  document.getElementById(rn).innerHTML = chrleft;
}

function validate_new_contact_single(thisform) {
    with (thisform) {
	    if (validate_required(name,"'Name' can't be empty.")==false){
	        name.focus();
	        return false;
	    } else if (validateGSMNumber(phone.value)==false){
	    	alert('Invalid telephone number');
	        phone.focus();
	        return false;
        } else {
            return true;
        }  
    }
}

function validate_new_contact(thisform) {
    with (thisform) {
        if (contact_type[0].checked) {  // If we are adding a new contact
            if (validate_required(name,"'Name' can't be empty.")==false){
                name.focus();
                return false;
            } else if (validateGSMNumber(phone.value)==false){
            	alert('Invalid telephone number');
                phone.focus();
                return false;
            } else {
                return true;
            }
        } else {
            return true;
        }  
    }
}

function validate_sms_sender(sender) {
    sender = rtrim(sender);
    if (sender.length == 0) {
        alert("'Sender' can't be empty.");
        return false;
    }
    if (isPhoneInteger(sender) && sender.length > 16) {
        alert('Use a maximum of 16 numbers for sender.');
        return false;
    } 
    if (!isPhoneInteger(sender) && sender.length > 11) {
        alert('Use a maximum of 11 characters for sender.');
        return false;
    }
    return true;
}

function validate_sms_msg(msg) {
    if (msg.length == 0) {
        alert("'Message' can't be empty.");
        return false;
    }
    if (count_chars(msg) > 160) {
        alert("'Message' can't contain more than 160 characters.");
        return false;
    }
    return true;
    
    
    /*
    var regex = /^([a-zA-Z0-9.,?\s\#\%\&\'\(\)\*\+\-\/\<\>\=\!\:\;\"]{1,160})$/;
    if (!regex.test(msg)) {
        alert("'Bericht' mag niet leeg zijn, en geen ongeldige characters bevatten");
        return false
    }
    */
 
}

function validate_sms_numbers(numbers) {
     /*
    Edit by chris: No longer needed since contacts can also be checked
    if (numbers.length == 0) {
        alert ("Voer tenminste 1 nummer in");
        return false;
    }
    */
    var recipients = numbers.split(",");
    for (i=0; i< recipients.length; i++) {
        recipients[i] = trim(recipients[i]);
        if (recipients[i] != '' && !validateGSMNumber(recipients[i])) {
            alert("'" + recipients[i] + "' is not a valid phonenumber!");
            return false;
        }
    }
    return true;
    
}


function validate_send_sms(thisform) {
    with (thisform) {
        if (!validate_sms_numbers(numbers.value)) {
            numbers.focus();
            return false;
        }
        if (!validate_sms_sender(sender.value)){
            sender.focus();
            return false;
        }
        if (!validate_sms_msg(smsText.value)){
            smsText.focus();
            return false;
        } 
        return true;
    }
}

function validate_mod_creditalert(thisform) {
    with (thisform) {
        var regex = /^\d+$/;
        
        if (sms_alert.checked) {  
            if (!validateGSMNumber(phone.value)) {
                alert( "Please enter a valid phonenumber for the credit alert." );
                phone.focus();
                return false;
            }
        }
        if (email_alert.checked) {  
            if (!validateEmailAddress(email.value)) {
                alert( "Please enter a valid e-mail address for the credit alert.");
                email.focus();
                return false;
            }
        }

        if (!regex.test(threshold.value) || threshold.value < 0) {
            threshold.value = 0;
        }
        return true;
    }
}

function validateEmailAddress(emailString) {
    var regex = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+$/;
    return regex.test(emailString);
}
		
function validateGSMNumber(numberString){
    var regex = /^(\+)?(\d{8,17})$/;
    return regex.test(numberString);
}


function checkUncheckAll(theElement) {
    var theForm = theElement.form, z = 0;
    for(z=0; z<theForm.length;z++){
        if(theForm[z].type == 'checkbox' && theForm[z].name != 'checkall'){
            theForm[z].checked = theElement.checked;
        }
    }
}

function checkChecked(theElement) {
    var theForm = theElement.form, z = 0, i=0;
    for(z=0; z<theForm.length;z++){
        if(theForm[z].type == 'checkbox' && theForm[z].name != 'checkall'){
            i++;
        }
    }
    if (i<(z-1)){
        for(z=0; z<theForm.length;z++){
            if(theForm[z].type == 'checkbox' && theForm[z].name == 'checkall'){
                theForm[z].checked = 0;
            }
        }
    }
}

function submitbutton_invoiceaddress() {
    var form = document.mosForm;
    
    if (form.company[1].checked) {
        if (form.company_name.value == '') {
	        alert( "Enter your company name." );
	        form.company_name.focus();
	        return false;
	    } 
	    if (form.company_vatnr.value == '') {
	        alert( "Enter your vat number." );
	        form.company_vatnr.focus();
	        return false;
	    } 
    } else if (!form.company[0].checked){ // not seleced yet
    	alert( "Please indicate whether you wish to register as a company or not." );
        form.company[0].focus();
        return false;
    }
    
    if (form.fname.value == "") {
        alert( "Please enter 'Name'." );
        return false;
    }
     if (form.lname.value == "") {
        alert( "Please enter 'Lastname'." );
        return false;
    }    
    if (form.street.value == "") {
        alert( "Please enter 'address'." );
        return false;
    } 
    if (form.number.value == "") {
        alert( "Please enter 'address number' in." );
        return false;
    }
    if (form.city.value == "") {
        alert( "Please enter 'city' in." );
        return false;
    } 
    if (form.country.value.indexOf('--') > -1 || form.country.value == "") {
        alert( "Enter your country." );
        form.country.focus();
        return false;
    }   
    if (!validateGSMNumber(form.phone.value)) {
        alert( "Enter your phonenumber." );
        return false;
    }
    if (!validateEmailAddress(form.email.value)) {
        alert( "Enter a valid e-mail address" );
        return false;
    } 
    return true;
    
}

function submitbutton_profile() {
    var form = document.mosForm;
    var r = new RegExp("[\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-]", "i");
    
    if (form.username.value == "") {
        alert( "Enter a username." );
        return false;
    } 
    if (r.exec(form.username.value) || form.username.value.length < 3) {
        alert( "Enter a valid username. Use at least two characters of 0-9,a-z,A-Z" );
        return false;
    } 
    if (!validateEmailAddress(form.email.value)) {
        alert( "Enter a valid e-mail address" );
        return false;
    } 
    if ((form.password.value.length > 0) && (form.password.value.length < 6)) {
        alert( "Enter a valid password of at least 6 characters. Allowed characters are 0-9, a-z, A-Z." );
        return false;
    } 
    if ((form.password.value.length > 0) && (form.password2.value == "")) {
        alert( "Please enter your password twice for verification." );
        return false;
    } 
    if ((form.password.value != "") && (form.password.value != form.password2.value)){
        alert( "Your passwords do not match." );
        return false;
    } 
    if ((form.password.value.length > 0) && (r.exec(form.password.value))) {
        alert( "Enter a valid password of at least 6 characters. Allowed characters are 0-9, a-z, A-Z." );
        return false;
    } 
    if (form.fname.value == "") {
        alert( "Enter your name." );
        return false;
    }
    if (form.lname.value == "") {
        alert( "Enter your last name." );
        return false;
    } 
    if (form.city.value == "") {
        alert( "Enter your city." );
        return false;
    } 
    if (form.postalcode.value == "") {
        alert( "Enter your postal code." );
        return false;
    } 
    if (form.street.value == "") {
        alert( "Enter your address." );
        return false;
    }  
    if (form.number.value == "") {
        alert( "Enter your address number." );
        return false;
    } 
    if (form.country.value.indexOf('--') > -1 || form.country.value == "") {
        alert( "Enter your country." );
        return false;
    }  
    if (!validateGSMNumber(form.phone.value)) {
        alert( "Enter your phonenumber." );
        return false;
    }
    return true;
    
}


function submitbutton_reg() {
    var form = document.register;
    var r = new RegExp("[\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-]", "i");
	
    // do field validation
    
    
    if (form.username.value == "") {
        alert( "Enter a username." );
        form.username.focus();
        return false;
    } 
    if (r.exec(form.username.value) || form.username.value.length < 3) {
        alert( "Enter a valid username. Use at least two characters of 0-9,a-z,A-Z" );
        form.username.focus();
        return false;
    } 
    if (!validateEmailAddress(form.email.value)) {
        alert( "Enter a valid e-mail address" );
        form.email.focus();
        return false;
    } 
    if (form.password.value.length < 6) {
        alert( "Enter a valid password of at least 6 characters. Allowed characters are 0-9, a-z, A-Z." );
        form.password.focus();
        return false;
    } 
    if (form.password2.value == "") {
        alert( "Please enter your password twice for verification." );
        form.password2.focus();
        return false;
    } 
    if ((form.password.value != "") && (form.password.value != form.password2.value)){
        alert( "Your passwords do not match." );
        form.password.focus();
        return false;
    } 
    if (r.exec(form.password.value)) {
        alert( "Enter a valid password of at least 6 characters. Allowed characters are 0-9, a-z, A-Z." );
        form.password.focus();
        return false;
    } 
    if (form.name.value == "") {
        alert( "Enter your name." );
        form.name.focus();
        return false;
    } 
    if (form.lastname.value == "") {
        alert( "Enter your last name." );
        form.lastname.focus();
        return false;
    } 
    if (form.city.value == "") {
        alert( "Enter your city." );
        form.city.focus();
        return false;
    } 
    if (form.postalcode.value == "") {
        alert( "Enter your postal code." );
        form.postalcode.focus();
        return false;
    } 
    if (form.street.value == "") {
        alert( "Enter your address." );
        form.street.focus();
        return false;
    } 
    if (form.number.value == "") {
        alert( "Enter your address number." );
        form.number.focus();
        return false;
    } 
    if (form.country.value.indexOf('--') > -1 || form.country.value == "") {
        alert( "Enter your country." );
        form.country.focus();
        return false;
    }  
    if (!validateGSMNumber(form.phone.value)) {
        alert( "The phonenumber is invalid. Please enter a valid phonenumber." );
        form.phone.focus();
        return false;
    } 
    
    if (form.company[1].checked) {
        if (form.company_name.value == '') {
	        alert( "Enter your company name." );
	        form.company_name.focus();
	        return false;
	    } 
	    if (form.company_vatnr.value == '') {
	        alert( "Enter your vat number." );
	        form.company_vatnr.focus();
	        return false;
	    } 
    } else if (!form.company[0].checked){ // not seleced yet
    	alert( "Please indicate whether you wish to register as a company or not." );
        form.company[0].focus();
        return false;
    }
    
    if (form.agreed.checked != true ) {
        alert( "U must agree with the general terms." );
        form.agreed.focus();			
        return false;
    } 
    if (!form.optaagreedView.checked) {
        alert( "U must agree with the Opta rules." );	
        form.optaagreedView.focus();		
        return false;
    } 	
    return true;
}


        
function trim(stringToTrim) {
    // Removes whitespaces
    return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
    return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
    return stringToTrim.replace(/\s+$/,"");
}



// Page display functions
function updateToForm(theForm) {
    if (theForm.receiver_type[1].checked) {
        document.getElementById('show_to_group').style.display =  "inline";
        document.getElementById('show_to_contacts').style.display = "none";
    } else {
        document.getElementById('show_to_group').style.display =  "none";
        document.getElementById('show_to_contacts').style.display = "inline";			
    }
}

function updateContactForm(theForm) {
    if (theForm.contact_type[0].checked) {
        document.getElementById('new_contact_div').style.display =  "inline";
        document.getElementById('existing_contact_div').style.display = "none";
        document.getElementById('file_contacts_div').style.display = "none";
    } else if (theForm.contact_type[1].checked){
        document.getElementById('new_contact_div').style.display =  "none";
        document.getElementById('existing_contact_div').style.display = "inline";
        document.getElementById('file_contacts_div').style.display = "none";
    } else {
        document.getElementById('new_contact_div').style.display =  "none";
        document.getElementById('existing_contact_div').style.display = "none";
        document.getElementById('file_contacts_div').style.display = "inline";
    }
}

function ShowContactsGroups(theForm) {
    document.getElementById('tempsentence').style.display =  "none";
    document.getElementById('temp2sentence').style.display =  "inline";
    document.getElementById('contacts_groups').style.display =  "inline";
    document.getElementById('show_to_contacts').style.display =  "inline";
}

function toggleCompanyRowsOn() {
	document.getElementById('companyNameRow').style.display =  "table-row";
	document.getElementById('companyVatRow').style.display =  "table-row";
	return true;
}

function toggleCompanyRowsOff() {
	document.getElementById('companyNameRow').style.display =  "none";
	document.getElementById('companyVatRow').style.display =  "none";
	return true;
}

// Checkbox adding contacts/groups functions

function clickCheckboxAllContacts() {
    var checkbox = document.getElementById('all_contacts_checkbox');
    checkbox.click();
}

function clickCheckbox(number) {
    var checkbox = document.getElementById(number);
    checkbox.click();
}

function clickGroup(groupid) {
    var checkbox = document.getElementById(groupid);
    checkbox.click();
}


function checkboxAllContacts() {
    myCollection= document.getElementsByName("existing[]");
    checkbox = document.getElementById("all_contacts_checkbox");
    
    if (checkbox.checked) {
        for(i=0;i<myCollection.length;i++){
            if (!myCollection[i].checked) { // If already clicked, we don't need to add the number again
                myCollection[i].click();
            }
        } 
        checkbox.checked=true;
    } else {
        for(i=0;i<myCollection.length;i++){
            if (myCollection[i].checked) { // If already clicked, we don't need to add the number again
                myCollection[i].click();
            }
        } 
        checkbox.checked=false;
        
        // Since all numbers are removed, also remove the checked groups
        myCollection= document.getElementsByName("existing_groups[]");  
        for(i=0;i<myCollection.length;i++) {
            myCollection[i].checked=false;
        }
    }
}


function addGroupToSMSnumbers(numbersString, group) {
    myCollection= document.getElementsByName("existing_groups[]");
    if (numbersString.length == 0) {
        return;
    }
    
    var numbers = numbersString.split(",");
    for(i=0;i<myCollection.length;i++) {
        if (i == group) {
            if (myCollection[i].checked == true) {
                for (var j=0;j<numbers.length;j++) {
                    if (trim(numbers[j]) != '' ) {
                        var checkbox = document.getElementById(trim(numbers[j]));
                        if (checkbox.checked == false) checkbox.click();    
                    }
                }
            } else {
                for (var j=0;j<numbers.length;j++) {
                    if (numbers[j] != '')  {
                        var checkbox = document.getElementById(numbers[j]);
                        if (checkbox.checked == true) checkbox.click();
                    }
                }
            } 
        }  
    }
}

// Function to add a number to the SMS 'to' field
// Determines if a ',' must me added at front or not
function addNumberToSMSnumbers(number) {
    var checkbox = document.getElementById(number);
    var numbers = document.SmsForm.numbers.value;
    if (checkbox.checked) {    // if not checked, add number to receivers
        var lastIndexComma = numbers.lastIndexOf(',');
        if (lastIndexComma != -1) {// there is at least 1 comma in the text
            var charsBehindComma = trim(numbers.substring(lastIndexComma+1, numbers.length));
            if (charsBehindComma != '') {
                document.SmsForm.numbers.value += ', ';
            }
        } else { // no comma yet
            var charsUsed = trim(numbers);
            if (charsUsed != '') {
                document.SmsForm.numbers.value += ', ';
            }
        }
        document.SmsForm.numbers.value += number + ', ';
        checkbox.checked = true;
        
    } else {    // Remove number from receivers
        var indexNumber = numbers.lastIndexOf(number);
        if (indexNumber != -1) {// the number is at least once in the text
            var numbers1 = numbers.slice(0,indexNumber);
            var numbers2 = numbers.slice((indexNumber+number.length),numbers.length)
            document.SmsForm.numbers.value = numbers1 + numbers2;
        } 
        
        // Remove any trailing comma
        numbers = document.SmsForm.numbers.value;
        var indexComma = numbers.indexOf(',', indexNumber);
        if (indexComma != -1) {// there is at least 1 comma in the text
            var charsFrontComma = trim(numbers.substring(indexNumber, indexComma));
            if (charsFrontComma == '') {
                var numbers1 = numbers.slice(0,indexNumber);
                var numbers2 = numbers.slice((indexComma+1),numbers.length)
                numbers2 = ltrim(numbers2); // Remove remaining white characters at beginning of string
                document.SmsForm.numbers.value = numbers1 + numbers2;
            }
        }
        checkbox.checked = false;
    }
}

// Redirect function
function redirect(id, page, arg) {
    if (arg == null) {
        string = page + "?page=" + id;
    } else {
        string = page + "?page=" + id + "&id=" + arg;
    }
    
    location.replace(string);
}

function wait_redirect(id, page, arg) {
    if (arg == null) {
            setTimeout('redirect('+id+',"'+page+'")',3500);
    } else {
        setTimeout('redirect('+id+',"'+page+'","'+arg+'")',3500);
    }
}