﻿window.onload = function()
{
/*
	if (document.getElementsByClassName == undefined)
	{
		document.getElementsByClassName = function(className)
		{
			var hasClassName = new RegExp("(?:^|\\s)" + className + "(?:$|\\s)");
			var allElements = document.getElementsByTagName("*");
			var results = [];

			var element;
			for (var i = 0; (element = allElements[i]) != null; i++)
			{
				var elementClass = element.className;
				if (elementClass && elementClass.indexOf(className) != -1 && hasClassName.test(elementClass))
					results.push(element);
			}

			return results;
		}
	}
*/
    __getBasketBrief();
};

function __serializeChart()
{
    var msg='';
    var e=document.getElementsByTagName("input");
    for(var i=0;i<e.length;i++)
    {
        if(e[i].name.substring(0,5)=='count')
        {
            msg+=e[i].name.substring(5)+','+e[i].value+';';
        }
    }
    return msg;
}

function __deserializeChart(result)
{
    var rows = result.split(';');
    document.getElementById("basketItogo").innerHTML = document.getElementById("bskt_sum").innerHTML = rows[rows.length-2];
    //document.getElementById("basketItogoDisc").innerHTML = rows[rows.length-2];
    document.getElementById("bskt_cnt").innerHTML = rows[rows.length-1];
    var prods = new Array();
    for(var i=0; i<rows.length-2; i++)
    {
        var pair = rows[i].split(',');
        prods[pair[0]] = parseInt(pair[1]);
    }
    var e=document.getElementsByTagName("input");
    var rowIndexTodel = new Array();
    for(var i=0;i<e.length;i++)
    {
        if(e[i].name.substring(0,5)=='count')
        {
            if(prods[e[i].name.substring(5)] == undefined)
            {
                var _row = e[i].parentNode.parentNode;
                rowIndexTodel.push(_row.rowIndex);
            }
            else
            {
                e[i].value = prods[e[i].name.substring(5)];
            }
        }
    }
    var _tbl = document.getElementById("tblBasket");
    while(rowIndexTodel.length>0)
    {
        _tbl.deleteRow(rowIndexTodel.pop());
    }
    return prods;
}

function _____count(count)
{
    if (count == 0) return "пусто";
    if (count % 10 == 1 && count % 100 != 11) return count+" товар";
    if (count % 10 > 1 && count % 10 < 5 && count % 100 != 12 && count % 100 != 13 && count % 100 != 14) return count+" товара";
    return count+" товаров";
}
function _____number_format (number, decimals, dec_point, thousands_sep) {
    // Formats a number with grouped thousands
    //
    // version: 906.1806
    // discuss at: http://phpjs.org/functions/number_format    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://getsprink.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +     bugfix by: Howard Yeend
    // +    revised by: Luke Smith (http://lucassmith.name)
    // +     bugfix by: Diogo Resende
    // +     bugfix by: Rival    // +     input by: Kheang Hok Chin (http://www.distantia.ca/)
    // +     improved by: davook
    // +     improved by: Brett Zamir (http://brett-zamir.me)
    // +     input by: Jay Klehr
    // +     improved by: Brett Zamir (http://brett-zamir.me)    // +     input by: Amir Habibi (http://www.residence-mixte.com/)
    // +     bugfix by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: number_format(1234.56);
    // *     returns 1: '1,235'
    // *     example 2: number_format(1234.56, 2, ',', ' ');    // *     returns 2: '1 234,56'
    // *     example 3: number_format(1234.5678, 2, '.', '');
    // *     returns 3: '1234.57'
    // *     example 4: number_format(67, 2, ',', '.');
    // *     returns 4: '67,00'    // *     example 5: number_format(1000);
    // *     returns 5: '1,000'
    // *     example 6: number_format(67.311, 2);
    // *     returns 6: '67.31'
    // *     example 7: number_format(1000.55, 1);    // *     returns 7: '1,000.6'
    // *     example 8: number_format(67000, 5, ',', '.');
    // *     returns 8: '67.000,00000'
    // *     example 9: number_format(0.9, 0);
    // *     returns 9: '1'    // *     example 10: number_format('1.20', 2);
    // *     returns 10: '1.20'
    // *     example 11: number_format('1.20', 4);
    // *     returns 11: '1.2000'
    // *     example 12: number_format('1.2000', 3);    // *     returns 12: '1.200'
    var n = number, prec = decimals;
 
    var toFixedFix = function (n,prec) {
        var k = Math.pow(10,prec);        return (Math.round(n*k)/k).toString();
    };
 
    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);    var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
    var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;
 
    var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;
     var abs = toFixedFix(Math.abs(n), prec);
    var _, i;
 
    if (abs >= 1000) {
        _ = abs.split(/\D/);        i = _[0].length % 3 || 3;
 
        _[0] = s.slice(0,i + (n < 0)) +
              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
        s = _.join(dec);    } else {
        s = s.replace('.', dec);
    }
 
    var decPos = s.indexOf(dec);    if (prec >= 1 && decPos !== -1 && (s.length-decPos-1) < prec) {
        s += new Array(prec-(s.length-decPos-1)).join(0)+'0';
    }
    else if (prec >= 1 && decPos === -1) {
        s += dec+new Array(prec).join(0)+'0';    }
    return s;
}

