var loaded = [], imgs = [], cur = 0, loading = false, slideshow = false;
var url = false;
var latlng = [53.556363,9.920778];
var latlng2 = [51.213054,7.652063];
var latlng3 = [52.490151,13.425483];
var map, gdir, mrk = false;

function fireBackground(href) {
    if ($('#gallery').children().length < 2) {
        if ($.isArray(href)) {
            $('<a class="nextslide" href="' + href[1] + '" title="' + href[2] + '"><img src="' + href[0] + '" alt="" /></a>')
            .appendTo($('#gallery'));
            href = href[0];
        } else {
            $('<img class="nextslide" src="' + href + '" alt="" />').appendTo($('#gallery'));
        }
    } else {
        $('#gallery .nextslide').attr('src', href);
    }
    
    $('#gallery .activeslide').addClass('prevslide').removeClass('activeslide');
    $('#gallery .nextslide').hide().removeClass('nextslide').addClass('activeslide').fadeIn(
        (!slideshow ? 500 : 1000), function() {
        if ($('#gallery').hasClass('links')) {
            $('#gallery .prevslide, #gallery .nextslide').remove();
        }
    });
    $('#gallery .prevslide').removeClass('prevslide').addClass('nextslide');
}

function loadImage(index) {
    var img = $.isArray(imgs[index]) ? imgs[index][0] : imgs[index];
    if (jQuery.inArray(img, loaded) < 0) {
        loading = true;
        //$('#loading').show();
        $.cacheImage(img, {
            load : function (e) {
                loaded.push(img);
                fireBackground(imgs[index]);
                loading = false;
                //$('#loading').hide();
            }
        });
    } else {
        fireBackground(imgs[index]);
    }
}

function initGallery() {
    $('#pages li.enlarge a').click(function() {
        $('#pages li a.active').next('.fancy').click();
        return false;
    });
    $('#pages li:not(.enlarge) a').each(function(i, o) {
        if ($('#gallery').hasClass('links') && $(this).text().length > 0) {
            imgs.push([$(this).attr('href'), $(this).text(), $(this).attr('title')]);
        } else {
            imgs.push($(this).attr('href'));
        }
        $(this).click(function() {
            loadImage(i);
            $(this).parents('ul:first').find('a.active').removeClass('active').end().end().addClass('active');
            return false;
        });
    });
    if ($('#pages').hasClass('invisible') && $('#pages li a').length > 1) {
        slideshow = window.setInterval(function() {
            var a = $('#pages').find('a.active:first').parent('li').next('li:has(a)');
            a = $(a).length ? $(a).find('a:first') : $('#pages').find('a:first');
            $(a).click();
        }, 9500);
    }
    loaded.push(imgs[cur]);
}

function openInfoBox2() {
    mrk2.openInfoWindow(
        '<div class="map_inner_w">' + 
        '<strong>Büro Lüdenscheid</strong><br />' +
        'Frank &amp; Arno Seltmann<br />' +
        'Wefelshohler Straße 31<br />' +
        '58511 Lüdenscheid<br />' +
        '<br />' +
        'Fon +49/23 51/94 87 25<br />' +
        'Fax +49/23 51/94 87 19<br />' +
        '<a href="mailto:arno@seltmann.de">arno@seltmann.de</a></div>'
    );
}

function openInfoBox3() {
    mrk3.openInfoWindow(
        '<div class="map_inner_w">' + 
        '<strong>Büro Berlin</strong><br />' +
        'Bernhard Seltmann<br />' +
        'Lenaustraße 27<br />' +
        '12047 Berlin<br />' +
        '<br />' +
        'Fon +49/ 30/616 71 270<br />' +
        'Fax +49/151/149 65118<br />' +
        '<a href="mailto:bernhard@seltmann.de">bernhard@seltmann.de</a></div>'
    );
}

function renderMap() {
    if (GBrowserIsCompatible()) {
        var con = document.getElementById('map');
        map = new GMap2(con);
        var pnt2 = new GLatLng(latlng2[0], latlng2[1]);
        var pnt3 = new GLatLng(latlng3[0], latlng3[1]);
        mrk2 = new GMarker(pnt2);
        mrk3 = new GMarker(pnt3);
        
        var cen = new GLatLng(52.348763,9.492188);

        map.addOverlay(mrk2);
        map.addOverlay(mrk3);
        map.addControl(new GMapTypeControl(), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,18)));
        map.addControl(new GSmallMapControl(), new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(10,54)));
        //map.addControl(new GScaleControl());

        map.setCenter(cen, 6, G_HYBRID_MAP);
        
        GEvent.addListener(mrk2, 'click', function() {
            openInfoBox2();
        });
        
        GEvent.addListener(mrk3, 'click', function() {
            openInfoBox3();
        });
    }
}

function checkMoreButtons(where) {
    if (typeof where == 'undefined') {
        where = $('body');
    }
    if ($(where).find('#load-news, a.load-books:not(.enabled)').length) {
        var news = $(where).find('a.load-books').length ? false : true;
        var button = news ? $(where).find('#load-news') : $(where).find('a.load-books:first');
        
        var start = $(button).parents('div:eq(1)').find('> div:not(.center,.clear)').length;
        var limit = start - 1;
        var count = $(button).parent('div').attr('id').split('_');
        count = count[1];
        
        var _href;
        $(button).addClass('enabled').click(function() {
            if (news) {
                _href = $(this).attr('href') + 'load/' + start + '/' + limit;
            } else {
                _href = $(button).attr('href') + start;
            }
            if (!$(button).hasClass('loading') && !$(button).hasClass('inactive')) {
                $(button).addClass('loading');
                $.ajax({
                    type: "GET",
                    url: _href,
                    success: function(html) {
                        $(button).removeClass('loading').parent('div').before(html);
                        start = start + limit;
                        if (start >= count) {
                            $(button).addClass('inactive');
                        }
                    }
                });
            }
            return false;
        });
        return true;
    }
    return false;
}

