/**
 * jQuery.fn.verify
 *
 * - url        The URL to send the POST/GET AJAX request to
 * - verifying  The CSS class to toggle while verification is taking place
 * - valid      The CSS class to toggle if verification is successful
 * - invalid    The CSS class to toggle if verification fails
 * - method     Set to either get or post
 *
 * The url should expect to receive either a GET or POST variable named
 * 'value'. In that will be the value of the input this is attached to. It
 * should then respond with either '1' or '0'. '1' means that the value is
 * valid, while '0' (or any non '1' response) means the value is invalid.
 *
 * Additionally, the classes verifying + 'Parent', valid + 'Parent', and
 * invalid + 'Parent' are toggled appropriately. This allows you to add a
 * background icon to the container element if you so wish for instance.
 *
 * @author      Joe Stump <joe@joestump.net>
 * @param       string      url
 * @param       array       options
 */
jQuery.fn.verify = function(url, options) {
    $(this).attr('autocomplete', 'off');
    
    function reset(input) {
        $(input).removeClass(input.settings.verifying)
                .removeClass(input.settings.valid)
                .removeClass(input.settings.invalid)
                .removeClass(input.settings.tooshort)
                .removeClass(input.settings.specialchars);

        $(input).parent().removeClass(input.settings.verifying + 'Parent')
                         .removeClass(input.settings.valid + 'Parent')
                         .removeClass(input.settings.invalid + 'Parent');
    }
    
    

    function response(response, input) {
        reset(input);
        if (response == 1) {
           var iChars = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?~_";
           var specialChars = 0;
           var error = "";
           for (var i = 0; i < input.value.length; i++) {
              if (iChars.indexOf(input.value.charAt(i)) != -1) {
                 specialChars++;
              }
           }
           if (input.value.length < 4){
              $(input).addClass(input.settings.invalid);
              $(input).parent().addClass(input.settings.invalid + 'Parent');
              $('.error').text('Your username is not long enough');
              $('#userValidation').val('invalid');
           } else if (specialChars > 0){
              $(input).addClass(input.settings.invalid);
              $(input).parent().addClass(input.settings.invalid + 'Parent');
              $('.error').text('Special characters are not allowed');
              $('#userValidation').val('invalid');
           } else if (input.value.match(/\s+/g)){
              $(input).addClass(input.settings.invalid);
              $(input).parent().addClass(input.settings.invalid + 'Parent');
              $('.error').text('Spaces are not allowed');
              $('#userValidation').val('invalid');
           }else{
              $(input).addClass(input.settings.valid);
              $(input).parent().addClass(input.settings.valid + 'Parent');
              $('.error').text('Valid');
              $('#userValidation').val('valid');
           }
        }else {
            $(input).addClass(input.settings.invalid);
            $(input).parent().addClass(input.settings.invalid + 'Parent');
            $('.error').text('This username is not available');
            $('#userValidation').val('invalid');
        }
    }

    this.each(function() {
        var settings = jQuery.extend({
            url         : url,
            verifying   : "",
            valid       : "",
            invalid     : "",
            tooshort    : "",
            specialchars: "",
            method      : "get"
        }, options || {});
        
        this.timer    = undefined;
        this.settings = settings;
        $(this).keyup(function() {
            if (this.timer) {
                clearTimeout(this.timer);
                this.timer = undefined
            }

            if (this.value.length == 0) {
                reset(this);
                return;
            }

            var input = this;
            this.timer = setTimeout(function() {
                params = {
                    id      : $(input).attr('id'),
                    value   : $(input).val()
                };

                $(input).addClass(input.settings.verifying);
                if (input.settings.method == "get") {
                    $.get(input.settings.url, params, function(result) {
                        response(result, input);
                    });
                } else {
                    $.post(input.settings.url, params, function(result) {
                        response(result, input);
                    });
                }
            }, 200);
        });
    });

    return this;
};

/** verify phone **/

