(function() { 



	jQuery.fn.formValidation = function(){

		var iForm = this;

		return iForm.submit(function() {

			return $(this).isFormValid();

		});

	}

	

	jQuery.fn.isFormValid = function() {		

		var nErr = 0;

		$(this).find('*').filter("input, select, textarea").each(function() {

			if (!isValid(this)) {

				(nErr++);					

			}								

		});

		

		if (nErr > 0) return false;

		return true;

				

		function isValid(obj){

			var val = obj.id;

			if (val) {

				var arr = val.split('_'); var pre = '#' +  arr[0] + '_' + arr[1] + '_';

				if (arr.length == 3) {

					if (isValidEl(arr[0], arr[1], obj, arr[2])) {

						$(obj.parentNode).find('.err_e,.lbl_e').each(function(){

							var e = $(this);

							if (e.hasClass('err_e')) 

								e.removeClass('err_e');

							else 

								e.removeClass('lbl_e');

						});

						return true;

					}

					else {

						$(obj.parentNode).find('.err,.lbl').each(function(){

							var e = $(this);

							if (e.hasClass('err')) 

								e.addClass('err_e');

							else 

								e.addClass('lbl_e');

						});

						return false;

					}

				}

			}			

			return true;

		}		

		function isValidEl (fid, tid, e, type)	{			

			var value = $(e).val();

			var tarr = type.split(':');

			for (var i = 0; i < tarr.length; i++) {

				var t = tarr[i];

				if (t == 'rq') {

					if (!value || value == '') return false;

				}		

				else if (t == 'un') {

					if (value) {

						var reg = /^[a-z\d_]{4,28}$/i;

     					if (reg.test(value) == false) return false;     			

					}

				}		

				else if (t == 'em') {

					if (value) 	{	

						var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;   

		     			if(reg.test(value) == false) return false;

					}

				}

				else if (t == 'ip')	{

					if (value) {

						var reg = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;

     					if (reg.test(value) == false) return false;     			

					}

				}

				else if (t == 'pn')	{

					if (value) {

						var reg = /^\(?\+?[0-9]{3}\)?([0-9- ]){6,13}$/;

     					if (reg.test(value) == false) return false;     			

					}

				}

				else if (t == 'ul') {

					if (value) {

						var reg = /(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/

     					if (reg.test(value) == false) return false;     			

					}

				}

				else if (t == 'cc') {

					if (value) {

						var reg = /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/;

						if (reg.test(value) == false) return false;	

					}					

				}

				else if (t == 'img') {

					if (value) {

						var reg = /\b[a-z0-9_-]+\.(jpg|gif|png)\b/i;

						if (reg.test(value) == false) return false;	

					}					

				}

				else if (t == 'vid') {

					if (value) {

						var reg = /\b[a-z0-9_-]+\.(avi|flv|wmv|mov)\b/i;

						if (reg.test(value) == false) return false;	

					}					

				}

				else if (t == 'dt') {

					if (value) {

						var reg = /^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((1[6-9]|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/;

						if (reg.test(value) == false) return false;	

					}					

				}

				else if (t == 'tm') {

					if (value) {

						var reg = /^((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))$|^([01]\d|2[0-3])(:[0-5]\d){0,2}$/;

						if (reg.test(value) == false) return false;	

					}					

				}

				else if (t == 'nm') {

					if (value && isNaN(value)) return false

				}

				else if (t.search('min') != -1) {

					var min = parseInt(t.replace('min', ''));	

					if (value && value.length < min) return false;

				}

				else if (t.search('max') != -1) {

					var max = parseInt(t.replace('max', ''));	

					if (value && value.length > max) return false;

				} 

				else if (t == "pw") {	

					var tid = parseInt(tid);	

					var ce = $("#" + fid + "_" + (tid - 1) + "_rq"); 

					if (value != ce.attr('value')) return false;

				}

				else if (t == "ck") {

					if (!e.checked) return false;

				}	

			}	

			return true;		

		}	

	}

	

	jQuery.fn.limitCharacters = function (maxLen, infoDiv) {

		$(this).keyup(function(){

			var txt = $(this).val();

			if (txt.length > maxLen) {

				$(this).val(txt.substr(0, maxLen));

				$('#' + infoDiv).html("0");

				return false;

			} else {		

				$('#' + infoDiv).html("" + (maxLen - txt.length));

			}			

			return true;	

		});		

				

		$(this).keyup();

	}

	

	jQuery.fn.newWindow = function() {

		var link = this;

		window.open(link.attr('href'));

		return false;

	}

	

})(jQuery); 