/**
 * jqFancyTransitions - jQuery plugin
 * @version: 1.8 (2010/06/13)
 * @requires jQuery v1.2.2 or later 
 * @author Ivan Lazarevic
 * Examples and documentation at: http://www.workshop.rs/projects/jqfancytransitions
 
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
**/

(function ($) {
    var opts = new Array;
    var level = new Array;
    var img = new Array;
    var links = new Array;
    var titles = new Array;
    var order = new Array;
    var imgInc = new Array;
    var inc = new Array;
    var stripInt = new Array;
    var imgInt = new Array;
    $.fn.jqFancyTransitions = $.fn.jqfancytransitions = function (options) {
        init = function (el) {
            opts[el.id] = $.extend({}, $.fn.jqFancyTransitions.defaults, options);
            img[el.id] = new Array();
            links[el.id] = new Array();
            titles[el.id] = new Array();
            order[el.id] = new Array();
            imgInc[el.id] = 0; inc[el.id] = 0; params = opts[el.id];
            if (params.effect == 'zipper') { params.direction = 'alternate'; params.position = 'alternate'; }
            if (params.effect == 'wave') { params.direction = 'alternate'; params.position = 'top'; }
            if (params.effect == 'curtain') { params.direction = 'alternate'; params.position = 'curtain'; }
            stripWidth = parseInt(params.width / params.strips); gap = params.width - stripWidth * params.strips; stripLeft = 0;
            $.each($('#' + el.id + ' img'), function (i, item) {
                img[el.id][i] = $(item).attr('src');
                links[el.id][i] = $(item).next().attr('href'); titles[el.id][i] = $(item).attr('alt') ? $(item).attr('alt') : ''; $(item).hide();
            });
            $('#' + el.id).css({ 'background-image': 'url(' + img[el.id][0] + ')', 'width': params.width, 'height': params.height, 'position': 'relative', 'background-position': 'center', 'background-repeat': 'no-repeat' });
            $('#' + el.id).append("<div class='ft-title' id='ft-title-" + el.id + "' style='font-family:Meera;position: absolute;width:100%;font-size:20;font-weight:bold; bottom:0; left: 0; z-index: 1000; color: #fff; background-color: #D11513; '>" + titles[el.id][0] + "</div>");
            if (titles[el.id][imgInc[el.id]])
                $('#ft-title-' + el.id).css('opacity', opts[el.id].titleOpacity);
            else
                $('#ft-title-' + el.id).css('opacity', 0);
            if (params.navigation) {
                //alert('hi');

                $.navigation(el);
                $('#ft-buttons-' + el.id).children('[class^="ft-button-"]').first().addClass('ft-button-' + el.id + '-active');

            }
            odd = 1;
            for (j = 1; j < params.strips + 1; j++) {
                if (gap > 0) { tstripWidth = stripWidth + 1; gap--; }
                else { tstripWidth = stripWidth; }
                if (params.links)
                    $('#' + el.id).append("<a href='" + links[el.id][0] + "' class='ft-" + el.id + "' id='ft-" + el.id + j + "' style='width:" + tstripWidth + "px; height:" + params.height + "px; float: left; position: absolute;outline:none;'></a>");
                else
                    $('#' + el.id).append("<div class='ft-" + el.id + "' id='ft-" + el.id + j + "' style='width:" + tstripWidth + "px; height:" + params.height + "px; float: left; position: absolute;'></div>");
                $("#ft-" + el.id + j).css({ 'background-position': -stripLeft + 'px top', 'left': stripLeft });
                stripLeft += tstripWidth;
                if (params.position == 'bottom')
                    $("#ft-" + el.id + j).css('bottom', 0);
                if (j % 2 == 0 && params.position == 'alternate')
                    $("#ft-" + el.id + j).css('bottom', 0);
                if (params.direction == 'fountain' || params.direction == 'fountainAlternate') { order[el.id][j - 1] = parseInt(params.strips / 2) - (parseInt(j / 2) * odd); order[el.id][params.strips - 1] = params.strips; odd *= -1; }
                else { order[el.id][j - 1] = j; }
            }
            $('.ft-' + el.id).mouseover(function () { opts[el.id].pause = true; });
            $('.ft-' + el.id).click(function () { window.location = opts[el.id].longdesc });
            $('.ft-' + el.id).mouseout(function () { opts[el.id].pause = false; });
            $('#ft-title-' + el.id).mouseover(function () { opts[el.id].pause = true; });
            $('#ft-title-' + el.id).mouseout(function () { opts[el.id].pause = false; });
            clearInterval(imgInt[el.id]); imgInt[el.id] = setInterval(function () { $.transition(el) }, params.delay + params.stripDelay * params.strips);
        };

        $.transition = function (el, direction) {

            if (opts[el.id].pause == true) return; stripInt[el.id] = setInterval(function () { $.strips(order[el.id][inc[el.id]], el) }, opts[el.id].stripDelay);
            $('#' + el.id).css({ 'background-image': 'url(' + img[el.id][imgInc[el.id]] + ')','background-repeat':'no-repeat' });
            if (typeof (direction) == "undefined")
                imgInc[el.id]++; else
                if (direction == 'prev')
                    imgInc[el.id]--;
                else
                    imgInc[el.id] = direction;
            if (imgInc[el.id] == img[el.id].length) { imgInc[el.id] = 0; }
            if (imgInc[el.id] == -1) { imgInc[el.id] = img[el.id].length - 1; }
            if (titles[el.id][imgInc[el.id]] != '') { $('#ft-title-' + el.id).animate({ opacity: 0 }, opts[el.id].titleSpeed, function () { $(this).html(titles[el.id][imgInc[el.id]]).animate({ opacity: opts[el.id].titleOpacity }, opts[el.id].titleSpeed); }); }
            else { $('#ft-title-' + el.id).animate({ opacity: 0 }, opts[el.id].titleSpeed); }
            inc[el.id] = 0;

            buttons = $('#ft-buttons-' + el.id).children();
            
            buttons.each(function (index) {
                var butid = imgInc[el.id] + 1;
                //$('.ft-button-' + el.id +'-normal').css({'background-color': '#000000' });
                //$('.ft-button-' + el.id + '-active').css({ 'background-color': '#D11513', 'color': 'white' });
                if (index == butid) {
                    //$(this).addClass('ft-button-' + el.id + '-active');
                    $(this).css({ 'background-color': '#D11513', 'color': 'white' });
                }
                else {
                    $(this).css({ 'background-color': '#dadde1', 'color': 'black' });
                }


            });
            if (opts[el.id].direction == 'random')
                $.fisherYates(order[el.id]); if ((opts[el.id].direction == 'right' && order[el.id][0] == 1) || opts[el.id].direction == 'alternate' || opts[el.id].direction == 'fountainAlternate')
                order[el.id].reverse();
        }; $.strips = function (itemId, el) {
            temp = opts[el.id].strips; if (inc[el.id] == temp) { clearInterval(stripInt[el.id]); return; }
            $('.ft-' + el.id).attr('href', links[el.id][imgInc[el.id]]);
            if (opts[el.id].position == 'curtain') {
                currWidth = $('#ft-' + el.id + itemId).width();
                $('#ft-' + el.id + itemId).css({ width: 0, opacity: 0, 'background-image': 'url(' + img[el.id][imgInc[el.id]] + ')' }); 
                $('#ft-' + el.id + itemId).animate({ width: currWidth, opacity: 1 }, 1000);
            }
            else {
                $('#ft-' + el.id + itemId).css({ height: 0, opacity: 0, 'background-image': 'url(' + img[el.id][imgInc[el.id]] + ')' });
                $('#ft-' + el.id + itemId).animate({ height: opts[el.id].height, opacity: 1 }, 1000);
            }
            inc[el.id]++;
        };



        $.navigation = function (el) {


            $("<div id='ft-buttons-" + el.id + "'></div>").insertBefore($('#' + el.id));
            $('#ft-buttons-' + el.id).css({ 'text-align': 'left', 'font-size': 12, 'background-color': '#EFEFEF', 'height': '19px', 'width': opts[el.id].width });



            $('#ft-buttons-' + el.id).append("<a  id='ft-prev-" + el.id + "' class='ft-prev'>Prev</a>");
            $('#ft-prev-' + el.id).css({ 'text-align': 'center', 'float': 'left', 'width': '30px', 'margin-right': '2px', 'padding': '2px 5px 2px 5px', 'cursor': 'pointer', 'text-decoration': 'none', 'font-weight': 'bold', 'background-color': '#dadde1' }).click(function (e) {
                e.preventDefault();
                $.transition(el, 'prev'); clearInterval(imgInt[el.id]); imgInt[el.id] = setInterval(function () { $.transition(el) }, params.delay + params.stripDelay * params.strips);
            });



            for (k = 1; k < img[el.id].length + 1; k++) {
                $('#ft-buttons-' + el.id).append("<a  class='ft-button-" + el.id + "'>" + k + "</a>");

            }
            $('.ft-button-' + el.id).css({ 'text-align': 'center', 'float': 'left', 'width': 12, 'padding': '2px 5px 2px 5px', 'cursor': 'pointer', 'text-decoration': 'none', 'font-weight': 'bold', 'margin-right': '3px', 'background-color': '#dadde1' });



            $('#ft-buttons-' + el.id).append("<a  id='ft-next-" + el.id + "' class='ft-next'>Next</a>");
            $('#ft-next-' + el.id).css({ 'text-align': 'center', 'float': 'left', 'width': '30px', 'padding': '2px 5px 2px 5px', 'text-decoration': 'none', 'font-weight': 'bold', 'cursor': 'pointer', 'background-color': '#dadde1' }).click(function (e) {
                e.preventDefault(); $.transition(el); clearInterval(imgInt[el.id]);
                imgInt[el.id] = setInterval(function () { $.transition(el) }, params.delay + params.stripDelay * params.strips);
            });

            $.each($('.ft-button-' + el.id), function (i, item) {
                $(item).click(function (e) {
                    e.preventDefault();
                    $.transition(el, i); clearInterval(imgInt[el.id]); imgInt[el.id] = setInterval(function () { $.transition(el) }, params.delay + params.stripDelay * params.strips);
                })

            });

        }
        $.fisherYates = function (arr) {
            var i = arr.length;
            if (i == 0) return false; while (--i) {
                var j = Math.floor(Math.random() * (i + 1));
                var tempi = arr[i]; var tempj = arr[j]; arr[i] = tempj; arr[j] = tempi;
            }
        }
        this.each(function () { init(this); });
    };
    $.fn.jqFancyTransitions.defaults = { width: 500, height: 332, strips: 10, delay: 5000, stripDelay: 50, titleOpacity: 0.7, titleSpeed: 1000, position: 'alternate', direction: 'fountainAlternate', effect: '', navigation: false, links: false };
})(jQuery);
