if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

function get_link(href) {
	window.location = href;
}

(function($) {
	
	var helper = {},
		jSlider = new Array(),
		jSliderItems = new Array(),
		jSliderNext = new Array(),
		jSliderPrev = new Array(),
		jSliderPage = new Array();
	
	$.jSlider = {
		defaults : {
			obje_id : '',
			speed : 'normal',
			step : 7,
			item : 7,
			menu : new Array(),
			menu_id : new Array(),
			content_url : '',
			
			//Descriptions Settings
			desc_animated : 1,
			desc_top : '40px',
			desc_top_over : '90px',
			desc_speed : 'normal'
		}
	}
	
	$.fn.extend({
		jSlider: function(settings) {
			settings = $.extend({}, $.jSlider.defaults, settings);
			jSlider.push(settings.obje_id);
			get_slider(settings);
		}
	});
	
	function get_menu(settings) {
		settings = $.extend({}, $.jSlider.defaults, settings);
		menu_html = '';
		
		for(i = 0; i < settings.menu.length; i++) {
			menu_html = '<li><a href="javascript:;" name="menu_' + i + '">' + settings.menu[i] + '</a></li>';
			menu_html += '<li class="sep">&nbsp;</li>';
			
			$('div#' + settings.obje_id + ' div.menu ul').append(menu_html);
			$("div#" + settings.obje_id + " div.menu a[name='menu_" + i + "']").bind('click', 
				{set_id: settings.menu_id[i], settings: settings, obj_id : settings.obje_id, menu_id: i}, get_content);
		}
		$('div#' + settings.obje_id + ' div.menu a:first').addClass('active');
	}
	
	function get_desc(settings) {
		settings = $.extend({}, $.jSlider.defaults, settings);
		
		if(settings.desc_animated > 0) {
			$('div#' + settings.obje_id + ' div.jSlider_news div.item').hover(
				function() { get_spot(this, 1); },
				function() { get_spot(this, 0); }
			);
		}
	}
	
	function get_btn(settings) {
		settings = $.extend({}, $.jSlider.defaults, settings);
		
		$('div#' + settings.obje_id + ' div.next').click(function() { get_slide(1, settings); });
		$('div#' + settings.obje_id + ' div.prev').click(function() { get_slide(0, settings); });
	}
	
	function get_slider(settings) {
		settings = $.extend({}, $.jSlider.defaults, settings);
		
		num_width = $('div#' + settings.obje_id + ' div.items div.title').width();
		num_item = $('div#' + settings.obje_id + ' div.items div.item').length;
		
		paddings = $('div#' + settings.obje_id + ' div.items div.item').css('padding-right');
		paddings = paddings.replace(/px/, "");
		paddings = parseInt(paddings);
		
		slider_width = (num_width * num_item) * paddings;
		
		$('div#' + settings.obje_id + ' div.items').css('width', slider_width + 'px');
		
		s_index = jSlider.indexOf(settings.obje_id);
		
		if(jSliderItems[s_index] == null)
			jSliderItems.push($('div#' + settings.obje_id + ' div.items div.title').length);
		
		if(jSliderNext[s_index] == null)
			jSliderNext.push(0);
		
		if(jSliderPrev[s_index] == null)
			jSliderPrev.push(jSliderItems[s_index]);
		
		if(jSliderPage[s_index] == null)
			jSliderPage.push(1);
		
		get_menu(settings);
		get_desc(settings);
		get_btn(settings);
		get_pagination(settings);
	}
	
	function get_content(event) {
		settings = $.extend({}, $.jSlider.defaults, event.data.settings);
		s_index = jSlider.indexOf(settings.obje_id);
		
		
		
		$.get(settings.content_url + '?id=' + event.data.set_id, function(data) {
			$('div#' + event.data.obj_id + ' div.jSlider_news div.items').html(data);	
			$('div#' + event.data.obj_id + ' div.jSlider_news div.items').css('left', '0px');
			
			jSliderItems[s_index] = $('div#' + event.data.obj_id + ' div.items div.title').length;
			jSliderNext[s_index] = 0;
			jSliderPrev[s_index] = jSliderItems[s_index];
			jSliderPage[s_index] = 1;
			
			$('div#' + event.data.obj_id + ' div.menu a').removeClass('active');
			$("div#" + event.data.obj_id + " div.menu a[name='menu_" + event.data.menu_id + "']").addClass('active');
			
			get_desc(settings);
			get_pagination(settings);
		});
	}
	
	function get_slide(type, settings, active) {
		settings = $.extend({}, $.jSlider.defaults, settings);
		
		s_index = jSlider.indexOf(settings.obje_id);
		
		if(type > 0) {
			
			top_num = $('div#' + settings.obje_id + ' div.items').width();
			width = $('div#' + settings.obje_id + ' div.items div.title').width();
			
			left_position =  Math.abs($('div#' + settings.obje_id + ' div.items').position().left);
			top_left_pos = Math.round(left_position + left_position);
			
			paddings = $('div#' + settings.obje_id + ' div.items div.item').css('padding-right');
			paddings = paddings.replace(/px/, "");
			paddings = parseInt(paddings);
			
			if(jSliderNext[s_index] < jSliderItems[s_index]) {
				
				if(jSliderPrev[s_index] > settings.step) {
					jSliderNext[s_index] = jSliderNext[s_index] + settings.step;
					
					jSliderPrev[s_index] = jSliderPrev[s_index] - settings.step;
				}
				else {
					jSliderNext[s_index] = jSliderItems[s_index];
					jSliderPrev[s_index] = 0;
				}
				
				if(jSliderPrev[s_index] < settings.step) {
					
					step = jSliderPrev[s_index];
					jSliderNext[s_index] = jSliderItems[s_index];
					jSliderPrev[s_index] = 0;
					
				} else { step = settings.step; }
				
				jSliderPage[s_index] = jSliderPage[s_index] +1;
				
				get_pagination(settings);
				
				$("div#" + settings.obje_id + " div.pagenum a").removeClass('active');
				$("div#" + settings.obje_id + " div.pagenum a[name='page_" + jSliderPage[s_index] + "']").addClass('active');
				
				num_position = Math.round((width + paddings) * step);
				
				$('div#' + settings.obje_id + ' div.items').animate({
					left: '-=' + num_position + 'px'
				}, { duration : settings.speed, easing : "linear", queue: true });
			}
			
		} else {
			
			top_num = $('div#' + settings.obje_id + ' div.items').width();
			width = $('div#' + settings.obje_id + ' div.items div.title').width();
			
			left_position =  Math.abs($('div#' + settings.obje_id + ' div.items').position().left);
			top_left_pos = Math.round(left_position + left_position);
			
			paddings = $('div#' + settings.obje_id + ' div.items div.item').css('padding-right');
			paddings = paddings.replace(/px/, "");
			paddings = parseInt(paddings);
			
			if(jSliderPrev[s_index] < jSliderItems[s_index]) {
				
				if(jSliderNext[s_index] > settings.step) {
					jSliderNext[s_index] = jSliderNext[s_index] - settings.step;
					jSliderPrev[s_index] = jSliderPrev[s_index] + settings.step;
					steping = 0;
				}
				else {
					
					if(jSliderNext[s_index] == settings.step)
					{
						jSliderNext[s_index] = jSliderNext[s_index];
						jSliderPrev[s_index] = jSliderPrev[s_index];
						steping = jSliderNext[s_index];
						
					} else {
						jSliderNext[s_index] = 0;
						jSliderPrev[s_index] = jSliderItems[s_index];
						steping = 0;
					}
				}
				
				if(jSliderNext[s_index] < settings.step) {
					step = jSliderNext[s_index];
					jSliderNext[s_index] = 0;
					jSliderPrev[s_index] = jSliderItems[s_index];
				} else {
					
					step = settings.step;
					if(steping == settings.step)
					{
						jSliderNext[s_index] = 0;
						jSliderPrev[s_index] = jSliderItems[s_index];
					}
				}
				
				jSliderPage[s_index] = jSliderPage[s_index] -1;
				
				get_pagination(settings);
				
				$("div#" + settings.obje_id + " div.pagenum a").removeClass('active');
				$("div#" + settings.obje_id + " div.pagenum a[name='page_" + jSliderPage[s_index] + "']").addClass('active');
				
				num_position = Math.round((width + paddings) * step);
				
				$('div#' + settings.obje_id + ' div.items').animate({ left: '+=' + num_position + 'px'}, 
					{ duration : settings.speed, easing : "linear", queue: true });
			}
		}
	}
	
	function get_spot(img, type, settings) {
		settings = $.extend({}, $.jSlider.defaults, settings);
		
		if(type > 0) {
			$(img).find("div").animate({ top : settings.desc_top }, 
				{ duration : settings.desc_speed, easing : "linear", queue: false });
		} else {
			$(img).find("div").animate({ top : settings.desc_top_over }, 
				{ duration : settings.desc_speed, easing : "linear", queue: false });
		}
	}
	
	function get_page(event) {
		settings = $.extend({}, $.jSlider.defaults, event.data.settings);
		
		page_id = event.data.page_id;
		s_index = jSlider.indexOf(settings.obje_id);
		
		$("div#" + settings.obje_id + " div.pagenum a").removeClass('active');
		$("div#" + settings.obje_id + " div.pagenum a[name='page_" + page_id + "']").addClass('active');
		
		if(page_id < jSliderPage[s_index]) {
			
			for(i = 0; page_id < jSliderPage[s_index]; i++) {
				get_slide(0, settings);
			}
			
		} else {
			for(i = 0; jSliderPage[s_index] < page_id; i++) {
				get_slide(1, settings);
			}
		}
		
	}
	
	function get_pagination(settings) {
		settings = $.extend({}, $.jSlider.defaults, settings);
		s_index = jSlider.indexOf(settings.obje_id);
		
		
		
		var pagination = '';
		
		jSliderItems_num = jSliderItems[s_index];
		var page_num = Math.ceil(jSliderItems_num / settings.step);
		
		$('div#' + settings.obje_id + ' div.pagenum').empty();
		
		if(page_num > 5) {
		
			page_step = jSliderPage[s_index] + 2;
			
			if(page_step < 5) {
				if(page_num > 4)
					page_step = 5;
			}
			
			if(page_step >= page_num)
				page_step = page_num;
		
			if(jSliderPage[s_index] - 2 > 1) {
				if(jSliderPage[s_index] + 2 >= page_num)
					i = page_num - 4;
				else
					i = jSliderPage[s_index] - 2;
				
			} else { i = 1; }
		
		} else {
			i = 1;
			page_step = page_num;
		}
		
		for(i; i <= page_step; i++) {
			pagination = '<a href="javascript:;" name="page_' + i + '">' + i + '</a>';
			
			$('div#' + settings.obje_id + ' div.pagenum').append(pagination);
			
			$("div#" + settings.obje_id + " div.pagenum a[name='page_" + i + "']").bind('click', 
				{page_id: i, settings: settings}, get_page);
		}
		
		$('div#' + settings.obje_id + ' div.pagenum a:first').attr('class', 'active');
	}
	
	function settings(element) { return $.data(element, "jSlider"); }

})(jQuery);