/*
 * 	Easy Slider 1.7 - jQuery plugin
 *	written by Alen Grakalic	
 *	http://cssglobe.com/post/4004/easy-slider-15-the-easiest-jquery-plugin-for-sliding
 *
 *	Copyright (c) 2009 Alen Grakalic (http://cssglobe.com)
 *	Dual licensed under the MIT (MIT-LICENSE.txt)
 *	and GPL (GPL-LICENSE.txt) licenses.
 *
 *	Built for jQuery library
 *	http://jquery.com
 *
 */

/*
 *	markup example for $("#slider").easySlider();
 *	
 * 	<div id="slider">
 *		<ul>
 *			<li><img src="images/01.jpg" alt="" /></li>
 *			<li><img src="images/02.jpg" alt="" /></li>
 *			<li><img src="images/03.jpg" alt="" /></li>
 *			<li><img src="images/04.jpg" alt="" /></li>
 *			<li><img src="images/05.jpg" alt="" /></li>
 *		</ul>
 *	</div>
 *
 */

( function($) {

	$.fn.easySlider = function(options) {

		// default configuration properties
		var defaults = {
			prevId : 'prevBtn',
			prevText : '<img src="images/icoSx.gif" border="0" width="20" heigth="20">',
			nextId : 'nextBtn',
			nextText : '<img src="images/icoDx.gif" border="0" width="20" heigth="20">',
			controlsShow : true,
			controlsBefore : '',
			controlsAfter : '',
			controlsFade : true,
			firstId : 'firstBtn',
			firstText : 'First',
			firstShow : false,
			lastId : 'lastBtn',
			lastText : 'Last',
			lastShow : false,
			vertical : false,
			speed : 800,
			auto : false,
			pause : 2000,
			continuous : false,
			numeric : false,
			numericId : 'controls',
			widthBar : 0,
			pointerId : 'pointer',
			numSlide : 0,
			slide : 0
		};

		var options = $.extend(defaults, options);

		this.each( function() {
			var obj = $(this);
			var s = $("li", obj).length;
			var w = $("li", obj).width();
			var h = $("li", obj).height();
			var clickable = true;
			obj.width(w);
			obj.height(h);
			obj.css("overflow", "hidden");
			var ts = s - 1;
			var t = 0;
			$("ul", obj).css('width', s * w);

			if (options.continuous) {
				$("ul", obj).prepend($("ul li:last-child", obj).clone().css("margin-left", "-" + w + "px"));
				$("ul", obj).append($("ul li:nth-child(2)", obj).clone());
				$("ul", obj).css('width', (s + 1) * w);
			}
			;

			if (!options.vertical)
				$("li", obj).css('float', 'left');

			if (options.controlsShow) {
				var html = options.controlsBefore;
				if (options.numeric) {
					html += '<ol id="' + options.numericId + '"></ol>';
				} else {
					// if(options.firstShow) html += '<span id="'+
				// options.firstId +'"><a href=\"javascript:void(0);\">'+
				// options.firstText +'</a></span>';
				html += ' <table align="center" width="100%" height="20" cellpadding="0" cellspacing="0"> <tr> <td align="center" width="20" id="' + options.prevId + '"><a href="javascript:void(0);" >'
						+ options.prevText + '</a>';
				html += ' </td> <td align="left" width="' + options.widthBar + '" style="background: url(\'images/scrollBar.gif\') repeat-x center;"> <div class="pointer" id="' + options.pointerId
						+ '"></div> </td> <td align="center" width="20" id="' + options.nextId + '"><a href="javascript:void(1);" >' + options.nextText + '</a></td> </tr> </table>';
				// if(options.lastShow) html += ' <span id="'+ options.lastId
				// +'"><a href=\"javascript:void(0);\">'+ options.lastText
				// +'</a></span>';
			}
			;

			html += options.controlsAfter;
			if (options.idSliderBar != null) {
				$('#' + options.idSliderBar).html(html);
			} else {
				$(obj).after(html);
			}
		}
		;

		if (options.numeric) {
			for ( var i = 0; i < s; i++) {
				$(document.createElement("li")).attr('id', options.numericId + (i + 1)).html('<a rel=' + i + ' href=\"javascript:void(0);\">' + (i + 1) + '</a>').appendTo($("#" + options.numericId)).click(
						function() {
							animate($("a", $(this)).attr('rel'), true);
						});
			}
			;
		} else {
			$("a", "#" + options.nextId).click( function() {
				animate("next", true);
			});
			$("a", "#" + options.prevId).click( function() {
				animate("prev", true);
			});
			$("a", "#" + options.firstId).click( function() {
				animate("first", true);
			});
			$("a", "#" + options.lastId).click( function() {
				animate("last", true);
			});
		}
		;

		function setCurrent(i) {
			i = parseInt(i) + 1;
			$("li", "#" + options.numericId).removeClass("current");
			$("li#" + options.numericId + i).addClass("current");
		}
		;

		function adjust() {
			if (t > ts)
				t = 0;
			if (t < 0)
				t = ts;
			if (!options.vertical) {
				$("ul", obj).css("margin-left", (t * w * -1));
			} else {
				$("ul", obj).css("margin-left", (t * h * -1));
			}
			clickable = true;
			if (options.numeric)
				setCurrent(t);
		}
		;

		function animate(dir, clicked) {
			if (clickable) {
				clickable = false;
				var ot = t;
				switch (dir) {
				case "next":
					t = (ot >= ts) ? (options.continuous ? t + 1 : ts) : t + 1;
					// alert(options.slide)
					if (options.slide == (options.numSlide - 1)) {
						options.slide = 0;
					} else {
						options.slide++;
					}
					// alert(options.slide)
					var offSet = ((options.widthBar - 30) / (options.numSlide - 1)) * (options.slide);
					offSet = Math.round(offSet);
					$('#' + options.pointerId).animate( {
						marginLeft : offSet
					}, {
						queue : false,
						duration : speed,
						complete : adjust
					});
					break;
				case "prev":
					t = (t <= 0) ? (options.continuous ? t - 1 : 0) : t - 1;
					// alert(options.slide)
					if (options.slide == 0) {
						options.slide = (options.numSlide - 1);
					} else {
						options.slide--;
					}
					// alert(options.slide)
					var offSet = ((options.widthBar - 30) / (options.numSlide - 1)) * (options.slide);
					offSet = Math.round(offSet);
					$('#' + options.pointerId).animate( {
						marginLeft : offSet
					}, {
						queue : false,
						duration : speed,
						complete : adjust
					});

					break;
				case "first":
					t = 0;
					break;
				case "last":
					t = ts;
					break;
				default:
					t = dir;
					break;
				}
				;
				var diff = Math.abs(ot - t);
				var speed = diff * options.speed;
				if (!options.vertical) {
					p = (t * w * -1);
					$("ul", obj).animate( {
						marginLeft : p
					}, {
						queue : false,
						duration : speed,
						complete : adjust
					});

				} else {
					p = (t * h * -1);
					$("ul", obj).animate( {
						marginTop : p
					}, {
						queue : false,
						duration : speed,
						complete : adjust
					});
				}
				;

				if (!options.continuous && options.controlsFade) {
					if (t == ts) {
						$("a", "#" + options.nextId).hide();
						$("a", "#" + options.lastId).hide();
					} else {
						$("a", "#" + options.nextId).show();
						$("a", "#" + options.lastId).show();
					}
					;
					if (t == 0) {
						$("a", "#" + options.prevId).hide();
						$("a", "#" + options.firstId).hide();
					} else {
						$("a", "#" + options.prevId).show();
						$("a", "#" + options.firstId).show();
					}
					;
				}
				;

				if (clicked)
					clearTimeout(timeout);
				if (options.auto && dir == "next" && !clicked) {
					;
					timeout = setTimeout( function() {
						animate("next", false);
					}, diff * options.speed + options.pause);
				}
				;

			}
			;

		}
		;
		// init
		var timeout;
		if (options.auto) {
			;
			timeout = setTimeout( function() {
				animate("next", false);
			}, options.pause);
		}
		;

		if (options.numeric)
			setCurrent(0);

		if (!options.continuous && options.controlsFade) {
			$("a", "#" + options.prevId).hide();
			$("a", "#" + options.firstId).hide();
		}
		;

	})	;

	};

})(jQuery);
