/*
* @package 		gf.core.js
* @author  		gf|studio
* @version 		0.1
* @date			25/02/2010
* @last update 	16/03/2010
* @require		jQuery Library
*/

var gf = {
	
	/*
	* @ funzione per fix dei png in internet explorer =< 6
	* @ param classes: selettori css ai quali applicare l'effetto (separati da virgola)
	*/
	fixPng: function(classes){
		if( $.browser.msie && $.browser.version <= 6.0 ){
			DD_belatedPNG.fix(classes.toString());
		}
	},
	
	/*
	* @ funzione per il debug di javascript
	* @ param val: valore da debuggare
	*/
	debug: function(val){
		if( window.console ){
			console.debug(val);
		}
	},
	
	/*
	* @ funzione per capire in quale pagina ci troviamo
	* @ param name: nome della pagina (nella barra degli indirizzi)
	* @ param deep: profondità nella quale cercare, partendo dal fondo
	* @ return boolean
	*/
	isPage: function(name, deep){
		var url 	= window.location.href
		  , page 	= url.split('//').splice(1,1).toString().split('/');
		
		if(name == page[deep]){
			return true;
		}else{
			return false;
		}
	},
	
	/*
	* @ funzione per sapere se ci troviamo nella home del sito
	* @ param deep: profondità nella quale cercare, partendo dal fondo
	* @ return boolean
	*/
	isHome: function(deep){
		var url 	= window.location.pathname
		  , page 	= url.split('/')
		  , page	= page.reverse();

		  if(page[deep] == ''){
		  	return true;
		  }else{
		  	return false;
		  }
	},
	
	/*
	* @ funzione per lo scorrimento automatico di tickets
	* @ param options: oggetto contenente le principali informazione per il funzionamento
	*/
	ticket: function(options){
		$el = options.el;
		
		var  numberOfLi 		= $el.children('li').size()
		   , liHeight			= $el.children('li').height()
		   , liPaddingTop		= parseInt($el.children('li').css('padding-top'), 10)
		   , liPaddingBottom	= parseInt($el.children('li').css('padding-bottom'), 10)
		   , liBorderTop		= parseInt($el.children('li').css('borderTopWidth'), 10)
		   , liBorderBottom		= parseInt($el.children('li').css('borderBottomWidth'), 10)
		   , margin				= liHeight + liPaddingTop + liPaddingBottom + liBorderTop + liBorderBottom;
		
		setInterval(function(){
			$el.children('li').filter(':first').animate(
				{marginTop: '-'+margin+'px'}, 
				options.speed,
				'swing',
				function(){
					$(this).removeAttr('style').detach();
					$el.append($(this));
				}
			);
			
		}, options.pause);
		
	},

	validate : function( options )
	{
		var defaults = {
			form		: '',
			fields 		: '',
			errorClass	: 'error',
			onError 	: '',
			onSuccess 	: ''
		};
	
		var opt 	= $.extend( defaults, options );
		var self 	= this;
		var $form 	= $( opt.form );
		
		$form.submit(function()
		{
			
			var error 	= false;
			var inputs 	= opt.fields.length;
			var filter	= /^[\w](([_\.-]?[\w]+)*)@([\w]+)(([\.-]?[\w]+)*)\.([A-Za-z]{2,})$/;
			
			for( var i=0; i<inputs; i++ ){
				
				var $input 			= $( opt.fields[i] );
				var $prev			= $input.prev();
				var $next			= $input.next();
	
				var isPrevLabel 	= $prev.is( 'label' );
				var isNextLabel		= $next.is( 'label' );
				var isParentLabel	= $input.parent().is( 'label' );
				
				var isMail			= opt.fields[i].toLowerCase().indexOf( 'mail' ) > 0 ? true : false;
				
				if( !$input.val() || ( isMail && !filter.test( $input.val() ) ) ){
					$input.addClass( opt.errorClass );
					
					if( isPrevLabel )
						$prev.addClass( opt.errorClass );
					
					if( isNextLabel )
						$next.addClass( opt.errorClass );
					
					if( isParentLabel )
						$input.parent().addClass( opt.errorClass );
					
					error = true;
				}
				else {
					$input.removeClass( opt.errorClass );
	
					if( isPrevLabel )
						$prev.removeClass( opt.errorClass );
					
					if( isNextLabel )
						$next.removeClass( opt.errorClass );
						
					if( isParentLabel )
						$input.parent().removeClass( opt.errorClass );
				}
				
			}
			
			if( error ){
				if( opt.onError instanceof Function ){
					opt.onError.form = $form[0];
					opt.onError();
				}
				
				return false;
			}
			else {
				if( opt.onSuccess instanceof Function ){
					opt.onSuccess.form = $form[0];
					return opt.onSuccess();
				}
				
				return true;
			}
		});
	},

	/*
	* @ funzione per mandare in blank i link in xhtml strict
	* @ param selector: selettore css ai quali applicare l'effetto
	*/
	goBlank: function(selector){
		$(selector).each(function(){
			$(this).attr('target', '_blank');
		});
	}
}
