var globalCurrentUrl = window.location.search;
var globalCalculatedPrice = 0;
var translated_phrase = '';

/**
 * Loads title using AJAX 
 */ 
function getPageTitle(page_name, params) { 
    if (!params) params = "";
    $.ajax ({
        type: "GET",
        async: false,
        url: "index.php",
        data: "page=ajax_request&action=get_title&page_name=" + page_name + params,
        dataType:"html",
        success: function (text, textStatus) {
            if (textStatus == 'success') 
                document.title = text;
        }
    });
}

/**
 * Get current page from URL 
 *
 * @return string - Current page 
 */ 
function getCurrentPage () { 
    var current_url = document.location.href;
    var rex = new RegExp("page=([a-z0-9_\-]+)", 'i');
    var current_page = current_url.match(rex);

    if (current_page != null)
        return current_page[1];

    return "home";
}

getCurrentPage();

/**
 * Debugging function 
 */
function debugBacktrace () { 
    var callerFunction = debugBacktrace.caller;
    var counter = 0;
    while (callerFunction != null) { 
        if (counter >= 10 || callerFunction == null) return;
        counter++;
        callerFunction = callerFunction.caller;
        } 
    }

/**
 * Create modal windows hook events 
 */
$(document).ready(function($) {
    $('a[rel*=modalLogin]').facebox()
});

$(document).ready(function($) {
    $('a[rel*=modalLogin]').facebox()
});

$(document).ready(function($) {
    $('#search_keyword').click(function() {
    $(this).removeClass("background");
    $(this).addClass("empty");
    }); 	
});
$(document).ready(function($) {
    $('#search_keyword').blur(function() {
    $(this).removeClass("empty");
    if (this.value == '') 
        $(this).addClass("background");
    }); 	
});

/**
 * Ajax login processing functin 
 */
function processLogin() { 
    var facebox_error = $("#facebox div[id='loginErr']");
    $(facebox_error).hide();
    var redirect_url = window.location.href;
    $('#facebox .hide').css("display", "none");
    var email = $("#facebox input[name='login_email']").val();
    var password = $("#facebox input[name='login_password']").val()

    $.ajax({
        type: "GET",
        async: false,
        url: "index.php",
        data: "page=home&action=login&login_email=" + email + "&login_password=" + password,
        dataType:"html",
        success: function (text, textStatus) {
            if (text != 'false') { 
                window.location.href = redirect_url;
                return;
            }

            $(facebox_error).show();
        }
    });
    
}

/**
 * Load categories by parent id 
 */
function categoryLoad(category_id, load_products) { 
    var jq_trigger_element = '#category';
    var jq_trigger_element_close = '#subcategory';
    var jq_elementid = '#categories';
    var jq_hide_elementid = '#subcategories';
    var url = '?page=ajax_request';
    var referer = 'review';

    if (document.location.href.indexOf('page=product') != -1) 
        referer = 'product';
    url += '&referer=' + referer;

    url += '&action=load_subcategory&categoryid=0';
    $(jq_elementid).load(url);
    $(jq_hide_elementid).hide();
    $(jq_elementid).show();

    if (load_products)
        productsLoad(category_id);
        
    $(jq_trigger_element).addClass('open');
    $(jq_trigger_element_close).removeClass('open');
    $('#secondaryNavProductName').html('');
}

/**
 * Load subcategory by givven category id 
 */
