/**
 * This file includes:
 *  =jQuery.fullBg
 *  =jQuery.ScrollTo
 *  =jQuery.SerialScroll
 *  =zoombox.js
 *  =jquery.jshowoff.min
 *  =ColorBox v1.3.6
 *
 *

/**
 * =jQuery.fullBg
 * Version 1.0
 * Copyright (c) 2010 c.bavota - http://bavotasan.com
 * Dual licensed under MIT and GPL.
 * Date: 02/23/2010
**/
(function($) {
  $.fn.fullBg = function(){
    var bgImg = $(this);		
 
    function resizeImg() {
      var imgwidth = bgImg.width();
      var imgheight = bgImg.height();
 
      var winwidth = $(window).width();
      var winheight = $(window).height();
 
      var widthratio = winwidth / imgwidth;
      var heightratio = winheight / imgheight;
 
      var widthdiff = heightratio * imgwidth;
      var heightdiff = widthratio * imgheight;
 
      if(heightdiff>winheight) {
        bgImg.css({
          width: winwidth+'px',
          height: heightdiff+'px'
        });
      } else {
        bgImg.css({
          width: widthdiff+'px',
          height: winheight+'px'
        });		
      }
    } 
    resizeImg();
    $(window).resize(function() {
      resizeImg();
    }); 
  };
})(jQuery)


/**
 * =jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 5/25/2009
 * @author Ariel Flesler
 * @version 1.4.2
 *
 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
 */
;
(function(d){
    var k=d.scrollTo=function(a,i,e){
        d(window).scrollTo(a,i,e)
        };
        
    k.defaults={
        axis:'xy',
        duration:parseFloat(d.fn.jquery)>=1.3?0:1
        };
        
    k.window=function(a){
        return d(window)._scrollable()
        };
        
    d.fn._scrollable=function(){
        return this.map(function(){
            var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;
            if(!i)return a;
            var e=(a.contentWindow||a).document||a.ownerDocument||a;
            return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement
            })
        };
        
    d.fn.scrollTo=function(n,j,b){
        if(typeof j=='object'){
            b=j;
            j=0
            }
            if(typeof b=='function')b={
            onAfter:b
        };
        
        if(n=='max')n=9e9;
        b=d.extend({},k.defaults,b);
        j=j||b.speed||b.duration;
        b.queue=b.queue&&b.axis.length>1;
        if(b.queue)j/=2;
        b.offset=p(b.offset);
        b.over=p(b.over);
        return this._scrollable().each(function(){
            var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');
            switch(typeof f){
                case'number':case'string':
                    if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){
                    f=p(f);
                    break
                }
                f=d(f,this);
                case'object':
                    if(f.is||f.style)s=(f=d(f)).offset()
                    }
                    d.each(b.axis.split(''),function(a,i){
                var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);
                if(s){
                    g[c]=s[h]+(u?0:l-r.offset()[h]);
                    if(b.margin){
                        g[c]-=parseInt(f.css('margin'+e))||0;
                        g[c]-=parseInt(f.css('border'+e+'Width'))||0
                        }
                        g[c]+=b.offset[h]||0;
                    if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]
                        }else{
                    var o=f[h];
                    g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o
                    }
                    if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);
                if(!a&&b.queue){
                    if(l!=g[c])t(b.onAfterFirst);
                    delete g[c]
                }
            });
        t(b.onAfter);
            function t(a){
            r.animate(g,j,b.easing,a&&function(){
                a.call(this,n,b)
                })
            }
        }).end()
    };
    
k.max=function(a,i){
    var e=i=='x'?'Width':'Height',h='scroll'+e;
    if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();
    var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;
    return Math.max(l[h],m[h])-Math.min(l[c],m[c])
    };
    
function p(a){
    return typeof a=='object'?a:{
        top:a,
        left:a
    }
}
})(jQuery);

/*
 * =jQuery.SerialScroll - Animated scrolling of series
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 06/14/2009
 * @author Ariel Flesler
 * @version 1.2.2
 * http://flesler.blogspot.com/2008/02/jqueryserialscroll.html
 */
;
(function(a){
    var b=a.serialScroll=function(c){
        return a(window).serialScroll(c)
        };
        
    b.defaults={
        duration:1e3,
        axis:"x",
        event:"click",
        start:0,
        step:1,
        lock:!0,
        cycle:!0,
        constant:!0
        };
        
    a.fn.serialScroll=function(c){
        return this.each(function(){
            var t=a.extend({},b.defaults,c),s=t.event,i=t.step,r=t.lazy,e=t.target?this:document,u=a(t.target||this,e),p=u[0],m=t.items,h=t.start,g=t.interval,k=t.navigation,l;
            if(!r){
                m=d()
                }
                if(t.force){
                f({},h)
                }
                a(t.prev||[],e).bind(s,-i,q);
            a(t.next||[],e).bind(s,i,q);
            if(!p.ssbound){
                u.bind("prev.serialScroll",-i,q).bind("next.serialScroll",i,q).bind("goto.serialScroll",f)
                }
                if(g){
                u.bind("start.serialScroll",function(v){
                    if(!g){
                        o();
                        g=!0;
                        n()
                        }
                    }).bind("stop.serialScroll",function(){
                o();
                g=!1
                })
            }
            u.bind("notify.serialScroll",function(x,w){
            var v=j(w);
            if(v>-1){
                h=v
                }
            });
        p.ssbound=!0;
        if(t.jump){
            (r?u:d()).bind(s,function(v){
                f(v,j(v.target))
                })
            }
            if(k){
            k=a(k,e).bind(s,function(v){
                v.data=Math.round(d().length/k.length)*k.index(this);
                f(v,this)
                })
            }
            function q(v){
            v.data+=h;
            f(v,this)
            }
            function f(B,z){
            if(!isNaN(z)){
                B.data=z;
                z=p
                }
                var C=B.data,v,D=B.type,A=t.exclude?d().slice(0,-t.exclude):d(),y=A.length,w=A[C],x=t.duration;
            if(D){
                B.preventDefault()
                }
                if(g){
                o();
                l=setTimeout(n,t.interval)
                }
                if(!w){
                v=C<0?0:y-1;
                if(h!=v){
                    C=v
                    }else{
                    if(!t.cycle){
                        return
                    }else{
                        C=y-v-1
                        }
                    }
                w=A[C]
            }
            if(!w||t.lock&&u.is(":animated")||D&&t.onBefore&&t.onBefore(B,w,u,d(),C)===!1){
            return
        }
        if(t.stop){
            u.queue("fx",[]).stop()
            }
            if(t.constant){
            x=Math.abs(x/i*(h-C))
            }
            u.scrollTo(w,x,t).trigger("notify.serialScroll",[C])
        }
        function n(){
        u.trigger("next.serialScroll")
        }
        function o(){
        clearTimeout(l)
        }
        function d(){
        return a(m,p)
        }
        function j(w){
        if(!isNaN(w)){
            return w
            }
            var x=d(),v;
        while((v=x.index(w))==-1&&w!=p){
            w=w.parentNode
            }
            return v
        }
    })
}
})(jQuery);


/*
 *=zoombox.js
 *http://www.grafikart.fr/zoombox
*/
var scr=document.getElementsByTagName('script');
var zoombox_path = scr[scr.length-1].getAttribute("src").replace('zoombox.js','');

