var EGRCatalog = function(params)
{
    this.params = params || {};
    this.catalog_groups = null;

    var self = this;
    $(document).ready(function()
    {
        self.register_events();
    });

};

EGRCatalog.prototype = {

    register_events: function(elem)
    {
        var find_self = function(el, selector)
        {
            return el.find(selector).add(el.filter(selector));
        };

        elem = $(elem || document);

        var catalog_contact = find_self(elem, "a.catalog_contact_icon");
        var id_pat = /catalog_contact_(.*)/;
        var self = this;

        for (i = 0; i < catalog_contact.length; i++)
        {
            a = $(catalog_contact[i]);
            m = a.attr("id").match(id_pat);
            if (m)
            {
                a.bind("click", {catalog_id: m[1]}, function(ev)
                {
                    self.ajax_catalog_contact(
                        ev.data.catalog_id,
                        self.params.language);
                    return false;
                });
            }
        }
    },
    ajax_catalog_contact: function(catalog_id, language, origin)
    {
        if (!this.params.base_url)
            return;
        var ajax_url = this.params.base_url + "/ajax/catalog_contact/";

        if ($.query.get("preview"))
            ajax_url += "?preview=" + $.query.get("preview");

        var contact_submit = function(div, form)
        {
            form = $(form);
            var data_array = form.serializeArray();
            var data = {
                language: language,
                origin: origin
            };
            for (var i = 0; i < data_array.length; i++)
                data[data_array[i].name] = data_array[i].value;

            $.ajax({
                url: form.attr("action"),
                data: data,
                type: "POST",
                success: function(data)
                {
                    div.html(data);
                    register_submit(div);
                }
            });
        };

        var register_submit = function(div)
        {
            var form = $(div).find("#contact_form");
            $(form).submit(function()
            {
                contact_submit(div, this);
                return false;
            });
        };

        $.ajax({
            url: ajax_url,
            data:
            {
                catalog_id: catalog_id,
                language: language,
                origin: origin
            },
            type: "POST",
            success: function(data)
            {
                var div = $(document.createElement("div"));
                $("body").append(div);
                $(div).html(data);
                register_submit(div);
                $(div).dialog({
                    width: "545px",
                    height: "auto",
                    modal: true,
                    resizable: false,
                    open: function() {
                        $(window).scrollTo(this, { over: -0.5 });
                        // XXX: adding the dialog grows the body of the
                        // document so force a resize of the overlay to
                        // avoid big white rectangle at the bottom
                        $.ui.dialog.overlay.resize();
                    },
                    close: function() { $(div).remove(); }
                });
            }
        });
    }


};

// kmi functions 
$.fn.scroller = function( height ){
    return this.each( function() {
        var $t = $(this);
        var $height = height || 320;
        var $scollEvent = null;
        
        var $scroll = function( height ) {
            var position = $t.parent().position().top;
            
            if( $t.parent().position().top + height >= 0 ) {
                position = 0;
                $down.css('opacity','1');
                $up.css('opacity','0.3');
            } else if( $t.parent().position().top + height < ( $t.height() - $height ) * -1 ) {
                position = ( $t.height() - $height ) * -1;
                $down.css('opacity','0.3');
                $up.css('opacity','1');
            } else {
                position = $t.parent().position().top + height;
                $down.css('opacity','1');
                $up.css('opacity','1');
            }
            
            $t.parent().animate({top: position }, 500);
        };
        
        if( $height < $t.height() ) {
            $t.wrap( $('<div></div>').addClass('scroller-div').css('height',$height).css('position','relative').css('overflow','hidden') )
              .wrap( $('<div></div>').addClass('scroller-content').css('height',$height).css('position','absolute') );
            
            if( $t.find('#anker').position() ) {
                $t.parent().css('top', ( $t.find('#anker').position().top * -1 ) );
            }
            
            var $up = $('<a></a>').addClass('scroller-up').bind('click', function(){ $scroll( $height ); return false; });
            var $down = $('<a></a>').addClass('scroller-down').bind('click', function(){ $scroll( $height * -1 ); return false; });
            
            if( $t.parent().position().top >= 0 ) {
                $up.css('opacity','0.3');
            }
            if( $t.height() - $height - ( $t.parent().position().top * -1 ) <= 0 ) {
                $down.css('opacity','0.3');
            }
            
            $navi = $('<div></div>').addClass('scroller-navi');
            $( $down ).appendTo( $navi );
            $( $up ).appendTo( $navi );
            
            $t.parent().parent().after( $navi );
        }
    });
};
// $(document).ready(function(){
//     $('a.manufacturer').click( function(){
//         if( $('.container .content .items').height() < $('div.manufacturer').height() ) {
//             $('.container .content .items').css('height',$('div.manufacturer').height());
//         }
//         $('div.manufacturer').slideDown("slow");
//         return false;
//     });
//     $('div.manufacturer span.close').click( function(){
//         $('.container .content .items').css('height','auto');
//         $('div.manufacturer').slideUp("slow");
//         return false;
//     });
//     var fadeObjTimeOut = 0;
//     $('div.manufacturer ul.catalogs li ul li').hover( function(){
//         var fadeObj = $( this ).find( 'a.info' );
//         fadeObjTimeOut = setTimeout( function() {
//             fadeObj
//                 .css( 'opacity', '0' )
//                 .css( 'display', 'inline-block' )
//                 .animate({
//                     opacity: '1'
//                 }, 1500 );
//         }, 200 );
//     }, function(){
//         window.clearTimeout(fadeObjTimeOut);
//         $( this ).find( 'a.info' ).css( 'display', 'none' ).css( 'opacity', '0' );
//     });
// });

