/*
 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
 *
 * Uses the built in easing capabilities added In jQuery 1.1
 * to offer multiple easing options
 *
 * TERMS OF USE - jQuery Easing
 * 
 * Open source under the BSD License. 
 * 
 * Copyright © 2008 George McGinley Smith
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * Neither the name of the author nor the names of contributors may be used to endorse 
 * or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE. 
 *
*/

// t: current time, b: begInnIng value, c: change In value, d: duration
jQuery.easing['jswing'] = jQuery.easing['swing'];

jQuery.extend( jQuery.easing,
{
    def: 'easeOutQuad',
    swing: function (x, t, b, c, d) {
        //alert(jQuery.easing.default);
        return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
    },
    easeInQuad: function (x, t, b, c, d) {
        return c*(t/=d)*t + b;
    },
    easeOutQuad: function (x, t, b, c, d) {
        return -c *(t/=d)*(t-2) + b;
    },
    easeInOutQuad: function (x, t, b, c, d) {
        if ((t/=d/2) < 1) return c/2*t*t + b;
        return -c/2 * ((--t)*(t-2) - 1) + b;
    },
    easeInCubic: function (x, t, b, c, d) {
        return c*(t/=d)*t*t + b;
    },
    easeOutCubic: function (x, t, b, c, d) {
        return c*((t=t/d-1)*t*t + 1) + b;
    },
    easeInOutCubic: function (x, t, b, c, d) {
        if ((t/=d/2) < 1) return c/2*t*t*t + b;
        return c/2*((t-=2)*t*t + 2) + b;
    },
    easeInQuart: function (x, t, b, c, d) {
        return c*(t/=d)*t*t*t + b;
    },
    easeOutQuart: function (x, t, b, c, d) {
        return -c * ((t=t/d-1)*t*t*t - 1) + b;
    },
    easeInOutQuart: function (x, t, b, c, d) {
        if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
        return -c/2 * ((t-=2)*t*t*t - 2) + b;
    },
    easeInQuint: function (x, t, b, c, d) {
        return c*(t/=d)*t*t*t*t + b;
    },
    easeOutQuint: function (x, t, b, c, d) {
        return c*((t=t/d-1)*t*t*t*t + 1) + b;
    },
    easeInOutQuint: function (x, t, b, c, d) {
        if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
        return c/2*((t-=2)*t*t*t*t + 2) + b;
    },
    easeInSine: function (x, t, b, c, d) {
        return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
    },
    easeOutSine: function (x, t, b, c, d) {
        return c * Math.sin(t/d * (Math.PI/2)) + b;
    },
    easeInOutSine: function (x, t, b, c, d) {
        return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
    },
    easeInExpo: function (x, t, b, c, d) {
        return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
    },
    easeOutExpo: function (x, t, b, c, d) {
        return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
    },
    easeInOutExpo: function (x, t, b, c, d) {
        if (t==0) return b;
        if (t==d) return b+c;
        if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
        return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
    },
    easeInCirc: function (x, t, b, c, d) {
        return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
    },
    easeOutCirc: function (x, t, b, c, d) {
        return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
    },
    easeInOutCirc: function (x, t, b, c, d) {
        if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
        return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
    },
    easeInElastic: function (x, t, b, c, d) {
        var s=1.70158;var p=0;var a=c;
        if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
        if (a < Math.abs(c)) { a=c; var s=p/4; }
        else var s = p/(2*Math.PI) * Math.asin (c/a);
        return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
    },
    easeOutElastic: function (x, t, b, c, d) {
        var s=1.70158;var p=0;var a=c;
        if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
        if (a < Math.abs(c)) { a=c; var s=p/4; }
        else var s = p/(2*Math.PI) * Math.asin (c/a);
        return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
    },
    easeInOutElastic: function (x, t, b, c, d) {
        var s=1.70158;var p=0;var a=c;
        if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
        if (a < Math.abs(c)) { a=c; var s=p/4; }
        else var s = p/(2*Math.PI) * Math.asin (c/a);
        if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
        return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
    },
    easeInBack: function (x, t, b, c, d, s) {
        if (s == undefined) s = 1.70158;
        return c*(t/=d)*t*((s+1)*t - s) + b;
    },
    easeOutBack: function (x, t, b, c, d, s) {
        if (s == undefined) s = 1.70158;
        return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
    },
    easeInOutBack: function (x, t, b, c, d, s) {
        if (s == undefined) s = 1.70158; 
        if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
        return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
    },
    easeInBounce: function (x, t, b, c, d) {
        return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
    },
    easeOutBounce: function (x, t, b, c, d) {
        if ((t/=d) < (1/2.75)) {
            return c*(7.5625*t*t) + b;
        } else if (t < (2/2.75)) {
            return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
        } else if (t < (2.5/2.75)) {
            return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
        } else {
            return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
        }
    },
    easeInOutBounce: function (x, t, b, c, d) {
        if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
        return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
    }
});

