﻿/// <reference path="jquery-1.4.1-vsdoc.js" />

// JavaScript functions for ploughmains main page

var currentSlide = 0;
var totalSlides = 0;
var currentlyAnimatingSlide = -1;
var slideCopySelector = "#Rotators .Panels .Item:eq({0})";
var slideMenuSelector = "#Rotators .Pager .Button:eq({0})";
var intervalId = 0;

// ----------- Slide rotation code ----------- //

function displaySlide(slideIndex, isShow) {
    var slideElement = $(String.format(slideCopySelector, slideIndex)).stop();
    var menuElement = $(String.format(slideMenuSelector, slideIndex)).stop();

    if (isShow)
        slideElement.customShow();
    else
        slideElement.hide();

    changeMenuImage(menuElement, isShow);
}

function rotateSlide() {
    scrollSlide((currentSlide + 1) % totalSlides);
}

function initRotator() {
    // count all items
    totalSlides = $("#Rotators .Panels .Item").size();
    if (totalSlides == 0)
        return;

    // set first rotator
    currentSlide = 0;
    displaySlide(0, true);

    // setup the right hand menu
    $("#Rotators .Pager .Button").each(function(index) {
        $(this).click(function() {
            startRotator();
            scrollSlide(index);
            return false;
        });
    });

    // set pause
    $("#Rotators .Panels").hover(function() {
        stopRotator();
    }, function() {
        startRotatorAdvance(true);
    });

    // gogo
    startRotator();
}

function startRotatorAdvance(advance) {
    stopRotator();
    if (advance)
        rotateSlide();
    intervalId = setInterval("rotateSlide()", 6000);
}

function startRotator() {
    startRotatorAdvance(false);
}

function stopRotator() {
    if (intervalId != 0)
        clearInterval(intervalId);
    intervalId = 0;
}

function changeMenuImage(menuItem, state) {
    if (state) {
        var onImageUrl = menuItem.attr("src").replace("_Normal", "_Over");
        menuItem.attr("src", onImageUrl);
    }
    else {
        var onImageUrl = menuItem.attr("src").replace("_Over", "_Normal");
        menuItem.attr("src", onImageUrl);
    }
    menuItem.toggleClass("Activated", state);
}

function fadeSlide(slideIndex, isFadeIn, callback) {
    var slideElement = $(String.format(slideCopySelector, slideIndex)).stop();
    var menuElement = $(String.format(slideMenuSelector, slideIndex)).stop();

    if (isFadeIn)
        slideElement.customFadeIn(200, callback);
    else
        slideElement.customFadeOut(200, callback);

    changeMenuImage(menuElement, isFadeIn);
}

// hide current slide, fade in slide at targetSlide
function scrollSlide(targetSlide) {
    // don't interfere with animation unless changed mind
    if (targetSlide == currentlyAnimatingSlide)
        return;
    if (targetSlide == currentSlide)
        return; // cannot go 'back' to a slide while animating away from it


    if (currentlyAnimatingSlide >= 0) {
        // if already mid-animation, jump ahead to the end of the last animation to begin this
        displaySlide(currentSlide, false);
        displaySlide(currentlyAnimatingSlide, true);
        currentSlide = currentlyAnimatingSlide;
    }

    currentlyAnimatingSlide = targetSlide;
    var target = String.format(slideCopySelector, targetSlide);
    var current = String.format(slideCopySelector, currentSlide);

    // let's do this animation
    fadeSlide(currentSlide, false, function() {
        fadeSlide(targetSlide, true, function() {
            displaySlide(currentSlide, false);
            currentSlide = currentlyAnimatingSlide;
            currentlyAnimatingSlide = -1;
        });
    });
}

$(function() {
    // setup the slide rotator, or do nothing if not given
    initRotator();
});

