(function() { 
	jQuery.fn.formValidation = function() {		
		var iForm = this;
		return iForm.submit(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;
				}			
						
			}	
			return true;		
		}	
	}
	
	jQuery.fn.submitCateForm = function(frmId, selId, act) {
		var e = this;
		var frm = $(frmId);
		var sel = $(selId);
		//var optVal = sel.value;		
		frm.action = act;
		frm.submit();		
		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.fn.slideBanner = function() {
		var $strip = $(this);
		$strip.addClass("newsticker");
		var stripWidth = 0;
		var $mask = $strip.wrap("<div class='mask'></div>");
		var $tickercontainer = $strip.parent().wrap("<div class='tickercontainer'></div>");								
		var containerWidth = $strip.parent().parent().width();
		$tickercontainer.css('width', containerWidth + 'px');
		$mask.css('width', containerWidth + 'px');
		
		var minWidth = 600;
		var count = 0;
		$strip.find("li").each(function(i){
			var $li = $(this);
			var w = $li.width();
			stripWidth += w;
			if (w < minWidth)
				minWidth = w;
			$li.css({
				'position' : 'relative',
				'left' : '0px',
				'top' : '0px'
			});
			count++;
		});
		
		$strip.width(stripWidth);
	
		function scrollImage() {
			$strip.find("li").each(function(i){
				var $li = $(this);
				$li.animate({left: '-' + minWidth + 'px'}, 30000, 'linear', function() {
					if (i == count - 1) {
						var $first = $('.newsticker li:first-child');
						$strip.append($first.clone());
						$first.remove();
						
						$('.newsticker li').css('left', '0px');
						scrollImage();
					}					
				});
			});
		}
		
		scrollImage();
	}
	
	jQuery.fn.imgScroll = function(settings) {
		settings = jQuery.extend({
			travelocity: 0.007
		}, settings);		
		return this.each(function(){			
			var $strip = $(this);
			$strip.addClass("newsticker")
			var stripWidth = 0;
			var $mask = $strip.wrap("<div class='mask'></div>");
			var $tickercontainer = $strip.parent().wrap("<div class='tickercontainer'></div>");								
			var containerWidth = $strip.parent().parent().width();
			$tickercontainer.css('width', containerWidth + 'px');
			$mask.css('width', containerWidth + 'px');
			
			$strip.find("li").each(function(i){
				var currWidth = jQuery(this, i).width();
				stripWidth += jQuery(this, i).width();
			});
			$strip.width(stripWidth);			
			var defTiming = stripWidth/settings.travelocity;
			var totalTravel = stripWidth+containerWidth;								
			function scrollnews(spazio, tempo) {
				$strip.animate({left: '-='+ spazio}, tempo, "linear", 
					function(){$strip.css("left", containerWidth); scrollnews(totalTravel, defTiming);});
			}
			scrollnews(totalTravel, defTiming);				
			$strip.hover(function(){
				jQuery(this).stop();
			},
			function(){
				var offset = jQuery(this).offset();
				var residualSpace = offset.left + stripWidth;
				var residualTime = residualSpace/settings.travelocity;
				scrollnews(residualSpace, residualTime);
			});			
		});	
	}	
})(jQuery); 