//Do not forget to do //: fix to mootools for domready

//Can be ran here, because ga is loaded before shop.js
var productTracker = pageTracker._createEventTracker("Product");
var deliveryTracker = pageTracker._createEventTracker("Delivery");
var paymentTracker = pageTracker._createEventTracker("Payment");
var leaseTracker = pageTracker._createEventTracker("Lease");
var validationTracker = pageTracker._createEventTracker("Validation");
var outgoingTracker = pageTracker._createEventTracker("Outgoing links");

function changeAmount(product_id, offs, dont_confirm, set) {
    var elem = $('quantity_'+product_id);
    var update = false;
    
    var new_value = set ? parseInt(offs) : parseInt(elem.value) + parseInt(offs);

    updateQuantity(product_id, new_value);
}

function getMyPrice(product_id) {
    var cartAjax = new Ajax(cart_url, {method: 'get', data:{product_id: product_id, action:'get_my_price', ajax: 1}, onComplete:  function (data) {
        data = Json.evaluate(data);
        if(data.product_id!==null && data.my_price!==null) {
            var sum = data.my_price.toInt();
            var price_container = $('price_container_'+data.product_id);
            var price_label = $('price_label_'+data.product_id);
            var you_win_container = $('you_win_container_'+data.product_id);
            var you_win = $('you_win_'+data.product_id);
            price_container.setHTML(''+fmtKr(sum)+'');
            price_label.setHTML('Hind&nbsp;Sinule:');
            
            you_win.setHTML(fmtKr(data.you_win.toInt())+' ('+data.you_win_percent.toString().replace(/\./, ",")+'%)');
            you_win_container.setStyle('opacity', 0);
            you_win_container.setStyle('visibility', 'visible');
            you_win_container.effect('opacity', {duration: 1000,transition: Fx.Transitions.linear}).start(0,1);
            
            var interest = get_interest(sum);
            var period = 48;
            var lease_sum = $('lease_sum');
            if(lease_sum) {
                lease_sum.value = fmtKr(sum);
                calculateLease();
            }
            
            monthly_value = ((sum - 0) * (interest / 12)) / (1 -
            Math.pow((1 + interest / 12),(period*-1)));
            if(monthly_value < 100) monthly_value = 100;
        
            $('monthly_payment_'+data.product_id).setHTML(fmtKr(monthly_value));
            productTracker._trackEvent('Get My Price', data.product_title, sum);
        } else {
            shop_warn('Could not get my price: Invalid product data');
            shop_log(data);
        }
    }});
    cartAjax.request();
}

function addToCart(product_id) {
    var cartAjax = new Ajax(cart_url, {method: 'get', data:{product_id: product_id, action:'add_to_cart', ajax: 1}, onComplete:  function (data) {
        data = Json.evaluate(data);
        if(data.product && data.product.product_id!==null) {
            var product_row = $('product_row_'+data.product.product_id);
            var cartholder = $('cartholder');
            
            var cart_border = new Element('div', {'class': 'cart_border'})
            .setStyles(product_row.getCoordinates())
            .setStyles({'opacity': 0.7})
            .inject(document.body);
            
            var myEffects = new Fx.Styles(cart_border, {duration: 500,transition: Fx.Transitions.Cubic.easeIn});
    
            myEffects.start(cartholder.getCoordinates()).chain(function(){
                cart_border.remove();
                updateMiniCartQuantity(data.total_quantity);
            });
            
            productTracker._trackEvent('Add to Cart', data.product.product_title, data.product.quantity);
        } else {
            shop_warn('Could not add an item to cart: Invalid product data');
            shop_log(data);
        }
    }});
    cartAjax.request();
}

function shop_log(data) {
    if(console.log) console.log(data);
}

function shop_warn(data) {
    if(console.warn) console.warn(data);
}