function subcategoryLoad (category_id, load_products) { 
    var categoryLinkId = "#category_" + category_id;
    var jq_trigger_element = '#subcategory';
    var jq_trigger_element_close = '#category';
    var jq_elementid = '#subcategories';
    var jq_hide_elementid = '#categories';
    var url = '?page=ajax_request';
    var referer = 'review';

    if (document.location.href.indexOf('page=catalog') != -1) 
        referer = 'catalog';
    url += '&referer=' + referer;

    url += '&action=load_subcategory&categoryid=' + category_id;
    $(jq_elementid).load(url);
    $(jq_hide_elementid).hide();

    if (load_products)
        productsLoad(category_id);
        
    $(jq_trigger_element).removeClass('subcategoryHide');
    translatePhrase('CHOOSE_SUBCATEGORY');
    $(jq_trigger_element + " font:1").html(translated_phrase);
//    $(jq_trigger_element).addClass('open');
    if ($(categoryLinkId).html()) {  
        var jq_trigger_element_close_selector = 
            jq_trigger_element_close + " font:1";
        $(jq_trigger_element_close_selector).html($(categoryLinkId).html());
    }
    $(jq_trigger_element_close).removeClass('open');
    $('#secondaryNavProductName').html('');
}

/**
 * Load divisions 
 */ 
function loadDivisions () { 
    var url = '?page=ajax_request&action=load_divisions';
    url += '&refferer=' + getCurrentPage();
    $('#mainContainer').load(url);
    translatePhrase('DIVISIONS_RIGHT_COL_TEXT');
    getPageTitle('catalog');
//    $('#singleColumn').html(translated_phrase);
}

/**
 * Load categories by givven divisionid 
 *
 * @param int - Division unique Id 
 */ 
function loadCategories (divisionid) { 
    var params = "&divisionid=" + divisionid  
        + '&refferer=' + getCurrentPage();
    var url = "?page=ajax_request&action=load_categories" + params;

    $('#mainContainer').load(url);
    getPageTitle('catalog', "&divisionid=" + divisionid);
    translatePhrase('CATEGORIES_RIGHT_COL_TEXT');
//    $('#singleColumn').html(translated_phrase);
}

/**
 * Load subcategories by givven divisionid and categoryid
 *
 * @param int - Division unique Id 
 */ 
function loadSubcategories (divisionid, categoryid) { 
    var params = "&divisionid=" + divisionid + "&categoryid=" + categoryid 
        + '&refferer=' + getCurrentPage();
    var url = "?page=ajax_request&action=load_subcategory" + params;

    getPageTitle('catalog', params);

    $('#mainContainer').load(url);
    translatePhrase('SUBCATEGORIES_RIGHT_COL_TEXT');
//    $('#singleColumn').html(translated_phrase);
}

/**
 * Load categories by givven divisionid 
 *
 * @param int - Division unique Id 
 */ 
function loadProduct (divisionid, categoryid) { 

    if (document.location.href.indexOf('page=reviews') != -1) {
       var url = "?page=ajax_request&action=load_reviews"
    } else { 
       var url = "?page=ajax_request&action=load_product"
    }

    var params = "&divisionid=" + divisionid
         + '&categoryid=' + categoryid;

    url += params;
    $('#mainContainer').load(url);
    getPageTitle('catalog', params);
    translatePhrase('PRODUCTS_RIGHT_COL_TEXT');
//    $('#singleColumn').html(translated_phrase);
}

/**
 * Load products by category id
 */
function productsLoad(category_id, parentElement) { 
    var jq_elementid = '#subcategories';
    
    if (parentElement) { 
        parentElement = $(parentElement);
        var classifierId = "a#" + parentElement.attr('rel') + " font:1";
        $(classifierId).html(parentElement.html());
        var parentSection = parentElement.parent();
        if ($(parentSection).attr('id') == 'subcategories')
            $('#subcategory').removeClass('open');
    }
    var current_page = document.location.href;

    var url='?page=ajax_request';
    if (current_page.indexOf('page=reviews') != -1) { 
        url += '&action=load_reviews&categoryid=' + category_id;
    } else { 
        url += '&action=load_products&categoryid=' + category_id;
    }

    $('#mainContainer').load(url);
    if ($('#productViewProductTable')) 
        $('#productViewProductTable').html("");
    $('#secondaryNavProductName').html('');
    $(jq_elementid).hide();
}

/**
 * Load compareable product into the document
 */
