﻿(function ($) {

    var defaults = {
        imagewidth: 150,
        speed: 2000,
        zoomspeed: 500,
        zoomsize: 200,
        opacity: 0.3
    };

    $.fn.CoolSlider = function (options) {

        var $controlsTable = $("<table>");
        var $row = $('<tr>');
        var $images = $('.imageitem');
        var imageItemCount = $images.length;
        var $container = $("<div>");

        var direction = true;
        var direction = true;
        var block = true;

        var scrollerlength = 0;
        var scrollerspeed = 0;

        var leftpos;
        var newlength;


        var opts = $.extend({}, defaults, options || {});

        return this.each(function () {

            var scrollerlength = opts.imagewidth * imageItemCount;
            var scrollerspeed = opts.speed * imageItemCount;

            $container.attr("id", "container").css({
                position: "absolute",
                width: scrollerlength,
                top: 0
            });

            function SetImageItems(imageItem) {
                var $imageItem = $($(imageItem).children()[0]);
                $imageItem.css({ 'float': 'left',
                    'opacity': opts.opacity,
                    'width': opts.imagewidth + "px",
                    'filter': 'alpha(opacity=' + (opts.opacity * 100) + ')'
                }).mouseover(function (e) {
                    $container.css({ width: opts.imagewidth * (imageItemCount + 2) });
                    $(this).animate({
                        width: opts.zoomsize + "px",
                        opacity: 1.0
                    }, opts.zoomspeed, "linear");
                }).mouseleave(function (e) {
                    $container.css({ width: opts.imagewidth * (imageItemCount + 1) });
                    $(this).animate({
                        width: opts.imagewidth + "px",
                        opacity: opts.opacity
                    }, opts.zoomspeed, "linear");
                });

                // -- added by Eric.Truter @ 12:43 PM
                // -- following lines removes the additional URL from the HREF
                //var imageStr = imageItem.toString();
                //$(imageItem).attr('href', imageStr.substring(0, imageStr.indexOf(','))).attr('target', '_parent');

                return imageItem;
            };

            function configuredirection(pixels, dir, speed) {
                if (scrollerlength < (scrollerlength + 50)) {
                    $container.animate({
                        left: ((dir === true) ? "-=" : "+=") + pixels
                    }, speed, "linear",
                	function () {
                	    direction = !dir;
                	    configuredirection(parseFloat(scrollerlength - $container.parent().width()), direction, scrollerspeed);
                	});
                }
                else {
                    $rightCell.unbind('click').css('background', 'none');
                    $leftCell.unbind('click').css('background', 'none');
                }
            }

            $(this).mouseover(function (evt) {
                $container.stop(true);
            });

            $(this).mouseout(function (evt) {
                leftpos = $container.css('left');

                if (direction) {
                    newlength = (parseFloat(scrollerlength - $container.parent().width()) + parseFloat(leftpos == "auto" ? "-50" : leftpos));
                } else {
                    newlength = -1 * (parseFloat(leftpos == "auto" ? "50" : leftpos));
                }
                configuredirection(newlength + "px", direction, newlength / (parseFloat(scrollerlength) / parseFloat(scrollerspeed)));
            });

            function addControlImage(src, lor) {
                var cell = $('<td>').click(function () {
                    $container.animate({ left: lor + "=" + ((parseFloat($container.css('left')) >= 0) && (lor == "+") ? "0px" : opts.imagewidth + "px") }, 500, "linear");
                });
                return cell;
            }

            $images.each(function (i, element) {
                $container.append(SetImageItems(element));
            });


            $controlsTable.addClass('controls');

            var $row = $('<tr>');
            var $leftCell = addControlImage(opts.leftarrow, '+');
            var $containerCell = $('<td>');
            var $wrapperdiv = $('<div>').addClass('wrapperdiv').append($container);
            $containerCell.append($wrapperdiv);

            var $rightCell = addControlImage(opts.rightarrow, '-');

            $rightCell.addClass('controls-rightcell');
            $leftCell.addClass('controls-leftcell');
            $containerCell.addClass('controls-containercell');

            $wrapperdiv.append($container);
            $containerCell.append($wrapperdiv).addClass('controls-containercell');

            $row.append($leftCell);
            $row.append($containerCell);
            $row.append($rightCell);

            $controlsTable.append($row).addClass('controlsTable');

            if (scrollerlength > (scrollerlength + 50)) {
                $rightCell.unbind('click').css('background', 'none');
                $leftCell.unbind('click').css('background', 'none');
            }

            $(this).append($controlsTable);
        });
    };
})(jQuery);
