/* =============================================================================
 Sh jQuery Lib
 internal use for Cabianca
 written by Loris Cabianca

	Copyright (c) 2009 Loris Cabianca
	Dual licensed under the MIT (MIT-LICENSE.txt)
	and GPL (GPL-LICENSE.txt) licenses.

	Built for jQuery library
	http://jquery.com
*/

(function($) {

/* =============================================================================
 Sh Fade Slider - jQuery plugin

	markup example for $("#slide").sh_FadeSlider();

 	<div id="slide">
			<div><img src="images/01.jpg" alt="" /></div>
			<div><img src="images/02.jpg" alt="" /></div>
			<div><img src="images/03.jpg" alt="" /></div>
			<div><img src="images/04.jpg" alt="" /></div>
			<div><img src="images/05.jpg" alt="" /></div>
	</div>

*/

	$.fn.sh_FadeSlider = function(options){

		// default configuration properties
		var defaults = {
			speedIn:        1300,
			speedOut:       800,
			contentOut:     'ShContentOut',
			precId:         'ShPrecSlide',
			precText:       'Prec',
			nextId:         'ShNextSlide',
			nextText:       'Next',
			circolar:        false,
			center:          true,
			orizCenter:      true,
			vertCenter:      true,
			outerDiv:        true,
			finalOpacity:	0.7
		};

		var options = $.extend(defaults, options);

		return this.each(function() {
			var obj = $(this);
			obj.hide();

			// Crea il DIV dove inserire le Slide se non esiste.
			if ( $("#"+ options.contentOut).length == 0 ) {
			   $(obj).before('<div id="'+ options.contentOut +'" style="display: none;">div</div>');
			}
			var objOut = $( "#"+ options.contentOut)

			// Imposta l'opacità finale.
			objOut.fadeTo( 'fast', options.finalOpacity);

			// Crea lo SPAN dove inserire il comando indietro.
			if ( $("#"+ options.precId).length == 0 ) {
			   $(obj).before('<span id="'+ options.precId +'" style="display: none;"><a href=\"javascript:void(0);\">'+ options.precText +'</a></span>');
			}
			var objPrec = $( "#"+ options.precId)

			// Crea lo SPAN dove inserire il comando avanti.
			if ( $("#"+ options.nextId).length == 0 ) {
			   $(obj).before('<span id="'+ options.nextId +'" style="display: none;"><a href=\"javascript:void(0);\">'+ options.nextText +'</a></span>');
			}
			var objNext = $( "#"+ options.nextId)

			// Conteggio delle Slide da visualizzare.
			var objSlides = obj.children( "div");
			var s = objSlides.length;
			// ennesima slide visualizzata.
			var t = 0;
			
			// Visualizza la slide iniziale.
			objOut.fadeOut( 'fast', function() {
					ViewSlide( t);
				});

			// Funzione che effetua la visulaizzazione della Slide selzionata
			function ViewSlide( i) {
				if (options.circolar == false) {
					if ( i == 0) { objPrec.hide()};
					if ( i > 0) { objPrec.show()};
					if ( i == ( s- 1)) { objNext.hide()};
					if ( i < (s- 1)) { objNext.show()};
				}

				if (options.outerDiv) {
					objOut.html( objSlides.eq( i).sh_OuterHtml() );
					if (options.center) { objOut.children( "div").eq(0).sh_Center()};
				}
				else {
					objOut.html( objSlides.eq( i).html() );
				}

				objOut.fadeIn( options.speedIn);
			};

			// Funzione attivazione precedente Slide
			objPrec.click(function(){
				// Toglie la vecchia Slide.
				objOut.fadeOut( options.speedOut, function() {
					t--;
					if ( t < 0 && options.circolar) { t = s- 1};
					if ( t < 0) { t = 0}
					ViewSlide( t);
				});
			});

			// Funzione attivazione prossima Slide
			objNext.click(function(){
				// Toglie la vecchia Slide.
				objOut.fadeOut( options.speedOut, function() {
					t++;
					if ( t == s && options.circolar) { t = 0};
					if ( t >= s) { t = s- 1}
					ViewSlide( t);
				});
			});
		});
	};

/* =============================================================================
 Sh OuterHtml - jQuery plugin

	example $(element).sh_OuterHtml();

*/

	$.fn.sh_OuterHtml = function(replacement){

		if (replacement) {
			return this.each(function (){ $(this).replaceWith(replacement); });
		}

		var tmp_node = $("<div></div>").append( $(this).clone() );
		var markup = tmp_node.html();

		tmp_node.remove();
		return markup;
	};


/* =============================================================================
 Sh Center - jQuery plugin

 example for $(element).sh_Center();

*/
	$.fn.sh_Center = function(params) {

		var options = {
			vertical: true,
			horizontal: true
		}
		op = jQuery.extend(options, params);

		return this.each(function(){

			//inizializza
			var $self = jQuery(this);

			// leggi larghezza e altezza dell'elemnto da centrare
			var width = NonZero( $self.width());
			var height = NonZero( $self.height());

			// leggi il padding
			var paddingTop = NonZero( parseInt($self.css("padding-top")));
			var paddingBottom = NonZero( parseInt($self.css("padding-bottom")));

            // leggi i bordi
			var borderTop = NonZero( parseInt($self.css("border-top-width")));
			var borderBottom = NonZero( parseInt($self.css("border-bottom-width")));

            // trova la media sul border e sul padding
			var mediaBorder = (borderTop+ borderBottom)/2;
			var mediaPadding = (paddingTop+ paddingBottom)/2;

		    // trova la posizione
			var positionType = $self.parent().css("position");

		    // trova la negatività da applicare
			var halfWidth = (width/2)*(-1);
			var halfHeight = ((height/2)*(-1))-mediaPadding-mediaBorder;

		    // imposta il css
			var cssProp = {
				position: 'absolute'
			};

		    if(op.vertical) {
			    cssProp.height = height;
		        cssProp.top = '50%';
			    cssProp.marginTop = halfHeight;
	        };

			if(op.horizontal) {
				cssProp.width = width;
				cssProp.left = '50%';
				cssProp.marginLeft = halfWidth;
			};

			if(positionType == 'static') {
				$self.parent().css("position","relative");
			};

			// effettua le variazioni sul css
			$self.css(cssProp);

		    function NonZero( yVal, yDef) {
				if (yDef === undefined) yDef = 0;
				return isNaN( yVal) ? yDef : yVal
		    };
		});
	};


/* =============================================================================
    Sh onClick Navigate - jQuery plugin

	markup example for $("#id").sh_onClickNavigate("url");

*/

	$.fn.sh_onClickNavigate = function(options){

		// default configuration properties
		var defaults = {
			url: "#"
		};

		var op = jQuery.extend(defaults, options);

		return this.each(function() {
			var obj = $(this);

			// Efftua la navigazione all'url
			obj.click(function(){
				window.location.href = op.url;
			});

		});
	};

/* =============================================================================
    Sh hover - jQuery plugin

	markup example for $("#id").sh_hover( { cursor: "hand"});

*/

	$.fn.sh_hover = function(options){

		// default configuration properties
		var defaults = {
			cursor: "pointer",
			fade: true
		};

		var op = jQuery.extend(defaults, options);

		return this.each(function() {
			var obj = $(this);
			var cursor = obj.css( "cursor");

			// Efftua il fadeOut e fadeIn, con cambio del cursore.
			obj.hover(
   			  function(){
				obj.css("cursor", op.cursor);
				if (op.fade) {
				   obj.fadeOut( 100, function(){ obj.fadeIn( 400)});
				}
			  },
   			  function(){
				obj.css("cursor", cursor);
			  }
			);

		});
	};


})(jQuery);