//--------------FUNCTIONS--------------//

/**
  <p>A way to find a classname by supplying a prefix piece of a classname.
  This is used as a simple way to both have a selector and a meta string to the selector</p>

  @author <a href="dilltree.com">Jeremy Dill</a>
  @param {Object} obj The html dom object or jquery object that has class applied
  @param {String} cl The class begins with this.. example to find "lnk_test", set this param to "lnk_"
  @param {Bool} rip If true, remove the cl piece of the classname and return the remainder
*/



(function($){

$.es = $.es || {};

$('.a_email').mailto();

// AS A FUNCTION
$.findClass = function (obj,cl,rip) {
	var jobj=$(obj);
	if(!jobj.attr('class')) return "";
	var list=jobj.attr('class').split(" ");
	for(i = 0; i < list.length; i++){
 		if(list[i].indexOf(cl) >= 0) {
			if (rip) return list[i].substr(cl.length);
			else  return list[i];
		}
	};
	return "";
};

$.es = {
  Timer : function() {
    this.delay = 3000;
    this.timerId = null;
    this.running = false;
    this.tick = null;
    this.start = function() {
      if (this.running) this.stop();
      if (this.tick) this.timerId = setTimeout(this.tick, this.delay);
      this.running = true;
    }
    this.stop = function() {
      if(this.timerId) clearTimeout(this.timerId);
      this.running = false;
    }
  },

  vidRegex : /(?:\.mp4|\.mov|\.ogg|\.mkv|\.flv|\.swf|\.f4v)$/i,

  isVideo : function(url) {
    return this.vidRegex.test($.trim(url));
  }
}

/* Home Billboard */
$.es.hb = function(slides, settings) {
  opts = $.extend({
    'nav':false
  }, settings);

  var self = this;
  self.activeId = -1;
  self.timerDisabled = false;

  self.navClick = function(e) {
    var clicked = parseInt(this.id.substring(4));
    if (clicked == self.activeId) return;

    self.timer.stop();
    self.getSlide({"id":clicked});
  }

  self.getSlide = function(e) {
    if (opts.nav) self.nav.find('a.active').removeClass('active').find('#nav_'+e.id).addClass('active');

    //Stop player
    if (typeof(swfobject) != 'undefined') if (self.swf && typeof(self.swf.sendEvent) == 'function') self.swf.sendEvent('stop');

    if (!$.es.isVideo(slides[e.id].src)) {
      // IS IMAGE
      if(!self.imgs[e.id]) {
        self.loader.load(slides[e.id].src, e.id);
      } else {
        self.showSlide(self.imgs[e.id]);
      }
    } else {
      // IS VIDEO
      if (typeof(swfobject) != 'undefined') {
        if(self.vids[e.id]) { $(self.vids[e.id]).remove(); }
        var id = 'video_'+e.id;
        self.vids[e.id] = $('<div id="vid_'+ e.id +'"><div id="'+id+'" width="940" height="400"></div></div>')[0];
        self.wrap.append(self.vids[e.id]);

        var attr = { data:"/_swf/player.swf", height:"400", width:"940", id:id, name:id };
        var par = { menu:false, wmode:'transparent', allowfullscreen:false, allowscriptaccess:'always', flashvars:"file="+slides[clicked].src+"&controlbar=none&autostart=true" };
        self.swf = swfobject.createSWF(attr, par, id);
        self.activeId = e.id;
      }
    }

    if (e.tick) {
      self.timer.delay = (slides[e.id].time > 0) ? slides[e.id].time * 1000 : 5000;
      self.timer.start();
    } else {
      self.timer.stop();
    }
  }

  self.showSlide = function(obj) {
    var visible = self.wrap.find('div:visible').not(obj);
    var clicked = $(obj);

    if (visible.index() > clicked.index()) {
      clicked.stop(1,1).show().animate({opacity:1},10,function() {
        visible.stop(1).animate({opacity:0},'medium',function() { $(this).hide(); });
      });
    } else {
      clicked.stop(1,1).show().animate({opacity:1},'medium',function() {
        visible.stop(1).animate({opacity:0},10,function() { $(this).hide(); });
      });
    }
    self.activeId = obj.id.substring(4);
    if (slides[self.activeId].url) clicked.css('cursor','pointer');
  }

  self.loader = new function() {
    this.timer = new $.es.Timer();
    this.timer.delay = 200;
    this.timer.tick = function() {
      self.loaderImg.show();
    }
    this.load = function(url,id) {
      var img = new Image();
      img.onload = function() {
        self.loader.stop();
        // this.useMap = "#map_"+(id+1); //img map
        self.imgs[id] = $('<div id="img_'+id+'">').hide().css('opacity',0).append($(this))[0];
        self.wrap.append(self.imgs[id]);
        self.showSlide(self.imgs[id]);
      }
      img.onerror = function() {
        self.loader.stop();
        self.activeId = id;
        self.wrap.find('div:visible').animate({opacity:0},'medium',function() { $(this).hide(); });
      }
      this.timer.start();
      img.src = url;
    }
    this.stop = function() {
      self.loader.timer.stop();
      self.loaderImg.hide();
    }
  }

  self.getNextSlide = function() {
    if (self.activeId < slides.length - 1) var next = (parseInt(self.activeId)+1);
    else var next = 0;
    self.getSlide({'id':next,'tick':1});
  }

  self.getPrevSlide = function() {
    if (self.activeId > 0) var prev = (parseInt(self.activeId)-1);
    else var prev = (slides.length-1);
    self.getSlide({'id':prev});
  }

  self.setTimer = function() {
    self.timer = new $.es.Timer();
    self.timer.tick = function() {
      self.getNextSlide();
      self.timer.stop();
      self.timer.start();
    }
  }

  self.init = function() {
    if (opts.nav) {
      var navHtml = '<ul>';
      for (var x in slides) {
        navHtml += '<li><a id="nav_'+ x +'"> '+ (parseInt(x)+1) +' </a></li>';
      }
      navHtml += '</ul>';
    }

    self.imgs = [];
    self.vids = [];
    self.wrap = $('#stage_wrap').click(function() {
      if (slides[self.activeId].url) {
        window.location = slides[self.activeId].url;
      }
    });
    self.loaderImg = $('#loader');

    if (opts.nav) {
      self.nav = $(opts.nav).html(navHtml).find('ul li a').click(this.navClick).end();
    }

    $('.bb_arrow').fadeIn();
    $('.bb_left').click(function() {
      self.timerDisabled = true;
      self.getPrevSlide();
    });
    $('.bb_right').click(function() {
      self.timerDisabled = true;
      self.getNextSlide();
    });

    self.setTimer();
    self.getSlide({'id':0,'tick':1});
  }

  self.init();
}

})(jQuery);
