/********************************************************************
    File:   
        slider_a.js

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

/**********************************************
    Slider object definition.
***********************************************/
var slider_a = new Object();
slider_a.NO_HOVER = -1;
slider_a.TRANS_MODE_STRIP = 1; // not implemented
slider_a.TRANS_MODE_FADE = 2;
slider_a.TRANS_MODE_MOVE = 3; 
slider_a.mode = slider_a.TRANS_MODE_MOVE;
slider_a.MOVE_DESC_MODE = 1;
slider_a.FADE_DESC_MODE = 2;
slider_a.descMode = slider_a.MOVE_DESC_MODE;
slider_a.first_random = false;
slider_a.slides = 0;
slider_a.current = 0;
slider_a.width = 960;
slider_a.height = 300;
slider_a.transTime = 500;
slider_a.descShowTime = 2000;
slider_a.thumbWidth = 59;
slider_a.timeSwitch = 4500;
slider_a.timeCounter = 0;
slider_a.timeUpdate = 20;
slider_a.canSwitch = true;
slider_a.thumbHoverIndex = slider_a.NO_HOVER;
slider_a.allowAutoPlay = false;
slider_a.autoPlayTimerHandle = null;
slider_a.autoPlayPause = false;
slider_a.id = null;
slider_a.defHeadBGColor = '#ECECEC';
slider_a.defHeadTextColor = '#000000';  
slider_a.descOffset = 120;
slider_a.thumbBorderColorOn = '#FFFFFF';
slider_a.thumbBorderColorOff = '#000000';

/**********************************************
    SETUP
***********************************************/
slider_a.setup = function (id)
{
    slider_a.id = id;
    // if slider not exist return from function
    if(0 == $(slider_a.id).length)
    {        
        return;
    }

    // get slider context
    var c = $(slider_a.id)[0];    
    // get number of slides
    slider_a.slides = $('.slide', c).length;
    if(0 == slider_a.slides)
    {
        return;
    }

    // show first slide
    var random_slide = 0;
    if(slider_a.first_random)
    {
        random_slide = Math.floor(Math.random()*(slider_a.slides));
        slider_a.current = random_slide;
        $('.slide:eq('+random_slide+')', c).css('top', 0);
    } else
    {
        $('.slide:first', c).css('top', 0);    
    }    
       
    // bind action to next and prev button
    $('.next', c).click(slider_a.next); 
    $('.prev', c).click(slider_a.prev);
    $('.play', c).click(slider_a.play); 
    $('.pause', c).click(slider_a.pause);
    
    // show first thumb
    $('.thumb', c).css('border', '1px solid '+slider_a_f.thumbBorderColorOff);
    if(slider_a.first_random)
    {
        $('.thumb:eq('+random_slide+')', c).css('border', '1px solid '+slider_a.thumbBorderColorOn).find('.color').css('display', 'block'); 
        $('.thumb:eq('+random_slide+')', c).find('.black').css('display', 'none');        
    } else
    {    
        $('.thumb:first', c).css('border', '1px solid '+slider_a.thumbBorderColorOn).find('.color').css('display', 'block'); 
        $('.thumb:first', c).find('.black').css('display', 'none');
    }    
    
    // bind action to hover thumb event
    $('.thumb', c).hover(slider_a.hoverThumbIn, slider_a.hoverThumbOut);
    $('.thumb', c).click(slider_a.thumbClick);              
    
    slider_a.showDesc(slider_a.current);
    
    if(!slider_a.allowAutoPlay)
    {
        $('.play', c).css('display', 'block');
        $('.pause', c).css('display', 'none');
        slider_a.autoPlayPause = true;        
    }
    
    // run autoplay
    if(slider_a.allowAutoPlay)
    {
        slider_a.autoPlayTimerHandle = setTimeout(slider_a.autoplay, slider_a.timeUpdate);
    } 
}

/**********************************************
    PAUSE
***********************************************/
slider_a.pause = function ()
{
    $(this).css('display', 'none');
    var c = $(slider_a.id)[0];
    $('.play', c).css('display', 'block');
    
    slider_a.autoPlayPause = true;
    
//    var ni = slider_a.getNextIndex();
//    $('.thumb:eq('+ni+')', c).find('.color').css('display', 'none');
//    slider_a.timeCounter = 0;    
}