function updateQuantity(product_id, quantity) {
    if(quantity==0) {
        removeFromCart(product_id);
    } else {
        var cartAjax = new Ajax(cart_url, {method: 'get', data:{product_id: product_id, action:'add_to_cart', ajax: 1, quantity: quantity}, onComplete:    function (data) {
            data = Json.evaluate(data);
            if(data.product && data.product.product_id!==null) {
                var product_row = $('product_row_'+data.product.product_id);
                var cartholder = $('cartholder');
                
                updateProductRow(data.product);
                updateMiniCartQuantity(data.total_quantity);
                updateCart(data);
            }
        }});
        cartAjax.request();
    }
}

function getPickupPoint() {
    var pickup_point_id = $('pickup_point').getValue();
    var cartAjax = new Ajax(cart_url, {method: 'get', data:{pickup_point_id: pickup_point_id, action:'get_pickup_point', ajax: 1}, onComplete:  function (data) {
        $('shop_info_container').setHTML(data);
        deliveryTracker._trackEvent('Choose pickup point', pickup_point_id);
    }});
    cartAjax.request();
}

function chooseDelivery(delivery_id) {
    //$('delivery_form').removeClass('hidden');
    $('delivery_form_1').addClass('hidden');
    $('delivery_form_2').addClass('hidden');
    $('delivery_notes_1').addClass('hidden');
    $('delivery_notes_2').addClass('hidden');
    $('delivery_form_'+delivery_id).removeClass('hidden');
    $('delivery_notes_'+delivery_id).removeClass('hidden');
    
    if (delivery_id == 2) {
        // carrier delivery
        $$('.delivery_with_carrier').removeClass('hidden');
        $$('.delivery_without_carrier').addClass('hidden');
    } else {
        // other delivery
        $$('.delivery_with_carrier').addClass('hidden');
        $$('.delivery_without_carrier').removeClass('hidden');
    }
    deliveryTracker._trackEvent('Change delivery method', delivery_id==1 ? 'Kauplus' : 'Kuller');  
}

function updateProductRow(productData) {
    var product_id = productData.product_id;
    //var product_row = $('product_row_'+productData.product.product_id);
    $('quantity_'+product_id).value = productData.quantity;
    $('total_price_'+product_id).setHTML(fmtKr(productData.total));
    productTracker._trackEvent('Change quantity', productData.product_title, productData.quantity.toInt());
            
}

function removeFromCart(product_id) {
    var cartAjax = new Ajax(cart_url, {method: 'get', data:{product_id: product_id, action:'remove_from_cart', ajax: 1}, onComplete:  function (data) {
        data = Json.evaluate(data);
        if(data.product_id!==null) {
            var product_row = $('product_row_'+data.product_id);
            var cartholder = $('cartholder');
           
            var myFx = new Fx.Style(product_row, 'opacity', {onComplete:function(e) {e.remove();updateMiniCartQuantity(data.total_quantity);},duration:500}).start(0);
            
            updateCart(data);
            productTracker._trackEvent('Remove from Cart', data.item.product_title);
        } else {
            shop_warn('Could not remove item from cart: Invalid product data');
            shop_log(data);
        }
    }});
    cartAjax.request();
}

function updateCart(cartData) {
    var lease_sum = $('lease_sum');
    if(cartData.total_quantity > 0) {
        $('vat').setHTML(fmtKr(cartData.vat));
        $('total').setHTML(fmtKr(cartData.total));
        $('total_no_vat').setHTML(fmtKr(cartData.total_no_vat));
        if(cartData.has_discount) {
            $('you_win_label').removeClass('hidden');
            $('you_win_textarea').removeClass('hidden');
            var discount_text = ''
            if(cartData.discount > 0) discount_text += fmtKr(cartData.discount)+'<br/>';
            cartData.discount_text.each(function (text) {
                discount_text += text + '<br/>';
            });
            $('you_win_textarea').setHTML(discount_text);
        } else {
            $('you_win_label').addClass('hidden');
            $('you_win_textarea').addClass('hidden');
        }
        if(lease_sum) {
            lease_sum.value = fmtKr(cartData.total);
            calculateLease();
        }
    } else {
        if(lease_sum) $('lease_calculator_container').toggleClass('hidden');
        $('cart_holder').toggleClass('hidden');
        $('no_products_message').toggleClass('hidden');
    }
}

