/**
 * akc.validate.phone.js
 * A Custom AKC Phone number validation script
 * Used for cfuniform phone type. 
 */
 //test script in /libraries/cf-uniform/3.3/test/testPhone.cfm

 (function(jQuery){   
	var $ = jQuery;
	var phoneValidatorFunc = function(value, element) {
		var allowEmergencyPhone = $(element).hasClass("emergencyPhone");
		var usOnlyPhone = $(element).hasClass("usOnlyPhone");
		var phoneNumType=getPhNumType(value);
		

		return  this.optional(element) || getPhNumType(value) > 0 || (allowEmergencyPhone && value =="911"); 

	}
	
	var isUSOnlyFunc = function(value, element){
		return getPhNumType(value) != 2;
	}
	
	jQuery.validator.addMethod("phone", phoneValidatorFunc, " Enter a valid telephone number");

	jQuery.validator.addMethod("usOnlyPhone",isUSOnlyFunc," Enter a US based Phone number");
	
	jQuery.validator.addClassRules("phoneExt", {
		digits: true,
		maxlength: 8
	});

	

     // 0:not a valid ph num, 1:us ph num, 2:int ph num
     var getPhNumType = function(value){
           var nonUsPhNumRegex = /^0[0-9\- \(\)]{0,29}$/;
           var usPhNumRegex = /^\(?[02-9][0-8][0-9]\)?[\-. ]?[0-9]{3}[\-. ]?[0-9]{4}$/;
           
           if ( value.match(nonUsPhNumRegex) ) {
                return 2;
           } 
           else if ( value.match(usPhNumRegex) ) {
                return 1;
           }
           else {
                return 0;
           }
     };
     
     var onPhoneFieldChange = function(){
           var $this = jQuery(this);
           var fieldValue = $this.val();
           if( getPhNumType( fieldValue ) == 1 ) {
                var usPhRegex = /.*([0-9]{3}).*([0-9]{3}).*([0-9]{4}).*/;
                var number = usPhRegex.exec(fieldValue);
                $this.val("("+number[1]+")"+number[2]+"-"+number[3]);
           }
     };
	 jQuery(document).ready(function(){
		 jQuery("input.phone").change(onPhoneFieldChange).change();
	 });
})(jQuery);