(function($){

    var options = {
        theme       : 'zoombox',      //available themes : zoombox,lightbox, prettyphoto, darkprettyphoto, simple
        opacity     : 0.8,                  // Black overlay opacity
        duration    : 800,                // Animation duration
        animation   : false,             // Do we have to animate the box ?
        width       : 600,                  // Default width
        height      : 400,                  // Default height
        gallery     : true,                 // Allow gallery thumb view
        autoplay : false,                // Autoplay for video
        overflow  : false               // Allow images bigger than screen ?
    }
    var images = new Array();         // Gallery Array [gallery name][link]
    var elem;           // HTML element currently used to display box
    var isOpen = false; // Zoombox already opened ?
    var link;           // Shortcut for the link
    var width;
    var height;
    var timer;          // Timing for img loading
    var i = 0;          // iteration variable
    var content;        // The content of the box
    var type = 'multimedia'; // Content type
    var position = false;
    var imageset = false;
    var state = 'closed';

    /**
* You can edit the html code generated by zoombox for specific reasons.
* */
    var html = '<div id="zoombox"> \
            <div class="mask"></div>\
            <div class="container">\
                <div class="content"></div>\
                <div class="title"></div>\
                <div class="next"></div>\
                <div class="prev"></div>\
                <div class="close"></div>\
                <div class="gallery"></div>\
            </div>\
        </div>';
    // Regular expressions needed for the content
    var filtreImg=                  /(\.jpg)|(\.jpeg)|(\.bmp)|(\.gif)|(\.png)/i;
    var filtreMP3=			/(\.mp3)/i;
    var filtreFLV=			/(\.flv)/i;
    var filtreSWF=			/(\.swf)/i;
    var filtreQuicktime=	/(\.mov)|(\.mp4)/i;
    var filtreWMV=			/(\.wmv)|(\.avi)/i;
    var filtreDailymotion=	/(http:\/\/www.dailymotion)|(http:\/\/dailymotion)/i;
    var filtreVimeo=		/(http:\/\/www.vimeo)|(http:\/\/vimeo)/i;
    var filtreYoutube=		/(youtube\.)/i;
    var filtreKoreus=		/(http:\/\/www\.koreus)|(http:\/\/koreus)/i;


    $.zoombox = function(el,options) {

    }
    $.zoombox.options = options;
    $.zoombox.close = function() {
        close();
    }
    $.zoombox.open = function(tmplink,opts){
        elem = null;
        link = tmplink;
        options = $.extend({},$.zoombox.options,opts);
        load();
    }
    $.zoombox.html = function(cont,opts){
        content = cont;
        options = $.extend({},$.zoombox.options,opts);
        width = options.width;
        height = options.height;
        elem = null;
        open();
    }
    $.fn.zoombox = function(opts){    
        /**
     * Bind the behaviour on every Elements
     */
        return this.each(function(){
            // No zoombox for IE6
            if($.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest){
                return false;
            }
            var obj = this;
            var galleryRegExp =  /zgallery([0-9]+)/;
            var gallery = galleryRegExp.exec($(this).attr("class"));
            var tmpimageset = false;
            if(gallery != null){
                if(!images[gallery[1]]){
                    images[gallery[1]]=new Array();
                }
                images[gallery[1]].push($(this));
                var pos = images[gallery[1]].length-1;
                tmpimageset = images[gallery[1]];
            }
            $(this).unbind('click');
            $(this).click(function(){
                options = $.extend({},$.zoombox.options,opts);
                if(state!='closed') return false;
                elem = $(obj);
                link = elem.attr('href');
                imageset = tmpimageset;
                position = pos;
                load();
                return false;
            });
        });
    }

    /**
 * Load the content (with or without loader) and call open()
 * */
    function load(){
        if(state=='closed') isOpen = false;
        state = 'load';
        setDim();
        if(filtreImg.test(link)){
            img=new Image();
            img.src=link;
            $("body").append('<div id="zoombox_loader"></div>');
            $("#zoombox_loader").css("marginTop",scrollY());
            timer = window.setInterval(function(){
                loadImg(img);
            },100);
        }else{
            setContent();
            open();
        }
    }

    /**
 * Build the HTML Structure of the box
 * */
    function build(){
        // We add the HTML Code on our page
        $('body').append(html);
        $(window).keydown(function(event){
            shortcut(event.which);
        });
        $(window).resize(function(){
            resize();
        });
        $('#zoombox .mask').hide();
        $('#zoombox .gallery').hide();
        // We add a specific class to define the box theme
        $('#zoombox').addClass(options.theme);
        // We bind the close behaviour (click on the mask / click on the close button)
        $('#zoombox .close,#zoombox .mask,.zoombox_close').click(function(){
            close();
            return false;
        });
        $('#zoombox .mask').mouseover(function(){
            $('#zoombox .gallery').stop().fadeTo(500,0);
        });
        $('#zoombox .mask').mouseout(function(){
            $('#zoombox .gallery').stop().fadeTo(500,0.9);
        });
        // Next/Prev button
        if(imageset == false){
            $('#zoombox .next,#zoombox .prev').remove();
        }else{
            $('#zoombox .next').click(function(){
                next();
            });
            $('#zoombox .prev').click(function(){
                prev();
            });
            if(options.gallery){
                for(var i in imageset){
                    var img = $('<img src="'+zoombox_path+'img/blank.png'+'" class="video gallery'+(i*1)+'"/>');
                    if(filtreImg.test(imageset[i].attr('href'))){
                        img = $('<img src="'+imageset[i].attr('href')+'" class="gallery'+(i*1)+'"/>');
                    }
                    img.appendTo('#zoombox .gallery');
                    img.click(function(){
                        gotoSlide($(this).attr('class').replace('gallery',''));
                        $('#zoombox .gallery img').removeClass('current');
                        $(this).addClass('current');
                    });
                    if(i==position){
                        img.addClass('current');
                    }
                }
            }
        }
    }
    /**
 * Open the box
 **/
    function open(){
        if(isOpen == false){
            build();
        }else{
            $('#zoombox .title').empty();
        }
        $('#zoombox .close').hide();
        $('#zoombox .container').removeClass('multimedia').removeClass('img');
        $('#zoombox .container').addClass(type);

        // We add a title if we find one on the link
        if(elem != null && elem.attr('title')){
            $('#zoombox .title').append(elem.attr('title'));
        }



        // And after... Animation or not depending of preferences
        // We empty the content
        $('#zoombox .content').empty();
        // If it's an image we load the content now (to get a good animation)
        if(type=='img' && isOpen == false && options.animation == true){
            $('#zoombox .content').append(content);
        }
        // Default position/size of the box to make the "zoom effect"
        if(elem != null && elem.find('img').length != 0 && isOpen == false){
            var min = elem.find('img');
            $('#zoombox .container').css({
                width : min.width(),
                height: min.height(),
                top : min.offset().top,
                left : min.offset().left,
                opacity:0,
                marginTop : min.css('marginTop')
            });
        }else if(elem != null && isOpen == false){
            $('#zoombox .container').css({
                width:   elem.width(),
                height:  elem.height(),
                top:elem.offset().top,
                left:elem.offset().left
            });
        }else if(isOpen == false){
            $('#zoombox .container').css({
                width: 100,
                height: 100,
                top:windowH()/2-50,
                left:windowW()/2-50
            })
        }
        // Final position/size of the box after the animation
        var css = {
            width : width,
            height: height,
            left  : (windowW() - width) / 2,
            top   : (windowH() - height) / 2,
            marginTop : scrollY(),
            opacity:1
        };
        // Do we animate or not ?
        if(options.animation == true){
            $('#zoombox .title').hide();
            $('#zoombox .container').animate(css,options.duration,function(){
                if(type == 'multimedia' || isOpen == true){
                    $('#zoombox .content').append(content);
                }
                if(type == 'image' || isOpen == true){
                    $('#zoombox .content img').css('opacity',0).fadeTo(300,1);
                }
                $('#zoombox .close').fadeIn();
                $('#zoombox .gallery').fadeIn();
                $('#zoombox .title').fadeIn(300);
                state = 'opened';
                isOpen = true;
            });
            $('#zoombox .mask').fadeTo(200,options.opacity);
        }else{
            $('#zoombox .content').append(content);
            $('#zoombox .close').show();
            $('#zoombox .gallery').show();
            $('#zoombox .container').css(css);
            $('#zoombox .mask').show();
            $('#zoombox .mask').css('opacity',options.opacity);
            isOpen = true;
            state = 'opened';
        }
    }
    /**
 * Close the box
 * **/
    function close(){
        state = 'closing';
        window.clearInterval(timer);
        $(window).unbind('keydown');
        $(window).unbind('resize'); 
        if(type == 'multimedia'){
            $('#zoombox .container').empty();
        }
        var css = {};
        if(elem != null && elem.find('img').length != 0){
            var min = elem.find('img');
            css ={
                width : min.width(),
                height: min.height(),
                top : min.offset().top,
                left : min.offset().left,
                opacity:0,
                marginTop : min.css('marginTop')
            };
        }else if(elem!=null){
            css = {
                width:   elem.width(),
                height:  elem.height(),
                top:elem.offset().top,
                left:elem.offset().left,
                opacity:0
            };
        }else{
            css = {
                width: 100,
                height: 100,
                top:windowH()/2-50,
                left:windowW()/2-50,
                opacity : 0
            };
        }
        if(options.animation == true){
            $('#zoombox .mask').fadeOut(200);
            $('#zoombox .container').animate(css,options.duration,function(){
                $('#zoombox').remove();
                state = 'closed';
                isOpen = false; 
            });
        }else{
            $('#zoombox').remove();
            state = 'closed';
            isOpen = false; 
        }
    }

    /**
 * Set the HTML Content of the box
 * */
    function setContent(){
        // Overtflow
        if(options.overflow == false){
            if(width*1 + 50 > windowW()){
                height = (windowW() - 50) * height / width;
                width = windowW() - 50;
            }
            if(height*1 + 50 > windowH()){
                width = (windowH()-50) * width / height; 
                height = windowH() - 50;
            }
        }
        var url = link;
        type = 'multimedia';
        if(filtreImg.test(url)){
            type = 'img';
            content='<img src="'+link+'" width="'+width+'" height="'+height+'"/>';
        }else if(filtreMP3.test(url)){
            width=300;
            height=40;
            content ='<object type="application/x-shockwave-flash" data="'+MP3Player+'?son='+url+'" width="'+width+'" height="'+height+'">';
            content+='<param name="movie" value="'+MP3Player+'?son='+url+'" /></object>';
        }else if(filtreFLV.test(url)){
            var autostart = 0;
            if(options.autoplay==true){
                autostart = 1;
            } 
            content='<object type="application/x-shockwave-flash" data="'+zoombox_path+'FLVPlayer.swf" width="'+width+'" height="'+height+'">\
<param name="allowFullScreen" value="true">\
<param name="scale" value="noscale">\
<param name="wmode" value="transparent">\
<param name="flashvars" value="flv='+url+'&autoplay='+autostart+'">\
<embed src="'+zoombox_path+'FLVPlayer.swf" width="'+width+'" height="'+height+'" allowscriptaccess="always" allowfullscreen="true" flashvars="flv='+url+'" wmode="transparent" />\
</object>';
        }else if(filtreSWF.test(url)){
            content='<object width="'+width+'" height="'+height+'"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="'+url+'" /><embed src="'+url+'" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="'+width+'" height="'+height+'" wmode="transparent"></embed></object>';
        }else if(filtreQuicktime.test(url)){
            content='<embed src="'+url+'" width="'+width+'" height="'+height+'" controller="true" cache="true" autoplay="true"/>';
        // HTML5 Code
        //content='<video controls src="'+url+'" width="'+width+'" height="'+height+'">Your browser does not support this format</video>'
        }else if(filtreWMV.test(url)){
            content='<embed src="'+url+'" width="'+width+'" height="'+height+'" controller="true" cache="true" autoplay="true" wmode="transparent" />';
        }else if(filtreDailymotion.test(url)){
            var id=url.split('_');
            id=id[0].split('/');
            id=id[id.length-1];
            if(options.autoplay==true){
                id = id + '&autostart=1';
            }
            content='<object width="'+width+'" height="'+height+'"><param name="movie" value="http://www.dailymotion.com/swf/'+id+'&colors=background:000000;glow:000000;foreground:FFFFFF;special:000000;&related=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.dailymotion.com/swf/'+id+'&colors=background:000000;glow:000000;foreground:FFFFFF;special:000000;&related=0" type="application/x-shockwave-flash" width="'+width+'" height="'+height+'" allowFullScreen="true" allowScriptAccess="always" wmode="transparent" ></embed></object>';
        }else if(filtreVimeo.test(url)){
            var id=url.split('/');
            id=id[3];
            if(options.autoplay==true){
                id = id + '&autoplay=1';
            }
            content='<object width="'+width+'" height="'+height+'"><param name="allowfullscreen" value="true" />	<param name="allowscriptaccess" value="always" /><param name="wmode" value="transparent" /><param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id='+id+'&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00AAEB&amp;fullscreen=1" />	<embed src="http://www.vimeo.com/moogaloop.swf?clip_id='+id+'&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00AAEB&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="'+width+'" height="'+height+'" wmode="transparent" ></embed></object>';
        }else if(filtreYoutube.test(url)){
            var id=url.split('watch?v=');
            id=id[1].split('&');
            id=id[0];
            if(options.autoplay==true){
                id = id + '&autoplay=1';
            }
            content='<object width="'+width+'" height="'+height+'"><param name="movie" value="http://www.youtube.com/v/'+id+'&hl=fr&rel=0&color1=0xFFFFFF&color2=0xFFFFFF&hd=1"></param><embed src="http://www.youtube.com/v/'+id+'&hl=fr&rel=0&color1=0xFFFFFF&color2=0xFFFFFF&hd=1" type="application/x-shockwave-flash" width="'+width+'" height="'+height+'" wmode="transparent"></embed></object>';
        }else if(filtreKoreus.test(url)){
            url=url.split('.html');
            url=url[0];
            content='<object type="application/x-shockwave-flash" data="'+url+'" width="'+width+'" height="'+height+'"><param name="movie" value="'+url+'"><embed src="'+url+'" type="application/x-shockwave-flash" width="'+width+'" height="'+height+'"  wmode="transparent"></embed></object>';
        }else{
            content='<iframe src="'+url+'" width="'+width+'" height="'+height+'" border="0"></iframe>';
        }
        return content;
    }
    /**
 *  Handle Image loading
 **/
    function loadImg(img){
        if(img.complete){
            i=0;
            window.clearInterval(timer);
            width=img.width;
            height=img.height;
            $('#zoombox_loader').remove();
            setContent();
            open();
        }
        // On anim le loader
        $('#zoombox_loader').css({
            'background-position': "0px "+i+"px"
            });
        i=i-40;
        if(i<(-440)){
            i=0;
        }
    }

    function gotoSlide(i){
        if(state != 'opened'){
            return false;
        }
        position = i;
        elem = imageset[position];
        link = elem.attr('href');
        if($('#zoombox .gallery img').length > 0){
            $('#zoombox .gallery img').removeClass('current');
            $('#zoombox .gallery img:eq('+i+')').addClass('current');
        }
        load();
        return false;
    }

    function next(){
        i = position+1;
        if(i  > imageset.length-1){
            i = 0;
        }
        gotoSlide(i);
    }

    function prev(){
        i = position-1;
        if(i < 0){
            i = imageset.length-1;
        }
        gotoSlide(i);
    }

    /**
 * GENERAL FUNCTIONS
 * */
    /**
 * Resize
 **/
    function resize(){
        $('#zoombox .container').css({
            top : (windowH() - $('#zoombox .container').height()) / 2,
            left : (windowW() - $('#zoombox .container').width()) / 2
        });
    }
    /**
 * Keyboard Shortcut
 **/
    function shortcut(key){
        if(key == 37){
            prev();
        }
        if(key == 39){
            next();
        }
        if(key == 27){
            close();
        }

    }
    /**
 * Parse Width/Height of a link and insert it in the width and height variables
 * */
    function setDim(){
        width = options.width;
        height = options.height;
        if(elem!=null){
            var widthReg = /w([0-9]+)/;
            var w = widthReg.exec(elem.attr("class"));
            if(w != null){
                if(w[1]){
                    width = w[1];
                }
            }
            var heightReg = /h([0-9]+)/;
            var h = heightReg.exec(elem.attr("class"));
            if(h != null){
                if(h[1]){
                    height = h[1];
                }
            }
        }
        return false;
    }
    /**
* Return the window height
* */
    function windowH(){
        if (window.innerHeight) return window.innerHeight  ;
        else{
            return $(window).height();
        }
    }

    /**
 * Return the window width
 * */
    function windowW(){
        if (window.innerWidth) return window.innerWidth  ;
        else{
            return $(window).width();
        }
    }

    /**
 *  Return the position of the top
 *  */
    function scrollY() {
        scrOfY = 0;
        if( typeof( window.pageYOffset ) == 'number' ) {
            //Netscape compliant
            scrOfY = window.pageYOffset;
        } else if( document.body && ( document.body.scrollTop ) ) {
            //DOM compliant
            scrOfY = document.body.scrollTop;
        } else if( document.documentElement && ( document.documentElement.scrollTop ) ) {
            //IE6 standards compliant mode
            scrOfY = document.documentElement.scrollTop;
        }
        return scrOfY;
    }

    /**
 *  Return the position of the left scroll
 *  */
    function scrollX(){
        scrOfX = 0;
        if( typeof( window.pageXOffset ) == 'number' ) {
            //Netscape compliant
            scrOfX = window.pageXOffset;
        } else if( document.body && ( document.body.scrollLeft ) ) {
            //DOM compliant
            scrOfX = document.body.scrollLeft;
        } else if( document.documentElement && ( document.documentElement.scrollLeft ) ) {
            //IE6 standards compliant mode
            scrOfX = document.documentElement.scrollLeft;
        }
        return scrOfX;
    }

})(jQuery);

