/*
GroupPhone
28-09-2010
-----------------
BrandTech
Jasper Haggenburg
-----------------
PHONE_NUMBER
Validate and format phonenumbers
*/
(function($)
{
	
	$.phone_number = function(number, options) {
		var defaults 	= { 
			fallback_country: (typeof(LOCATION) != 'undefined') ? LOCATION : 'NL'
		};

		var settings 	= $.extend(defaults, options);
		var result 		= { number:false, country_code:false, valid:false, type:false };
				
		//Get prefixes
		if(typeof(taffy_prefixes) == 'undefined') {
			console.log('prefix-dbase unavailable');
			return false;
		};

		//Remove none-numeric
    number = number.replace(/[^0-9]/g, '');
		//console.log(number);
		
		//Remove double zero
		if(number.substring(0,2) == '00') {
			number = number.substring(2, number.length);
		}
		
		//No country prefix set
		if(number.substring(0,1) == '0' && number.substring(1,2) != '0') {
			//console.log('set to fallback_country');
			var prefix = taffy_prefixes().filter({country_code: settings.fallback_country}).first().prefix;
			number = prefix + number.substring(1, number.length);
		}
						
		//Validate prefix
		for(var i=4; i>0; i--) {
			//console.log('get prefix of '+i+' digits');
			//Get i-digit-prefix 
			var prefix = taffy_prefixes().filter({prefix:number.substring(0,i)}).first();
			if(prefix) {
				//Prefix found
				//console.log('prefix found: ', number.substring(0,i), prefix);
				result.country_code = prefix.country_code;
				result.valid 				= validateLength(number, prefix);
				result.type 				= getType(number, prefix);
				//Break out of loop
				i = 0;
			}
		}
		
		/**
		 * Get type of given prefix
		 */
		function getType(number, prefix) {
			var type = 'FIXED';
			
			if(prefix.mobile_ids) {
				for(var i in prefix.mobile_ids.sort()) {
					var from 	= prefix.prefix.length;
					var to		= from + ((prefix.mobile_ids[i] < 10) ? 1 : 2);
					//console.log("is mobile if: ", prefix.mobile_ids[i], '==', number.substring(from, to));
					if(prefix.mobile_ids[i] == number.substring(from, to)) {
						type = 'MOBILE';
					}
				}
			}
			
			return type;
		};

		/**
		 * Validate length of given prefix
		 */
		function validateLength(number, prefix) {

			//No length required
			if(!prefix.length) {
				//console.log('No length required');
				return true;
			}
			
			//Length required			
			if(typeof(prefix.length) == 'object') {
				//Requires length in range
				//console.log('requires length in range');
				if((number.length-i) >= prefix.length.min && (number.length-i) <= prefix.length.max) {
					return true;
				}
			} else {
				//Requires fixed length
				//console.log('Requires fixed length');						
				if((number.length-i) == prefix.length) {
					return true;
				}
			}
		};		
		
		//Return final result
		result.number	= number;
		//console.log(result.number, result.country_code, result.valid, result.type);	
		return result;
	}
	
})(jQuery);