/**********************************************
    PLAY
***********************************************/
slider_a.play = function ()
{
    $(this).css('display', 'none');
    var c = $(slider_a.id)[0];
    $('.pause', c).css('display', 'block');  
    
    slider_a.autoPlayPause = false;
    slider_a.allowAutoPlay = true;
    if(slider_a.allowAutoPlay)
    {
        clearTimeout(slider_a.autoPlayTimerHandle);
        slider_a.autoPlayTimerHandle = setTimeout(slider_a.autoplay, slider_a.timeUpdate);
    }    
}

/**********************************************
    SHOW DESC
***********************************************/
slider_a.showDesc = function (index)
{   
    var c = $(slider_a.id)[0]; 
    var h = $('.desc:eq('+index+')', c);

    if(h.length > 0)
    {
        var x = $(h).find('.x');
        var y = $(h).find('.y');
        var width = $(h).find('.width');
        if(x.length > 0)
        {
           var hbgcolor = $(h).find('.hbgcolor');
           if(hbgcolor.length > 0) { hbgcolor = hbgcolor.text(); } else { hbgcolor = slider_a.defHeadBGColor; }
           
           var hcolor = $(h).find('.hcolor');
           if(hcolor.length > 0) { hcolor = hcolor.text(); } else { hcolor = slider_a.defHeadTextColor; }           
          
           if(slider_a.descMode == slider_a.MOVE_DESC_MODE)
           {
               $(h).css('opacity', 0.0).css('top', parseInt(y.text())+slider_a.descOffset).css('left', parseInt(x.text())).css('display', 'block');
               $(h).find('.head').css('width', parseInt(width.text())).css('background-color', hbgcolor).css('color', hcolor);
               $(h).find('.foot').css('width', parseInt(width.text()));         
               $(h).animate({top:parseInt(y.text()), opacity:0.95}, slider_a.descShowTime);
           } else
           if(slider_a.descMode == slider_a.FADE_DESC_MODE)
           {
               $(h).css('opacity', 0.0).css('top', parseInt(y.text())).css('left', parseInt(x.text())).css('display', 'block');
               $(h).find('.head').css('width', parseInt(width.text())).css('background-color', hbgcolor).css('color', hcolor);
               $(h).find('.foot').css('width', parseInt(width.text()));         
               $(h).animate({top:parseInt(y.text()), opacity:0.95}, slider_a.descShowTime);           
           }                      
        }
    }
}

/**********************************************
    HIDE DESC
***********************************************/
slider_a.hideDesc = function (index)
{   
    var c = $(slider_a.id)[0];
    var h = $('.desc:eq('+index+')', c);
    $(h).css('display', 'none');
}

/**********************************************
    AUTOPLAY
***********************************************/
slider_a.autoplay = function ()
{
    if(slider_a.autoPlayPause)
    {
        if(slider_a.allowAutoPlay)
        {
            slider_a.autoPlayTimerHandle = setTimeout(slider_a.autoplay, slider_a.timeUpdate);
        }
        return;
    } 

    var ni = slider_a.getNextIndex();
    slider_a.timeCounter += slider_a.timeUpdate;
    var width = (slider_a.timeCounter / slider_a.timeSwitch) * slider_a.thumbWidth;
    if(width > slider_a.thumbWidth)
    {
        width = slider_a.thumbWidth; 
    }
    
    var c = $(slider_a.id)[0]; 
    $('.thumb:eq('+ni+')', c).find('.color').css('z-index', 17).css('display', 'block').css('width', width);
    $('.thumb:eq('+ni+')', c).find('.black').css('z-index', 16).css('display', 'block');     
    
    if(width == slider_a.thumbWidth)
    {
       slider_a.timeCounter = 0;
       slider_a.next();       
    }
    
    if(slider_a.allowAutoPlay)
    {
       slider_a.autoPlayTimerHandle = setTimeout(slider_a.autoplay, slider_a.timeUpdate);
    }  
}

/**********************************************
    HOVER THUMB IN
***********************************************/
slider_a.hoverThumbIn = function ()
{
    var c = $(slider_a.id)[0];
    var index = $('.thumb', c).index(this);
    slider_a.thumbHoverIndex = index;
}

/**********************************************
    HOVER THUMB OUT
***********************************************/
slider_a.hoverThumbOut = function ()
{
    var c = $(slider_a.id)[0];
    var index = $('.thumb', c).index(this);
    slider_a.thumbHoverIndex = slider_a.NO_HOVER;
}

