/**

 * Sexy LightBox - for jQuery 1.3.2

 * @name      sexylightbox.v2.3.js

 * @author    Eduardo D. Sada - http://www.coders.me/web-html-js-css/javascript/sexy-lightbox-2

 * @version   2.3.4

 * @date      10-Nov-2009

 * @copyright (c) 2009 Eduardo D. Sada (www.coders.me)

 * @license   MIT - http://es.wikipedia.org/wiki/Licencia_MIT

 * @example   http://www.coders.me/ejemplos/sexy-lightbox-2/

*/



jQuery.bind = function(object, method){

  var args = Array.prototype.slice.call(arguments, 2);  

  return function() {

    var args2 = [this].concat(args, jQuery.makeArray( arguments ));  

    return method.apply(object, args2);  

  };  

};  



(function($) {



  SexyLightbox = {

    getOptions: function() {

      return {

        name          : 'SLB',

        zIndex        : 32000,

        color         : 'blanco',

        find          : 'sexylightbox',

        dir           : 'themes/coldecon/images/sexyimages',

        emergefrom    : 'top',

        background    : 'bgSexy.png',

        backgroundIE  : 'bgSexy.gif',

        buttons       : 'buttons.png',

        displayed     : 0,

        showDuration  : 200,

        closeDuration : 400,

        moveDuration  : 1000,

        moveEffect    : 'easeInOutBack',

        resizeDuration: 1000,

        resizeEffect  : 'easeInOutBack',

        shake         : {

                          distance   : 10,

                          duration   : 100,

                          transition : 'easeInOutBack',

                          loops      : 2

                        },

        BoxStyles     : { 'width' : 486, 'height': 320 },

        Skin          : {

                          'white' : { 'hexcolor': '#FFFFFF', 'captionColor': '#000000', 'background-color': '#000000', 'opacity': 0.6 },

                          'black' : { 'hexcolor': '#000000', 'captionColor': '#FFFFFF', 'background-color': '#000000', 'opacity': 0.6 },

                          'blanco': { 'hexcolor': '#FFFFFF', 'captionColor': '#000000', 'background-color': '#000000', 'opacity': 0.6 },

                          'negro' : { 'hexcolor': '#000000', 'captionColor': '#FFFFFF', 'background-color': '#000000', 'opacity': 0.6 }

                        }

      };

    },



    overlay: {

      create: function(options) {

        this.options = options;

        this.element = $('<div id="'+new Date().getTime()+'"></div>');

        this.element.css($.extend({}, {

          'position'  : 'absolute',

          'top'       : 0,

          'left'      : 0,

          'opacity'   : 0,

          'display'   : 'none',

          'z-index'   : this.options.zIndex

        }, this.options.style));

        

        this.element.bind('click', $.bind(this, function(obj, event) {

          if (this.options.hideOnClick) {

              if (this.options.callback) {

                this.options.callback();

              } else {

                this.hide();

              }

          }

          event.preventDefault();

        }));

        

        this.hidden = true;

        this.inject();

      },



      inject: function() {

        this.target = $(document.body);

        this.target.append(this.element);



        //if((Browser.Engine.trident4 || (Browser.Engine.gecko && !Browser.Engine.gecko19 && Browser.Platform.mac)))

        if($.browser.msie && $.browser.version=="6.0")

        // No tengo tiempo para agregar la detecci�n del OS que deber�a

        // haber estado integrada en jQuery, pero que el est�pido de su creador no puso

        // Me cago en John Resig

        {

          var zIndex = parseInt(this.element.css('zIndex'));

          if (!zIndex)

          {

            zIndex = 1;

            var pos = this.element.css('position');

            if (pos == 'static' || !pos)

            {

              this.element.css({'position': 'relative'});

            }

            this.element.css({'zIndex': zIndex});

          }

          // Diossss por diosss, pongan funciones �tiles en jQuery,

          // no todo es Selectores! la puta madre, lo que hay que hacer

          // para detectar si una variable est� definida:

          zIndex = (!!(this.options.zIndex || this.options.zIndex === 0) && zIndex > this.options.zIndex) ? this.options.zIndex : zIndex - 1;

          if (zIndex < 0)

          {

            zIndex = 1;

          }

          this.shim = $('<iframe id="IF_'+new Date().getTime()+'" scrolling="no" frameborder=0 src=""></div>');

          this.shim.css({

            zIndex    : zIndex,

            position  : 'absolute',

            top       : 0,

            left      : 0,

            border    : 'none',

            opacity   : 0

          });

          this.shim.insertAfter(this.element);

        }



      },



      resize: function(x, y) {

        this.element.css({ 'height': 0, 'width': 0 });

        if (this.shim) this.shim.css({ 'height': 0, 'width': 0 });



        var win = { x: $(document).width(), y: $(document).height() };

        var chromebugfix = $.browser.safari ? (win.x - 25 < document.body.clientWidth ? document.body.clientWidth : win.x) : win.x;



        this.element.css({

          width  : x ? x : chromebugfix, //* chrome fix

          height : y ? y : win.y

        });



        if (this.shim)

        {

          this.shim.css({ 'height': 0, 'width': 0 });

          this.shim.css({

            width  : x ? x : chromebugfix, //* chrome fix

            height : y ? y : win.y

          });

        }

        return this;

      },



      show: function() {

        if (!this.hidden) return this;

        if (this.transition) this.transition.stop();

        this.target.bind('resize', $.bind(this, this.resize));

        this.resize();

        if (this.shim) this.shim.css({'display': 'block'});

        this.hidden = false;





        this.transition = this.element.fadeIn(this.options.showDuration, $.bind(this, function(){

          this.element.trigger('show');

        }));

        

        return this;

      },



      hide: function() {

        if (this.hidden) return this;

        if (this.transition) this.transition.stop();

        this.target.unbind('resize');

        if (this.shim) this.shim.css({'display': 'none'});

        this.hidden = true;



        this.transition = this.element.fadeOut(this.options.closeDuration, $.bind(this, function(){

          this.element.trigger('hide');

          this.element.css({ 'height': 0, 'width': 0 });

        }));



        return this;

      }



    },



    backwardcompatibility: function(option) {

      this.options.dir = option.imagesdir || option.path || option.folder || option.dir;

      this.options.OverlayStyles = $.extend(this.options.Skin[this.options.color], this.options.OverlayStyles || {});

    },



    preloadimage: function(url) {

      img     = new Image();

      img.src = url;

    },



    initialize: function(options) {

      this.options = $.extend(this.getOptions(), options);

      this.backwardcompatibility(this.options);



      var strBG = this.options.dir+'/'+this.options.color+'/'+((((window.XMLHttpRequest == undefined) && (ActiveXObject != undefined)))?this.options.backgroundIE:this.options.background);

      var name  = this.options.name;

      

      this.preloadimage(strBG);

      this.preloadimage(this.options.dir+'/'+this.options.color+'/'+this.options.buttons);



      this.overlay.create({

        style       : this.options.Skin[this.options.color],

        hideOnClick : true,

        zIndex      : this.options.zIndex-1,

        callback    : $.bind(this, this.close),

        showDuration  : this.options.showDuration,

        showEffect    : this.options.showEffect,

        closeDuration : this.options.closeDuration,

        closeEffect   : this.options.closeEffect

      });



      this.lightbox = {};



			$('body').append('<div id="'+name+'-Wrapper"><div id="'+name+'-Background"></div><div id="'+name+'-Contenedor"><div id="'+name+'-Top" style="background-image: url('+strBG+')"><a id="'+name+'-CloseButton" href="#">&nbsp;</a><div id="'+name+'-TopLeft" style="background-image: url('+strBG+')"></div></div><div id="'+name+'-Contenido"></div><div id="'+name+'-Bottom" style="background-image: url('+strBG+')"><div id="'+name+'-BottomRight" style="background-image: url('+strBG+')"><div id="'+name+'-Navegador"><strong id="'+name+'-Caption"></strong></div></div></div></div></div>');

      

      this.Wrapper      = $('#'+name+'-Wrapper');

      this.Background   = $('#'+name+'-Background');

      this.Contenedor   = $('#'+name+'-Contenedor');

      this.Top          = $('#'+name+'-Top');

      this.CloseButton  = $('#'+name+'-CloseButton');

      this.Contenido    = $('#'+name+'-Contenido');

      this.bb           = $('#'+name+'-Bottom');

      this.innerbb      = $('#'+name+'-BottomRight');

      this.Nav          = $('#'+name+'-Navegador');

      this.Descripcion  = $('#'+name+'-Caption');



      this.Wrapper.css({

        'z-index'   : this.options.zIndex,

        'display'   : 'none'

      }).hide();

      

      this.Background.css({

        'z-index'   : this.options.zIndex + 1

      });

      

      this.Contenedor.css({

        'position'  : 'absolute',

        'width'     : this.options.BoxStyles['width'],

        'z-index'   : this.options.zIndex + 2

      });

      

      this.Contenido.css({

        'height'            : this.options.BoxStyles['height'],

        'border-left-color' : this.options.Skin[this.options.color].hexcolor,

        'border-right-color': this.options.Skin[this.options.color].hexcolor

      });

      

      this.CloseButton.css({

        'background-image'  : 'url('+this.options.dir+'/'+this.options.color+'/'+this.options.buttons+')'

      });

      

      this.Nav.css({

        'color'     : this.options.Skin[this.options.color].captionColor

      });



      this.Descripcion.css({

        'color'     : this.options.Skin[this.options.color].captionColor

      });





          

      /**

       * AGREGAMOS LOS EVENTOS

       ************************/



      this.CloseButton.bind('click', $.bind(this, function(){

        this.close();

        return false;

      }));

      

      $(document).bind('keydown', $.bind(this, function(obj, event){

        if (this.options.displayed == 1) {

          if (event.keyCode == 27){

            this.close();

          }



          if (event.keyCode == 37){

            if (this.prev) {

              this.prev.trigger('click', event);

            }

          }



          if (event.keyCode == 39){

            if (this.next) {

              this.next.trigger('click', event);

            }

          }

        }

      }));



      $(window).bind('resize', $.bind(this, function() {

        if(this.options.displayed == 1) {

          this.replaceBox();

          this.overlay.resize();

        }

      }));



      $(window).bind('scroll', $.bind(this, function() {

        if(this.options.displayed == 1) {

          this.replaceBox();

        }          

      }));



      this.refresh();



    },

    

    hook: function(enlace) {

      enlace = $(enlace);

      enlace.blur();

      this.show((enlace.attr("title") || enlace.attr("name") || ""), enlace.attr("href"), (enlace.attr('rel') || false));

    },

    

    close: function() {

      this.animate(0);

    },

    

    refresh: function() {

      var self = this;

      this.anchors = [];



      $("a, area").each(function() {

        if ($(this).attr('rel') && new RegExp("^"+self.options.find).test($(this).attr('rel'))){

          $(this).click(function(event) {

            event.preventDefault();

            self.hook(this);

          });



          if (!($(this).attr('id')==self.options.name+"-Left" || $(this).attr('id')==self.options.name+"-Right")) {

            self.anchors.push(this);

          }

        }

      });

    },

    

    animate: function(option) {

      if(this.options.displayed == 0 && option != 0 || option == 1)

      {

        this.overlay.show();

        this.options.displayed = 1;

        this.Wrapper.css({'display': 'block'});

      }

      else //Cerrar el Lightbox

      {

        this.Wrapper.css({

          'display' : 'none',

          'top'     : -(this.options.BoxStyles['height']+280)

        }).hide();



        this.overlay.hide();

        this.overlay.element.bind('hide', $.bind(this, function(){

          if (this.options.displayed) {

            if (this.Image) this.Image.remove();

            this.options.displayed = 0;

          }

        }));

      }

    },

    

    /*

    Function: replaceBox

    @description  Cambiar de tama�o y posicionar el lightbox en el centro de la pantalla

    */

    replaceBox: function(data) {

      var size   = { x: $(window).width(), y: $(window).height() };

      var scroll = { x: $(window).scrollLeft(), y: $(window).scrollTop() };

      var width  = this.options.BoxStyles['width'];

      var height = this.options.BoxStyles['height'];

      

      if (this.options.displayed == 0)

      {

        var x = 0;

        var y = 0;

        

        // vertically center

        y = scroll.x + ((size.x - width) / 2);



        if (this.options.emergefrom == "bottom")

        {

          x = (scroll.y + size.y + 80);

        }

        else // top

        {

          x = (scroll.y - height) - 80;

        }

      

        this.Wrapper.css({

          'display' : 'none',

          'top'     : x,

          'left'    : y

        });

        this.Contenedor.css({

          'width'   : width

        });

        this.Contenido.css({

          'height'  : height - 80

        });

      }



      data = $.extend({}, {

        'width'  : this.lightbox.width,

        'height' : this.lightbox.height,

        'resize' : 0

      }, data);



      if (this.MoveBox) this.MoveBox.stop();



      this.MoveBox = this.Wrapper.animate({

        'left': (scroll.x + ((size.x - data.width) / 2)),

        'top' : (scroll.y + (size.y - (data.height + (this.navigator ? 80 : 48))) / 2)

      }, {

        duration  : this.options.moveDuration,

        easing    : this.options.moveEffect

      });



      if (data.resize) {

        if (this.ResizeBox2) this.ResizeBox2.stop();

        this.ResizeBox2 = this.Contenido.animate({

          height    : data.height

        }, {

          duration  : this.options.resizeDuration,

          easing    : this.options.resizeEffect

        });



        if (this.ResizeBox) this.ResizeBox.stop();



        this.ResizeBox = this.Contenedor.animate({

          width     : data.width

        }, {

          duration  : this.options.resizeDuration,

          easing    : this.options.resizeEffect,

          complete  : function(){

            $(this).trigger('complete');

          }

        });

      }



    },

    

    getInfo: function (image, id) {

      image=$(image);

      IEuta = $('<a id="'+this.options.name+'-'+id+'" title="'+image.attr('title')+'" rel="'+image.attr('rel')+'">&nbsp;</a>');

      IEuta.css({ 'background-image' : 'url('+this.options.dir+'/'+this.options.color+'/'+this.options.buttons+')' });

      IEuta.attr('href', image.attr('href')); //IE fix

      return IEuta;

    },

    

    display: function(url, title, force) {

      return this.show(title, url, '', force);

    },

    

    show: function(caption, url, rel, force) {

      this.showLoading();



      var baseURL     = url.match(/(.+)?/)[1] || url;

      var imageURL    = /\.(jpe?g|png|gif|bmp)/gi;

      var queryString = url.match(/\?(.+)/);

      if (queryString) queryString = queryString[1];

      var params      = this.parseQuery( queryString );



      if (this.ResizeBox) this.ResizeBox.unbind('complete'); //fix for jQuery



      params = $.extend({}, {

        'width'     : 0,

        'height'    : 0,

        'modal'     : 0,

        'background': '',

        'title'     : caption

      }, params || {});



      params['width']   = parseInt(params['width']);

      params['height']  = parseInt(params['height']);

      params['modal']   = parseInt(params['modal']);



      this.overlay.options.hideOnClick = !params['modal'];

      this.lightbox  = $.extend({}, params, { 'width' : params['width'] + 14 });

      this.navigator = this.lightbox.title ? true : false;



      if ( force=='image' || baseURL.match(imageURL) )

      {

          this.img = new Image();

          this.img.onload = $.bind(this, function(){

              this.img.onload=function(){};

              if (!params['width'])

              {

                var objsize = this.calculate(this.img.width, this.img.height);

                params['width']   = objsize.x;

                params['height']  = objsize.y;

                this.lightbox.width = params['width'] + 14;

              }



              this.lightbox.height = params['height'] - (this.navigator ? 21 : 35);

              

              this.replaceBox({ 'resize' : 1 });

              

              // Mostrar la imagen, solo cuando la animacion de resizado se ha completado

              this.ResizeBox.bind('complete', $.bind(this, function(){

                this.showImage(this.img.src, params);

              }));

          });



          this.img.onerror = $.bind(this, function() {

            this.show('', this.options.dir+'/'+this.options.color+'/404.png', this.options.find);

          });



          this.img.src = url;

          

      } else { //code to show html pages



          this.lightbox.height = params['height']+($.browser.opera?2:0);

          this.replaceBox({'resize' : 1});

        

          if (url.indexOf('TB_inline') != -1) //INLINE ID

          {

            this.ResizeBox.bind('complete', $.bind(this, function(){

              this.showContent($('#'+params['inlineId']).html(), this.lightbox);

            }));

          }

          else if(url.indexOf('TB_iframe') != -1) //IFRAME

          {

            var urlNoQuery = url.split('TB_');

            this.ResizeBox.bind('complete', $.bind(this, function(){

              this.showIframe(urlNoQuery[0], this.lightbox);

            }));

          }

          else //AJAX

          {

            this.ResizeBox.bind('complete', $.bind(this, function(){

              $.ajax({

                url: url,

                type: "GET",

                cache: false,

                error: $.bind(this, function(){this.show('', this.options.dir+'/'+this.options.color+'/404html.png', this.options.find)}),

                success: $.bind(this, this.handlerFunc)

              });

            }));

          }



      }

      



      this.next = false;

      this.prev = false;

       //Si la imagen pertenece a un grupo

      if (rel.length > this.options.find.length)

      {

          this.navigator = true;

          var foundSelf  = false;

          var exit       = false;

          var self       = this;



          $.each(this.anchors, function(index){

            if ($(this).attr('rel') == rel && !exit) {

              if ($(this).attr('href') == url) {

                  foundSelf = true;

              } else {

                  if (foundSelf) {

                      self.next = self.getInfo(this, "Right");

                       //stop searching

                      exit = true;

                  } else {

                      self.prev = self.getInfo(this, "Left");

                  }

              }

            }

          });

      }



      this.addButtons();

      this.showNavBar(caption);

      this.animate(1);

    },// end function



    calculate: function(x, y) {

      // Resizing large images

      var maxx = $(window).width() - 100;

      var maxy = $(window).height() - 100;



      if (x > maxx)

      {

        y = y * (maxx / x);

        x = maxx;

        if (y > maxy)

        {

          x = x * (maxy / y);

          y = maxy;

        }

      }

      else if (y > maxy)

      {

        x = x * (maxy / y);

        y = maxy;

        if (x > maxx)

        {

          y = y * (maxx / x);

          x = maxx;

        }

      }

      // End Resizing

      return {x: parseInt(x), y: parseInt(y)};

    },



    handlerFunc: function(obj, html) {

      this.showContent(html, this.lightbox);

    },



    addButtons: function(){

      if(this.prev) this.prev.bind('click', $.bind(this, function(obj, event) {event.preventDefault();this.hook(this.prev);}));

      if(this.next) this.next.bind('click', $.bind(this, function(obj, event) {event.preventDefault();this.hook(this.next);}));

    },



    showNavBar: function() {

      if (this.navigator)

      {

        this.bb.addClass("SLB-bbnav");

        this.Nav.empty();

        this.innerbb.empty();

        this.innerbb.append(this.Nav);

        this.Descripcion.html(this.lightbox.title);

        this.Nav.append(this.prev);

        this.Nav.append(this.next);

        this.Nav.append(this.Descripcion);

      }

      else

      {

        this.bb.removeClass("SLB-bbnav");

        this.innerbb.empty();

      }

    },



    showImage: function(image, size) {

      this.Background.empty().removeAttr('style').css({'width':'auto', 'height':'auto'}).append('<img id="'+this.options.name+'-Image"/>');

      this.Image = $('#'+this.options.name+'-Image');

      this.Image.attr('src', image).css({

        'width'  : size['width'],

        'height' : size['height']

      });

    

      this.Contenedor.css({

        'background' : 'none'

      });



      this.Contenido.empty().css({

          'background-color': 'transparent',

          'padding'         : '0px',

          'width'           : 'auto'

      });

    },



    showContent: function(html, size) {

      this.Background.empty().css({

        'width'            : size['width']-14,

        'height'           : size['height']+35,

        'background-color' : size['background'] || '#ffffff'

      });

      

      this.Contenido.empty().css({

        'width'             : size['width']-14,

        'background-color'  : size['background'] || '#ffffff'

      }).append('<div id="'+this.options.name+'-Image"/>');



      this.Image = $('#'+this.options.name+'-Image');

      this.Image.css({

        'width'       : size['width']-14,

        'height'      : size['height'],

        'overflow'    : 'auto',

        'background'  : size['height'] || '#ffffff'

      }).append(html);



      this.Contenedor.css({

        'background': 'none'

      });

    },



    showIframe: function(src, size, bg) {

      this.Background.empty().css({

        'width'           : size['width']-14,

        'height'          : size['height']+35,

        'background-color': size['background'] || '#ffffff'

      });



      var id = "if_"+new Date().getTime()+"-Image";



      this.Contenido.empty().css({

        'width'             : size['width']-14,

        'background-color'  : size['background'] || '#ffffff',

        'padding'           : '0px'

      }).append('<iframe id="'+id+'" frameborder="0"></iframe>');

      

      this.Image = $('#'+id);

      this.Image.css({

          'width'       : size['width']-14,

          'height'      : size['height'],

          'background'  : size['background'] || '#ffffff'

      }).attr('src', src);



      this.Contenedor.css({

        'background' : 'none'

      });

    },



    showLoading: function() {

      this.Background.empty().removeAttr('style').css({'width':'auto', 'height':'auto'});

      this.Contenido.empty().css({

        'background-color'  : 'transparent',

        'padding'           : '0px',

        'width'             : 'auto'

      });



      this.Contenedor.css({

        'background' : 'url('+this.options.dir+'/'+this.options.color+'/loading.gif) no-repeat 50% 50%'

      });



      this.Contenido.empty().css({

          'background-color': 'transparent',

          'padding'         : '0px',

          'width'           : 'auto'

      });



      this.replaceBox($.extend(this.options.BoxStyles, {'resize' : 1}));

    },

  

    parseQuery: function (query) {

      if( !query )

        return {};

      var params = {};



      var pairs = query.split(/[;&]/);

      for ( var i = 0; i < pairs.length; i++ ) {

        var pair = pairs[i].split('=');

        if ( !pair || pair.length != 2 )

          continue;

        params[unescape(pair[0])] = unescape(pair[1]).replace(/\+/g, ' ');

       }

       return params;

    },



    shake: function() {

      var d=this.options.shake.distance;

      var l=this.Wrapper.position();

      l=l.left;

      for(x=0;x<this.options.shake.loops;x++) {

       this.Wrapper.animate({left: l+d}, this.options.shake.duration, this.options.shake.transition)

       .animate({left: l-d}, this.options.shake.duration, this.options.shake.transition);

      }

       this.Wrapper.animate({"left": l+d}, this.options.shake.duration, this.options.shake.transition)

       .animate({"left": l}, this.options.shake.duration, this.options.shake.transition);

    }

    

  }

})(jQuery);