
/**
 * Funkcja generująca automatycznie sliderki
 * @example najprostsze
	$("#widget_nutella").Widget_slider();
 * @example proste z pierwszym wyswietleniem trzymanym w ciastku
	$(".widget_garnier").Widget_slider({
		first_time_slide_params:{
			cookie_name: 'garnier_widget'
		}
	});
 * @example cała możliwa konfiguracja wraz z wyjasnieniem
	$(".widget_fanta").Widget_slider({
		animate_speed: 1000, //prędkość (ms) wysuwania i chowania sliderka [opcjonalne] [domyślnie 300]
		hover_time_to_slide: 500, //czas (ms), jaki trzeba odczekać po najechaniu kursora, żeby ten się wysunął [opcjonalnie] [domyślnie 0]
		orientation: 'left', //orientacja ('left' lub 'right') z której strony ma się wysuwać slider [opcjonalne] [domyślnie czytane z css'a obiektu]
		animate_distance: -413, //odległość (px), na którą chowa się slider po odjechaniu kursora z warstwy [opcjonalne] [domyślnie czytane z css'a]
		first_time_slide_params:{ //parametry pierwszego wyjechania sliderka [opcjonalne] [domyślnie false]
			cookie_name: 'fanta_widget', //nazwa (string) ciastka przechowywujacego informacje czy juz zostal wysuniety [wymagane]
			fade_out_time: 10000, //czas (ms), po jakim się schowa automatycznie slider [opcjonalne] [domyślnie 5000]
			able_to_hide_on_hover: 0 //czy można (1 - tak, 0 - nie) schować sliderek po najechaniu i odjechaniu z niego kursorem [opcjonalne] [domyślnie 1 - tak]
		}
	});
 */
(function( $ ){
	$.fn.Widget_slider = function(params) {
		var self = this;
		//wartości opcjonalne
		//prędkość animacji
		if (params && params.animate_speed)
			this.animate_speed = params.animate_speed;
		else
			this.animate_speed = 300;
		//czas, na jaki trzeba przesunąć kursor, żeby reklama wyjechała
		if (params && params.hover_time_to_slide)
			this.hover_time_to_slide = params.hover_time_to_slide;
		else
			this.hover_time_to_slide = 0;
		//orientacja
		if (params && params.orientation)
			this.orientation = params.orientation;
		else{
			//interesuja nas tylko ujemne wartosci, bo to znaczy, ze div jest schowany
			if (parseInt(self.css('right')) < 0){
				this.orientation = 'right';
			}else{
				this.orientation = 'left';
			}
		}
		//odleglosc wysuwania
		if (params && params.animate_distance)
			this.animate_distance = params.animate_distance;
		else{
			self.animate_distance = parseInt(self.css(self.orientation));
		}

		//parametry stałe
		//odpowiada za timeout zwiazany z chowaniem
		this.fade_out = false;
		//odpowiada za timeout zwiazany z pokazywaniem
		this.fade_in = false;
		//parametry do pierwszego wysunięcia paska (zapisywane w ciastku) lub false, jesli nie ma
		if (params && params.first_time_slide_params){
			this.first_time_slide_params = params.first_time_slide_params;
			if (!self.first_time_slide_params.fade_out_time)
				self.first_time_slide_params.fade_out_time = 5000;
			if (!self.first_time_slide_params.able_to_hide_on_hover)
				self.first_time_slide_params.able_to_hide_on_hover = 1;
		}else{
			this.first_time_slide_params = false;
		}
/**
* Inicjalizacja sliderka
*/
		this.initialize = function(){
			self.hover(function(){
				self.fade_in = setTimeout(function(){
					if (self.orientation == 'right')
						self.stop(true, false).animate({ right : "0"}, self.animate_speed);
					else
						self.stop(true, false).animate({ left : "0"}, self.animate_speed);
				}, self.hover_time_to_slide);
			},function(){
				//jesli nie bawimy sie w pokazywanie za pierwszym razem lub bawimy sie, ale mozna je ukryc onhover, to wykonujemy
				if (self.fade_out == false || self.first_time_slide_params.able_to_hide_on_hover){
					if (self.orientation == 'right')
						self.stop(true, false).animate({right: self.animate_distance}, self.animate_speed);
					else
						self.stop(true, false).animate({left: self.animate_distance}, self.animate_speed);
					clearTimeout(self.fade_in);
					clearTimeout(self.fade_out);
				}
			}, self.hover_time_to_slide);
			//wysuwamy widget na chwilkę, jeśli dostaliśmy takie parametry
			if (self.first_time_slide_params){
				self.first_time_slide();
			}
		},
/**
* Próbuje wyświetlić za pierwszym razem dla osoby sliderek
*/
		this.first_time_slide = function(){
			//sprawdamy, czy jest ustawione ciastko
			if($.cookie(self.first_time_slide_params.cookie_name) != '1'){
				//odznaczamy ciasteczko - już widziane
				$.cookie(self.first_time_slide_params.cookie_name, '1',{ expires: 1*60*3 }); //3 miesiace
				if (self.orientation == 'right')
					self.stop(true, false).animate({right: "0"}, self.animate_speed);
				else
					self.stop(true, false).animate({left: "0"}, self.animate_speed);

				self.fade_out = setTimeout(function(){
					self.fade_out = false;
					if (self.orientation == 'right')
						self.stop(true, false).animate({right: self.animate_distance}, self.animate_speed);
					else
						self.stop(true, false).animate({left: self.animate_distance}, self.animate_speed);
				}, self.first_time_slide_params.fade_out_time);
			}
		}
		self.initialize();
	};
})( jQuery );