jQuery.fn.verifyphone = function(url, options) {
    $(this).attr('autocomplete', 'off');
    
    function reset(input) {
        $(input).removeClass(input.settings.verifying)
                .removeClass(input.settings.valid)
                .removeClass(input.settings.invalid);

        $(input).parent().removeClass(input.settings.verifying + 'Parent')
                         .removeClass(input.settings.valid + 'Parent')
                         .removeClass(input.settings.invalid + 'Parent');
    }
    
    

    function response(response, input) {
        reset(input);
        $('.mobileError').text('');
        if (response == 1) {
           countNumbers = 0;
           var numbers = "0123456789";
           var chars = input.value.split(""); 
           for (i = 0; i < input.value.length; i++) {
              if (numbers.indexOf(chars[i]) != -1) {
                 countNumbers += 1;
              } 
           }
           if (countNumbers < 10){
              $(input).addClass(input.settings.invalid);
              $(input).parent().addClass(input.settings.invalid + 'Parent');
              $('.mobileError').text('Must have at least 10 numbers');
              $('#mobileValidation').val('invalid');
           } else if (countNumbers > 10){
              $(input).addClass(input.settings.invalid);
              $(input).parent().addClass(input.settings.invalid + 'Parent');
              $('.mobileError').text('You have entered too many numbers');
              $('#mobileValidation').val('invalid');
           }else{
              $(input).addClass(input.settings.valid);
              $(input).parent().addClass(input.settings.valid + 'Parent');
              $('.mobileError').text('Valid');
              $('#mobileValidation').val('valid');
           }
        }else {
            $(input).addClass(input.settings.invalid);
            $(input).parent().addClass(input.settings.invalid + 'Parent');
            $('.mobileError').text('This mobile number has already been registered');
              $('#mobileValidation').val('invalid');
        }
    }

    this.each(function() {
        var settings = jQuery.extend({
            url         : url,
            verifying   : "",
            valid       : "",
            invalid     : "",
            method      : "get"
        }, options || {});
        
        this.timer    = undefined;
        this.settings = settings;
        $(this).keyup(function() {
            if (this.timer) {
                clearTimeout(this.timer);
                this.timer = undefined
            }

            if (this.value.length == 0) {
                reset(this);
                return;
            }

            var input = this;
            this.timer = setTimeout(function() {
                params = {
                    id      : $(input).attr('id'),
                    value   : $(input).val()
                };

                $(input).addClass(input.settings.verifying);
                if (input.settings.method == "get") {
                    $.get(input.settings.url, params, function(result) {
                        response(result, input);
                    });
                } else {
                    $.post(input.settings.url, params, function(result) {
                        response(result, input);
                    });
                }
            }, 200);
        });
    });

    return this;
};

/** verify international phone **/
jQuery.fn.verifyintlphone = function(url, options) {
    $(this).attr('autocomplete', 'off');
    
    function reset(input) {
        $(input).removeClass(input.settings.verifying)
                .removeClass(input.settings.valid)
                .removeClass(input.settings.invalid);

        $(input).parent().removeClass(input.settings.verifying + 'Parent')
                         .removeClass(input.settings.valid + 'Parent')
                         .removeClass(input.settings.invalid + 'Parent');
    }
    
    

    function response(response, input) {
        reset(input);
        $('.mobileError').text('');
        if (response == 1) {
             $(input).addClass(input.settings.valid);
             $(input).parent().addClass(input.settings.valid + 'Parent');
             $('.mobileError').text('Valid');
             $('#mobileValidation').val('valid');
        }else {
            $(input).addClass(input.settings.invalid);
            $(input).parent().addClass(input.settings.invalid + 'Parent');
            $('.mobileError').text('This mobile number has already been registered');
              $('#mobileValidation').val('invalid');
        }
    }

    this.each(function() {
        var settings = jQuery.extend({
            url         : url,
            verifying   : "",
            valid       : "",
            invalid     : "",
            method      : "get"
        }, options || {});
        
        this.timer    = undefined;
        this.settings = settings;
        $(this).keyup(function() {
            if (this.timer) {
                clearTimeout(this.timer);
                this.timer = undefined
            }

            if (this.value.length == 0) {
                reset(this);
                return;
            }

            var input = this;
            this.timer = setTimeout(function() {
                params = {
                    id      : $(input).attr('id'),
                    value   : $(input).val()
                };

                $(input).addClass(input.settings.verifying);
                if (input.settings.method == "get") {
                    $.get(input.settings.url, params, function(result) {
                        response(result, input);
                    });
                } else {
                    $.post(input.settings.url, params, function(result) {
                        response(result, input);
                    });
                }
            }, 200);
        });
    });

    return this;
};

