//
//******************************
//
// Copyright by
// SNAZ Technology <biuro@snaz.pl>
// http://www.snaz.pl/
//
// Author:
// Michał Grabania <michal@grabania.net>
// http://michal.grabania.net/
//
//******************************
//
// jQuery SNAZslider 1.5
//
// Dual licensed under the MIT and GPL licenses.
//
// 2011-01-31 12:10:51
//
//******************************
//
//	<div id="xxx">
//		<div class="slide"></div>
//		<div class="slide" style="display: none"></div>
//		<div class="slide" style="display: none"></div>
//		<div class="slide" style="display: none"></div>
//	</div>
//
//	$('#xxx').SNAZslider(); // '#xxx' - use ONLY clear ID of element, NOT class etc.
//	{'speed': 5000, 'firstSlideSpeed': 7000, 'slideClassName': 'slide', 'random': false}
//
//	OPTIONAL I - the automaticly adding class "activeslidecounter" to the iteration slidecounter
//	{'counterClassName': 'slidecounter', 'counterActiveClassName: 'activeslidecounter'}
//
//	<span class="slidecounter activeslidecounter">Slide number: 1</span>
//	<span class="slidecounter">Slide number: 2</span>
//	<span class="slidecounter">Slide number: 3</span>
//	<span class="slidecounter">Slide number: 4</span>
//
//	OPTIONAL II - the slide change buttons
//
//	$('#someID').click(function(){
//		$('#xxx').SNAZslider('next'); // or
//		$('#xxx').SNAZslider('prev'); // or
//		$('#xxx').SNAZslider('select', 0); // number from 0 to slides count - 1
//	});
//
//******************************

