/*
  29.05.2009 svl: fixed compatibility problems with FireFox, Safari
*/

var gallery = {

    // Verify IE8
    IsIE8Browser: function() {
        var rv = -1;
        var ua = navigator.userAgent;
        rv = ua.indexOf('MSIE 8.0');
        return (rv != -1);
    },

    // Get left left position of element
    left_pos_get: function(el_obj) {
        var cur_pos = el_obj.offsetLeft;
        if (isNaN(cur_pos))
            cur_pos = 0;

        return cur_pos;
    }, // left_pos_get

    // Get width of element
    width_get: function(el_obj) {
        var cur_w = el_obj.clientWidth;
        if (isNaN(cur_w)) {
            cur_w = 0;
        }

        return cur_w;
    }, // width_get

    // -------- Mouse enter/leave handlers start --------

    // use ids
    // onmouseenter handler for right scroll button
    scroll_r_over: function(par_id, child_id) {
        var opts = window.gallery[child_id];
        opts.scroll_def = false;
        opts.m_over = true;
    }, // scroll_r_over

    // onmouseleave handler for right scroll button
    scroll_r_out: function(child_id) {
        var opts = window.gallery[child_id];
        opts.m_over = false;
    }, // scroll_r_out

    // onmouseenter handler for left scroll button
    scroll_l_over: function(par_id, child_id) {
        var opts = window.gallery[child_id];
        opts.scroll_def = true;
        opts.m_over = true;
    }, // scroll_l_over

    // onmouseleave handler for left scroll button
    scroll_l_out: function(child_id) {
        var opts = window.gallery[child_id];
        opts.m_over = false;
    }, // scroll_l_out

    // -------- Mouse enter/leave handlers end --------

    // -------- Click handlers start --------

    // TODO: remove fns
    // onmousedown handler for right scroll button
    scroll_r_click_dn: function(child_id) {
        var opts = window.gallery[child_id];
        opts.scroll_def = false;
        opts.m_down = true;
    }, // scroll_r_click_dn

    // onmouseup handler for right scroll button
    scroll_r_click_up: function(child_id) {
        var opts = window.gallery[child_id];
        opts.m_down = false;
    }, // scroll_r_click_up

    // onmousedown handler for left scroll button
    scroll_l_click_dn: function(child_id) {
        var opts = window.gallery[child_id];
        opts.scroll_def = true;
        opts.m_down = true;
    }, // scroll_l_click_dn

    // onmouseup handler for left scroll button
    scroll_l_click_up: function(child_id) {
        var opts = window.gallery[child_id];
        opts.m_down = false;
    }, // scroll_l_click_up

    // -------- Click handlers end --------


    // --------- On load handler start ---------

    // setInterval() handler on load
    interval_fn: function(par_id, child_id) {

        var opts;

        try {
            opts = window.gallery[child_id];

            var par = window.document.getElementById(par_id);
            var scroller_w = gallery.width_get(par);

            var child = window.document.getElementById(child_id);
            var cur_pos = gallery.left_pos_get(child);
            var cntr_w = gallery.width_get(child);

            // Get speed scroll.
            var speed = opts.scroll_speed_slow;
            if (opts.m_over) speed = opts.scroll_speed;
            if (opts.m_down) speed = opts.scroll_speed_fast;

            if (opts.scroll_def) {
                // Verify max shift. If maximal shift - switch scroll direction.
                if (cur_pos < 0) {
                    child.style.left = (cur_pos + speed - opts.delta) + 'px';
                } else {
                    opts.scroll_def = false;
                }
            } else {
                // Verify max shift. If maximal shift - switch scroll direction.
                if ((cur_pos + cntr_w) > scroller_w) {

                    child.style.left = (cur_pos - speed - opts.delta) + 'px';
                } else {
                    opts.scroll_def = true;
                }
            }

        } catch (e) {
            if (typeof (opts) != 'undefined')
                clearInterval(opts.interval_id);
        } // try

    }, // interval_fn

    // Scrool galley on load
    fu_init: function(par_id, child_id) {
        var opts = window.gallery[child_id];

        opts.scrolled_l_btn = false;
        opts.scrolled_r_btn = false;
        opts.speed_normal = false;
        opts.speed_fast = false;

        // Set coordinate correction for IE8
        opts.is_ie8 = gallery.IsIE8Browser();
        opts.delta = 0;
        // if (opts.is_ie8) opts.delta = 1; // Disable. Set minimal shift 2px

        opts.interval_id = setInterval('gallery.interval_fn( "' + par_id + '", "' + child_id + '" )', opts.time_slice);
    }, // fu_init

    // --------- On load handler end ---------


    // get instance of option object
    opts_get: function() {
        var gallery_opts = {
            // Time slice ( in milliseconds )
            'time_slice': 30,

            // Scroll speed ( in pixels per time slice )
            'scroll_speed_slow': 2,
            'scroll_speed': 4,
            'scroll_speed_fast': 7,

            // Default scroll direction
            'scroll_def': true,
            'm_over': false,
            'm_down': false,

            // IDs of interval objects
            'interval_id': null,

            // Flag IE8 detect
            'is_ie8': false,
            // Correct shift coordinate for IE8
            'delta': 0
        }

        return gallery_opts;
    }, // opts_get

    scroll_init: function(par_id, child_id, lscroll_id, rscroll_id, err_show) {
        try {

            if (null == window.gallery)
                window.gallery = {};

            window.gallery[child_id] = gallery.opts_get();

            var par = window.document.getElementById(par_id);
            var child = window.document.getElementById(child_id);
            var l_btn = window.document.getElementById(lscroll_id);
            var r_btn = window.document.getElementById(rscroll_id);

            l_btn.onmouseover = function() { gallery.scroll_l_over(par_id, child_id); }
            l_btn.onmouseout = function() { gallery.scroll_l_out(child_id); }
            r_btn.onmouseover = function() { gallery.scroll_r_over(par_id, child_id); }
            r_btn.onmouseout = function() { gallery.scroll_r_out(child_id); }

            l_btn.onmousedown = function() { gallery.scroll_l_click_dn(child_id); }
            l_btn.onmouseup = function() { gallery.scroll_l_click_up(child_id); }
            r_btn.onmousedown = function() { gallery.scroll_r_click_dn(child_id); }
            r_btn.onmouseup = function() { gallery.scroll_r_click_up(child_id); }

            child.style.position = 'absolute';

            // Check if it's Mozilla FireFox or NS 6+
            if (document.getElementById && !document.all) {

                // Gets all embed tags inside child
                var embeds = child.getElementsByTagName("embed");
                for (i = 0; i < embeds.length; i++) {
                    try {
                        embeds[i].setAttribute("wmode", "transparent");
                    } catch (e) {
                        if (err_show)
                            alert('Gallery error: ' + e.message);
                    }
                } // for

            } // if

            // Adjust size/position
            var child_width = gallery.width_get(child);
            var par_width = child_width;

            if (child_width < 1 /* || par_width < 1 || child_width < par_width */) {
                l_btn.style.display = 'none';
                r_btn.style.display = 'none';
                par.style.overflow = 'hidden';
            } else {
                l_btn.style.display = 'block';
                r_btn.style.display = 'block';
                par.style.overflow = 'hidden';

                var l_btn_width = gallery.width_get(l_btn);
                var r_btn_width = gallery.width_get(r_btn);

                l_btn.style.display = 'none';
                r_btn.style.display = 'none';

                var cntr = par.parentNode;
                if (null != cntr && 'undefined' != typeof (cntr)) {
                    var cover = cntr.parentNode;
                    if (null != cover && 'undefined' != typeof (cover)) {
                      // par.style.width = ( gallery.width_get( cover ) - ( l_btn_width * 2 ) - ( r_btn_width * 2 ) - 2 ) + 'px';
                      par_width = gallery.width_get(cover);
                      if(child_width > par_width)
                        par.style.width = (par_width - (l_btn_width) - (r_btn_width) - 2) + 'px';
                      else
                        par.style.width = par_width + 'px';
                    }
                }

                //        var par_width = gallery.width_get( par );
                // var par_width = gallery.width_get(cover);                

                if (child_width > par_width) {
                    var cur_pos = gallery.left_pos_get(child);
                    child.style.left = (cur_pos - ((child_width / 2) - (par_width / 2))) + 'px';
                    l_btn.style.display = 'block';
                    r_btn.style.display = 'block';
                    par.style.overflow = 'hidden';
                } else {
                    l_btn.style.display = 'none';
                    r_btn.style.display = 'none';
                    par.style.overflow = 'hidden';
                }
            }

            // Init default scroll on load
            // Check if already something attached
            if (typeof (window.onload) == 'function') {

                var fu_bk = window.onload;

                // Compose new function
                window.onload = function() {
                    fu_bk();
                    gallery.fu_init(par_id, child_id);
                } // onload

            } else {

                // Just attachs
                window.onload = function() {
                    gallery.fu_init(par_id, child_id);
                } // window.onload
            }
            // End init default scroll on load

        } catch (e) {
            if (err_show)
                alert('Gallery error: scroll_init: ' + e.message);

            return;
        } // try

    } // scroll_init

} // gallery

