// Common function
function showLayer(id)
{
	document.getElementById(id).style.visibility='visible';
	document.getElementById(id).style.display='block';
}

function hideLayer(id)
{
	document.getElementById(id).style.visibility='hidden';
	document.getElementById(id).style.display='none';
}

function hideLayer_2(name)
{
		var oDostavkaTotalCtrls = document.getElementsByName(name);
		for (iI = 0; iI < oDostavkaTotalCtrls.length; iI++) {
			oDostavkaTotalCtrls[iI].style.visibility='hidden';
			oDostavkaTotalCtrls[iI].style.display='none';

		}
}

function showLayer_inline(id)
{
	document.getElementById(id).style.visibility='visible';
	document.getElementById(id).style.display='inline';
}

function put_value(name, value) {
		var oDostavkaTotalCtrls = document.getElementsByName(name);
		for (iI = 0; iI < oDostavkaTotalCtrls.length; iI++) {
			if (oDostavkaTotalCtrls[iI].tagName === "INPUT") {
				oDostavkaTotalCtrls[iI].value = value;
			} else {
				oDostavkaTotalCtrls[iI].innerHTML = value;
			}
		}
}

// function to emulate document.getElementById
function fetch_object(idname)
{
	if (document.getElementById)
	{
		return document.getElementById(idname);
	}
	else if (document.all)
	{
		return document.all[idname];
	}
	else if (document.layers)
	{
		return document.layers[idname];
	}
	else
	{
		return null;
	}
}
// function to emulate document.getElementsByTagName
function fetch_tags(parentobj, tag)
{
	if (typeof parentobj.getElementsByTagName != 'undefined')
	{
		return parentobj.getElementsByTagName(tag);
	}
	else if (parentobj.all && parentobj.all.tags)
	{
		return parentobj.all.tags(tag);
	}
	else
	{
		return null;
	}
}

// Object umiBasket_2 =====================================
/*
	Рассширение класса реализации работы с корзиной
	      для отображения стоимости доставки
*/
// umiBasket_2  ===========================================
var rme = umiBasket.getInstance();

function Dostavka() {
    var me = umiBasket.getInstance();
 
    var jumps = 0   
 
    me.jump = function() { jumps++ }
    me.getJumps = function() { return jumps }

	me.onUpdate_umiBasket_2 = function() {
		// получить переменные по стоимости и пределах доставки
		var order_total = parseInt(document.getElementById("order_total").innerHTML);
		//alert(order_total);
		var oDostavkaOnCtrls = document.getElementsByName('dostavka_on');
		var oDostavkaOffCtrls = document.getElementsByName('dostavka_off');

		if(order_total>0) {  // если корзина не пуста, то взависимости от суммы набранно, отображать доставку или нет...
			// получить переменные по стоимости и пределах доставки
			var dostavka_limit = parseInt(document.getElementById("dostavka_limit").innerHTML);
			//alert(dostavka_limit);
			if(dostavka_limit>0 && order_total>dostavka_limit) {
				// отобразить стоимость корзины когда доставка бесплатна
				put_value('dostavka_total', 0);
				put_value('order_dostavka_total', order_total);
			}
			else {
				// отобразить стоимость корзины с учётом доставки
				var dostavka_price = parseInt(document.getElementById("dostavka_price").innerHTML); // получить переменные по стоимости доставки
				put_value('dostavka_total', dostavka_price);
				// отобразить итого к оплате заказа вместе с досавкой
				var order_dostavka_total = order_total + dostavka_price;
				put_value('order_dostavka_total', order_dostavka_total);
			}
		}
		else {  // если корзина пуста, скрыть все надписи по доставке
			put_value('dostavka_total', ' 0');
			put_value('order_dostavka_total', ' 0');
		}
		return
	}

	// ####### Организация наследования методов класса корзины #########

    // =============== скопировать метод addElement родителя в замыкание
    var super_addElement = me.addElement
 
    /* перекрыть метод */
    me.addElement = function(distance) {

		this.jump()   
		if (distance == 0)  // значит надо услугу доставки добавить в заказ
		{
			// на какую сумму накидано в корзину товара
			var order_total = parseInt(document.getElementById("order_total").innerHTML);
			// получить переменные о предельной сумме по скидке на доставку
			var dostavka_limit = parseInt(document.getElementById("dostavka_limit").innerHTML);
			// получить переменные по стоимости и пределах доставки
			var dostavka_price_id = parseInt(document.getElementById("dostavka_price_id").innerHTML);

			// проверка таблицы order_block
			var tds = fetch_tags(document.getElementById("order_block"), 'td');
			var delivery_on = true;
			var order_total_table = 0;
			for (var i = 0; i < tds.length; i++)
			{
				if (tds[i].hasChildNodes() && tds[i].id)  // tds[i].id.substr(0, 12) == 'threadsname_'
				{	
					// получаем пораметры товаров в корзине
					var details = tds[i].id.split('_');
					if (details[2] == 'price')	{
						id = parseInt(details[1]);  // id товара
						price = fetch_object(tds[i].id).innerHTML;  // цена товара
						count = fetch_object('citm_'+id+'_count').value;  // кол-во товара

						if(id == dostavka_price_id) delivery_on = false;  // доставка уже есть в корзине
						else order_total_table = order_total_table + price*count;
					}
				}
			}
			if(order_total_table>0) order_total = order_total_table;

			if(dostavka_price_id>0 && dostavka_limit>order_total && delivery_on) {
				distance = dostavka_price_id;
			}
			else return
		}
 
        // вызвать родительский метод
        return super_addElement.call(this, distance)
    }

    // =============== скопировать метод onUpdate родителя в замыкание
    var super_onUpdate = me.onUpdate
 
    /* перекрыть метод */
    me.onUpdate = function(distance) {
        // вызвать родительский метод
        rezult = super_onUpdate.call(this, distance)

		// получить переменные по стоимости и пределах доставки
		var order_total = parseInt(document.getElementById("order_total").innerHTML);
		// отобразить стоимость доставки
		put_value('dostavka_total', ' 0');

		this.onUpdate_umiBasket_2()
 
        // вызвать родительский метод
        //return super_addElement.call(this, distance)
		return rezult
    }

	me.eshop_order = function() {
		
	}
    return me
}

// contructor
function umiBasket_2() {

}

umiBasket_2.getInstance = function () {
	if(!umiBasket_2.instance) {
		umiBasket_2.instance = Dostavka();
	}
	return umiBasket.instance;
}