/*
 *
 * TERMS OF USE - EASING EQUATIONS
 * 
 * Open source under the BSD License. 
 * 
 * Copyright © 2001 Robert Penner
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * Neither the name of the author nor the names of contributors may be used to endorse 
 * or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE. 
 *
 */

// Javascript for Campaign for Leadership slider
var sliderNumber = 6; //The number of items in the slider
var currentNumber = 1; // Set to 1 for first item

$(document).ready(function(){
    
    // sets content overlays to 0, and animates the first one in
    $('div.campaignSliderContentOverlay').css({'bottom': -100, 'overflow': 'hidden'});
    $('div#campaignSliderContent > ul > li.current > div.campaignSliderContentOverlay').animate({bottom: 0}, 500);
    
    // Sets interval
    var sliderInterval = self.setInterval('intervalFunction()',5000);
    
    // function - Hover on content area, pause interval 
    $('div#campaignSliderContent').bind('mouseover', function(){
        clearInterval(sliderInterval);
    }).bind('mouseout', function(){
        sliderInterval = self.setInterval('intervalFunction()',5000);
    });
    
    // function - hover on menu
    $('div#campaignSliderMenu > ul > li').bind('mouseover', function(){
    
        // Stops interval   
        clearInterval(sliderInterval);
        
        // Gets the hovered items number from its class as current number
        var hoverNumber = $(this).attr('class').replace('sliderItem','');
        currentNumber = parseFloat(hoverNumber);
        var selectorTop = currentNumber*35 + 38;
        
        // removes "current" class, turns text grey again
        $('div#campaignSliderMenu > ul > li').removeClass('current');
        
        // slides overlay down, removes current content
        $('div#campaignSliderContent > ul > li.current > div.campaignSliderContentOverlay').stop().animate({bottom: -100}, 500,'easeOutQuart',function(){
            $('div#campaignSliderContent > ul > li').removeClass('current');
        });
        
        // slides selector to new position, adds new content, slides in overlay
        $('span#sliderItemSelector').stop().animate({top: selectorTop}, 500, 'easeOutQuart', function(){
            $('li.sliderItem'+currentNumber).addClass('current');
            $('div#campaignSliderContent > ul > li.current > div.campaignSliderContentOverlay').animate({bottom: 0}, 500);
        });
    })
    // function - hover off menu
    .bind('mouseout', function(){
        // resets interval
        sliderInterval = self.setInterval('intervalFunction()',5000);
    });
});

// function called when interval
function intervalFunction(){

    // adds 1 to currentNumber until sliderNumber
    if (currentNumber < sliderNumber){
        currentNumber++;
    }
    else{
        currentNumber = 1;
    }
    
    // calculates selectorTop again
    var selectorTop = currentNumber*35 + 38;
    
    // removes "current" class, turns text grey again
    $('div#campaignSliderMenu > ul > li').removeClass('current');
    
    // slides overlay down, removes current content
    $('div#campaignSliderContent > ul > li.current > div.campaignSliderContentOverlay').stop().animate({bottom: -100}, 500,'easeOutQuart',function(){
        $('div#campaignSliderContent > ul > li').removeClass('current');
    });
    
    // slides selector to new position, adds new content, slides in overlay
    $('span#sliderItemSelector').stop().animate({top: selectorTop}, 500, 'easeOutQuart', function(){
            $('li.sliderItem'+currentNumber).addClass('current');
            $('div#campaignSliderContent > ul > li.current > div.campaignSliderContentOverlay').animate({bottom: 0}, 500);
    });
}

/* Progress Bar code */

$(document).ready(function(){

    var progressTotal = parseInt($('span#campaignProgressFinish').text().replace('$','').replace(/,/gi,''));
    var progressAmount = parseInt($('span#campaignProgressAmount').text().replace('$','').replace(/,/gi,''));
    
    var progressPercent = (progressAmount / progressTotal)*100+'%';
    
    var progressSpeed = 4000 * (progressAmount / progressTotal);
    
    $('div#campaignProgressBarFill').animate({width: progressPercent}, progressSpeed, 'easeOutExpo');
    
    
    if (progressAmount/progressTotal < 0.01){
        $('div#campaignProgressBarFill').addClass('low');
    }
    else if (progressAmount/progressTotal > 0.985){
        $('div#campaignProgressBarFill').addClass('almost');
    }
    
});