/** verify email **/

jQuery.fn.verifyemail = function(url, options) {
    $(this).attr('autocomplete', 'off');
    
    function reset(input) {
        $(input).removeClass(input.settings.verifying)
                .removeClass(input.settings.valid)
                .removeClass(input.settings.invalid);

        $(input).parent().removeClass(input.settings.verifying + 'Parent')
                         .removeClass(input.settings.valid + 'Parent')
                         .removeClass(input.settings.invalid + 'Parent');
    }
    

    function response(response, input) {
        reset(input);
        var emailCheck = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(input.value);
        $('.emailError').text('');
        if (response == 1) {
           if (emailCheck == false){
              $(input).addClass(input.settings.invalid);
              $(input).parent().addClass(input.settings.invalid + 'Parent');
              $('.emailError').text('Must enter a valid email');
              $('#emailValidation').val('invalid');
           }else{
              $(input).addClass(input.settings.valid);
              $(input).parent().addClass(input.settings.valid + 'Parent');
              $('.emailError').text('Valid');
              $('#emailValidation').val('valid');
           }
        }else {
            $(input).addClass(input.settings.invalid);
            $(input).parent().addClass(input.settings.invalid + 'Parent');
            $('.emailError').text('This email has already been registered');
              $('#emailValidation').val('invalid');
        }
    }

    this.each(function() {
        var settings = jQuery.extend({
            url         : url,
            verifying   : "",
            valid       : "",
            invalid     : "",
            method      : "get"
        }, options || {});
        
        this.timer    = undefined;
        this.settings = settings;
        $(this).keyup(function() {
            if (this.timer) {
                clearTimeout(this.timer);
                this.timer = undefined
            }

            if (this.value.length == 0) {
                reset(this);
                return;
            }

            var input = this;
            this.timer = setTimeout(function() {
                params = {
                    id      : $(input).attr('id'),
                    value   : $(input).val()
                };

                $(input).addClass(input.settings.verifying);
                if (input.settings.method == "get") {
                    $.get(input.settings.url, params, function(result) {
                        response(result, input);
                    });
                } else {
                    $.post(input.settings.url, params, function(result) {
                        response(result, input);
                    });
                }
            }, 200);
        });
    });

    return this;
};

function validateRegistrationFrm(){
      var useridValue = $('input[@name="userid"]').val();
      var passwordValue = $('input[@name="password"]').val();
      var useremailValue = $('input[@name="useremail"]').val();
      var userValidationValue = $('input[@name="userValidation"]').val();
      var passwordValidationValue = $('input[@name="passwordValidation"]').val();
      var emailValidationValue = $('input[@name="emailValidation"]').val();
      var userzipcodeValue = $('input[@name="userzipcode"]').val();
      var mobileValue = $('input[@name="mobile"]').val();
      var providerValue = $('input[@name="serviceprovider_sk ')
      
      var error = 'Please enter a value for:';
      if (!useridValue){
         error += "\nUser Name";
      }
      if (!passwordValue){
         error += "\nPassword";
      }
      if (!useremailValue){
         error += "\nEmail";
      }
      if (!userzipcodeValue){
         error += "\nZipcode";
      }
      
      if (!useremailValue || !passwordValue || !useremailValue || !userzipcodeValue){
         alert(error);
         return false;
      }
      if (mobileValue && !providerValue){
      	alert('Please select a service provider');
      	return false;
      }
      if (userValidationValue != 'valid' || passwordValidationValue != 'valid' || emailValidationValue != 'valid'){
         alert('Please only submit valid fields');
         return false;
      }
      return true;
   }