/**********************************************
    THUMB CLICK
***********************************************/
slider_a.thumbClick = function ()
{
    var c = $(slider_a.id)[0];
    var index = $('.thumb', c).index(this); 
    
    // if cant switch slides return
    if(!slider_a.canSwitch)
    {
        return;
    }
    
   switch(slider_a.mode)
   {
        case slider_a.TRANS_MODE_FADE:
          slider_a.selectedFade(index);
        break; 
        case slider_a.TRANS_MODE_MOVE:
          slider_a.selectedMove(index);
        break;         
   }            
}

/**********************************************
    SELECTED FADE
***********************************************/
slider_a.selectedFade = function(index)
{
    // if cliked slide is already displayed return form function
    var ns = index; // next slide
    if(slider_a.current == ns)
    {
        return;
    }
    
    slider_a.canSwitch = false;    
    var cs = slider_a.current; // current slide
    
    slider_a.hideDesc(cs);
    
    // set z index of current slide
    var c = $(slider_a.id)[0];
    $('.slide:eq('+cs+')', c).css('z-index', 1);
    $('.slide:eq('+ns+')', c).css('z-index', 0).css('top', 0).css('opacity', 0.0);
    
    $('.slide:eq('+cs+')', c).animate({opacity:0.0}, slider_a.transTime);
    $('.slide:eq('+ns+')', c).animate({opacity:1.0}, slider_a.transTime, 
        function () {
            slider_a.canSwitch = true;
            $('.slide:eq('+cs+')', c).css('top', slider_a.height); 
            slider_a.showDesc(ns);
            });
    
    slider_a.current = ns;
    slider_a.showThumb(index);
}

/**********************************************
    SELECTED MOVE
***********************************************/
slider_a.selectedMove = function(index)
{
    // if cliked slide is already displayed return form function
    var ns = index; // next slide
    if(slider_a.current == ns)
    {
        return;
    }
    
    slider_a.canSwitch = false;    
    var cs = slider_a.current; // current slide
    
    slider_a.hideDesc(cs);
    
    // set z index of current slide
    var c = $(slider_a.id)[0];
    $('.slide:eq('+cs+')', c).css('z-index', 1);
    $('.slide:eq('+ns+')', c).css('z-index', 2).css('left', (ns > cs ? slider_a.width : -slider_a.width)).css('top', 0).css('opacity', 1.0);
    
    $('.slide:eq('+ns+')', c).animate({left:0}, slider_a.transTime, 
        function () {
            slider_a.canSwitch = true;
            $('.slide:eq('+cs+')', c).css('top', slider_a.height);
            slider_a.showDesc(ns); 
            }
            
            );
    
    slider_a.current = ns;
    slider_a.showThumb(index);
}


/**********************************************
    SHOW THUMB
***********************************************/
slider_a.showThumb = function(index)  
{
    slider_a.timeCounter = 0;    

    var c = $(slider_a.id)[0]; 
    
    $('.thumb', c).css('border', '1px solid '+slider_a.thumbBorderColorOff).find('.black').css('display', 'block').css('z-index', 17); 
    $('.thumb', c).find('.color').css('display', 'none').css('z-index', 16).css('width', slider_a.thumbWidth); 
    
    $('.thumb:eq('+index+')', c).css('border', '1px solid '+slider_a.thumbBorderColorOn).find('.color').css('display', 'block').css('z-index', 17);
    $('.thumb:eq('+index+')', c).find('.black').css('display', 'none').css('z-index', 16);  
}

/**********************************************
    GET NEXT INDEX
***********************************************/
slider_a.getNextIndex = function()
{
    // get index of next slide
    var nextslide = slider_a.current + 1;
    if(nextslide >= slider_a.slides)       
    {
       nextslide = 0;
    }    
    return nextslide;
}

/**********************************************
    NEXT
***********************************************/
slider_a.next = function()
{
    // if cant switch slides return
    if(!slider_a.canSwitch)
    {
        return;
    }
    
   switch(slider_a.mode)
   {
        case slider_a.TRANS_MODE_FADE:
          slider_a.nextFade();
        break; 
        case slider_a.TRANS_MODE_MOVE:
          slider_a.nextMove();
        break;         
   }
   
}