// THUMBNAIL SLIDER

(function ($) {
    $.fn.thumbnailSlider = function (options) {
        var opts = $.extend({}, $.fn.thumbnailSlider.defaults, options);
        return this.each(function () {
            var $this = $(this),
                            o = $.meta ? $.extend({}, opts, $pxs_container.data()) : opts;

            var $ts_container = $this.children('.ts_container'),
                            $ts_thumbnails = $ts_container.children('.ts_thumbnails'),
                            $nav_elems = $ts_container.children('li').not($ts_thumbnails),
                            total_elems = $nav_elems.length,
                            $ts_preview_wrapper = $ts_thumbnails.children('.ts_preview_wrapper'),
                            $arrow = $ts_thumbnails.children('span'),
                            $ts_preview = $ts_preview_wrapper.children('.ts_preview');

            /*
            calculate sizes for $ts_thumbnails:
            width   -> width thumbnail + border (2*5)
            height  -> height thumbnail + border + triangle height(6)
            top     -> -(height plus margin of 5)
            left    -> leftDot - 0.5*width + 0.5*widthNavDot 
            this will be set when hovering the nav,
            and the default value will correspond to the first nav dot  
            */
            var w_ts_thumbnails = o.thumb_width + 2 * 5,
                            h_ts_thumbnails = o.thumb_height + 2 * 5 + 6,
                            t_ts_thumbnails = -(h_ts_thumbnails + 5),
                            $first_nav = $nav_elems.eq(0),
                            l_ts_thumbnails = $first_nav.position().left - 0.5 * w_ts_thumbnails + 0.5 * $first_nav.width();

            $ts_thumbnails.css({
                width: w_ts_thumbnails + 'px',
                height: h_ts_thumbnails + 'px',
                top: t_ts_thumbnails + 'px',
                left: l_ts_thumbnails + 'px'
            });

            /*
            calculate the top and left for the arrow of the tooltip
            top     -> thumb height + border(2*5)
            left    -> (thumb width + border)/2 -width/2
            */
            var t_arrow = o.thumb_height + 2 * 5,
                            l_arrow = (o.thumb_width + 2 * 5) / 2 - $arrow.width() / 2;
            $arrow.css({
                left: l_arrow + 'px',
                top: t_arrow + 'px'
            });

            /*
            calculate the $ts_preview width -> thumb width times number of thumbs
            */
            $ts_preview.css('width', total_elems * o.thumb_width + 'px');

            /*
            set the $ts_preview_wrapper width and height -> thumb width / thumb height
            */
            $ts_preview_wrapper.css({
                width: o.thumb_width + 'px',
                height: o.thumb_height + 'px'
            });

            //hover the nav elems
            $nav_elems.bind('mouseenter', function () {
                var $nav_elem = $(this),
                                idx = $nav_elem.index();

                /*
                calculate the new left
                for $ts_thumbnails
                */
                var new_left = $nav_elem.position().left - 0.5 * w_ts_thumbnails + 0.5 * $nav_elem.width();

                $ts_thumbnails.stop(true)
                                          .show()
                                          .animate({
                                              left: new_left + 'px'
                                          }, o.speed, o.easing);

                /*
                animate the left of the $ts_preview to show the right thumb 
                */
                $ts_preview.stop(true)
                                       .animate({
                                           left: -idx * o.thumb_width + 'px'
                                       }, o.speed, o.easing);

                //zoom in the thumb image if zoom is true
                if (o.zoom && o.zoomratio > 1) {
                    var new_width = o.zoomratio * o.thumb_width,
                                    new_height = o.zoomratio * o.thumb_height;

                    //increase the $ts_preview width in order to fit the zoomed image
                    var ts_preview_w = $ts_preview.width();
                    $ts_preview.css('width', (ts_preview_w - o.thumb_width + new_width) + 'px');

                    $ts_preview.children().eq(idx).find('img').stop().animate({
                        width: new_width + 'px',
                        height: new_height + 'px'
                    }, o.zoomspeed);
                }

            }).bind('mouseleave', function () {
                //if zoom set the width and height to defaults
                if (o.zoom && o.zoomratio > 1) {
                    var $nav_elem = $(this),
                                    idx = $nav_elem.index();
                    $ts_preview.children().eq(idx).find('img').stop().css({
                        width: o.thumb_width + 'px',
                        height: o.thumb_height + 'px'
                    });
                }

                $ts_thumbnails.stop(true)
                                          .hide();

            }).bind('click', function () {
                var $nav_elem = $(this),
                                idx = $nav_elem.index();

                o.onClick(idx);
            });

        });
    };
    $.fn.thumbnailSlider.defaults = {
        speed: 100, //speed of each slide animation
        easing: 'jswing', //easing effect for the slide animation
        thumb_width: 75, //your photos width
        thumb_height: 75, //your photos height
        zoom: false, //zoom animation for the thumbs
        zoomratio: 1.3, //multiplicator for zoom (must be > 1)
        zoomspeed: 15000, //speed of zoom animation
        onClick: function () { return false; } //click callback
    };
})(jQuery);