function updateMiniCartQuantity(quantity) { 
    var cartcount = $('cartcount');
    cartcount.setHTML(quantity);

    cartcount.clone()
	.setStyles(cartcount.getCoordinates())
	.setProperty('id',null)
	.addClass('cart_count_clone')
	.inject(document.body)
	.effects({duration: 1000, transition: Fx.Transitions.Quad.easeIn})
	.start({
            'opacity': 0,
            'font-size':120
    }).chain(function(){this.element.remove();});
 
    if(quantity==1) {
        $('carttext').setHTML('toode');
    } else {
        $('carttext').setHTML('toodet');
    }
}

function calculateLease() {
    var sum = getNum('lease_sum');
    if(sum > 0) {
        var initial_payment = getNum('lease_initial_payment'); 
        var period = getNum('lease_period'); 
        var initial_payment_curr = getNum('lease_initial_payment_curr'); 
        var monthly_payment = getNum('lease_monthly_payment');
        var interest = get_interest(sum);
    
        initial_payment_curr = initial_payment_curr > sum ? 0 : initial_payment_curr;
        
        monthly_value = ((sum - initial_payment_curr) * (interest / 12)) / (1 -
        Math.pow((1 + interest / 12),(period*-1)));
        $('lease_monthly_payment').value = fmtKr(monthly_value);
        
        if(monthly_value < 100) {
            $('monthly_minimum_error').effects({duration: 500, transition: Fx.Transitions.Quad.easeIn}).start({ 'opacity': 1 });
        } else {
            $('monthly_minimum_error').effects({duration: 500, transition: Fx.Transitions.Quad.easeIn}).start({ 'opacity': 0 });
        }
    }
}

function choosePaymentGateWay(type) {
    $('payment_gateway_details').getElements('div[id^=pg_]').addClass('hidden');
    $('pg_'+type).removeClass('hidden');
    attachLease();
    paymentTracker._trackEvent('Change payment method', type);    
}

function get_interest(lease_sum) {
    var interest = 0.199;
    
    if(lease_sum >= 20000 && lease_sum < 40000) {
        interest = 0.179;
    }
    
    if(lease_sum >= 40000) {
        interest = 0.129;
    }
    
    return interest;
}

function show_rp_field () {
    var rp_value = $('ego_residence_permit').value;
    var document_id = $('ego_passport_id').value;
    if(rp_value=='') {
        if(
            document_id.indexOf("K")===0
            || document_id.indexOf("A")===0
            || document_id.indexOf("P")===0
            || document_id.indexOf("M")===0
            || document_id.indexOf("D")===0
            || document_id.indexOf("k")===0
            || document_id.indexOf("a")===0
            || document_id.indexOf("p")===0
            || document_id.indexOf("m")===0
            || document_id.indexOf("d")===0
        ) {
            $('residence_permit_row').addClass('hidden');
        } else {
            $('residence_permit_row').removeClass('hidden');
        }
    } else {
        $('residence_permit_row').removeClass('hidden');
    }
}

function updateInitialPayment() {
    $('lease_initial_payment_curr').value = fmtKr((getNum('lease_initial_payment')/100)*getNum('lease_sum'));
    calculateLease();
}

function toggleEgoPickupPoint() {
    if($('in_shop').checked) {
        $('ego_pickup_point_id_container').setStyle('display','');
    } else {
        $('ego_pickup_point_id_container').setStyle('display','none');
    }
}