function validateMobileGroupFrm(){
	var sendtoValue = $('select[name="sendToList[]"]').val();
	var listnameValue = $('input[name="listname"]').val();
	var error = 'Please enter a value for:';
	if (!sendtoValue){
		error += "\nGroup Name";
	}
	if (!listnameValue){
		error += "\nText Buddies";
	}
	if (!sendtoValue || !listnameValue){
		alert(error);
		return false;
	}
	return true;
}
function validateMobileRegistrationFrm(){
    var useridValue = $('input[name="userid"]').val();
    var passwordValue = $('input[name="password"]').val();
    var useremailValue = $('input[name="useremail"]').val();
    var providerValue = $('select[name=serviceprovider_sk]').val(); 
    var userValidationValue = $('input[name="userValidation"]').val();
    var emailValidationValue = $('input[name="emailValidation"]').val();
    var mobileValue = $('input[@name="mobile"]').val();
    var mobileValidationValue = $('input[name="mobileValidation"]').val();
    var error = 'Please enter a value for:';
    if (!useridValue){
       error += "\nUser Name";
    }
    if (!passwordValue){
       error += "\nPassword";
    }
    if (!useremailValue){
       error += "\nEmail";
    }
    
    if (!useremailValue || !passwordValue || !useremailValue){
       alert(error);
       return false;
    }
    if (mobileValue && !providerValue){
    	alert('Please select a service provider');
    	return false;
    }
    if (userValidationValue != 'valid' || emailValidationValue != 'valid'){
       alert('Please only submit valid fields');
       return false;
    }
    if (mobileValue && mobileValidationValue != 'valid'){
    	alert('Please submit a valid phone number');
    }
    return true;
 }

