﻿(function($) {
	$.fn.hasSelectedText=function(){	
		if(this.length==0) return;
		if (this[0].setSelectionRange){
			return (this[0].selectionEnd - this[0].selectionStart) > 0;
		}else if (document.selection && document.selection.createRange){
			return document.selection.createRange().text.length > 0;
		}     
	};
	
	$.fn.limitLength=function(lengthLimit){
		return this.each(function(){		
			var input=$(this);
			ignore=false;
			
			function keydownEvent(e){					
				e=e||window.event;
				var k = e.keyCode;
				var nav=((k < 16) || (k > 16 && k < 32 ) || (k > 32 && k < 41) || (k == 8) || (k == 46));
				ignore = document.selection && document.selection.createRange;
				if( input.val().length >= lengthLimit && !nav && !input.hasSelectedText()) e.preventDefault();
            }
            
			function keypressEvent(e){
				if(!ignore)	checkVal();
				ignore=false;
			};
			
			function checkVal(){	
				input.val(input.val().substr(0,lengthLimit));
			};
			
			input.keydown(keydownEvent);
			input.keypress(keypressEvent);
			//Paste events for IE and Mozilla thanks to Kristinn Sigmundsson
			if ($.browser.msie) 
				this.attachEvent('onpaste',function(){setTimeout(checkVal,0);});                    
			else if ($.browser.mozilla)
				this.addEventListener('input',checkVal,false);
				
			checkVal();//Perform initial check for existing values
		});
	};
	
	$.fn.numeric=function(){
		if(this.length==0) return;
		return this.each(function(){
			$(this).keypress(function(e){
				e=e||window.event;
				var k=e.keyCode||e.which;
				return ((k >= 48) && (k <= 57));
			});
		});
	};
		
	$.fn.phoneDigits=function(){
		if(this.length==0) return;
		return this.each(function(){
			$(this).keypress(function(e){
				e=e||window.event;
				var k=e.keyCode||e.which;
				return (((k >= 48) && (k <= 57)) || (k == 32) || (k == 40) || (k == 41) || (k == 42) || (k == 43) || (k == 45));
			});
		});
	};
		
	$.fn.currency=function(){
		if(this.length==0) return;
		return this.each(function(){
			$(this).keypress(function(e){
				e=e||window.event;
				var k=e.keyCode||e.which;
				if(k == 46)
				{
					return ($(this).val().indexOf('.') == -1);
				}
				else
				{
					return ((k >= 48) && (k <= 57));
				}
			});
		});
	};
})(jQuery);

var extraStrongRegex = new RegExp	("^(?=.{12,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
var strongRegex = new RegExp		("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
var mediumRegex = new RegExp		("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
var enoughRegex = new RegExp		("(?=.{6,}).*", "g");
function calcPasswordStrength(pwd)
{
	if (pwd.length==0) {
		return 0;
	} else if (!pwd.match(enoughRegex)) {
		return 1;
	} else if (pwd.match(extraStrongRegex)) {
		return 5;
	} else if (pwd.match(strongRegex)) {
		return 4;
	} else if (pwd.match(mediumRegex)) {
		return 3;
	} else {
		return 2;
	}
};
