var basketAjaxURL = '/index.php?id=1&type=50';
var priceAjaxURL = '/index.php?id=1&type=51';
var buyAjaxURL = '/index.php?id=1&type=53';
var itemAjaxURL = '/index.php?id=1&type=54';
var updated_id = '';
var priceList = null;
var hideTime = false; 
var hideTimer;
var waitInputTimer;
 
Event.observe(window, 'load', init);

function init() {
    updated_id = 'all';
    var ajax = new Ajax.Request(basketAjaxURL, {
        method: 'get',
        onSuccess: updatePage
    });
    orderForm = $('order_form');
    if (orderForm) init_form(orderForm); 
    
    initBuySearch();
}

function initBuySearch()
{
    buy_search_query = $('buy-search-query');
    if (! buy_search_query) return;
    Event.observe(buy_search_query, 'keypress', onchangeBuySearchQuery);
}
function onchangeBuySearchQuery(event)
{
    switch(event.keyCode) {
     case Event.KEY_TAB:
     case Event.KEY_RETURN:
     case Event.KEY_ESC:
     case Event.KEY_LEFT:
     case Event.KEY_RIGHT:
     case Event.KEY_UP:
     case Event.KEY_DOWN:
       return;
    } 
    clearTimeout(waitInputTimer);
    waitInputTimer = setTimeout(waitInputBuySearchQuery, 1000);
}

function waitInputBuySearchQuery()
{
    var buy_search_query = $('buy-search-query');
    var query = buy_search_query.value;
    if (query.length < 3) return;
    buy_search_query.addClassName('loading');
    var ajax = new Ajax.Request(buyAjaxURL+'&query='+encodeURI(query), {
        method: 'get',
        onSuccess: updateBuyList
    });
}

function updateBuyList(transport)
{
  var buy_search_query = $('buy-search-query');
  buy_search_query.removeClassName('loading');

  var resultHTML = $('buy-search-result');
  if (!resultHTML) return;

  var json = eval('('+transport.responseText+')');
  var result = '';
  if (json.data.length > 0) {
    for(var i=0; i<json.data.length; i++)
    {
      var obj = json.data[i];
      result = result + '<li><a href ="/' + obj.url + '">'
        + obj.name + '</a></li>';
    }
    resultHTML.innerHTML = '<ul>' + result + '</ul>';
  }
  else {
    resultHTML.innerHTML = '<p><strong>Ничего не найдено</strong></p>';
  }
}


function initPrice(category) {
    var ajax = new Ajax.Request(priceAjaxURL+'&grid[categories_id]='+category, {
        method: 'get',
        onSuccess: updatePrice
    });
    return true;
}

function updatePrice(transport) {
    var json=eval('('+transport.responseText+')');
    priceList = json.items;
    for(id in priceList) {
        obj = $('price_'+id);
        if (obj) {
            old_price = obj.innerHTML;
            if (priceList[id].price2 && old_price != priceList[id].price2) {
                obj.innerHTML = priceList[id].price2+' <span>'+old_price+'</span>';
        }
        }
    }   
}



function addToBasket(id, name, amount) {
    updated_id = id;
    var ctrl = document.getElementById('basket_amount_'+id);
    var ctrlValue = parseInt(ctrl.value);
    if (isNaN(ctrlValue)) ctrlValue = 0;
    ctrlValue += amount;
    if (ctrlValue < 0) ctrlValue = 0;
    ctrl.value = ctrlValue;
    
    var params = {};
    parameter_id = name;
    params[parameter_id] = ctrlValue;
    var ajax = new Ajax.Request(basketAjaxURL, {
        method: 'get',
        parameters: params, 
        onSuccess: updatePage
    });
}

function updateItem(id, json) {
    var item = json.items[id];
    
    var costDiv = $(id+'_cost');
    if (costDiv != null) { 
        if (item) { costDiv.innerHTML=item.cost; } else { costDiv.innerHTML='0.00'; }
    }
    
    var amountCtrl = $('basket_amount_'+id);
    if (amountCtrl != null) {
        if (item) { amountCtrl.value=item.amount; } else { amountCtrl.value = '0'; }    
    }
}

