/*
* jContent 0.1 - jQuery content slider plugin
* jQuery.fn.jContent(options);
* http://jcontent.fahon.org
*/

(function($){
	$.fn.jContent = function(options){
		
		var jhndl = this;
		var options = $.extend({
			speed: 500,
			orientation: 'horizontal', //horizontal, vertical,
			auto: false,
			direction: 'next',
			pause: 2000,
			circle: false,
			easing: '', //easeOutCirc, easeOutBounce,
			xml: ''
		},options);

		this.init = function(hndl){
				
			//init
			hndl.div = $(hndl);			
			hndl.slides_div = $(hndl).children("div.slides").css("overflow", "hidden").css("position", "relative");
			hndl.width = hndl.slides_div.width();
			hndl.height = hndl.slides_div.height();
			hndl.currentSlide = 0;
			
			//init classes
			hndl.div.addClass("jContent");
			if(options.orientation == 'horizontal'){
				hndl.div.addClass("jc-horizontal");
			}
			else{
				hndl.div.addClass("jc-vertical");
			}
			
			if(options.auto){
				hndl.div.addClass("jc-auto");
			}
			
			if(options.circle){
				hndl.div.addClass("jc-circle");
			}
			
			//init slides
			hndl.slides = hndl.slides_div.children("div").css("width", hndl.width).css("height", hndl.height).hide();
			hndl.count = hndl.slides.length;
			
			//init arrows
			hndl.left_arr = hndl.div.children("a").eq(0);
			hndl.right_arr = hndl.div.children("a").eq(1);			
			
			//create panel
			hndl.slides_div.append("<div class='panel'></div>");
			hndl.panel = hndl.slides_div.children("div.panel").css("position", "absolute");
			
			//orientation
			switch(options.orientation){
				case 'horizontal':{	
					hndl.slides.css("float", "left");
					hndl.panel.css("width", 3*hndl.width).css("height", hndl.height);
					break;
				}
				case 'vertical':{
					hndl.panel.css("height", 3*hndl.height).css("width", hndl.width);
					break;
				}
			}			
			
			hndl.getNextIndex = function(){
				if(hndl.currentSlide >= hndl.count - 1){
					return 0;
				}
				else{
					return hndl.currentSlide + 1;
				}
			};
			
			hndl.getPrevIndex = function(){
				if(hndl.currentSlide <= 0){
					return hndl.count - 1;
				}
				else{
					return hndl.currentSlide - 1;
				}			
			};
			
			hndl.initItemsPosition = function(){
			
				//init first items
				hndl.slides.eq(hndl.getPrevIndex()).clone().show().appendTo(hndl.panel);
				hndl.slides.eq(hndl.currentSlide).clone().show().appendTo(hndl.panel);
				hndl.slides.eq(hndl.getNextIndex()).clone().show().appendTo(hndl.panel);			
			
				switch(options.orientation){
					case 'horizontal':{	
						hndl.panel = hndl.slides_div.children("div.panel").css("left", -1*hndl.width);
						break;
					}
					case 'vertical':{
						hndl.panel = hndl.slides_div.children("div.panel").css("top", -1*hndl.height);
						break;
					}
				}
				
			};

			hndl.isLastItem = function(){
				return hndl.currentSlide >= hndl.count - 1;
			};
			
			hndl.isFirstItem = function(){
				return hndl.currentSlide <= 0;
			};
			
			hndl.updateArrows = function(){
				if(!options.auto && !options.circle){
					if(hndl.isLastItem()){
						hndl.left_arr.removeClass("hide").removeClass("show").addClass("show");
						hndl.right_arr.removeClass("hide").removeClass("show").addClass("hide");
					}
					else{
						if(hndl.isFirstItem()){
							hndl.left_arr.removeClass("hide").removeClass("show").addClass("hide");
							hndl.right_arr.removeClass("hide").removeClass("show").addClass("show");
						}
						else{
							hndl.left_arr.removeClass("hide").removeClass("show").addClass("show");
							hndl.right_arr.removeClass("hide").removeClass("show").addClass("show");					
						}
					}
				}
			};
			
			hndl.getAnimateArgs = function(direction){
				var args;
				
				switch(options.orientation){
					case 'horizontal':{	
						if(direction == 'prev'){
							args = {left: 0};
						}
						else{//next
							args = {left:-2*hndl.width};
						}						
						break;
					}
					case 'vertical':{
						if(direction == 'prev'){
							args = {top: 0};
						}
						else{//next
							args = {top:-2*hndl.height};
						}	
						break;
					}
				}

				return args;				
			};
			
			hndl.animation = function(direction){
				hndl.panel.animate(hndl.getAnimateArgs(direction), options.speed, options.easing, function(){					
					hndl.panel.empty();
					
					if(direction == 'prev'){
						hndl.currentSlide = hndl.getPrevIndex();
					}
					else{
						hndl.currentSlide = hndl.getNextIndex();
					}
					
					hndl.initItemsPosition();	
					hndl.updateArrows();
					
					if(options.auto){
						hndl.panel.delay(options.pause);
						hndl.go(direction);
					}
				});			
			};
			
			hndl.go = function(direction){
				if(direction == 'prev'){
					if(!hndl.isFirstItem() || options.auto || options.circle){
						hndl.animation('prev');
					}
				}
				else{//next
					if(!hndl.isLastItem() || options.auto || options.circle){
						hndl.animation('next');
					}				
				}				
			};
			
			hndl.left_arr.click(function(){	
				hndl.go('prev');
				return false;
			});
			
			hndl.right_arr.click(function()
			{
				hndl.go('next');
				return false;
			});
			
			//start
			hndl.updateArrows();
			hndl.initItemsPosition();
			
			//autostart
			if(options.auto){
				hndl.panel.delay(options.pause);
				hndl.go(options.direction);
			}			
		};
		
		return this.each(function() {			
			var hndl = this;
			
			//ajax
			if(options.xml != '')
			{
				$.ajax({url: options.xml,
						type: "GET",
						cache: false, 
						success: function(XmlDoc){
							var slides = $("slide", XmlDoc);
							
							//build data
							$(hndl).html("<a title='' href='#' class='prev'></a><div class='slides'></div><a title='' href='#' class='next'></a>");
							slides.each(function(){	
								$(hndl).find("div.slides").append($(this).text());
							});
							
							//init
							jhndl.init(hndl);
						},			
						dataType: "xml"});				
			}else{
				jhndl.init(hndl);
			}

		});	
	};
})(jQuery);

