/*
 * jQuery PixelSlider 1.5 - http://www.pixelcloth.com
 *
 * Easy jQuery Slider plugin
 *
 * TERMS OF USE - jQuery PixelSlider
 *
 * Open source under the BSD License.
 *
 * Copyright © 2008 Gabi Chiritescu All rights reserved.
 * 
 *
*/


(function($) {

    $.pixelFadeSlider = {
	defaults: {
	    slideWidth: 0,		// slide width
	    selSlide: 0,		// selected slide
	    autoScrollTimer: 3,		// the duration after the slider changes the slide automatically (in seconds)
	    cssSelectedClass: 'on',
	    sliderContainer: '',
	    slideSpeed: 600,
	    sliderType: 'HORIZONTAL',
	    animationType : 'easeInOutExpo',
	    nextButton: '',
	    prevButton: '',
	    hasNavBar: true
	}
    };


    $.fn.extend({
	pixelFadeSlider: function(config) {
	    var config = $.extend({}, $.pixelFadeSlider.defaults, config);
	    config.sliderContainer = this.attr('id');
	    config.noSlides = $("#"+config.sliderContainer).find('li').length;
	    initializeSlider(config);
	    return this;
	}
    });


    function initializeSlider(config) {
	if ( 'HORIZONTAL' == config.sliderType ) {	    
	    $('#'+config.sliderContainer).wrap('<div id="slider-base" />');
	    
	    $('#slider-base').css({
		'overflow' : 'hidden',
		'width' : config.slideWidth + 'px',
		'position' : 'relative'
	    });
	    $('#'+config.sliderContainer).css({
		'width' : config.slideWidth * config.noSlides + 'px',
		'display' : 'block',
		'top' : '0px'
	    });
	}

	if ( 'FADE' == config.sliderType ) {
	    $('.slider').css('position', 'absolute');
	    var slides = $("#"+config.sliderContainer).find('li');

	    slides.css({
		'position': 'absolute',
		'display': 'none'
	    });
	    slides.eq(config.selSlide).css({
		'display': 'block'
	    })
	}

	if ( '' != config.prevButton && '' != config.nextButton ) {
	    $("#"+config.prevButton).click(function() {
		prevSlide(config);
		return false;
	    });
	    $("#"+config.nextButton).click(function() {
		nextSlide(config);
		return false;
	    });
	}

	startSlider(config);
    }


    function animate(toIndex, speed, config) {
	var margin = toIndex * config.slideWidth * (-1);
	$('#'+config.sliderContainer).animate( {
	    marginLeft : margin + 'px'
	}, speed,
	config.animationType);
    }


    function animateFade(toIndex, speed, config) {
	var elem = $("#"+config.sliderContainer).find('li').eq(config.selSlide);
	var toElem = $("#"+config.sliderContainer).find('li').eq(toIndex);
	elem.fadeOut(speed, function() {
	});
	toElem.fadeIn(speed);
    }


    function createNavBar(config) {
	var sliderWrapper = $('#' + config.sliderContainer);
	var noS = config.noSlides;
	var navigator = '<ul id="slider-nav">';

	for ( i = 0 ; i < noS ; i++ ) {
	    navigator += "<li><a href='#' id='link" + i + "'>"+ (i + 1) +"</a></li>";
	}

	navigator += "</ul>";
	sliderWrapper.before(navigator);

	$("#slider-nav").css({
	    'position': 'absolute'
	});
    }


    function startSlider(config) {
	if ( config.hasNavBar == true ) {
	    createNavBar(config);
	}
	var elem = $("#slider-nav").find("li a");
	elem.addClass('png');
	elem.eq(config.selSlide).addClass(config.cssSelectedClass);

	$(elem).click(function() {
	    if (config.selSlide != elem.index($(this))) {
		if ( 'HORIZONTAL' == config.sliderType ) {
		    animate(elem.index($(this)), config.slideSpeed, config);
		} else {
		    animateFade(elem.index($(this)), config.slideSpeed, config);
		}
		elem.eq(config.selSlide).removeClass(config.cssSelectedClass);
		$(this).addClass(config.cssSelectedClass);
		config.selSlide = elem.index($(this));
	    }
	    return false;
	});

	if ( config.autoScrollTimer > 0 ) {
	    setInterval(function() {
		nextSlide(config);
	    }, config.autoScrollTimer * 1000);
	}
    }

    function nextSlide(config) {
	var prev = config.selSlide;
	var next = config.selSlide + 1;
	if ( next > config.noSlides - 1 ) {
	    next = 0;
	    prev = config.noSlides - 1;
	}
	onClick(config, prev, next);
	config.selSlide = next;
    }

    function prevSlide(config) {
	var prev = config.selSlide;
	var next = config.selSlide - 1;
	if ( next < 0 ) {
	    next = config.noSlides - 1;
	    prev = 0;
	}
	onClick(config, prev, next);
	config.selSlide = next;
    }


    function onClick(config, prev, next) {

	if ( 'HORIZONTAL' == config.sliderType ) {
	    animate(next, config.slideSpeed, config);
	} else {
	    animateFade(next, config.slideSpeed, config);
	}
	var elem = $("#slider-nav").find("li a");
	elem.eq(prev).removeClass(config.cssSelectedClass);
	elem.eq(next).addClass(config.cssSelectedClass);
    }


})(jQuery);