function _____formatMoney(val)
{
    var kop = _____number_format(val,2,'.',' ');
    var ar = kop.split(".");
    var rub= ar[0];
    kop = " " + ar[1]+" коп.";
    if(kop.substring(1, 3) == "00" ) kop="";
    return rub+" руб."+kop;
}

function __chartRecalc()
{
    srv.chartRecalc(__serializeChart(), __chartRecalc_OnSucceeded, OnFailed);
    return false;
}

function __chartLocalRecalc()
{
    var prodCount=0;
    var total=0;
    var e=document.getElementsByTagName("input");
    for(var i=0;i<e.length;i++)
    {
        if(e[i].name.substring(0,5)=='count')
        {
            var id=e[i].name.substring(5);
            var count=parseInt(e[i].value);
            var price=parseFloat(document.getElementById("price"+id).value);
            prodCount+=count;
            total+=count*price;
        }
    }
    //var withDiscaunt=total*(1-parseFloat(document.getElementById("discaunt18e36986").value)/100);
    document.getElementById("bskt_cnt").innerHTML = _____count(prodCount);
    document.getElementById("basketItogo").innerHTML = document.getElementById("bskt_sum").innerHTML = _____formatMoney(total);
    //document.getElementById("basketItogoDisc").innerHTML = _____formatMoney(withDiscaunt);
    if(prodCount>0)
    {
        document.getElementById('content_orderContent_goOrder').style.visibility = 'visible';
    }
    else
    {
        document.getElementById('content_orderContent_goOrder').style.visibility = 'hidden';
    }

    return false;
}

function __chartFlashOff(buttonObject)
{
    document.getElementById(buttonObject).style.backgroundColor="";
}

function __chartFlash(buttonObject)
{
    document.getElementById(buttonObject).style.backgroundColor="yellow";
    window.setTimeout("__chartFlashOff('"+buttonObject+"');", 200);
}

function __addToChart(id)
{
    srv.addToChart(id, __addToChart_OnSucceeded, OnFailed);
    return false;
}

var flashes=0;

function __addToChart_OnSucceeded(result, userContext, methodName) 
{
    var rows = result.split(';');
    document.getElementById("bskt_cnt").innerHTML = rows[0];
    document.getElementById("bskt_sum").innerHTML = rows[1];
    flashes=2;
    doFlashes();
}

function __getBasketBrief()
{
    srv.getBasketBrief(__getBasketBrief_OnSucceeded, OnFailed);
    return false;
}

function __getBasketBrief_OnSucceeded(result, userContext, methodName) 
{
    var rows = result.split(';');
    document.getElementById("bskt_cnt").innerHTML = rows[0];
    document.getElementById("bskt_sum").innerHTML = rows[1];
}

function OnFailed(error, userContext, methodName) 
{
    if(error !== null) 
    {
        window.status = "An error occurred: " + error.get_message();
    }
}

function doFlashes()
{
    var divBasket = document.getElementById("bskt_a");
    if(divBasket.style.backgroundColor!="yellow")
    {
        divBasket.style.backgroundColor="yellow";
    }
    else
    {
        divBasket.style.backgroundColor="";
        flashes--;
        if(flashes<=0) return;
    }
    setTimeout('doFlashes()', 300);
}