(function($) {

	var SNAZslider = {};

	var methods = {
		init: function(options) {
			return this.each(function() {

				var obj = $(this);
				SNAZslider[obj.attr('id')] = obj;
				obj = obj.attr('id');

				SNAZslider[obj].defaults = {
					speed: 5000,
					firstSlideSpeed: 7000,
					slideClassName: 'slide',
					random: false,
					counterClassName: false, // 'slidecounter'
					counterActiveClassName: 'activeslidecounter'
				};

				SNAZslider[obj].defaults = $.extend(SNAZslider[obj].defaults, options);

				SNAZslider[obj].sliders_checker = new Array();
				SNAZslider[obj].sliders_item = new Array();
				SNAZslider[obj].sliders_buffor = new Array();
				SNAZslider[obj].sliders_loader = new Array();
				SNAZslider[obj].sliders_najechany = false;
				SNAZslider[obj].sliders_iterator = 0;
				SNAZslider[obj].sliders_counter = new Array();

				jQuery.each(SNAZslider[obj].children('.'+SNAZslider[obj].defaults.slideClassName), function() { SNAZslider[obj].sliders_item.push(this); });

				if (SNAZslider[obj].defaults.counterClassName) $('.'+SNAZslider[obj].defaults.counterClassName).each(function(index) { SNAZslider[obj].sliders_counter.push($(this)) });

				if (SNAZslider[obj].sliders_item.length > 1) {
					if (SNAZslider[obj].defaults.random) {
						SNAZslider[obj].temp = SNAZslider[obj].sliders_item.shift();
						SNAZslider[obj].fisherYates = function(myArray) {
							var i = myArray.length;
							if (i < 2) return;
							while (--i) {
								var j = Math.floor(Math.random() * (i+1));
								var tempi = myArray[i];
								var tempj = myArray[j];
								myArray[i] = tempj;
								myArray[j] = tempi;
							}
						}
						SNAZslider[obj].fisherYates(SNAZslider[obj].sliders_item);
						SNAZslider[obj].sliders_item.unshift(SNAZslider[obj].temp);
					}
					jQuery.each(SNAZslider[obj].sliders_item, function() {
						var img = $(this).children('img');
						var temp = new Array();
						jQuery.each(img, function() { temp.push($(this).attr('src')); });
						SNAZslider[obj].sliders_buffor.push(temp);
					});
					for(var i = 0; i < SNAZslider[obj].sliders_buffor.length; ++i) {
						SNAZslider[obj].sliders_loader[i] = new Array();
						for(var ii = 0; ii < SNAZslider[obj].sliders_buffor[i].length; ++ii) {
							if (!SNAZslider[obj].sliders_checker[SNAZslider[obj].sliders_buffor[i]]) {
								SNAZslider[obj].sliders_checker[SNAZslider[obj].sliders_buffor[i]] = false;
								SNAZslider[obj].sliders_loader[i][ii] = new Image();
								SNAZslider[obj].sliders_loader[i][ii].onload = function() { SNAZslider[obj].sliders_checker[this.src] = true; }
								SNAZslider[obj].sliders_loader[i][ii].src = SNAZslider[obj].sliders_buffor[i];
							}
						}
					}
					SNAZslider[obj].children('.'+SNAZslider[obj].defaults.slideClassName).hover(function() { SNAZslider[obj].sliders_najechany = true; }, function() { SNAZslider[obj].sliders_najechany = false; });
					$.doTimeout(obj, SNAZslider[obj].defaults.speed, function() { SNAZslider[obj].slider_anim_fade(); });
				}
				SNAZslider[obj].counter = function() {
					$('.'+SNAZslider[obj].defaults.counterClassName).removeClass(SNAZslider[obj].defaults.counterActiveClassName);
					if (SNAZslider[obj].sliders_counter[SNAZslider[obj].sliders_iterator] != undefined) SNAZslider[obj].sliders_counter[SNAZslider[obj].sliders_iterator].addClass(SNAZslider[obj].defaults.counterActiveClassName);
				}
				SNAZslider[obj].slider_anim_fade = function() {
					try {
						if (SNAZslider[obj].sliders_najechany) $.doTimeout(obj, 1000, function() { SNAZslider[obj].slider_anim_fade(); }); else {
							var temp = SNAZslider[obj].sliders_iterator;
							temp++;
							if (SNAZslider[obj].sliders_item[temp] == undefined) temp = 0;
							if (temp) {
								for(var ii = 0; ii < SNAZslider[obj].sliders_buffor[temp].length; ++ii) {
									if (!SNAZslider[obj].sliders_checker[SNAZslider[obj].sliders_buffor[temp]]) {
										$.doTimeout(obj, 1000, function() { SNAZslider[obj].slider_anim_fade(); });
										return false;
									}
								}
							}
							$(SNAZslider[obj].sliders_item[SNAZslider[obj].sliders_iterator]).fadeOut(1000, function() {
								SNAZslider[obj].sliders_iterator++;
								if (SNAZslider[obj].sliders_item[SNAZslider[obj].sliders_iterator] == undefined) SNAZslider[obj].sliders_iterator = 0;
								SNAZslider[obj].counter();
								$(SNAZslider[obj].sliders_item[SNAZslider[obj].sliders_iterator]).fadeIn(1000, function() {
									$.doTimeout(obj, SNAZslider[obj].defaults.speed, function() { SNAZslider[obj].slider_anim_fade(); });
								});
							});
						}
					}
					catch(e) { }
				};
			});
		},
		select: function(options) {
			var obj = $(this).attr('id');
			$.doTimeout(obj);
			$(SNAZslider[obj].sliders_item[SNAZslider[obj].sliders_iterator]).stop(true, true);
			$(SNAZslider[obj].sliders_item[SNAZslider[obj].sliders_iterator]).fadeOut(500, function() {
				SNAZslider[obj].sliders_iterator = options;
				if (SNAZslider[obj].sliders_item[SNAZslider[obj].sliders_iterator] == undefined) SNAZslider[obj].sliders_iterator = 0;
				SNAZslider[obj].counter();
				$(SNAZslider[obj].sliders_item[SNAZslider[obj].sliders_iterator]).fadeIn(500, function() {
					$.doTimeout(obj, SNAZslider[obj].defaults.speed, function() { SNAZslider[obj].slider_anim_fade(); });
				});
			});
		},
		next: function(options) {
			var obj = $(this).attr('id');
			$.doTimeout(obj);
			$(SNAZslider[obj].sliders_item[SNAZslider[obj].sliders_iterator]).stop(true, true);
			$(SNAZslider[obj].sliders_item[SNAZslider[obj].sliders_iterator]).fadeOut(500, function() {
				SNAZslider[obj].sliders_iterator++;
				if (SNAZslider[obj].sliders_item[SNAZslider[obj].sliders_iterator] == undefined) SNAZslider[obj].sliders_iterator = 0;
				SNAZslider[obj].counter();
				$(SNAZslider[obj].sliders_item[SNAZslider[obj].sliders_iterator]).fadeIn(500, function() {
					$.doTimeout(obj, SNAZslider[obj].defaults.speed, function() { SNAZslider[obj].slider_anim_fade(); });
				});
			});
		},
		prev: function(options) {
			var obj = $(this).attr('id');
			$.doTimeout(obj);
			$(SNAZslider[obj].sliders_item[SNAZslider[obj].sliders_iterator]).stop(true, true);
			$(SNAZslider[obj].sliders_item[SNAZslider[obj].sliders_iterator]).fadeOut(500, function() {
				SNAZslider[obj].sliders_iterator--;
				if (SNAZslider[obj].sliders_item[SNAZslider[obj].sliders_iterator] == undefined) SNAZslider[obj].sliders_iterator = 0;
				SNAZslider[obj].counter();
				$(SNAZslider[obj].sliders_item[SNAZslider[obj].sliders_iterator]).fadeIn(500, function() {
					$.doTimeout(obj, SNAZslider[obj].defaults.speed, function() { SNAZslider[obj].slider_anim_fade(); });
				});
			});
		}
	};
	$.fn.SNAZslider = function(options) {
		if (methods[options]) {
			return methods[options].apply(this, Array.prototype.slice.call(arguments, 1));
		} else if (typeof options === 'object' || !options) {
			return methods.init.apply(this, arguments);
		}
	};
})(jQuery);