function number_format(number, decimals, dec_point, thousands_sep) {
    var exponent = "";
    var numberstr = number.toString ();
    var eindex = numberstr.indexOf ("e");
    if (eindex > -1) {
        exponent = numberstr.substring (eindex);
        number = parseFloat (numberstr.substring (0, eindex));
    }

    if (decimals != null) {
        var temp = Math.pow (10, decimals);
        number = Math.round (number * temp) / temp;
    }
    
    var sign = number < 0 ? "-" : "";
    var integer = (number > 0 ? 
        Math.floor (number) : Math.abs (Math.ceil (number))).toString ();

        var fractional = number.toString ().substring (integer.length + sign.length);
    dec_point = dec_point != null ? dec_point : ".";
    fractional = decimals != null && decimals > 0 || fractional.length > 1 ? 
    (dec_point + fractional.substring (1)) : "";
    if (decimals != null && decimals > 0)
    {
        for (i = fractional.length - 1, z = decimals; i < z; ++i)
        fractional += "0";
    }

    thousands_sep = (thousands_sep != dec_point || fractional.length == 0) ? 
    thousands_sep : null;
    if (thousands_sep != null && thousands_sep != "")
    {
        for (i = integer.length - 3; i > 0; i -= 3)
        integer = integer.substring (0 , i) + thousands_sep + integer.substring (i);
    }

    return sign + integer + fractional + exponent;
}

jQuery().ready(function() {
    $('a').each(function() {
        $(this).bind('click', function() {
            if (this.blur) {this.blur();}
        });
        if ($(this).attr('rel') == 'external')
            $(this).attr('target', '_blank');
    });
    
    if ($('#map').length) {
        renderMap();
    }

    checkMoreButtons();
    
    $('#bookshelf .eachpost a').each(function() {
        $(this).find('span:first').css({
            'opacity' : 0,
            'display' : 'block',
            'bottom' : -54
        });
        $(this).hoverIntent(
            function() {
                $(this).find('span:first').animate({
                    'opacity': 1,
                    'bottom': 0
                }, 320, 'easeout');
            },
            function() {
                $(this).find('span:first').animate({
                    'opacity': 0,
                    'bottom': -54
                }, 200, 'easein');
            }
        );
    });
    
    if ($('#gallery').length && $('#pages li').length > 1) {
        initGallery();
    }
    
    function calcPrice(text) {
        return parseFloat(text.replace('.','').replace(',','.').replace(/[^0123456789.]/g,""));
    }
    
    $.fn.calcShipping = function(add) {
        if (typeof add === 'undefined') {
            add = 0;
        }
        
        var total_price = 0;
        $(this).find('tr:not(.last) .total').each(function() {
            total_price += calcPrice($(this).text());
        });
        
        var ttl = $(this).find('#total');
        var handling = 0;
        
        if (!$('#eu_shipping').is(':selected')) {
            handling = parseFloat($('#eu_shipping').parent().val());
        } else if (total_price < 35) {
            handling = 3;
        }
        
        total_price += handling;
        
        $('#shipping').text(number_format(handling, 2, ',', '.')).removeClass('none');
        $('#paypal-checkout-wrapper input[name=handling_cart]').val(handling);

        var t = number_format(total_price, 2, ',', '.');
        $(ttl).text(t);
        $('#total-heading').text(t);
    }
    
    if ($('table.cart').length) {
        var float_re = /(\d*\.)?\d+/g; 
        $('table.cart select').change(function() {
            
            $(this).parents('form:first').submit();
            
            return false;
            
            var tr = $(this).parents('tr:first');
            var id = $(this).attr('id').split('_');
            id = id[1];
            
            var val = $(this).val();
            
            $.get(root + "cart/update_quantity/" + id + "/" + val, {},
                function(data){
                    var old_price = parseFloat($(tr).find('td.total').text().replace('.','').replace(',','.').replace(/[^0123456789.]/g,""));
                    var unit_price = parseFloat($(tr).find('td.unit').text().replace('.','').replace(',','.').replace(/[^0123456789.]/g,""));
                    var item_price = unit_price * $(tr).find('select:first').val();
                    $(tr).find('td.total').html('<strong>&euro; ' + number_format(item_price, 2, ',', '.') + '</strong>');
                    
                    var ttl = $(tr).parents('table:first').calcShipping(- old_price + item_price);
                    
                    $('#hq_'+id).val(val);
                }
            );
        });
        
        $('#handling').change(function() {
            $(this).parents('form:first').submit();
            return false;
            
            $('table.cart:first').calcShipping();
        });
        
        $('.paypal-form').each(function() {
            $(this).parents('form:first').submit(function() {
                if ($.inArray($('#handling').val(), ['www', 'eu', 'de']) < 0) {
                    
                    alert(lang == 'de' ? 'Bitte wählen Sie zuerst eine Versandart aus.' : 'Please select a shipping method first.');
                    
                    $('#shipping-form').css('backgroundColor', 'red');
                    
                    return false;
                }
                
                return true;
            });
        });
    }

    if ($('#book-tabs').length) {
        $('#book-tabs').tabs({
            'cache': true,
            'spinner': false,
            'load': function(event, ui) {
                checkMoreButtons(ui.panel);
            },
            'show': function() {
                $('#book-tabs').removeClass('loading');
            },
            'select': function(event, ui) {
                $('#book-tabs').addClass('loading');
            }
        });
    }
    
    
});