// PARALLAX

//GLOBAL VARIABLES
var parallaxRoot,
viewPortWidth = 960,
bgImageSlideWidth = 960,
forgroundSlideWidth = 1200,
bgImagesSlidesContainer = null,
forgroundSlidesContainer = null,
forgroundSlidesContainerWidth = 32000,
slidesCount = 0,
currentSlide = 1,
thumbnails = null;



$(document).ready(function () {
/*
    function startTimer()
    {
            panelIntervalTimer = setInterval(function()
            {
                $(".prevNextBtns .next").click();
            },8000);
    }   
*/
    $('#parallaxBanner').each(function () {
        parallaxRoot = $(this);

        //INITIALIZE VAR's & SET WIDTHS
        slidesCount = parallaxRoot.find('.parallaxBGs li').size();
        bgImagesSlidesContainer = parallaxRoot.find('.parallaxBGs').filter(':first');
        forgroundSlidesContainer = parallaxRoot.find('.parallaxForground').filter(':first');
        bgImageSlideWidth = viewPortWidth;
        thumbnails = $('#parallaxThumbs > ul');
        $('ul.ts_container').width(slidesCount * 25);

        //set the width of each forground slide to be wider then the width of the view port
        forgroundSlideWidth = viewPortWidth + 300;
        forgroundSlidesContainer.find('li').width(forgroundSlideWidth);

        //set the bgImages & forground Container to the width of each of it's containing slides        
        bgImagesSlidesContainer.width(bgImageSlideWidth * slidesCount);
        forgroundSlidesContainer.width(forgroundSlideWidth * slidesCount);

        //INITILIZE THUMBS PLUGIN
        $('#parallaxThumbs').thumbnailSlider({
            thumb_width: 130,
            thumb_height: 87,
            easing: 'easeOutExpo', //easeInBack
            speed: 600
        });

        //INITIALIZE NAVIGATION
        thumbnails.find('li').filter(':first').addClass('selected');

        thumbnails.find('>li').click(function () {
            var clickedIndex = thumbnails.find('>li').index($(this));
            rotateBanner(clickedIndex + 1);
        });

        $('#parallaxNextPrev .prev').click(function () {
            var slideNumber = currentSlide;
            if (currentSlide > 1) {
                slideNumber--;
            }
            else (slideNumber = 3);
            rotateBanner(slideNumber);
        });
        
        $('#parallaxNextPrev .next').click(function () {
            var slideNumber = currentSlide;
            if (currentSlide < slidesCount) {
                slideNumber++;
            }
            else (slideNumber = 1);
            rotateBanner(slideNumber);
        });
//        startTimer();
    });
/*
    $("div#siteWrapper").hover(function(){
            clearInterval(panelIntervalTimer);  
    },function(){});
*/

});

function rotateBanner(slideNumber) {

    if (slideNumber != currentSlide) {

        thumbnails.find('>li').removeClass('selected');
        
        currentSlide = slideNumber;
        var multiplyBy = slideNumber - 1;

        thumbnails.find('>li:eq(' + multiplyBy + ')').addClass('selected');

        var bgDistance = bgImageSlideWidth * multiplyBy;
        var forgroudnDistance = forgroundSlideWidth * multiplyBy;

        bgImagesSlidesContainer.animate({ 'margin-left': '-' + bgDistance + 'px' }, 900);
        forgroundSlidesContainer.animate({ 'margin-left': '-' + forgroudnDistance + 'px' }, 920);
    }
}