function validateRegistration3Frm(){
      var mobileValue = $('input[@name=mobile]').val();
      var mobileValidationValue = $('input[@name="mobileValidation"]').val();
      var error = 'Please enter your mobile phone number';
      
      if (!mobileValue){
         alert(error);
         return false;
      }
      if (mobileValidationValue != 'valid'){
         alert('Please submit a valid phone number');
         return false;
      }
      return true;
   }

   function validateRegistration2Frm(){
      var confirmationcodeValue = $('input[@name="confirmationcode"]').val();
      var fullnameValue = $('input[@name="fullname"]').val();
      var useremailValue = $('input[@name="useremail"]').val();
      var serviceproviderValue = $('input[@name="serviceprovider"]').val();
      var userzipcodeValue = $('input[@name="userzipcode"]').val();
      var birthdayValue = $('#birthday').val();
      var birthmonthValue = $('#birthmonth').val();
      var birthyearValue = $('#birthyear').val();
      var genderValue = $('#gender').val();
      var emailValidationValue = $('input[@name="emailValidation"]').val();
      
      var error = 'Please enter a value for:';
      if (!confirmationcodeValue){
         error += "\nConfirmation Code";
      }
      if (!fullnameValue){
         error += "\nFull Name";
      }
      if (!useremailValue){
         error += "\nEmail";
      }
      if (!serviceproviderValue){
         error += "\nService Provider";
      }
      if (!userzipcodeValue){
         error += "\nZipcode";
      }
      if (!birthdayValue){
         error += "\nDay of Birth";
      }
      if (!birthmonthValue){
         error += "\nMonth of Birth";
      }
      if (!birthyearValue){
         error += "\nYear of Birth";
      }
      if (!genderValue){
         error += "\nGender";
      }
      if (!confirmationcodeValue || !fullnameValue || !useremailValue || !serviceproviderValue || !userzipcodeValue || ! birthdayValue || !birthmonthValue || !birthyearValue || !genderValue){
         alert(error);
         return false;
      }
      if (emailValidationValue != 'valid'){
         alert('Please make sure the email field is valid');
         return false;
      }
      return true;
   }
   
   function validatePasswordFrm(){
      var passwordValue = $('input[@name="newpw"]').val();
      var currentpwdValue = $('input[@name="currentpw"]').val();
      var confirmpwdValue = $('input[@name="newpw2"]').val();
      var passwordValidationValue = $('input[@name="passwordValidation"]').val();
      var error = 'Please enter a value for:';
      if (!currentpwdValue){
         error += "\nCurrent Password";
      }
      if (!passwordValue){
         error += "\nNew Password";
      }
      if (!confirmpwdValue){
         error += "\nConfirm";
      }
      
      if (!currentpwdValue || !passwordValue || !confirmpwdValue){
         alert(error);
         return false;
      }
      if (passwordValidationValue != 'valid'){
         alert('Please choose a valid password');
         return false;
      }
      return true;
   }

   function validateResetPasswordFrm(){
      var passwordValue = $('input[@name="newpw1"]').val();
      var confirmpwdValue = $('input[@name="newpw2"]').val();
      var passwordValidationValue = $('input[@name="passwordValidation"]').val();
      var error = '';
      if (!passwordValue){
         error += "\nPlease Enter Your New Password";
      }
      
      if (!confirmpwdValue){
         error += "\nPlease Confirm Your Pasword";
      }
      
      if (!passwordValue || !confirmpwdValue){
         alert(error);
         return false;
      }
      if (passwordValidationValue != 'valid'){
         alert('Please choose a valid password');
         return false;
      }
      return true;
   }  
 
   function validateMobileResetPasswordFrm(){
	      var passwordValue = $('input[@name="newpw1"]').val();
	      var confirmpwdValue = $('input[@name="newpw2"]').val();
	      var error = '';
	      if (!passwordValue){
	         error += "\nPlease Enter Your New Password";
	      }	      
	      if (!confirmpwdValue){
	         error += "\nPlease Confirm Your Pasword";
	      }	 

	      if (!passwordValue || !confirmpwdValue){
	         alert(error);
	         return false;
	      }
	      if (passwordValue != confirmpwdValue ){
	    	  alert("Passwords Don't Match");
	    	  return false;
	      }
	      return true;
   }
   
   function validateSettingsFrm(){
      var useremailValue = $('input[@name="useremail"]').val();
      var userzipcodeValue = $('input[@name="userzipcode"]').val();
      var mobileValue = $('input[@name="mobile"').val();
      var serviceproviderValue = $('input[@name="serviceprovider"]').val();
      var emailValidationValue = $('input[@name="emailValidation"]').val();
      var error = 'Please enter a value for:';

      if (!useremailValue){
         error += "\nEmail";
      }
      if (!userzipcodeValue){
         error += "\nZipcode";
      }
      if (!useremailValue || !userzipcodeValue){
         alert(error);
         return false;
      }
      if (mobileValue && !serviceproviderValue){
         alert('You must enter your serviceprovider with your mobile phone number');
      }
      if (emailValidationValue != 'valid'){
         alert('Please only submit valid fields');
         return false;
      }
      return true;
   }
   
   function validateIntlSettingsFrm(){
      var fullnameValue = $('input[@name="fullname"]').val();
      var displaynameValue = $('input[@name="displayname"]').val();
      var useremailValue = $('input[@name="useremail"]').val();
      var serviceproviderValue = $('input[@name="serviceprovider_sk"]').val();
      var countryValue = $('input[@name="country_id"]').val();
      var emailValidationValue = $('input[@name="emailValidation"]').val();
      var mobileValue = $('input[@name="mobile"').val();
      
      var error = 'Please enter a value for:';

      if (!useremailValue){
         error += "\nEmail";
      }
      if (!countryValue){
         error += "\nCountry";
      }
      if (!useremailValue || !countryValue){
         alert(error);
         return false;
      }
      if (mobileValue && !serviceproviderValue){
         alert('You must enter your serviceprovider with your mobile phone number');
      }
      if (emailValidationValue != 'valid'){
         alert('Please submit valid email');
         return false;
      }
      return true;
   }   
   
   function validateAddedContactFrm(){
      var mobileValue = $('input[@name=mobile]').val();
      var serviceproviderValue = $('input[@name="serviceprovider"]').val();
      var displaynameValue = $('input[@name="displayname"]').val();
      var error = 'Please enter a value for:';
      if (!displaynameValue){
         error += "\nDisplay Name";
      }
      if (!mobileValue){
         error += "\nMobile Phone Number";
      }
      if (!serviceproviderValue){
         error += "\nService Provider";
      }
      
      if (!displaynameValue || !mobileValue || !serviceproviderValue){
         alert(error);
         return false;
      }

      return true;
   }
   
   function validateIphoneAddedContactFrm(){
	      var mobileValue = $('input[name=mobile]').val();
	      var providerValue = $('select[name=serviceprovider_sk]').val();
	      var displaynameValue = $('input[name="displayname"]').val();
	      var error = 'Please enter a value for:';
	      if (!displaynameValue){
	         error += "\nDisplay Name";
	      }
	      if (!mobileValue){
	         error += "\nMobile Phone Number";
	      }
	      if (!providerValue){
	    	 error += "\nService Provider";
	      }	
	      if (!displaynameValue || !mobileValue || !providerValue){
	         alert(error);
	         return false;
	      }
	      if (mobileValue.length < 10){
	    	  alert('Please enter area code with number');
	    	  return false;
	      }
	      return true;
	   }   
   
   function validateMobileFrm(){
      var mobileValue = $('input[@name=mobile]').val();
      var mobileValidationValue = $('input[@name="mobileValidation"]').val();
      var serviceproviderValue = $('input[@name="serviceprovider"]').val();
      var error = 'Please enter a value for:';
      if (!mobileValue){
         error += "\nMobile Phone Number";
      }
      if (!serviceproviderValue){
         error += "\nService Provider";
      }
      
      if (!mobileValue || !serviceproviderValue){
         alert(error);
         return false;
      }
      
      if (mobileValidationValue != 'valid'){
         alert('Please only submit valid fields');
         return false;
      }

      return true;
   }
   