function updatePage(transport) {
    var json=eval('('+transport.responseText+')');
    
    var totalCost = $('total_cost');
    if (totalCost) totalCost.innerHTML = json.totalCost;
    var totalItems = $('total_items');
    if (totalItems) {
        var int_total = json.totalNum;
        var str_total = '';
        if (int_total == 0) str_total = '';
        else if (int_total % 10 == 1) str_total = 'В корзине '+int_total+' единица товара на сумму '+json.totalCost+' р.';
        else if (int_total % 10 < 5 && int_total % 10 > 0) str_total = 'В корзине '+int_total+' единицы товара на сумму '+json.totalCost+' р.';
        else str_total = 'В корзине '+int_total+' единиц товара на сумму '+json.totalCost+' р.';
        
        if (str_total == '') str_total = 'Корзина пуста';
        else str_total = '<a href="'+basketURL+'">'+str_total+'</a>';
        totalItems.innerHTML = str_total; 
    }
    var totalAmount = $('total_amount');
    if (totalAmount) totalAmount.innerHTML = json.totalNum;

    var basketTotalArray = $$('.basket_total');
    for (key in basketTotalArray) {
        basketTotalArray[key].innerHTML = json.totalNum;
    }
    var basketCostArray = $$('.basket_cost');
    for (key in basketCostArray) {
        basketCostArray[key].innerHTML = json.totalCost;
    }    
    if (updated_id == 'all') {
        for(id in json.items) updateItem(id, json); 
    } else {
        updateItem(updated_id, json);
    }   
}


function blockVisible(element, visible){
    var obj = $(element);
    obj.style.display=visible ? "block": "none";
}

function check_email(s) {
    rex=true;
    if (window.RegExp) {
        st="a";ex=new RegExp(st);
        if (st.match(ex)) {
            r1=new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
            r2=new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
            b=(!r1.test(s)&&r2.test(s));
        } else {
            rex=false;
        }
    } else {
        rex=false;
    }
    if(!rex) b=(s.indexOf("@")>0 && s.indexOf(".")>0 && s!="");
    return (b);
}

function check_form(form) {
    var check_ok = true;
    var or_ok = false;
    var setObj = $('fld_iscompany2');
    for(i = 0; i < form.elements.length; i++) {
        data = form.elements[i];
        if ((data.className.indexOf("required_") >= 0 && data.className.indexOf("set2") < 0) || 
            (setObj.checked && data.className.indexOf("set2") >=0)) {
            var failed_field = false;
            if (data.className.indexOf("required_email") >= 0) {
                if (!check_email(data.value)) failed_field = true;
            } else if (data.value == '') failed_field = true;
            if (failed_field) check_ok = false;
            label = $(data.id+"_req");
            if (label) label.style.display = failed_field ? "block" : "none";
        }
    }
    return(check_ok);
}


function init_form(form) {
    obj = $('fld_iscompany2');
    if (obj) blockVisible('set_company', obj.checked);
}


function show_basketdrop(obj) {
    if (!obj) return;
    basketdrop = $('basket_drop');
    if (!basketdrop) return;
    objPageOffset = Position.cumulativeOffset(obj);
    basketdrop.style.left = (objPageOffset[0]) + 'px';
    basketdrop.style.top = (objPageOffset[1] + 34) + 'px';
//    basketdrop.style.left = 0 + 'px';
//    basketdrop.style.top = 34 + 'px';
    basketdrop.style.display="block";
	hideTime = false;
	hideTimer = setInterval('hideCallback()', 10);
}

function hide_basketdrop(obj) {
	hideTime = new Date();
}

function overDrop() { hideTime = false;}
function outDrop() { hideTime = new Date(); }

function hideCallback() {
	if (!hideTime) return;
	now = new Date();
	if (now - hideTime < 1000) return;
    
	clearInterval(hideTimer);
	
	basketdrop = $('basket_drop');
    if (!basketdrop) return;
    basketdrop.style.display="none";
}

function showInfo(id)
{
  var item = $('item-'+id);
  var obj = $('item-info-'+id);
  if (!obj)
  {
    var item = $('item-'+id);
    if (!item) return;
    item.innerHTML += '<div id="item-info-' + id + '" style="display:none;" class="item-info"></div>'
    var obj = $('item-info-'+id);
    var ajax = new Ajax.Updater(obj, itemAjaxURL + "&grid[products_id]=" + id, 
    {
      method: 'get'
    //    onSuccess: updateInfo
    });
  } 
 
  $$('.item-info').invoke('hide');
  
  var dx = obj.getOffsetParent().cumulativeOffset();
  itemPageOffset = item.cumulativeOffset();
  obj.setStyle( { position:'absolute', top: (itemPageOffset[1]-dx[1] - 10) + "px", left: (itemPageOffset[0]-dx[0] + 464) + "px", zIndex:100, display:"block" } );
}

function hideInfo(id)
{
  var obj = $('item-info-'+id);
  if (obj) obj.setStyle( { display:"none" } );
}
