/*
 * 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.pmSlider = function(options){

		// default configuration properties
		var defaults = {			
			prevId: 		'prevBtn',
			prevText: 		'Previous',
			nextId: 		'nextBtn',	
			nextText: 		'Next',
			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',
			homeSlider:		false,
			workSlider:		false,
			workSliderPopup:	0,
			workSliderCurrent: 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.workSliderPopup)
			{
				t = options.workSliderCurrent;
				animate(t, true);
			}

			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.workSlider)
			{
				var pw, ph;
				$("li",obj).each(function(e){
					if (e != t) return;
					
					ch = $("div.container", this).height();
					$(obj).animate({height: ch}, {queue:false, duration:500});
					$(this).animate({height: ch}, {queue:false, duration:500});

					pw = $("img.image", this).width();
					ph = $("img.image", this).height();
				});
				pw = w / 2 - pw / 2 - 35;
				ph = ph / 2;
			}

			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 += ' <span id="'+ options.prevId +'"><a href=\"javascript:void(0);\">'+ options.prevText +'</a></span>';
					html += ' <span id="'+ options.nextId +'"><a href=\"javascript:void(0);\">'+ options.nextText +'</a></span>';
					if(options.lastShow) html += ' <span id="'+ options.lastId +'"><a href=\"javascript:void(0);\">'+ options.lastText +'</a></span>';				
				};
				
				html += options.controlsAfter;						
				$(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;
				$("#" + options.numericId + " li").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.homeSlider)
				{
					$("li",obj).each(function(e){
						if (e != t) return;

						$("h1.title", $(this)).stop().animate({opacity: 1}, { queue:false, duration:options.speed/3});
						$("p.description", $(this)).stop().animate({opacity: 1}, { queue:false, duration:options.speed/3});
					});
				}
				if(options.numeric)
				{
					$("li",obj).each(function(e){
						if (e != t) return;
						if (!$("div.updates", this)) return;

						$("div.updates", this).show();
						$("div.updatesContainer", this).show();
						$("div.updates", this).animate({opacity: 1}, 500);
						$("div.updatesContainer", this).animate({opacity: .65}, 500);
					});

					setCurrent(t);
				}
				if (options.workSlider)
				{
					var pw, ph, ch;
					$("li",obj).each(function(e){
						if (e != t) return;

						ch = $("div.container", this).height();
						$(obj).animate({height: ch}, {queue:false, duration:500});
						$(this).animate({height: ch}, {queue:false, duration:500});

						pw = $("img.image", this).width();
						ph = $("img.image", this).height();

						$('#artists-workPopup-background > div').animate({height: ch, width: pw}, {queue:false, duration:500});
					});
					pw = w / 2 - pw / 2 - 35;
					ph = ph / 2;

					$("#" + options.prevId).css({left: pw+options.workSliderPopup, top: ph-24}).show();
					$("#" + options.nextId).css({right: pw+options.workSliderPopup, top: ph-24}).show();
					$("#" + options.prevId).stop().animate({opacity: 1}, {queue:false, duration:500});
					$("#" + options.nextId).stop().animate({opacity: 1}, {queue:false, duration:500});
				}

				if(s != 1 && !options.continuous && options.controlsFade){		
					if(!options.workSlider && t==ts){
						$("a","#"+options.nextId).hide();
						$("a","#"+options.lastId).hide();
					} else {
						$("a","#"+options.nextId).show();
						$("a","#"+options.lastId).show();					
					};
					if(!options.workSlider && t==0){
						$("a","#"+options.prevId).hide();
						$("a","#"+options.firstId).hide();
					} else {
						$("a","#"+options.prevId).show();
						$("a","#"+options.firstId).show();
					};					
				};	
			};

			function animate(dir,clicked){
				if (clickable){
					clickable = false;
					var ot = t;
					switch(dir){
						case "next":
							t = (ot>=ts) ? ( options.workSlider ? 0 : (options.continuous ? t+1 : ts) ) : t+1;	
							break;
						case "prev":
							t = (t<=0) ? ( options.workSlider ? ts : (options.continuous ? t-1 : 0) ) : t-1;
							break;
						case "first":
							t = 0;
							break;
						case "last":
							t = ts;
							break;
						default:
							t = dir;
							break;
					};

					if (options.workSlider)
					{
						$("#" + options.prevId).animate({opacity: 0}, 100, function(){ $(this).hide(); });
						$("#" + options.nextId).animate({opacity: 0}, 100, function(){ $(this).hide(); });
					}
					if (options.homeSlider)
					{
						$("li",obj).each(function(e){
							if (e != ot)
							{
								$("h1.title", $(this)).css({opacity: 0});
								$("p.description", $(this)).css({opacity: 0});
								$('div.updates', $(this)).css({opacity: 0});
								$('div.updatesContainer', $(this)).css({opacity: 0});
							}
							else
							{
								$("h1.title", $(this)).animate({opacity: 0}, { queue:false, duration:options.speed/2});
								$("p.description", $(this)).animate({opacity: 0}, { queue:false, duration:options.speed/2});
								$('div.updates', $(this)).animate({opacity: 0}, { queue:false, duration:options.speed/2});
								$('div.updatesContainer', $(this)).animate({opacity: 0}, { queue:false, duration:options.speed/2});
							}
						});
					}
					
					if (options.workSliderPopup)
					{
						$('#artists-workPopup-background > div').animate({height: $("ul", obj).height(), width: 950}, {queue:false, duration:500});
					}

					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 (t==ts) clicked = true;

					if(clicked) clearTimeout(timeout);
					if(options.auto && !clicked){;
						timeout = setTimeout(function(){
							if (t==ts)
								animate("first",false);
							else
								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.workSlider && t == 0 && !options.continuous && options.controlsFade){					
				$("a","#"+options.prevId).hide();
				$("a","#"+options.firstId).hide();
			};		
			if (!options.workSlider && t==ts)
			{
				$("a","#"+options.nextId).hide();
			}
			
			if (s == 1)
			{
				$("a","#"+options.nextId).hide();				
				$("a","#"+options.prevId).hide();
				$("a","#"+options.firstId).hide();
			}

			if (options.workSlider)
			{
				$("#" + options.prevId).css({left: pw+options.workSliderPopup, top: ph-24}).show();
				$("#" + options.nextId).css({right: pw+options.workSliderPopup, top: ph-24}).show();

				$("#" + options.prevId).animate({opacity: 1}, {queue:false, duration:500});
				$("#" + options.nextId).animate({opacity: 1}, {queue:false, duration:500});
			}

			if (options.workSlider)
			{
				$("li a.artists-workPopup", obj).click(function(){
					window.clearTimeout(timeout);

					if ($("#artists-workPopup > div > div:first ul").length)
						return false;

					$(window).resize(function(){
						$("#artists-workPopup-container").width($(window).width());
						$("#artists-workPopup-container").height($(window).height());
						$("#artists-workPopup").width($(window).width());
					});

					$("#artists-workPopup-container").width($(window).width());
					$("#artists-workPopup-container").height($(window).height());
					$("#artists-workPopup-container").css({opacity: 0});
					$("#artists-workPopup-container").show();
					$("#artists-workPopup-container").animate({opacity: .75}, {queue:false, duration:500});

					$("#artists-workPopup").width($(window).width());
					$("#artists-workPopup").css({opacity: 0});
					$("#artists-workPopup").show();
					$("#artists-workPopup").animate({opacity: 1}, {queue:false, duration:500});

					$("#artists-workPopup-background").width($(window).width());
					$("#artists-workPopup-background").css({opacity: 0});
					$("#artists-workPopup-background").show();
					$("#artists-workPopup-background").animate({opacity: 1}, {queue:false, duration:500});

					var html = $("#artists-workSlider").html();
					$("#artists-workPopup > div").html(html);
					$("#artists-workPopup > div > span").replaceWith("");

					// close
					$("#artists-workPopup-background > div").replaceWith('<div><span class="close"></span></div>');
					$("#artists-workPopup-background span.close").click(function(){
						$("#artists-workPopup-background").animate({opacity: 0}, {queue:false, duration:500, complete:function(){
							$("#artists-workPopup-background").hide();
						}});
						$("#artists-workPopup-container").animate({opacity: 0}, {queue:false, duration:500, complete:function(){
							$("#artists-workPopup-container").hide();
						}});
						$("#artists-workPopup").animate({opacity: 0}, {queue:false, duration:500, complete:function(){
							$("#artists-workPopup > div").html('');
							$("#artists-workPopup").hide();
						}});
					});

					// start fixing the html
					$("#artists-workPopup > div > div:first").width(900);

					var mh = 0, mw = 0;
					$('#artists-workPopup ul li').each(function(){
						var img = $("a.artists-workPopup", this).attr("href");
						var dim = $("a.artists-workPopup", this).attr("rel").split(',');
						dim[0] = parseInt(dim[0], 10); dim[1] = parseInt(dim[1], 10);

						$('img.image', this).width(dim[0]);
						$('img.image', this).height(dim[1]);
						$("img.image", this).attr("src", img);

						$('div.container', this).width(dim[0]);
						$("p.last", this).replaceWith("");

						dim[0] = $('div.container', this).width();
						dim[1] = $('div.container', this).height();
						if (mh == 0) mh = dim[1];
						if (mw == 0) mw = dim[0];
					});

					$('#artists-workPopup-background div').width(mw);
					$('#artists-workPopup-background div').height(mh);
					$('#artists-workPopup ul li').height(mh);
					$('#artists-workPopup ul').height(mh);

					$("#artists-workPopup > div > div:first").pmSlider({
						speed: 1000,
						pause: 5000,
						workSlider: true,
						workSliderPopup: 25,
						workSliderCurrent: t,
						prevId: 'prevBtnPopup',
						nextId: 'nextBtnPopup'
					});

					// ready
					$('html, body').animate({scrollTop: 0}, 500);
					return false;
				});
			}
		});
	  
	};

})(jQuery);