function validateIntlRegistrationFrm(){
      var useridValue = $('input[@name="userid"]').val();
      var passwordValue = $('input[@name="password"]').val();
      var useremailValue = $('input[@name="useremail"]').val();
      var userValidationValue = $('input[@name="userValidation"]').val();
      var passwordValidationValue = $('input[@name="passwordValidation"]').val();
      var emailValidationValue = $('input[@name="emailValidation"]').val();
      var countryValue = $('input[@name="country"]').val();
      var mobileValue = $('input[@name=mobile]').val();
      var serviceproviderValue = $('input[@name="serviceprovider"]').val();
      
      
      var error = 'Please enter a value for:';
      if (!useridValue){
         error += "\nUser Name";
      }
      if (!passwordValue){
         error += "\nPassword";
      }
      if (!useremailValue){
         error += "\nEmail";
      }
      if (!countryValue){
         error += "\nCountry";
      }
      
      if (!useremailValue || !passwordValue || !useremailValue || !countryValue){
         alert(error);
         return false;
      }
      if (userValidationValue != 'valid' || passwordValidationValue != 'valid' || emailValidationValue != 'valid'){
         alert('Please only submit valid fields');
         return false;
      }
      if (mobileValue && !serviceproviderValue){
         alert('If you enter a mobile phone you must select a serviceprovider');
         return false;
      }
      return true;
   }   