/* cart */

addLoadEvent(Cart);


function Cart() 
{  
    var cartDiv = document.getElementById('cartBox');
    if (cartDiv) {
        var panel = new CartPanel(cartDiv);
    }
}


function CartPanel(cartDiv) 
{
    var that = this;
    var cartBox = cartDiv;
    var cartData = document.getElementById('cartData');
    var interval = null;
    var intervalClose = null;
    var openHeight = cartData.offsetHeight;
    var closeHeight = 0;
    var currentHeight = openHeight;
    var targetHeight = null;
    var isOpen = false; // prevent instant fadeing
    
    // cart link controller
    var invoker = document.getElementById('cartPanel');
    invoker.onmouseover = function() {
        clearTimeout(intervalClose);
        var cartNotice = document.getElementById('cartNotice');
        if (cartNotice) {
            cartNotice.style.display = 'none';
        }
        showCart();
        return false;
    }
    invoker.onmouseout = function() {
       intervalClose = setTimeout(function() { hideCart() }, 1000); 
    }
    cartData.onmouseover = function() {
        clearTimeout(intervalClose);
        showCart();
        return false;
    }
    cartData.onmouseout = function() {
       intervalClose = setTimeout(function() { hideCart() }, 1000); 
    }
    
    // add to cart button controller
    var inputSubmit = document.getElementById('cartSubmit');
    if (inputSubmit) {
        inputSubmit.onclick = function() {
            updateCart();
            return false;
        }
    }
    
    // show & hide 
    function showCart()
    {
       cartBox.style.visibility = 'visible';
       if (isOpen == false) fadein('cartBox',0);
       isOpen = true;               
    }
    
    function hideCart()
    {
       cartBox.style.visibility = 'hidden';
       isOpen = false; 
    }
    
    // updating cart
    function updateCart()
    {
        var itemId = document.getElementById('itemId');
        var itemQuantity = document.getElementById('cartQuatity')
        var url = globalPath + '?request_type=async&page=cart';
        if (itemId) { 
            url += '&id=' + itemId.value;
        }  
        if (itemQuantity) { 
            url += '&quantity=' + itemQuantity.value;
        }    
        requestGet(url);       
    } 
    
    function handleResponse(response) {     
        var obj = eval('(' + response + ')');
        var cartPanel = document.getElementById('cartPanel');
        if (cartPanel) cartPanel.innerHTML = obj.summary;
        cartData.innerHTML = obj.cart_items;
        clearTimeout(intervalClose);
        hideCart();
        var cartNotice = document.getElementById('cartNotice');
        if (cartNotice) {
            cartNotice.style.display = 'block';
        }
        showCart();
        intervalClose = setTimeout(function() { hideCart() }, 4000); 
    }

    function createXMLHttp() 
    {
        if (typeof XMLHttpRequest != 'undefined') {
            return new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            var aVersions = [ "MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp", "Microsoft.XMLHttp" ];
            for (var i = 0; i < aVersions.length; i++) {
                try {
                    var oXmlHttp = new ActiveXObject(aVersions[i]);
                    return oXmlHttp;
                } catch (oError) {
                    // do nothing
                }
            }
        }
        throw new Error("Obiekt XMLHttp nie został utworzony.");
    }
    
    function requestGet(url) 
    {
        var oXMLHttp = createXMLHttp();
        oXMLHttp.open("get", url, true);
        oXMLHttp.onreadystatechange = function () {
            if (oXMLHttp.readyState == 4) {
                if (oXMLHttp.status == 200) {
                    handleResponse(oXMLHttp.responseText);             
                } else {
                    // do nothing
                }
            }            
        };
        oXMLHttp.send(null);
    }
    
}


























// end
