History.Adapter.bind(window,'statechange',function(){ // Note: We are using statechange instead of popstate
    var State = History.getState(); // Note: We are using History.getState() instead of event.state
    var url = State.url.replace(History.getRootUrl(), '/');
    $j('div.product-info-box')
        .not(':visible')
        .filter(function () {
            return $(this).data('href') == url;
        })
        .each(function () {
            switchToTarget($(this));
        });
});

var $j = jQuery;
jQuery(document).ready(function() {

    $(document).ajaxStop($.unblockUI);
    
    $('.ellipsis').dotdotdot({ellipsis: ' …', watch: false, wrap: 'word'});

    //$j('#searchterm').focus(function () { $j('#searchextra').slideDown('fast'); });
    $j(document).click(function (e) { if ($(e.target).parents('#searchmenu').length < 1) $j('#searchextra').slideUp('fast'); } );
    
    $j('#flash').colorbox({inline: true, href: '#flash', opacity: 0.3, open: true, width: 350, initialWidth: 50, height: 220, initialHeight: 50, close: '<span>Sulge</span>'});

    $j('ul.sitemap').makeacolumnlists({ cols: 3 });
    
    setupModelOptions();
    
    initPage($('#Content'));
});

function switchToTarget(target)
{
    var current = $j('div.product-info-box:visible');
    
    if (current.get(0) == target.get(0)) {
        return false;
    }
    
    function fade(url) {
        current.fadeOut('fast', function () {
            setTimeout(function () { target.fadeIn('fast', function () {
                current.unblock();
                window.History.replaceState(null, '', url);
            }); }, 100)
        })
    }        
    var url = target.attr('data-href');
    if (target.attr('data-loaded') != '1') {
        current.block({
            message: '<img style="position: relative; top:50%; margin-top: -32px;" src="/bundles/feissweb/images/throbber.gif" width="64" height="64">',
            css: {
              width: '100%',
              height: '100%',
              border: '0',
              top: '0',
              left: '0',
              opacity: 0.5
            }
        });
        $j.ajax({
            url: url + '?json=1',
            success: function (data) {
                target.html(data);
                initPage(target);
                target.attr('data-loaded', '1');
                fade(url);
            }
        });            
    } else {
        fade(url);
    }
    
    return false;
}

function initPage(page) 
{
    var models = $j('div.product-info-box');
    $j('a.change-model', page).not('.unavailable').click(function (event) {
        if (event.ctrlKey) {
            // so open in new tab works
            return;
        }
        var $a = $(this);
        var parent = $a.parents('div.product-info-box');
        var primary = 'data-' + $a.attr('data-primary');
        var secondary = primary == 'data-color' ? 'data-size' : 'data-color';
        
        var targets1 = models.filter('['+primary+'="'+$a.attr(primary)+'"]');
        var targets2 = targets1.filter('['+secondary+'="'+$a.attr(secondary)+'"]');
        var target = (targets2.length ? targets2 : targets1).first();
        
        return switchToTarget(target, parent);
    });
    $j('li.hidden').find('input,select').attr("disabled","disabled");
}

function hideLoader(el) {
    $j('img.loader-gif').remove();
    el.show();
    return;
}

function applyFormErrors(fields) {
    jQuery.each(fields, function (i, item) {
        jQuery('#' + i).addClass('validation-failed').after('<div class="validation-advice">' + item + '</div>');
    });
}

function opcToggle(target, action) {
    var section = $j('#opc-' + target);
    var visible = section.is(':visible');

    if (action === visible) {
        return;
    }

    visible = (action === true || (action === null && !visible));
    inputs = section.find('input,select');

    if (visible) {
        inputs.removeAttr('disabled');
    } else {
        inputs.attr('disabled','disabled');
    }

    section.toggle(visible);
    $j('a.opc-toggle[rel=' + target +']').toggle(!visible);

    if (!visible && target == 'addresses') {
        $j('input#organize_transport').removeAttr('checked');
        return;
    }
};

function opcSyncAddresses(addValues) {
    var targets = $j('#opc-shipping-address-fields').find('input[id^=shipping-]');
    if (addValues) {
        targets.each(function() {
            if ($j(this).val() == '')
            {
                $j(this).attr('value', function() {
                    return $j('#' + this.id.replace(/shipping-/,'billing-')).val();
                });
            }
        });
    } else {
        targets.each(function() {
            if ( this.value != '' && ( this.value == $j('#' + this.id.replace(/shipping-/,'billing-')).val() ) ) {
                $j(this).attr('value','');
            }

        });
    }
};

function showProduct(el, target) {
    product_id = $j(el).parents('li').attr('id');

    $j('li.selected-item').animate({"opacity": "1.0"}, "slow").removeClass('selected-item').addClass('once-viewed');
    $j('a.js-view-product').show();

    $j('a.' + product_id).hide().after( '<img src="' + LOADER_IMG + '" class="loader-gif" alt="Loading product ..." />' );
    $j(el).parents('li').animate({"opacity": "0.4"}, "slow").addClass('selected-item');

    $j('div.product-information:not(' + target + ')').slideUp().empty();
    var href = $j(el).attr('href');
    $j.get(href + '?blank=1', function(data) {
        $j(target).empty().append(data).slideDown();
        selectColor( $j(target).children('div.color-chooser > span.active > a:first') );
        $j('img.loader-gif').remove();
        $j('a.' + product_id).show();
        pageTracker._trackPageview(href);
    });
};

function addRemembered() {
    $j('#remembered_cnt').html( parseInt($j('#remembered_cnt').html()) + 1);
};

function selectColor(el) {
    $j('div.color-chooser a').css("border", "1px solid #fff");
    $j(el).css("border", "1px solid #B8B8B8");

    var product_id = $j(el).parents('div.color-chooser').attr('title');
    $j('form#atc-' + product_id).attr('action', $j(el).parents('span').attr('title'));
    $j('#color-code-' + product_id).attr('value', $j(el).attr('class'));
    $j('#sku-' + product_id).empty().append($j(el).parent('span').attr('rel'));
    $j('#pimage-' + product_id).attr('src', $j(el).attr('href'));
};

function toggleAddToQuery(cb)
{
  var parent = $j(cb).parent();
  var els = $j('#submit-cart', parent);
  if (!cb.checked)
  {
    els.addClass('disabled');
    els.attr('disabled', 'disabled')
    document.cookie = 'conditions_accepted='
  }
  else
  {
    els.removeClass('disabled');
    els.removeAttr('disabled');
    document.cookie = 'conditions_accepted=1'
  }
}

function setupModelOptions() 
{
    var options = $('select.model-options-select');
    options.bind('change click', function () {
        var allSelected = true;
        options.each(function () {
            if (!this.value) {
                allSelected = false;
            }
        });
        console.log(allSelected);
        $('button.add-product')
            .attr('disabled', !allSelected)
            .toggleClass('disabled', !allSelected);
    });
}
