(function($) {

    var NivoSlider = function(element, options){
		//Defaults are below
		var settings = $.extend({}, $.fn.nivoSlider.defaults, options);

        //Useful variables. Play carefully.
        var vars = {
            currentSlide: 0,
            currentImage: '',
            totalSlides: 0,
            randAnim: '',
            running: false,
            paused: false,
            stop: false
        };

        //Get this slider
        var slider = $(element);
        slider.data('nivo:vars', vars);
        slider.css('position','relative');
        slider.addClass('nivoSlider');

        //Find our slider children
        var kids = slider.children();
        kids.each(function() {
            var child = $(this);
            var link = '';
            if(!child.is('img')){
                child = child.find('img:first');
            }

            //Get img width & height
            var childWidth = child.width();
            if(childWidth == 0) childWidth = child.attr('width');
            var childHeight = child.height();
            if(childHeight == 0) childHeight = child.attr('height');

            //Resize the slider
            if(childWidth > slider.width()){
                slider.width(childWidth);
            }

            if(childHeight > slider.height()){
                slider.height(childHeight);
            }

            child.css('display','none');
            vars.totalSlides++;
        });

        //Set startSlide
        if(settings.startSlide > 0){
            if(settings.startSlide >= vars.totalSlides) settings.startSlide = vars.totalSlides - 1;
            vars.currentSlide = settings.startSlide;
        }

        //Get initial image
        if($(kids[vars.currentSlide]).is('img')){
            vars.currentImage = $(kids[vars.currentSlide]);
        } else {
            vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
        }

        //Set first background
        slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
        slider.css('background-position','center center');

        //primer titulo
        $('#headertxt').click(function() {
		  location.href=photos[0].url;
		});

        $("#firstline").html(photos[0].title);
        $("#banner_flechita").css("margin-top" , "43px");

		$(".banners_titulos_ids").css({
			"background-color" : "#231f20",
			"color" : "Gray"
		});

		$("#banner_titulo_"+photos[0].id+"").css({
			"background-color" : "#f19000",
			"color" : "White"
		});

        //In the words of Super Mario "let's a go!"
        var timer = 0;
        if(!settings.manualAdvance && kids.length > 1){
            timer = setInterval(function(){ nivoRun(slider, kids, settings); }, settings.pauseTime);
        }

        // Add slices for slice animations
        var createSlices = function(slider, settings, vars){
            for(var i = 0; i < settings.slices; i++){
				var sliceWidth = Math.round(slider.width()/settings.slices);
				if(i == settings.slices-1){
					slider.append(
						$('<div class="nivo-slice"></div>').css({
							left:(sliceWidth*i)+'px', width:(slider.width()-(sliceWidth*i))+'px',
							height:'0px',
							opacity:'0',
							background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat -'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px 0%'
						})
					);
				} else {
					slider.append(
						$('<div class="nivo-slice"></div>').css({
							left:(sliceWidth*i)+'px', width:sliceWidth+'px',
							height:'0px',
							opacity:'0',
							background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat -'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px 0%'
						})
					);
				}
			}
        }

        //Event when Animation finishes
        slider.bind('nivo:animFinished', function(){
            vars.running = false;
            //Hide child links
            $(kids).each(function(){
                if($(this).is('a')){
                    $(this).css('display','none');
                }
            });
            //Restart the timer
            if(timer == '' && !vars.paused && !settings.manualAdvance){
                timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
            }
            //Trigger the afterChange callback
            settings.afterChange.call(this);
        });

        $('#back_banner').live('click', function(){
            if(vars.running) return false;
            clearInterval(timer);
            timer = '';

			vars.currentSlide -= 2;

            nivoRun(slider, kids, settings, 'prev');
        });

        $('#next_banner').live('click', function(){
            if(vars.running) return false;
            clearInterval(timer);
            timer = '';
            nivoRun(slider, kids, settings, 'next');
        });

		//Ir a un banner en concreto
		$(".banner_links").click(function() {
			if(vars.running) return false;

			var ir_a = $(this).attr("name");

			clearInterval(timer);
			timer = '';
			vars.currentSlide = (ir_a-1);
			nivoRun(slider, kids, settings, ir_a);

		});

        // Private run method
		var nivoRun = function(slider, kids, settings, nudge)
		{
			//Get our vars
			var vars = slider.data('nivo:vars');

			//alert(vars.currentSlide);

			if(vars.currentSlide == -2) { vars.currentSlide = -1; }

            //Trigger the lastSlide callback
            if(vars && (vars.currentSlide == vars.totalSlides - 1)){
				settings.lastSlide.call(this);
			}

            // Stop
			if((!vars || vars.stop) && !nudge) return false;

			//Trigger the beforeChange callback
			settings.beforeChange.call(this);

			//Set current background before change
			if(!nudge){
				slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
			} else {
				if(nudge != 'next' && nudge != 'prev'){
					slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
				}
				if(nudge == 'prev'){
					slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
				}
				if(nudge == 'next'){
					slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
				}
			}

			//Set current background before change
			slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');

			//----------------------------------------------- CODIGO PARA BANNERS ----------------------------------------------------
			if(vars.currentSlide == 10)
			{
				var num_datos_banner = 0;
			} else {
				var num_datos_banner = vars.currentSlide;
			}

			$("#firstline").html(photos[num_datos_banner].title);

			$(".banners_titulos_ids").css({
				"background-color" : "#231f20",
				"color" : "Gray"
			});

			$("#banner_titulo_"+photos[num_datos_banner].id+"").css({
				"background-color" : "#f19000",
				"color" : "White"
			});

			switch(vars.currentSlide)
			{
				case 0 : nuevaPosicion= 43; break;
				case 1 : nuevaPosicion= 43; break;
				case 2 : nuevaPosicion= 43; break;
				case 3 : nuevaPosicion= 43; break;
				case 4 : nuevaPosicion= 43; break;
				case 5 : nuevaPosicion= 43; break;
				case 6 : nuevaPosicion= 43; break;
				case 7 : nuevaPosicion= 130; break;
				case 8 : nuevaPosicion= 217; break;
				case 9 : nuevaPosicion= 304; break;
				case 10 : nuevaPosicion= 43; break;
			}

			$("#banner_flechita").css("margin-top" , nuevaPosicion+"px");

			if(vars.currentSlide == 10)
			{
				$('#banner_mover').animate({
					marginTop:  '+=522px'
				}, 1000, function() {
					// Animation complete.
				});
			} else {
				if(vars.currentSlide != 7 && vars.currentSlide != 8 && vars.currentSlide != 9)

				var mover_a_mov = vars.currentSlide*87;

				$('#banner_mover').animate({
					marginTop:  '-'+mover_a_mov+'px'
				}, 1000, function() {
					// Animation complete.
				});
			}

			if(vars.currentSlide == 10)
			{
				var num_datos_banner = 1;
			} else {
				var num_datos_banner = vars.currentSlide+1;
			}

			$('.img_grayscale').stop().animate({opacity:0}, 500);
			$(".banner_links[name='"+num_datos_banner+"']").find('img:first').stop().animate({opacity:1}, 1000);

			//----------------------------------------------- CODIGO PARA BANNERS ----------------------------------------------------

			vars.currentSlide++;

            //Trigger the slideshowEnd callback
			if(vars.currentSlide == vars.totalSlides){
				vars.currentSlide = 0;
				settings.slideshowEnd.call(this);
			}
			if(vars.currentSlide < 0) vars.currentSlide = (vars.totalSlides - 1);
			//Set vars.currentImage
			if($(kids[vars.currentSlide]).is('img')){
				vars.currentImage = $(kids[vars.currentSlide]);
			} else {
				vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
			}

			// Remove any slices from last transition
			$('.nivo-slice', slider).remove();

			//Run effects
			vars.running = true;

			//quitamos los if's de seleccion de animacion
			createSlices(slider, settings, vars);
			var timeBuff = 0;
			var i = 0;
			var v = 0;

			slices = $('.nivo-slice', slider)._reverse();

			slices.each(function(){
				var slice = $(this);
				if(i == 0){
					slice.css('top','0px');
					i++;
				} else {
					slice.css('bottom','0px');
					i = 0;
				}

				if(v == settings.slices-1){
					setTimeout(function(){
						slice.animate({ height:'100%', opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
					}, (100 + timeBuff));
				} else {
					setTimeout(function(){
						slice.animate({ height:'100%', opacity:'1.0' }, settings.animSpeed);
					}, (100 + timeBuff));
				}
				timeBuff += 50;
				v++;
			});
			//fin de if's selectores de animacion

		}
    };

    $.fn.nivoSlider = function(options) {

        return this.each(function(key, value){
            var element = $(this);
            // Return early if this element already has a plugin instance
            if (element.data('nivoslider')) return element.data('nivoslider');
            // Pass options to plugin constructor
            var nivoslider = new NivoSlider(this, options);
            // Store plugin object in this element's data
            element.data('nivoslider', nivoslider);
        });

	};

	//Default settings
	$.fn.nivoSlider.defaults = {
		effect: 'random',
		slices: 15,
		animSpeed: 500,
		pauseTime: 5000,
		startSlide: 0,
		beforeChange: function(){},
		afterChange: function(){},
		slideshowEnd: function(){},
        lastSlide: function(){},
        afterLoad: function(){}
	};

	$.fn._reverse = [].reverse;

})(jQuery);