$.fn.matrix = function( options ) {
    var o = options;
    return this.each( function() {
        var options = $.extend(true,{
            imgclass: '.mx',
            fadeInOpacity: 1,
            fadeInSpeed: 1000,
            fadeOutOpacity: 0.3,
            fadeOutSpeed: 1000,
            autoInterval: 3000,
            autoFadeInOpacity: 1,
            autoFadeInSpeed: 2000,
            autoFadeOutOpacity: 0.3,
            autoFadeOutSpeed: 2000
        }, o || {});
        var t = this;
        this.options = options;
        this.options.interval = {
            handler : null,
            items: [],
            getItems: function() {
                for( var i = 0; i < jQuery(t).find('img'+options.imgclass).length; i++ ) {
                    options.interval.items.push(i);
                }
            },
            getRandomItem: function() {
                if( options.interval.items.length < 1 ) {
                    options.interval.getItems();
                }
                var pos = Math.floor( Math.random() * options.interval.items.length );
                var image = options.interval.items[pos];
                options.interval.items.splice( pos, 1 );
                return image;
            },
            start: function( t ) {
                options.interval.handler = window.setInterval(function() {
                    jQuery( t ).find('img'+options.imgclass+':eq('+options.interval.getRandomItem()+')').animate({
                        opacity: options.autoFadeInOpacity
                    }, options.autoFadeInSpeed , function() {
                        jQuery(this).animate({
                            opacity: options.autoFadeOutOpacity
                        }, options.autoFadeOutSpeed );
                    });
                }, options.autoInterval );
            },
            stop: function( t ) {
                window.clearInterval(options.interval.handler);
            }
        };
        
        jQuery( this ).find('img'+options.imgclass).hover(
            function () {
                jQuery(this).stop(true, true).animate({ opacity: t.options.fadeInOpacity }, t.options.fadeInSpeed );
            },
            function () {
                jQuery(this).stop(true, true).animate({ opacity: t.options.fadeOutOpacity }, t.options.fadeOutSpeed );
            }
        );
        jQuery( this ).bind({
            mouseenter: function(){
                this.options.interval.stop( this );
            },
            mouseleave: function(){
                this.options.interval.start( this );
            }
        });
        this.options.interval.start( this );
    });
};
$(document).ready(function(){
    jQuery('.matrix').matrix();
    $('a.manufacturer').click( function(){
        if( $('.container .content .items').height() < $('div.manufacturer').height() ) {
            $('.container .content .items').css('height',$('div.manufacturer').height());
        }
        $('div.manufacturer').slideDown("slow");
        return false;
    });
    $('div.manufacturer span.close').click( function(){
        $('.container .content .items').css('height','auto');
        $('div.manufacturer').slideUp("slow");
        return false;
    });
    var fadeObjTimeOut = 0;
    $('div.manufacturer ul.catalogs li ul li').hover( function(){
        var fadeObj = $( this ).find( 'a.info' );
        fadeObjTimeOut = setTimeout( function() {
            fadeObj
                .css( 'opacity', '0' )
                .css( 'display', 'inline-block' )
                .animate({
                    opacity: '1'
                }, 1500 );
        }, 200 );
    }, function(){
        window.clearTimeout(fadeObjTimeOut);
        $( this ).find( 'a.info' ).css( 'display', 'none' ).css( 'opacity', '0' );
    });
});