function toggleBankType() {
    if($('ego_bank_type_hansapank').checked) {
        $('ego_bank_name_container').addClass('hidden');
    } else {
        $('ego_bank_name_container').removeClass('hidden');
    }
}

function updateInitialPercent() {
    $('lease_initial_payment').selectedIndex = 0;
    calculateLease();
}

function getNum(id) {
    var num = $(id).value.replace(/[^\d]/g,'').toFloat();
    return (isNaN(num) ? 0 : num);
}

window.addEvent('domready', function() {
	var Tips1 = new Tips($$('.click_here_why'));
    var Tips2 = new Tips($$('.attribute_help'));
       
    attachLease();

    $$('a._utm_outgoing_link').each(function(el) {
        el.onclick = function() {
            return outgoingTracker._trackEvent('Outgoing link', el.href);
        }
    })
    
    /*var button_mouseover = $('button_mouseover');
    
    button_mouseover.onmouseout = function() {
        this.setStyles({
            display: 'none'
        });
    }
    
    $$('a.link_button').each(function(el) {
        el.onmouseover = function() {
            var elCoords = el.getCoordinates();
            
            button_mouseover.onclick =  el.onclick;
            button_mouseover.href =  el.href;
            
            button_mouseover.setStyles({
               top: elCoords.top-2,
               left: elCoords.left-4,
               display: 'block'
            });
            
            button_mouseover.getFirst().setStyles({
               width: elCoords.width-8
            });
            //$('button_mouseover').effect('opacity', {duration: 100, transition: Fx.Transitions.Sine}).start(0,1);
        }
    })*/
    
    $$('div.error').each(function(el) {
        validationTracker._trackEvent('Error', el.getText());
    });
});

function attachLease() {
    var holder = $('lease_calculator_holder');
    if(holder) {
        holder.setStyle('display', 'block');
        var initialp = $('lease_initial_payment');
        $('lease_sum').onchange = $('lease_sum').onkeyup = calculateLease;
        $('lease_initial_payment').onchange = $('lease_initial_payment').onkeyup = calculateLease;
        $('lease_period').onchange = $('lease_period').onkeyup = calculateLease;
        $('lease_monthly_payment').onchange = $('lease_monthly_payment').onkeyup = calculateLease;
        
        initialp.onchange = initialp.onkeyup =  updateInitialPayment;
        $('lease_initial_payment_curr').onkeyup =  updateInitialPercent;
        
        $('monthly_minimum_error').setStyle('opacity',0);
        calculateLease();
    } 
}

function submitUrl(url) {
    var cart = $('cart');
    if(cart) {
        cart.setProperty('action', url);
        cart.submit();
    }
}

//fmtMoney( 123456789.12345, 2, '.', ',' );
fmtKr = function(n) {
    return fmtMoney(n, 0, ',', ' ')+' '+currency_symbol;
};

fmtMoney = function( n, c, d, t ) {
	var m = ( c = Math.abs( c ) + 1 ? c : 2, d = d || ",", t = t || ".", /(\d+)(?:(\.\d+)|)/.exec( n + "" ) ), x = m[1].length % 3;
	return ( x ? m[1].substr( 0, x ) + t : "" ) + m[1].substr( x ).replace( /(\d{3})(?=\d)/g, "$1" + t ) + ( c ? d + ( +m[2] ).toFixed( c ).substr( 2 ) : "" );
};

var cloneCounter = 0;

function cloneLiability() {    
    var dupNode = $('liability_container').getFirst().clone();
    
    cloneCounter++;
    dupNode.id = 'liability_'+cloneCounter;
    
    clearLiability(dupNode);
    
    dupNode.inject($('liability_container'));
}

function clearLiability(node) {
    $ES('input', node).setProperty('value', '');
    $ES('select', node).getFirst('option').setProperty('selected', true);
}

function removeLiability(node) {
    // XXX: dont remove last node
    if ($('liability_container').getChildren().length>1) {
        node.remove();
    } else {
        clearLiability(node);
    }
}