/*

Title:		=jShowOff: a jQuery Content Rotator Plugin
Author:		Erik Kallevig
Version:	0.1.2
Website:	http://ekallevig.com/jshowoff
License: 	Dual licensed under the MIT and GPL licenses.

*/

(function($){
    $.fn.jshowoff=function(settings){
        var config={
            animatePause:false,
            autoPlay:false,            
            
            effect:'fade',
            changeSpeed:400,
            
            controls:true,
            controlText:{
                play:'Play',
                pause:'Pause',
                next:'Next',
                previous:'Previous'
            },
            effect:'fade',
            hoverPause:true,
            links:false,
            speed:3000,
            backgroundContainer:"#homepage div.image-hp",
            infoContainer:"div.features-info",
            infoContainerSpeed: 0
        };
        
        if(settings)$.extend(true,config,settings);
        if(config.speed<(config.changeSpeed+20)){
            alert('jShowOff: Make speed at least 20ms longer than changeSpeed; the fades aren\'t always right on time.');
            return this;
        };
        
        this.each(function(i){
            var $cont=$(this);
            var gallery=$(this).children().remove();
            var timer='';
            var counter=0;
            var preloadedImg=[];
            var howManyInstances=$('.jshowoff').length+1;
            var uniqueClass='jshowoff-'+howManyInstances;
            var cssClass=config.cssClass!=undefined?config.cssClass:'';
            $cont.css('position','relative').wrap('<div class="jshowoff '+uniqueClass+'" />');
            var $wrap=$('.'+uniqueClass);
            $wrap.css('position','relative').addClass(cssClass);
            $(gallery[0]).clone().appendTo($cont);
            preloadImg();
            if(config.controls){
                addControls();
                if(config.autoPlay==false){
                    $('.'+uniqueClass+'-play').addClass(uniqueClass+'-paused jshowoff-paused').text(config.controlText.play);
                };
            
        };
        
        if(config.links){
            addSlideLinks();
            $('.'+uniqueClass+'-slidelinks a').eq(0).addClass(uniqueClass+'-active jshowoff-active');
        };
        
        if(config.hoverPause){
            $cont.hover(function(){
                if(isPlaying())pause('hover');
            },function(){
                if(isPlaying())play('hover');
            });
        };
        
        if(config.autoPlay&&gallery.length>1){
            timer=setInterval(function(){
                play();
            },config.speed);
        };
        
        if(gallery.length<1){
            $('.'+uniqueClass).append('<p>For jShowOff to work, the container element must have child elements.</p>');
        };
        
        function transitionTo(gallery,index){
            var oldCounter=counter;
            if((counter>=gallery.length)||(index>=gallery.length)){
                counter=0;
                var e2b=true;
            }
            else if((counter<0)||(index<0)){
                counter=gallery.length-1;
                var b2e=true;
            }
            else{
                counter=index;
            }
            if(config.effect=='slideLeft'){
                var newSlideDir,oldSlideDir;
                function slideDir(dir){
                    newSlideDir=dir=='right'?'left':'right';
                    oldSlideDir=dir=='left'?'left':'right';
                };
                
                counter>=oldCounter?slideDir('left'):slideDir('right');
                $(gallery[counter]).clone().appendTo($cont).slideIt({
                    direction:newSlideDir,
                    changeSpeed:config.changeSpeed
                    });
                if($cont.children().length>1){
                    $cont.children().eq(0).css('position','absolute').slideIt({
                        direction:oldSlideDir,
                        showHide:'hide',
                        changeSpeed:config.changeSpeed
                        },function(){
                        $(this).remove();
                    });
                };
            
        }else if(config.effect=='fade'){
            $(gallery[counter]).clone().appendTo($cont).hide().fadeIn(config.changeSpeed,function(){
                if($.browser.msie)this.style.removeAttribute('filter');
            });
            if($cont.children().length>1){
                $cont.children().eq(0).css('position','absolute').fadeOut(config.changeSpeed,function(){
                    $(this).remove();
                });
            };
        
        }else if(config.effect=='none'){
            $(gallery[counter]).clone().appendTo($cont);
            if($cont.children().length>1){
                $cont.children().eq(0).css('position','absolute').remove();
            };
        
    };
    
    if(config.links){
        $('.'+uniqueClass+'-active').removeClass(uniqueClass+'-active jshowoff-active');
        $('.'+uniqueClass+'-slidelinks a').eq(counter).addClass(uniqueClass+'-active jshowoff-active');
    };

};

function isPlaying(){
    return $('.'+uniqueClass+'-play').hasClass('jshowoff-paused')?false:true;
};

function play(src){
    if(!isBusy()){
        counter++;
        transitionTo(gallery,counter);
        if(src=='hover'||!isPlaying()){
            timer=setInterval(function(){
                play();
            },config.speed);
        }
        if(!isPlaying()){
            $('.'+uniqueClass+'-play').text(config.controlText.pause).removeClass('jshowoff-paused '+uniqueClass+'-paused');
        }
    };

};

function pause(src){
    clearInterval(timer);
    if(!src||src=='playBtn')$('.'+uniqueClass+'-play').text(config.controlText.play).addClass('jshowoff-paused '+uniqueClass+'-paused');
    if(config.animatePause&&src=='playBtn'){
        $('<p class="'+uniqueClass+'-pausetext jshowoff-pausetext">'+config.controlText.pause+'</p>').css({
            fontSize:'62%',
            textAlign:'center',
            position:'absolute',
            top:'40%',
            lineHeight:'100%',
            width:'100%'
        }).appendTo($wrap).addClass(uniqueClass+'pauseText').animate({
            fontSize:'600%',
            top:'30%',
            opacity:0
        },{
            duration:500,
            complete:function(){
                $(this).remove();
            }
        });
}
};

function next(){
    goToAndPause(counter+1);
    
    // add resize trigger 
    // $(config.backgroundContainer).fullBg();
    
    // fetaured box
    //$(config.infoContainer).css('display','none');
    $(config.infoContainer).fadeOut(config.infoContainerSpeed);
    $(config.infoContainer).fadeIn(config.infoContainerSpeed);
};

function previous(){
    goToAndPause(counter-1);  
    
    // $(config.backgroundContainer).fullBg();
    
    // fetaured box
    //$(config.infoContainer).css('display','none');
    $(config.infoContainer).fadeOut(config.infoContainerSpeed);
    $(config.infoContainer).fadeIn(config.infoContainerSpeed);
};

function isBusy(){
    return $cont.children().length>1?true:false;
};

function goToAndPause(index){
    $cont.children().stop(true,true);
    if((counter!=index)||((counter==index)&&isBusy())){
        if(isBusy())$cont.children().eq(0).remove();
        transitionTo(gallery,index);
        pause();
    };

};

function preloadImg(){
    $(gallery).each(function(i){
        $(this).find('img').each(function(i){
            preloadedImg[i]=$('<img>').attr('src',$(this).attr('src'));
        });
    });
};

function addControls(){
    $wrap.append('<div class="jshowoff-controls '+uniqueClass+'-controls"><a class="jshowoff-play '+uniqueClass+'-play" href="#null">'+config.controlText.pause+'</a> <a class="jshowoff-prev '+uniqueClass+'-prev" href="#null">'+config.controlText.previous+'</a> <a class="jshowoff-next '+uniqueClass+'-next" href="#null">'+config.controlText.next+'</a></div>');
    $('.'+uniqueClass+'-controls a').each(function(){
        if($(this).hasClass('jshowoff-play'))$(this).click(function(){
            isPlaying()?pause('playBtn'):play();
            return false;
        });
        if($(this).hasClass('jshowoff-prev'))$(this).click(function(){
            previous();
            return false;
        });
        if($(this).hasClass('jshowoff-next'))$(this).click(function(){
            next();
            return false;
        });
    });
};

function addSlideLinks(){
    $wrap.append('<p class="jshowoff-slidelinks '+uniqueClass+'-slidelinks"></p>');
    $.each(gallery,function(i,val){
        var linktext=$(this).attr('title')!=''?$(this).attr('title'):i+1;
        $('<a class="jshowoff-slidelink-'+i+' '+uniqueClass+'-slidelink-'+i+'" href="#null">'+linktext+'</a>').bind('click',{
            index:i
        },function(e){
            goToAndPause(e.data.index);
            return false;
        }).appendTo('.'+uniqueClass+'-slidelinks');
    });
};

});
return this;
};

})(jQuery);
(function($){
    $.fn.slideIt=function(settings,callback){
        var config={
            direction:'left',
            showHide:'show',
            changeSpeed:600
        };
        
        if(settings)$.extend(config,settings);
        this.each(function(i){
            $(this).css({
                left:'auto',
                right:'auto',
                top:'auto',
                bottom:'auto'
            });
            var measurement=(config.direction=='left')||(config.direction=='right')?$(this).outerWidth():$(this).outerHeight();
            var startStyle={};
            
            startStyle['position']=$(this).css('position')=='static'?'relative':$(this).css('position');
            startStyle[config.direction]=(config.showHide=='show')?'-'+measurement+'px':0;
            var endStyle={};
            
            endStyle[config.direction]=config.showHide=='show'?0:'-'+measurement+'px';
            $(this).css(startStyle).animate(endStyle,config.changeSpeed,callback);
        });
        return this;
    };

})(jQuery);

