Slider = function (el, url) {
	var T = this;

	T.el = el;              /** Элемент, в котором все отображается */
	T.url = url || "";      /** URL для списка слайдов (XHR) */
	T.data = [];            /** Массив слайдов */
	T.running = false;      /** Если в данный момент происходит смена слайдов */
	T.playing = null;		/** Если включен автоплей */
	T.delay = 5000;         /** Время перехода слайда */
	T.current_slide = -1;   /** Текущий слайд */
	T.current_frame = null; /** Слой для отображения содержимого */
	T.next_frame = null;    /** Слой для плавного перехода */
	T.control = null;       /** Кнопки с номерами слайдов */
	T.next_button = null;   /** Кнопка "следующий слайд" */
	T.prev_button = null;   /** Кнопка "предыдущий слайд" */
	T.change_timer = null;  /** Таймер автоперехода */
	T.play_pause = null;    /** Кнопка Play */
	
	$(window).load(function () {
		T.init();
	});
}

Slider.prototype = {
	toString: function () {
		return "[object Slider]";
	},
	
	/**
	 * Загрузка данных и создание элементов навигации
	 */
	init: function () {
		var T = this;
		var data = $(".data", T.el);
		T.data = eval(data.text());

		if (T.data.length) { /* данные загружены */
			
			/* Предзагрузка картинок */
			for (var i = 0, l = T.data.length; i < l; ++i) {
				var x = new Image;
				x.src = T.url + T.data[i].img;
			}

			var code = '<div class="slider_content"><div class="frame"></div><div class="overframe"></div></div><div class="control_overlay"><a class="left">&#9668;</a><a class="right">	&#9658;</a></div>';
			$(code).appendTo(T.el);
			T.current_frame = $(".frame", T.el).get(0);
			T.next_frame = $(".overframe", T.el).get(0);
			
			//переход по ссылке
			$(".frame", T.el).click(function(){
				location.href = T.data[T.current_slide].href;
			});
			
			// назад/вперед
			
			T.control_overlay = $(".control_overlay");
			
			(T.left = $(".left", T.el)).click(function(){
				T.prev();
			});

			(T.right = $(".right", T.el)).click(function(){
				T.next();
			});
			
			$(T.el).mouseover(function(){
				T.control_overlay.fadeIn('fast');
			});

			$(T.el).mouseout(function(evt){
				var rt = evt.relatedTarget;
				if (rt != T.left.get(0) && rt != T.current_frame && rt != T.right.get(0) && rt != T.control_overlay.get(0)) {
					$(".control_overlay").fadeOut('fast');
				}
			});
			
			T.show(0);
			T.start();
		} else {
			T.show_error();
		}
	},
	
	/**
	 * Включение автоперехода и изменение задержки. Если delay не указан, будет использован по умолчанию
	 */
	start: function (delay) {
		var T = this;
		
		// установка новой задержки
		if (delay) {
			T.delay = delay;
		}
		
		if (T.playing) {
			return;
		}

		T.change_timer = setInterval(function(){
			T.next.call(T);
		}, T.delay);

		T.playing = true;
	},
	
	/**
	 * Остановка автопереходов
	 */
	stop: function () {
		var T = this;
		clearInterval(T.change_timer);
		T.playing = false;
	},
	
	/**
	 * Показ слайда с номером 
	 * @param {Number} slide
	 */
	show: function (slide) {
		var T = this;
		
		/* Если меняем на тот же самый, выходим */
		if (T.current_slide == slide) {return};
		if (T.running) {
			return
		};
		
		var start_after_show = false; 
		if (T.playing) {
			start_after_show = true;
			T.stop();
		}
		
		T.current_slide = slide;
		var image_url = "url('" + T.url + T.data[slide].img + "')";
		 
		T.next_frame.style.display = "none";
		T.next_frame.style.backgroundImage = image_url; 
		
		T.running = true;
		$(T.next_frame).fadeIn("slow", function(){
			T.current_frame.style.backgroundImage = image_url;
			T.next_frame.style.display = "none"
			T.running = false;
		});
		
		if (start_after_show) {
			T.start();
		}
	},
	
	show_error: function (message) {
		var m = "ошибка загрузки данных";
		if (message) {
			m += ":<br/>" + message;
		}
		this.el.innerHTML = m;
	},
	
	next: function () {
		this.show((this.current_slide + this.data.length + 1) % this.data.length);
	},
	
	prev: function () {
		this.show((this.current_slide + this.data.length - 1) % this.data.length);
	}
}