function crement(textboxName, delta)
{
    srv.crement(textboxName.substring(5)+';'+delta.toString(), _crement_OnSucceeded, OnFailed);
}

function _crement_OnSucceeded(result, userContext, methodName) 
{
    var res = result.split(';');
    var tb = document.getElementsByName("count"+res[0])[0];
    if(res[1]=='x')
    {
        _remov_OnSucceeded(res[0]);
    }
    else
    {
        if(res.length<3)
        {
            tb.value = parseInt(tb.value) + parseInt(res[1]);
            __chartLocalRecalc();
        }
        else
        {
            tb.value = parseInt(res[2]);
            __chartLocalRecalc();
        }
    }
}

function remov(textboxName)
{
    var tb = document.getElementsByName(textboxName)[0];
    tb.parentNode.parentNode.style.display="none";
    srv.remov(textboxName.substring(5), _remov_OnSucceeded, OnFailed);
}

function _remov_OnSucceeded(result, userContext, methodName) 
{
    var tb = document.getElementsByName("count"+result)[0];
    if(typeof(tb) !== 'undefined')
    {
        var _tbl = document.getElementById("tblBasket");
        _tbl.deleteRow(tb.parentNode.parentNode.rowIndex);
        __chartLocalRecalc();
    }
}

function __chartRecalc_OnSucceeded(result, userContext, methodName) 
{
    __deserializeChart(result);
}

function __goOrder()
{
    srv.chartRecalc(__serializeChart(), __goOrder_OnSucceeded, OnFailed);
    return false;
}
function __doOrder()
{
    var _pdName = document.getElementById("content_orderContent_pdName");
    var _pdPhone = document.getElementById("content_orderContent_pdPhone");
    var _pdAltPhone = document.getElementById("content_orderContent_pdAltPhone");
    var _pdEmail = document.getElementById("content_orderContent_pdEmail");
    var _pdPostIndex = document.getElementById("content_orderContent_pdPostIndex");
    var _pdCity = document.getElementById("content_orderContent_pdCity");
    var _pdState = document.getElementById("content_orderContent_pdState");
    var _pdRegion = document.getElementById("content_orderContent_pdRegion");
    var _pdStreet = document.getElementById("content_orderContent_pdStreet");
    var _pdHouse = document.getElementById("content_orderContent_pdHouse");
    var _pdBuilding = document.getElementById("content_orderContent_pdBuilding");
    var _pdEntry = document.getElementById("content_orderContent_pdEntry");
    var _pdCode = document.getElementById("content_orderContent_pdCode");
    var _pdFloor = document.getElementById("content_orderContent_pdFloor");
    var _pdApartment = document.getElementById("content_orderContent_pdApartment");
    var _pdMetro = document.getElementById("content_orderContent_pdMetro");
    var _pdInfo = document.getElementById("content_orderContent_pdInfo");
    var _preferRecognition = document.getElementById("preferRecognition");
    
    srv.doOrder(
        _pdName.value,
        _pdPhone.value,
        _pdAltPhone.value,
        _pdEmail.value,
        _pdPostIndex.value,
        _pdCity.value,
        _pdState.value,
        _pdRegion.value,
        _pdStreet.value,
        _pdHouse.value,
        _pdBuilding.value,
        _pdEntry.value,
        _pdCode.value,
        _pdFloor.value,
        _pdApartment.value,
        _pdMetro.value,
        _pdInfo.value,
        _preferRecognition.checked,
        __doOrder_OnSucceeded, OnFailed);
    return false;
}

function __goOrder_OnSucceeded(result, userContext, methodName) 
{
    if(__deserializeChart(result).length>0)
    {
        window.location = '?stage=personalData';
    }
}
function __doOrder_OnSucceeded(result, userContext, methodName) 
{
    var pOrderError = document.getElementById("orderError");
    if(result.length==0)
    {//ok
        document.getElementById("bskt_cnt").innerHTML = "пусто";
        document.getElementById("bskt_sum").innerHTML = "";
        pOrderError.innerHTML = '';
        window.location = '?stage=message';
    }
    else
    {
        pOrderError.innerHTML = result;
    }
}