// ColorBox v1.3.6 - a full featured, light-weight, customizable lightbox based on jQuery 1.3
// c) 2009 Jack Moore - www.colorpowered.com - jack@colorpowered.com
// Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php

(function ($) {
	// Shortcuts (to increase compression)
	var colorbox = 'colorbox',
	hover = 'hover',
	TRUE = true,
	FALSE = false,
	cboxPublic,
	isIE = $.browser.msie && !$.support.opacity, // feature detection alone gave false positives in some browsers
	isIE6 = isIE && $.browser.version < 7,

	// Event Strings (to increase compression)
	cbox_open = 'cbox_open',
	cbox_load = 'cbox_load',
	cbox_complete = 'cbox_complete',
	cbox_cleanup = 'cbox_cleanup',
	cbox_closed = 'cbox_closed',
	cbox_resize = 'resize.cbox_resize',

	// Cached jQuery Object Variables
	$overlay,
	$cbox,
	$wrap,
	$content,
	$topBorder,
	$leftBorder,
	$rightBorder,
	$bottomBorder,
	$related,
	$window,
	$loaded,
	$loadingBay,
	$loadingOverlay,
	$loadingGraphic,
	$title,
	$current,
	$slideshow,
	$next,
	$prev,
	$close,

	// Variables for cached values or use across multiple functions
	interfaceHeight,
	interfaceWidth,
	loadedHeight,
	loadedWidth,
	element,
	bookmark,
	index,
	settings,
	open,
	active,
	
	// ColorBox Default Settings.	
	// See http://colorpowered.com/colorbox for details.
	defaults = {
		transition: "elastic",
		speed: 350,
		width: FALSE,
		height: FALSE,
		innerWidth: FALSE,
		innerHeight: FALSE,
		initialWidth: "400",
		initialHeight: "400",
		maxWidth: FALSE,
		maxHeight: FALSE,
		scalePhotos: TRUE,
		scrolling: TRUE,
		inline: FALSE,
		html: FALSE,
		iframe: FALSE,
		photo: FALSE,
		href: FALSE,
		title: FALSE,
		rel: FALSE,
		opacity: 0.9,
		preloading: TRUE,
		current: "Image {current} of {total}",
		previous: "previous",
		next: "next",
		close: "close",
		open: FALSE,
		overlayClose: TRUE,
		
		slideshow: FALSE,
		slideshowAuto: TRUE,
		slideshowSpeed: 2500,
		slideshowStart: "start slideshow",
		slideshowStop: "stop slideshow",
		
		onOpen: FALSE,
		onLoad: FALSE,
		onComplete: FALSE,
		onCleanup: FALSE,
		onClosed: FALSE
	};
	
	// ****************
	// HELPER FUNCTIONS
	// ****************
		
	// Convert % values to pixels
	function setSize(size, dimension) {
		dimension = dimension === 'x' ? $window.width() : $window.height();//document.documentElement.clientWidth : document.documentElement.clientHeight;
		return (typeof size === 'string') ? Math.round((size.match(/%/) ? (dimension / 100) * parseInt(size, 10) : parseInt(size, 10))) : size;
	}

	// Checks an href to see if it is a photo.
	// There is a force photo option (photo: true) for hrefs that cannot be matched by this regex.
	function isImage(url) {
		url = $.isFunction(url) ? url.call(element) : url;
		return settings.photo || url.match(/\.(gif|png|jpg|jpeg|bmp)(?:\?([^#]*))?(?:#(\.*))?$/i);
	}
	
	// Assigns functions results to their respective settings.  This allows functions to be used to set ColorBox options.
	function process() {
		for (var i in settings) {
			if ($.isFunction(settings[i]) && i.substring(0, 2) !== 'on') { // checks to make sure the function isn't one of the callbacks, they will be handled at the appropriate time.
			    settings[i] = settings[i].call(element);
			}
		}
		settings.rel = settings.rel || element.rel;
		settings.href = settings.href || element.href;
		settings.title = settings.title || element.title;
	}

	function launch(elem) {
		
		element = elem;
		
		settings = $.extend({}, $(element).data(colorbox));
		
		process(); // Convert functions to their returned values.
		
		if (settings.rel && settings.rel !== 'nofollow') {
			$related = $('.cboxElement').filter(function () {
				var relRelated = $(this).data(colorbox).rel || this.rel;
				return (relRelated === settings.rel);
			});
			index = $related.index(element);
			
			// Check direct calls to ColorBox.
			if (index < 0) {
				$related = $related.add(element);
				index = $related.length - 1;
			}
		} else {
			$related = $(element);
			index = 0;
		}
		
		if (!open) {
			open = TRUE;
			
			active = TRUE; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.
			
			bookmark = element;
			
			bookmark.blur(); // Remove the focus from the calling element.
			
			// Set Navigation Key Bindings
			$(document).bind("keydown.cbox_close", function (e) {
				if (e.keyCode === 27) {
					e.preventDefault();
					cboxPublic.close();
				}
			}).bind("keydown.cbox_arrows", function (e) {
				if ($related.length > 1) {
					if (e.keyCode === 37) {
						e.preventDefault();
						$prev.click();
					} else if (e.keyCode === 39) {
						e.preventDefault();
						$next.click();
					}
				}
			});
			
			if (settings.overlayClose) {
				$overlay.css({"cursor": "pointer"}).one('click', cboxPublic.close);
			}
			
			$.event.trigger(cbox_open);
			if (settings.onOpen) {
				settings.onOpen.call(element);
			}
			
			$overlay.css({"opacity": settings.opacity}).show();
			
			// Opens inital empty ColorBox prior to content being loaded.
			settings.w = setSize(settings.initialWidth, 'x');
			settings.h = setSize(settings.initialHeight, 'y');
			cboxPublic.position(0);
			
			if (isIE6) {
				$window.bind('resize.cboxie6 scroll.cboxie6', function () {
					$overlay.css({width: $window.width(), height: $window.height(), top: $window.scrollTop(), left: $window.scrollLeft()});
				}).trigger("scroll.cboxie6");
			}
		}
		
		$current.add($prev).add($next).add($slideshow).add($title).hide();
		
		$close.html(settings.close).show();
		
		cboxPublic.slideshow();
		
		cboxPublic.load();
	}

	// ****************
	// PUBLIC FUNCTIONS
	// Usage format: $.fn.colorbox.close();
	// Usage from within an iframe: parent.$.fn.colorbox.close();
	// ****************
	
	cboxPublic = $.fn.colorbox = function (options, callback) {
		var $this = this;
		
		if (!$this.length) {
			if ($this.selector === '') { // empty selector means a direct call, ie: $.fn.colorbox();
				$this = $('<a/>');
				options.open = TRUE;
			} else { // else the selector didn't match anything, and colorbox should go ahead and return.
				return this;
			}
		}
		
		$this.each(function () {
			var data = $.extend({}, $(this).data(colorbox) ? $(this).data(colorbox) : defaults, options);
			
			$(this).data(colorbox, data).addClass("cboxElement");
			
			if (callback) {
				$(this).data(colorbox).onComplete = callback;
			}
		});
		
		if (options && options.open) {
			launch($this);
		}
		
		return this;
	};

	// Initialize ColorBox: store common calculations, preload the interface graphics, append the html.
	// This preps colorbox for a speedy open when clicked, and lightens the burdon on the browser by only
	// having to run once, instead of each time colorbox is opened.
	cboxPublic.init = function () {
		
		// jQuery object generator to save a bit of space
		function $div(id) {
			return $('<div id="cbox' + id + '"/>');
		}
		
		// Create & Append jQuery Objects
		$window = $(window);
		$cbox = $('<div id="colorbox"/>');
		$overlay = $div("Overlay").hide();
		$wrap = $div("Wrapper");
		$content = $div("Content").append(
			$loaded = $div("LoadedContent").css({width: 0, height: 0}),
			$loadingOverlay = $div("LoadingOverlay"),
			$loadingGraphic = $div("LoadingGraphic"),
			$title = $div("Title"),
			$current = $div("Current"),
			$slideshow = $div("Slideshow"),
			$next = $div("Next"),
			$prev = $div("Previous"),
			$close = $div("Close")
		);
		$wrap.append( // The 3x3 Grid that makes up ColorBox
			$('<div/>').append(
				$div("TopLeft"),
				$topBorder = $div("TopCenter"),
				$div("TopRight")
			),
			$('<div/>').append(
				$leftBorder = $div("MiddleLeft"),
				$content,
				$rightBorder = $div("MiddleRight")
			),
			$('<div/>').append(
				$div("BottomLeft"),
				$bottomBorder = $div("BottomCenter"),
				$div("BottomRight")
			)
		).children().children().css({'float': 'left'});
		
		$loadingBay = $("<div style='position:absolute; top:0; left:0; width:9999px; height:0;'/>");
		
		$('body').prepend($overlay, $cbox.append($wrap, $loadingBay));
				
		if (isIE) {
			$cbox.addClass('cboxIE');
			if (isIE6) {
				$overlay.css('position', 'absolute');
			}
		}
		
		// Add rollover event to navigation elements
		$content.children()
		.bind('mouseover mouseout', function(){
			$(this).toggleClass(hover);
		}).addClass(hover);
		
		// Cache values needed for size calculations
		interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(TRUE) - $content.height();//Subtraction needed for IE6
		interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(TRUE) - $content.width();
		loadedHeight = $loaded.outerHeight(TRUE);
		loadedWidth = $loaded.outerWidth(TRUE);
		
		// Setting padding to remove the need to do size conversions during the animation step.
		$cbox.css({"padding-bottom": interfaceHeight, "padding-right": interfaceWidth}).hide();
		
		// Setup button & key events.
		$next.click(cboxPublic.next);
		$prev.click(cboxPublic.prev);
		$close.click(cboxPublic.close);
		
		// Adding the 'hover' class allowed the browser to load the hover-state
		// background graphics.  The class can now can be removed.
		$content.children().removeClass(hover);
		
		$('.cboxElement').live('click', function (e) {
			if (e.button !== 0 && typeof e.button !== 'undefined') {// checks to see if it was a non-left mouse-click.
				return TRUE;
			} else {
				launch(this);			
				return FALSE;
			}
		});
	};

	cboxPublic.position = function (speed, loadedCallback) {
		var
		animate_speed,
		winHeight = $window.height(),
		// keeps the top and left positions within the browser's viewport.
		posTop = Math.max(winHeight - settings.h - loadedHeight - interfaceHeight,0)/2 + $window.scrollTop(),
		posLeft = Math.max(document.documentElement.clientWidth - settings.w - loadedWidth - interfaceWidth,0)/2 + $window.scrollLeft();
		
		// setting the speed to 0 to reduce the delay between same-sized content.
		animate_speed = ($cbox.width() === settings.w+loadedWidth && $cbox.height() === settings.h+loadedHeight) ? 0 : speed;
		
		// this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,
		// but it has to be shrank down around the size of div#colorbox when it's done.  If not,
		// it can invoke an obscure IE bug when using iframes.
		$wrap[0].style.width = $wrap[0].style.height = "9999px";
		
		function modalDimensions (that) {
			// loading overlay size has to be sure that IE6 uses the correct height.
			$topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = that.style.width;
			$loadingGraphic[0].style.height = $loadingOverlay[0].style.height = $content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = that.style.height;
		}
		
		$cbox.dequeue().animate({width:settings.w+loadedWidth, height:settings.h+loadedHeight, top:posTop, left:posLeft}, {duration: animate_speed,
			complete: function(){
				modalDimensions(this);
				
				active = FALSE;
				
				// shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation.
				$wrap[0].style.width = (settings.w+loadedWidth+interfaceWidth) + "px";
				$wrap[0].style.height = (settings.h+loadedHeight+interfaceHeight) + "px";
				
				if (loadedCallback) {loadedCallback();}
			},
			step: function(){
				modalDimensions(this);
			}
		});
	};

	cboxPublic.resize = function (object) {
		if(!open){ return; }
		
		var topMargin,
		prev,
		prevSrc,
		next,
		nextSrc,
		photo,
		timeout,
		speed = settings.transition==="none" ? 0 : settings.speed;
		
		$window.unbind(cbox_resize);
		
		if(!object){
			timeout = setTimeout(function(){ // timer allows IE to render the dimensions before attempting to calculate the height
				var $child = $loaded.wrapInner("<div style='overflow:auto'></div>").children(); // temporary wrapper to get an accurate estimate of just how high the total content should be.
				settings.h = $child.height();
				$loaded.css({height:settings.h});
				$child.replaceWith($child.children()); // ditch the temporary wrapper div used in height calculation
				cboxPublic.position(speed);
			}, 1);
			return;
		}
		
		$loaded.remove();
		$loaded = $('<div id="cboxLoadedContent"/>').html(object);
		
		function getWidth(){
			settings.w = settings.w || $loaded.width();
			settings.w = settings.mw && settings.mw < settings.w ? settings.mw : settings.w;
			return settings.w;
		}
		function getHeight(){
			settings.h = settings.h || $loaded.height();
			settings.h = settings.mh && settings.mh < settings.h ? settings.mh : settings.h;
			
			// Add 50px height to allow for text
			settings.h = settings.h + 50;
			return settings.h;
		}
		
		$loaded.hide()
		.appendTo($loadingBay)// content has to be appended to the DOM for accurate size calculations.  Appended to an absolutely positioned element, rather than BODY, which avoids an extremely brief display of the vertical scrollbar in Firefox that can occur for a small minority of websites.
		.css({width:getWidth(), overflow:settings.scrolling ? 'auto' : 'hidden'})
		.css({height:getHeight()})// sets the height independently from the width in case the new width influences the value of height.
		.prependTo($content);
		
		$('#cboxPhoto').css({cssFloat:'none'});// floating the IMG removes the bottom line-height and fixed a problem where IE miscalculates the width of the parent element as 100% of the document width.
		
		// Hides SELECT elements in IE6 because they would otherwise sit on top of the overlay.
		if (isIE6) {
			$('select:not(#colorbox select)').filter(function(){
				return this.style.visibility !== 'hidden';
			}).css({'visibility':'hidden'}).one(cbox_cleanup, function(){
				this.style.visibility = 'inherit';
			});
		}
				
		function setPosition (s) {
			cboxPublic.position(s, function(){
				if (!open) { return; }
				
				if (isIE) {
					//This fadeIn helps the bicubic resampling to kick-in.
					if( photo ){$loaded.fadeIn(100);}
					//IE adds a filter when ColorBox fades in and out that can cause problems if the loaded content contains transparent pngs.
					$cbox[0].style.removeAttribute("filter");
				}
				
				//Waited until the iframe is added to the DOM & it is visible before setting the src.
				//This increases compatability with pages using DOM dependent JavaScript.
				if(settings.iframe){
					$loaded.append("<iframe id='cboxIframe'" + (settings.scrolling ? " " : "scrolling='no'") + " name='iframe_"+new Date().getTime()+"' frameborder=0 src='"+settings.href+"' " + (isIE ? "allowtransparency='true'" : '') + " />");
				}
				
				$loaded.show();
				
				$title.show().html(settings.title);
				
				if ($related.length>1) {
					$current.html(settings.current.replace(/\{current\}/, index+1).replace(/\{total\}/, $related.length)).show();
					$next.html(settings.next).show();
					$prev.html(settings.previous).show();
					
					if(settings.slideshow){
						$slideshow.show();
					}
				}
				
				$loadingOverlay.hide();
				$loadingGraphic.hide();
				
				$.event.trigger(cbox_complete);
				if (settings.onComplete) {
					settings.onComplete.call(element);
				}
				
				if (settings.transition === 'fade'){
					$cbox.fadeTo(speed, 1, function(){
						if(isIE){$cbox[0].style.removeAttribute("filter");}
					});
				}
				
				$window.bind(cbox_resize, function(){
					cboxPublic.position(0);
				});
			});
		}
		
		if((settings.transition === 'fade' && $cbox.fadeTo(speed, 0, function(){setPosition(0);})) || setPosition(speed)){}
		
		// Preloads images within a rel group
		if (settings.preloading && $related.length>1) {
			prev = index > 0 ? $related[index-1] : $related[$related.length-1];
			next = index < $related.length-1 ? $related[index+1] : $related[0];
			nextSrc = $(next).data(colorbox).href || next.href;
			prevSrc = $(prev).data(colorbox).href || prev.href;
			
			if(isImage(nextSrc)){
				$('<img />').attr('src', nextSrc);
			}
			
			if(isImage(prevSrc)){
				$('<img />').attr('src', prevSrc);
			}
		}
	};

	cboxPublic.load = function () {
		var href, img, setResize, resize = cboxPublic.resize;
		
		active = TRUE;
		
		/*
		 
		// I decided to comment this out because I can see it causing problems as users
		// really should just set the dimensions on their IMG elements instead,
		// but I'm leaving the code in as it may be useful to someone.
		// To use, uncomment the function and change 'if(textStatus === "success"){ resize(this); }'
		// to 'if(textStatus === "success"){ preload(this); }'
		
		// Preload loops through the HTML to find IMG elements and loads their sources.
		// This allows the resize method to accurately estimate the dimensions of the new content.
		function preload(html){
			var
			$ajax = $(html),
			$imgs = $ajax.find('img'),
			x = $imgs.length;
			
			function loadloop(){
				var img = new Image();
				x = x-1;
				if(x >= 0){
					img.onload = loadloop;
					img.src = $imgs[x].src;
				} else {
					resize($ajax);
				}
			}
			
			loadloop();
		}
		*/
		
		element = $related[index];
		
		settings = $.extend({}, $(element).data(colorbox));
		
		//convert functions to static values
		process();
		
		$.event.trigger(cbox_load);
		if (settings.onLoad) {
			settings.onLoad.call(element);
		}
		
		// Evaluate the height based on the optional height and width settings.
		settings.h = settings.height ?
				setSize(settings.height, 'y') - loadedHeight - interfaceHeight :
				settings.innerHeight ?
					setSize(settings.innerHeight, 'y') :
					FALSE;
		settings.w = settings.width ?
				setSize(settings.width, 'x') - loadedWidth - interfaceWidth :
				settings.innerWidth ?
					setSize(settings.innerWidth, 'x') :
					FALSE;
		
		// Sets the minimum dimensions for use in image scaling
		settings.mw = settings.w;
		settings.mh = settings.h;
		
		// Re-evaluate the minimum width and height based on maxWidth and maxHeight values.
		// If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.
		if(settings.maxWidth){
			settings.mw = setSize(settings.maxWidth, 'x') - loadedWidth - interfaceWidth;
			settings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;
		}
		if(settings.maxHeight){
			settings.mh = setSize(settings.maxHeight, 'y') - loadedHeight - interfaceHeight;
			settings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;
		}
		
		href = settings.href;
		
		$loadingOverlay.show();
		$loadingGraphic.show();
		
		if (settings.inline) {
			// Inserts an empty placeholder where inline content is being pulled from.
			// An event is bound to put inline content back when ColorBox closes or loads new content.
			$('<div id="cboxInlineTemp" />').hide().insertBefore($(href)[0]).bind(cbox_load+' '+cbox_cleanup, function(){
				$(this).replaceWith($loaded.children());
			});
			resize($(href));
		} else if (settings.iframe) {
			// IFrame element won't be added to the DOM until it is ready to be displayed,
			// to avoid problems with DOM-ready JS that might be trying to run in that iframe.
			resize(" ");
		} else if (settings.html) {
			resize(settings.html);
		} else if (isImage(href)){
			img = new Image();
			img.onload = function(){
				var percent;
				
				img.onload = null;
				
				img.id = 'cboxPhoto';
				
				$(img).css({margin:'auto', border:'none', display:'block', cssFloat:'left'});
				
				if(settings.scalePhotos){
					setResize = function(){
						img.height -= img.height * percent;
						img.width -= img.width * percent;	
					};
					if(settings.mw && img.width > settings.mw){
						percent = (img.width - settings.mw) / img.width;
						setResize();
					}
					if(settings.mh && img.height > settings.mh){
						percent = (img.height - settings.mh) / img.height;
						setResize();
					}
				}
				
				if (settings.h) {
					img.style.marginTop = Math.max(settings.h - img.height,0)/2 + 'px';
				}
				
				resize(img);
				
				if($related.length > 1){
					$(img).css({cursor:'pointer'}).click(cboxPublic.next);
				}
				
				if(isIE){
					img.style.msInterpolationMode='bicubic';
				}
			};
			img.src = href;
		} else {
			$('<div />').appendTo($loadingBay).load(href, function(data, textStatus){
				if(textStatus === "success"){
					resize(this);
				} else {
					resize($("<p>Request unsuccessful.</p>"));
				}
			});
		}
	};

	// Navigates to the next page/image in a set.
	cboxPublic.next = function () {
		if(!active){
			index = index < $related.length-1 ? index+1 : 0;
			cboxPublic.load();
		}
	};
	
	cboxPublic.prev = function () {
		if(!active){
			index = index > 0 ? index-1 : $related.length-1;
			cboxPublic.load();
		}
	};

	cboxPublic.slideshow = function () {
		var stop, timeOut, className = 'cboxSlideshow_';
		
		$slideshow.bind(cbox_closed, function(){
			$slideshow.unbind();
			clearTimeout(timeOut);
			$cbox.removeClass(className+"off"+" "+className+"on");
		});
		
		function start(){
			$slideshow
			.text(settings.slideshowStop)
			.bind(cbox_complete, function(){
				timeOut = setTimeout(cboxPublic.next, settings.slideshowSpeed);
			})
			.bind(cbox_load, function(){
				clearTimeout(timeOut);	
			}).one("click", function(){
				stop();
				$(this).removeClass(hover);
			});
			$cbox.removeClass(className+"off").addClass(className+"on");
		}
		
		stop = function(){
			clearTimeout(timeOut);
			$slideshow
			.text(settings.slideshowStart)
			.unbind(cbox_complete+' '+cbox_load)
			.one("click", function(){
				start();
				timeOut = setTimeout(cboxPublic.next, settings.slideshowSpeed);
				$(this).removeClass(hover);
			});
			$cbox.removeClass(className+"on").addClass(className+"off");
		};
		
		if(settings.slideshow && $related.length>1){
			if(settings.slideshowAuto){
				start();
			} else {
				stop();
			}
		}
	};

	// Note: to use this within an iframe use the following format: parent.$.fn.colorbox.close();
	cboxPublic.close = function () {
		
		$.event.trigger(cbox_cleanup);
		if (settings.onCleanup) {
			settings.onCleanup.call(element);
		}
		
		open = FALSE;
		$(document).unbind("keydown.cbox_close keydown.cbox_arrows");
		$window.unbind(cbox_resize+' resize.cboxie6 scroll.cboxie6');
		$overlay.css({cursor: 'auto'}).fadeOut('fast');
		
		$cbox
		.stop(TRUE, FALSE)
		.fadeOut('fast', function () {
			$('#colorbox iframe').attr('src', 'about:blank');
			$loaded.remove();
			$cbox.css({'opacity': 1});
			
			try{
				bookmark.focus();
			} catch (er){
				// do nothing
			}
			
			$.event.trigger(cbox_closed);
			if (settings.onClosed) {
				settings.onClosed.call(element);
			}
		});
	};

	// A method for fetching the current element ColorBox is referencing.
	// returns a jQuery object.
	cboxPublic.element = function(){ return $(element); };

	cboxPublic.settings = defaults;

	// Initializes ColorBox when the DOM has loaded
	$(cboxPublic.init);

}(jQuery));