/**********************************************
    NEXT FADE
***********************************************/
slider_a.nextFade = function()
{
    slider_a.canSwitch = false;
    var ns = slider_a.getNextIndex();
    var cs = slider_a.current;
    
    slider_a.hideDesc(cs); 
    
    // set z index of current slide
    var c = $(slider_a.id)[0]; 
    $('.slide:eq('+cs+')', c).css('z-index', 1);
    $('.slide:eq('+ns+')', c).css('z-index', 0).css('top', 0).css('opacity', 0.0);
    
    $('.slide:eq('+cs+')', c).animate({opacity:0.0}, slider_a.transTime);
    $('.slide:eq('+ns+')', c).animate({opacity:1.0}, slider_a.transTime, 
        function () {
            slider_a.canSwitch = true;
            $('.slide:eq('+cs+')', c).css('top', slider_a.height);
            slider_a.showDesc(ns);
            });
    
    slider_a.current = ns;
    slider_a.showThumb(slider_a.current);
}

/**********************************************
    NEXT MOVE
***********************************************/
slider_a.nextMove = function()
{
    slider_a.canSwitch = false;
    var ns = slider_a.getNextIndex(); // next slide
    var cs = slider_a.current; // current slide
    
    slider_a.hideDesc(cs);
    
    // set z index of current slide
    var c = $(slider_a.id)[0];
    $('.slide:eq('+cs+')', c).css('z-index', 1);
    $('.slide:eq('+ns+')', c).css('z-index', 2).css('left', slider_a.width).css('top', 0).css('opacity', 1.0);
    
    $('.slide:eq('+ns+')', c).animate({left:0}, slider_a.transTime, 
        function () {
            slider_a.canSwitch = true;        
            $('.slide:eq('+cs+')', c).css('top', slider_a.height); 
            slider_a.showDesc(ns);
            }
            
            );
    
    slider_a.current = ns;
    slider_a.showThumb(slider_a.current);
}

/**********************************************
    PREV MOVE
***********************************************/
slider_a.prevMove = function()
{
    slider_a.canSwitch = false;
    var ns = slider_a.getPrevIndex(); // next slide
    var cs = slider_a.current; // current slide 
    
    slider_a.hideDesc(cs); 
    
    // set z index of current slide
    var c = $(slider_a.id)[0];
    $('.slide:eq('+cs+')', c).css('z-index', 1);
    $('.slide:eq('+ns+')', c).css('z-index', 2).css('left', -slider_a.width).css('top', 0).css('opacity', 1.0);
    
    $('.slide:eq('+ns+')', c).animate({left:0}, slider_a.transTime, 
        function () {
            slider_a.canSwitch = true;
            $('.slide:eq('+cs+')', c).css('top', slider_a.height);
            slider_a.showDesc(ns); 
            }
            
            );
    
    slider_a.current = ns;
    slider_a.showThumb(slider_a.current);
}

/**********************************************
    GET PREV INDEX
***********************************************/
slider_a.getPrevIndex = function()
{
    // get index of prev slide
    var prevslide = slider_a.current - 1;
    if(prevslide < 0)       
    {
       prevslide = slider_a.slides - 1;
    }    
    return prevslide;
}

/**********************************************
    PREV
***********************************************/
slider_a.prev = function()
{
    // if cant switch slides return
    if(!slider_a.canSwitch)
    {
        return;
    }
    
   switch(slider_a.mode)
   {
        case slider_a.TRANS_MODE_FADE:
          slider_a.prevFade();
        break; 
        case slider_a.TRANS_MODE_MOVE:
          slider_a.prevMove();
        break;         
   }
}

/**********************************************
    PREV FADE
***********************************************/
slider_a.prevFade = function()
{
    slider_a.canSwitch = false;
    var ns = slider_a.getPrevIndex();
    var cs = slider_a.current;
    
    slider_a.hideDesc(cs);
    
    // set z index of current slide
    var c = $(slider_a.id)[0];
    $('.slide:eq('+cs+')', c).css('z-index', 1);
    $('.slide:eq('+ns+')', c).css('z-index', 0).css('top', 0).css('opacity', 0.0);
    
    $('.slide:eq('+cs+')', c).animate({opacity:0.0}, slider_a.transTime);
    $('.slide:eq('+ns+')', c).animate({opacity:1.0}, slider_a.transTime, 
        function () {
            slider_a.canSwitch = true;
            slider_a.showDesc(ns);
            });
    
    slider_a.current = ns;
    slider_a.showThumb(slider_a.current);
}