function loadComparableProduct(productid, element_id) { 
    if (!element_id) element_id = 'productDescription';
    element_id = '#' + element_id;
    var url = '?page=ajax_request&productid=' 
        + productid + '&action=compare';

    $('#hideOnCompare').hide();
    $(element_id).load(url);
}

function productAdd () { 
    var productid = $("#productid").val();
    var quontity = $("#quontity").val();
    if (!quontity) quontity = 1;
    productUpdateCard(productid, quontity);
}

/**
 * Update shopping card information
 */
function productEdit (productid, element) { 
    var calculated_price = productUpdateCard(productid, element.value);
    var element_id = "#calculatedPrice_" + productid;
    if (calculated_price) 
        $(element_id).html(globalCalculatedPrice);
}

/**
 * Update shopping card ajax request method 
 */
function productUpdateCard(productid, quontity) { 
     $.ajax(
            {
            type:"GET", 
            async: false,
            url:"index.php", 
            data:"page=cash&action=product_add&productid=" + productid + "&quontity=" + quontity,
            dataType:"xml",
            success: function (xml, textStatus) {
                    if (textStatus != 'success') return;
                    productAddSuccess(xml);
               }
            }
            );
}

/**
 * Add product to shopping card
 */
function productAddSuccess(xml) { 
    $('return', xml).each(function() { 

            var code = $('code', this).text();
            var message = $('message', this).text();

            if (code == 'message' || code == 'error') 
                setError(code, message);

            if (code == 'error')
               return false;

            updateShoppingCard($('data',this));
 
            });
}

/**
 * Set error message returned by ajax request
 */
function setError(id, message) { 
    $('#' + id).html(message);
}

/**
 * Update UI shopping card data
 */
function updateShoppingCard (data) { 
    var price = $('card_price', data).text();
    var final_price = $('card_final_price', data).text();
    var amount = $('card_amount', data).text();
    var currency_label = $('currency_label', data).text();
    var shoppingCardPriceFinal = $('#shoppingCardPriceFinal');
    var transport_tax = $('transport_tax', data).text();
    var payment_tax = $('payment_tax', data).text();
    globalCalculatedPrice = $('product_calculated_price', data).text();

    $('#shoppingCardAmount').html(amount);
    $('#shoppingCardPrice').html(price);
    $('#cash_currency_label').html(currency_label);
    if (shoppingCardPriceFinal) 
        shoppingCardPriceFinal.html(final_price);

    if ($('#currentQuontity')) 
        $('#currentQuontity').html($('product_amount', data).text());
    if ($('#currentQuontityContainer'))
        $('#currentQuontityContainer').show();
    
    $('#payment_tax_element').html(payment_tax);
    $('#transport_tax_element').html(transport_tax);
}

/**
 * Update single product shopping card information 
 */ 
function updateSingleProductInfo (data, productId) { 
    var productAmountId  = '#product_amount_' + productId;
    var productPriceId = '#calculatedPrice_' + productId;

    if ($(productAmountId).val()) 
      $(productAmountId).val($('product_amount', data).text());  
    
    if ($(productPriceId).html()) 
      $(productPriceId).html($('product_calculated_price', data).text());  
}

/**
 * Ajax pagination controller 
 */
function ajaxPagination (basicUrl, limit, containerId) { 
    if (!containerId) { 
        containerId = '#mainContainer';
    }

    var url = basicUrl + 'limit=' + limit;
    $(containerId).load(url);
}

/**
 * Submit search form event hanles input keypress
 */
function SearchSiteSubmit(e) { 
 var keycode;
        if (window.event)
                keycode = window.event.keyCode;
        else if (e)
                keycode = e.which;
        else 
                return true;

        if (keycode == 13) { 
            $('#search_keyword_hidden').val($('#search_keyword').val());
            document.search_form.submit();
            return false;
        } else { 
            return true;
        }
}

function submitSearch() {
    $('#search_keyword_hidden').val($('#search_keyword').val());
    document.search_form.submit();
    return false;
}

