/*
 * URMSlider by Sebastian Perez 
 * sebastian.perezteres@gmail.com
 * February 22nd, 2011
 * 
 * @version 0.01_a
 *  
 * Simple slider - JQuery plugin
 */
var URMSLIDER = {
	properties : null,
	slide : function(direction,destination_element){
		var elementToHide = $("."+URMSLIDER.properties.slideElementActiveClass);
		var elementToShow = elementToHide.next();
		if(elementToHide.hasClass("urmslider_last_element") || direction=="r2l"){
			elementToShow = elementToHide.prev();
			direction = "r2l";
			if(destination_element==null)
				destination_element=1;
		}
		var elementToHideNumber = elementToHide.attr("urmslider_element");
		var elementToShowNumber = elementToShow.attr("urmslider_element");
		switch(URMSLIDER.properties.transitionMode){
			case "normal":
				if(direction=="r2l"){
					elementToHide.animate({
						top: 0,
						left: elementToHide.width()+parseInt($(URMSLIDER.properties.sliderSelector).css("padding-right"))
					},URMSLIDER.properties.transitionSpeed/2,function(){
						elementToHide.addClass(URMSLIDER.properties.slideElementInactiveClass);
						elementToHide.removeClass(URMSLIDER.properties.slideElementActiveClass);
						elementToShow.removeClass(URMSLIDER.properties.slideElementInactiveClass);
						elementToShow.addClass(URMSLIDER.properties.slideElementActiveClass);
						if(elementToShow.attr("urmslider_element")!==destination_element+""){
							elementToShow.animate({left:elementToHide.width()+parseInt($(URMSLIDER.properties.sliderSelector).css("padding-right"))});
							URMSLIDER.slide("r2l",destination_element);
						}
						else
							elementToShow.animate({left:0});
					});
				}
				else if(direction=="l2r"){
					elementToHide.animate({
						top: 0,
						left: -(elementToHide.width()+parseInt($(URMSLIDER.properties.sliderSelector).css("padding-left")))
					},URMSLIDER.properties.transitionSpeed/2,function(){
						elementToHide.addClass(URMSLIDER.properties.slideElementInactiveClass);
						elementToHide.removeClass(URMSLIDER.properties.slideElementActiveClass);
						elementToShow.removeClass(URMSLIDER.properties.slideElementInactiveClass);
						elementToShow.addClass(URMSLIDER.properties.slideElementActiveClass);
						if(elementToShow.attr("urmslider_element")!==destination_element+""){
							elementToShow.animate({left: -(elementToHide.width()+parseInt($(URMSLIDER.properties.sliderSelector).css("padding-left")))});
							URMSLIDER.slide("l2r",destination_element);
						}
						else
							elementToShow.animate({left:0});
					});
				}
				else{
					elementToHide.animate({
						top: 0,
						left: -(elementToHide.width()+parseInt($(URMSLIDER.properties.sliderSelector).css("padding-left")))
					},URMSLIDER.properties.transitionSpeed,function(){
						elementToHide.addClass(URMSLIDER.properties.slideElementInactiveClass);
						elementToHide.removeClass(URMSLIDER.properties.slideElementActiveClass);
						elementToShow.removeClass(URMSLIDER.properties.slideElementInactiveClass);
						elementToShow.addClass(URMSLIDER.properties.slideElementActiveClass);
						elementToShow.animate({left : 0});
					});
				}
			break;
		}
		if(URMSLIDER.properties.elementCounter){
			$("."+URMSLIDER.properties.activeElementCounterClass)
				.removeClass(URMSLIDER.properties.activeElementCounterClass)
				.addClass(URMSLIDER.properties.inactiveElementCounterClass);
			$("."+URMSLIDER.properties.inactiveElementCounterClass+"[urmslider_element='"+elementToShowNumber+"']")
				.removeClass(URMSLIDER.properties.inactiveElementCounterClass)
				.addClass(URMSLIDER.properties.activeElementCounterClass);
		}
	},
	moveToLeft : function(element){
		element.css({
			top: 0,
			left: -(element.width()+parseInt($(URMSLIDER.properties.sliderSelector).css("padding-left")))
		});
		if(!element.hasClass(URMSLIDER.properties.slideElementInactiveClass))
			element.addClass(URMSLIDER.properties.slideElementInactiveClass);
		if(element.hasClass(URMSLIDER.properties.slideElementActiveClass))
			element.removeClass(URMSLIDER.properties.slideElementActiveClass);
	},
	moveToRight : function(element){
		element.css({
			top: 0,
			left: element.width()+parseInt($(URMSLIDER.properties.sliderSelector).css("padding-right"))
		});
		if(!element.hasClass(URMSLIDER.properties.slideElementInactiveClass))
			element.addClass(URMSLIDER.properties.slideElementInactiveClass);
		if(element.hasClass(URMSLIDER.properties.slideElementActiveClass))
			element.removeClass(URMSLIDER.properties.slideElementActiveClass);
	},
	setup : function(){
		/************************** START: SLIDER General Setup **************************/
		$(URMSLIDER.properties.sliderSelector).css({
			overflow:"hidden"
		});
		var first = true;
		var count = 1;
		$(URMSLIDER.properties.sliderSelector).children("."+URMSLIDER.properties.slideElementClass).each(function(){
			$(this).attr("urmslider_element",count).css({
				position:"relative",
				"float":"left"
			});
			if(!first){
				$(this).addClass(URMSLIDER.properties.slideElementInactiveClass);
				URMSLIDER.moveToRight($(this));
			}
			else{
				$(this).addClass(URMSLIDER.properties.slideElementActiveClass);
			}
			count++;
			first = false;
		});
		var elements = count-1;
		//MARK LAST ELEMENT
		$(URMSLIDER.properties.sliderSelector).children("."+URMSLIDER.properties.slideElementClass+":last")
			.removeClass("urmslider_last_element")
			.addClass("urmslider_last_element");
		/************************** END: General Setup **************************/
		
		/************************** START: Element Counter Setup ****************/
		if(URMSLIDER.properties.elementCounter){
			
			$(URMSLIDER.properties.elementCounterContainer).html("");
			for(var i=1;i<=elements;i++){
				if(i==1){
					$(URMSLIDER.properties.elementCounterContainer).append(
						$("<div></div>").addClass(URMSLIDER.properties.activeElementCounterClass).attr("urmslider_element",i)
					);
				}
				else{
					$(URMSLIDER.properties.elementCounterContainer).append(
						$("<div></div>").addClass(URMSLIDER.properties.inactiveElementCounterClass).attr("urmslider_element",i)
							.css({cursor:"pointer"})
					);
				}
			}
			$("."+URMSLIDER.properties.activeElementCounterClass).die("click");
			$("."+URMSLIDER.properties.inactiveElementCounterClass).die("click").live("click",function(){
				var active_num = parseInt($("."+URMSLIDER.properties.activeElementCounterClass).attr("urmslider_element"));
				var destination_num = parseInt($(this).attr("urmslider_element"));
				if(active_num>destination_num){
					URMSLIDER.stopAutoSlide();
					URMSLIDER.slide("r2l",destination_num);
					URMSLIDER.startAutoSlide();
				}
				else{
					URMSLIDER.stopAutoSlide();
					URMSLIDER.slide("l2r",destination_num);
					URMSLIDER.startAutoSlide();
				}
			});
			
		}
		/************************** END: Element Counter Setup ******************/
	},
	startAutoSlide : function(){
		URMSLIDER.interval =  window.setInterval("URMSLIDER.slide()",URMSLIDER.properties.autoSlideSpeed);
	},
	stopAutoSlide : function(){
		window.clearInterval(URMSLIDER.interval);
	},
	interval : null
};
$.extend($,{
	urmslider : function(properties){
		var defaultproperties = {
			sliderSelector : "#urmslider",
			slideElementClass : "urmslider_element",
			slideElementActiveClass: "urmslider_element_active",
			slideElementInactiveClass: "urmslider_element_inactive",
			transitionEffect: "slide",
			transitionSpeed: 200,
			transitionMode: "normal", 
			autoSlide: true,
			autoSlideSpeed: 9000,
			thumbnails: false,
			elementCounter: false,
			elementCounterContainer: "",
			activeElementCounterClass: "",
			inactiveElementCounterClass: ""
		};
		if(properties==null){
			properties = defaultproperties;
		}
		URMSLIDER.properties = properties;
		//TODO: Add Contruction validations
		URMSLIDER.setup();
		//Start
		URMSLIDER.startAutoSlide();
		
	}
});