/*
 * jQuery doTimeout: Like setTimeout, but better! - v1.0 - 3/3/2010
 * http://benalman.com/projects/jquery-dotimeout-plugin/
 *
 * Copyright (c) 2010 "Cowboy" Ben Alman
 * Dual licensed under the MIT and GPL licenses.
 * http://benalman.com/about/license/
 */
(function($){var a={},c="doTimeout",d=Array.prototype.slice;$[c]=function(){return b.apply(window,[0].concat(d.call(arguments)))};$.fn[c]=function(){var f=d.call(arguments),e=b.apply(this,[c+f[0]].concat(f));return typeof f[0]==="number"||typeof f[1]==="number"?this:e};function b(l){var m=this,h,k={},g=l?$.fn:$,n=arguments,i=4,f=n[1],j=n[2],p=n[3];if(typeof f!=="string"){i--;f=l=0;j=n[1];p=n[2]}if(l){h=m.eq(0);h.data(l,k=h.data(l)||{})}else{if(f){k=a[f]||(a[f]={})}}k.id&&clearTimeout(k.id);delete k.id;function e(){if(l){h.removeData(l)}else{if(f){delete a[f]}}}function o(){k.id=setTimeout(function(){k.fn()},j)}if(p){k.fn=function(q){if(typeof p==="string"){p=g[p]}p.apply(m,d.call(n,i))===true&&!q?o():e()};o()}else{if(k.fn){j===undefined?e():k.fn(j===false);return true}else{e()}}}})(jQuery);

//******************************
//
// Copyright by
// SNAZ Technology <biuro@snaz.pl>
// http://www.snaz.pl/
//
// Author:
// Michał Grabania <michal@grabania.net>
// http://michal.grabania.net/
//