/**
 * Submit search form event hanles input keypress
 */
function LoginSiteSubmit(e) { 
 var keycode;
        if (window.event)
                keycode = window.event.keyCode;
        else if (e)
                keycode = e.which;
        else 
                return true;

        if (keycode == 13) { 
            processLogin();
            return false;
        } else { 
            return true;
        }
}

/**
 * Remove item from shopping card 
 */
function deleteShoppingCardItem(productId) { 
    var successHandler = function (xml, textStatus) { 
    $('return', xml).each(function() { 
            var code = $('code', this).text();
            if (code == 'success') 
                window.location.reload();

            var message = $('message', this).text();
            setError(code, message);    
            });
    }

    shoppingCardActionHandler (productId, 'delete', successHandler);

}

/**
 * Add item amount to shopping card 
 */
function addShoppingCardItem (productId) { 
    var successHandler = function(xml, textStatus) { 
    $('return', xml).each(function() { 
            var code = $('code', this).text();
            if (code == 'success') { 
                updateShoppingCard(this);
                updateSingleProductInfo(this, productId);
                setError('error', '');
                return;
                }

            var message = $('message', this).text();
            setError(code, message);    
            });
    }

    shoppingCardActionHandler (productId, 'increace', successHandler);
}

/**
 * Remove item amount from shopping card 
 */
function removeShoppingCardItem (productId) { 
    var successHandler = function(xml, textStatus) { 
    $('return', xml).each(function() { 
            var code = $('code', this).text();
            if (code == 'success') { 
                updateShoppingCard(this);
                updateSingleProductInfo(this, productId);
                setError('error', '');
                }

            var message = $('message', this).text();
            setError(code, message);    
            });
    }

    shoppingCardActionHandler (productId, 'decreace', successHandler);
}

/**
 * Shopping card action handler 
 */
function shoppingCardActionHandler (productId, card_event, successHandler) { 
     $.ajax(
            {
            type:"GET", 
            async: true,
            url:"index.php", 
            data:"page=cash&action=card_edit&productid=" + productId + "&event=" + card_event,
            dataType:"xml",
            success: successHandler
            }
            );
}

/**
 * Translate givven phrase and return the result
 */
function translatePhrase (phrase) { 
     $.ajax({
            type:"GET", 
            async: false,
            url:"index.php", 
            data:"page=home&action=translate&phrase=" + phrase,
            dataType:"html",
            success: function (data, textStatus) { 
                translated_phrase = data;
                }
            });
}

/**
 * Switch navigation 
 */
function switchNavigation (element) { 
    if (element == 'category') { 
        var jq_element_show = '#categories';
        var jq_element_hide = '#subcategories';
        var jq_element_select = '#category';
        var jq_element_deselect = '#subcategory';
    } else { 
        var jq_element_show = '#subcategories';
        var jq_element_hide = '#categories';
        var jq_element_select = '#subcategory';
        var jq_element_deselect = '#category';
    }

    $(jq_element_show).show();
    $(jq_element_hide).hide();
    $(jq_element_select).addClass('open');
    $(jq_element_deselect).removeClass('open');
}

/**
 * Close navigation 
 */
function closeNavigation(element) { 
    if (element == 'categories') { 
        $('#category').removeClass('open');
    }
    
    if (element == 'subcategories') { 
        $('#subcategory').removeClass('open');
    }

    $('#' + element).hide();
}

/**
 * Show/Hide order history details 
 */ 
function toggleOrdersHistory (action, order_id) { 
    var show_link = '#show_' + order_id;
    var hide_link = '#hide_' + order_id;
    var element_id = '#orderitems_dbo_' + order_id;

    if (action == 'show') { 
        $(show_link).hide();
        $(hide_link).show();
        $(element_id).show();
    } else { 
        $(show_link).show();
        $(hide_link).hide();
        $(element_id).hide();
    }
}
