/*
 * jquery.bannerslider-1.0
 *
 * Copyright (c) 2010
 *   Mario Domínguez (http://www.mariodominguez.com.mx)
 *
 * Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html)
 * and MIT (http://www.opensource.org/licenses/mit-license.php) licenses.
 *
 * $Date: mar sep 28 17:04:44 CDT 2010
 * $Rev: 1 $
 *
 * NOTE: Make love not war :D
 */

$.fn.bannerslider = function(settings){
  var options = jQuery.extend({
    item_width: 930, // ancho de la caja
    item_height: 322, // alto de la caja
    activate_navigator: true, // activar los botones de anterior y regreso
    autoplay: true, // activar el avance automático
    css_back_button: 'left_nav', // css, clase del botón regresar
    css_next_button: 'right_nav', // css, clase del botón siguiente
    timeout: 4000 // tiempo de espera entre cada slide
  }, settings);

  var element = this;

  var start = true;
  var divs_array = [];
  var infos_array = [];
  var current_frame = 0;
  var slide_selected = -1;
  var control;
  var t;
  var all_content = $(element).find('div.slides ul li').length;
  
  var show_info = false;
  var height_info = $(element).find('div.info').height();

  var back_button = $('<div/>').addClass(options.css_back_button).append('<a href="javascript:;"></a>');
  var next_button = $('<div/>').addClass(options.css_next_button).append('<a href="javascript:;"></a>');
  
  var reel = true;
  var hash = location.hash.replace(/^#/,'');
 	var item;
  
  $(element).find('div.slides').css({
    'position':'absolute',
    'top':0,
    'left':0,
    'width':options.item_width+'px',
    'height':options.item_height+'px',
    'overflow':'hidden'
  });
  $(element).find('div.slides ul').css({
    'width':(options.item_width*all_content)+'px',
    'height':options.item_height+'px',
    'padding':0,
    'margin':0,
    'list-style':'none',
    'white-space':'nowrap'
  });
  $(element).find('div.slides ul li').css({
    'width':options.item_width+'px',
    'height':options.item_height+'px',
    'float':'left'
  });
  $(element).find('div.slides ul li div').css({
    'border':'none',
    'display':'inline'
  });

  if(options.activate_navigator == true) {
    $(element).append($(back_button));
    $(element).append($(next_button));
  }

  for(var i=0; i<all_content; i++) {
    divs_array.push({
      'left':options.item_width*(i),
      'hashtag':$(element).find('div.slides ul li:eq('+i+')').attr('alt')
    });
    $(element).find('div.slides ul li:eq('+i+')').removeAttr('alt');
    infos_array.push({
      'info':$(element).find('div.slides ul li:eq('+i+') div').attr('alt')
    });
    $(element).find('div.slides ul li:eq('+i+') div').removeAttr('alt')
  }

  $(element).find('div.left_nav a').bind('click', function() {
  	reel = false;
    clearTimeout(t);
    animateItem('back');
  });

  $(element).find('div.right_nav a').bind('click', function() {
  	reel = false;
    clearTimeout(t);
    animateItem('next');
  });

  function engineGallery() {
    animateItem('next');
    t = setTimeout(engineGallery, options.timeout);
  }

  function animateItem(go) {
  	control = go;
    if(start == false) {
      if(control == 'next') {
        current_frame = (current_frame < (all_content - 1))? (current_frame + 1) : 0;
      }else if(control == 'back') {
        current_frame = (current_frame > 0)? (current_frame - 1) : (all_content - 1);
      }
      showSlide(current_frame);
    }else {
      showSlide(current_frame);
      start = false;
    }
  }
  
  function showSlide(slide) {
  	if(show_info == true) {
    	$(element).find('div.info').animate({
        bottom: -1 * height_info + 'px'
    	}, 'slow');
    	show_info = false;
    }
    if(start == false && ((control == 'next' && slide == 0) || (control == 'back' && slide == (all_content - 1)))) {
    	$(element).find('div.slides').animate({opacity: 0}, 400).animate({
        scrollLeft: divs_array[slide]['left'] + 'px'
    	}, 'fast', function() {
    		$(element).find('div.info').html(infos_array[slide]['info']);
      	if(show_info == false) {
    	  	$(element).find('div.info').animate({
          	bottom: 0
    	  	}, 'slow');
    	  	show_info = true;
      	}
    	}).animate({
    		opacity: 1
      }, 400);
    }else {
    	try {
    	$(element).find('div.slides').animate({
        scrollLeft: divs_array[slide]['left'] + 'px'
    	}, 'slow', function() {
    		$(element).find('div.info').html(infos_array[slide]['info']);
      	if(show_info == false) {
    	  	$(element).find('div.info').animate({
          	bottom: 0
    	  	}, 'slow');
    	  	show_info = true;
      	}
    	});
    	}catch(e) {
    		console.log('no es un error');
    	}
    }
  }
  
  if(options.autoplay == false) {
  	reel = false;
    clearTimeout(t);
    animateItem('next');
  }
  
  $(window).hashchange(function() {
  	hash = location.hash.replace(/^#/,'');
  	item = divs_array.length;
  	for(var j=0; j<item; j++) {
  		if(divs_array[j]['hashtag'] == hash) {
  			slide_selected = j;
  		}
  	}
  	if(slide_selected >= 0) {
  		current_frame = slide_selected;
  		start = reel = false;
    	clearTimeout(t);
    	showSlide(current_frame);
  	}
  });
  
  $(window).bind({
  	load: function() {
  		if(hash != '') {
  			item = divs_array.length;
  			for(var j=0; j<item; j++) {
  				if(divs_array[j]['hashtag'] == hash) {
  					slide_selected = j;
  				}
  			}
  			if(slide_selected >= 0) {
  				current_frame = slide_selected;
  				start = reel = false;
    			clearTimeout(t);
    			showSlide(current_frame);
  			}else {
  				engineGallery();
  			}
  		}else if(reel) {
  			engineGallery();
  		}
  	},
  	focus: function() {
  		if(reel) {
  			engineGallery();
  		}
  	},
  	blur: function() {
  		if(reel) {
  			clearTimeout(t);
  		}
  	}
  });

};
