var basketSendParams = Class.create();
basketSendParams.prototype = {
	initialize: function(elm, opts){
		
		var defaults = {
			isList:1, 
			elmIndForQtyToSend: 'qty',
			allowRepeatAdd: true,
			preFunc: function (rjs, rtext) {},
			postFunc: function (rjs, rtext) {}
		}
		
		opts = Object.extend(defaults, opts || {});
		
		this.elm = elm;
		this.isList = opts.isList;
		this.elmIndForQtyToSend = opts.elmIndForQtyToSend;
		this.allowRepeatAdd = opts.allowRepeatAdd;
		this.preFunc = opts.preFunc;
		this.postFunc = opts.postFunc;
	}
}

var sg_isAdmin = false;

// main menu
var loadedNodes = new Object();
var hideUniqNodes = new Array();
var nodesInfo = new Object();

function setChildrenUniqNames(uniqName)
{
	for (var i in loadedNodes)
	{
		if (i == uniqName)
		{
			$A(loadedNodes[i]).each(function(n)
			{
				hideUniqNodes.push(n);
				setChildrenUniqNames(n);
			});
		}
	}
}

function switchNodes(event)
{
	Event.stop(event);
	var elm = Event.element(event);

	while (elm.id.empty() && !elm.id.match(/menuLeft_/))
	{
		elm = elm.up();
	}

	var uniqName = elm.id.substr(9);

	if (nodesInfo[uniqName]['open'])
	{
		hideNodes(uniqName);
	}
	else
	{
		showNodes(uniqName);
	}
}

function hideNodes(uniqName)
{
	setChildrenUniqNames(uniqName);
	nodesInfo[uniqName]['closed'] = true;
	nodesInfo[uniqName]['open'] = false;
	hideUniqNodes.each(function(n)
	{
		if ($('menuLeft_' + n))
		{
			$('menuLeft_' + n).hide();

			if (!nodesInfo[n])
				nodesInfo[n] = new Object();
		}
	});

	hideUniqNodes.clear();
}

function showNodes(uniqName)
{
	var ids = loadedNodes[uniqName];
	nodesInfo[uniqName]['closed'] = false;
	nodesInfo[uniqName]['open'] = true;
	ids.each(function(n)
	{
		if ($('menuLeft_' + n))
		{
			$('menuLeft_' + n).show();

			nodesInfo[n]['closed'] = false;
			nodesInfo[n]['open'] = true;
		}
	})
}

function getChildren(event)
{
	Event.stop(event);
	var elm = Event.element(event);
	elm.stopObserving('click', getChildren);

	elm.observe('click', switchNodes);

	while (elm.id.empty() && !elm.id.match(/menuLeft_/))
	{
		elm = elm.up();
	}

	var uniqName = elm.id.substr(9);
	var req = new JsHttpRequest();
	req.onreadystatechange = function()
	{
		if (req.readyState == 4)
		{
			if (req.responseJS)
			{
				new Insertion.After("menuLeft_" + uniqName, req.responseJS.children);
				var mas = $A(req.responseJS.childrenArray);
				loadedNodes[uniqName] = new Array();
				nodesInfo[uniqName] = new Object();
				nodesInfo[uniqName]['open'] = true;
				nodesInfo[uniqName]['closed'] = false;
				mas.each(function(n)
				{
					loadedNodes[uniqName].push(n.uniqName);
				});
			}
		}
	}

	req.open(null, 'form.POST ajax/menu.php', true);
	req.send(
	{
		action: "getChildren",
		uniqName: uniqName
	});
}
// main menu

function registrationOrderHandler(elm)
{
    $('regForm').toggle()
    $('regPromoText').toggle()
    elm.form.standartMail.value = elm.checked
    
    $('isVirtual').value = (!elm.checked) + 0
    
    // не совсем ясно насколько это осмысленно..
    // @@@ elm.form.dontReloadAfterSuccess.value = !elm.checked
}

// специфическая обработка для галочки "сделать административный заказ" (применялась на sibkoleso). @@@@ подлежит разымшлению
function isAdminOrderHandler(elm)
{
    /*
    if (elm.checked) 
    { 
        $('adminOrderFields').show();
        $('email_tr').hide();
        $('email').value = 'fake@fake.com';
    } 
    else 
    { 
        $('adminOrderFields').hide(); 
        $('email_tr').show();
        $('email').value = '';
    } */
}

function sendToBasketByButtonDefHandler(rjs,rtext)
{
    if (!rjs.errorMessages) 
    { 
        try { $('basket_qtyTotal').innerHTML = rjs.qtyTotal; } catch(e) { };
        try { $('basket_sumTotal').innerHTML = rjs.sumTotal;  } catch(e) { };
    };
}

/**
* классическая отсылка товара в корзинку с числом из инпута
* 
*/
function sendToBasketByButton(params)
{
    // @@@@ if (elm.value == $('currentVal').value) return true;
    
    func = function(rjs,rtext)
    {
        params.preFunc(rjs,rtext)
        
        sendToBasketByButtonDefHandler(rjs,rtext)
        
        params.postFunc(rjs,rtext)
    }
    
    var exp = /^(.*?)\[(.*?)\]$/;

    var resultArray = exp.exec(params.elm.id);
    id = resultArray[2];
    
    id_elm = params.elmIndForQtyToSend+'['+id+']';
    qty_elm = $(id_elm);
    responseJS = updateOne(qty_elm, 1, func);
}

/**
* отсылка товара в корзинку по одному с изменением кнопки
* инпут к кол-вом невидимый, за раз отсылается столько, сколько есть в qtyPortion[..]
* 
*/
function sendToBasketByImg(params)
{
    var exp = /^(.*?)\[(.*?)\]$/;

    var resultArray = exp.exec(params.elm.id);
    id = resultArray[2];
    id_qty = 'qty['+id+']';

    if (!params.allowRepeatAdd && $(id_qty).value > 0)
    {   
        return false;
    }
    else
    {
        $(id_qty).value = parseInt($(id_qty).value || 0) + parseInt($('qtyPortion['+id+']').value || 0);
        sendToBasketByButton(params)
    }
    
    return false;
}

function sendToBasketByButtonFromBasket(params)
{
    func = function(rjs,rtext)
    {
    	params.preFunc(rjs,rtext)
        
        $('sumTotal').innerHTML = $j.trim(num_format(rjs.sumTotal));
        var exp = /^(.*?)\[(.*?)\]$/;
        var resultArray = exp.exec(params.elm.id)
        id = resultArray[2]

        if (!rjs.value_output)
        {
            $('tr['+id+']').remove() 
        }
        else
        {
            $('sum['+id+']').innerHTML = $j.trim(num_format(rjs.sum));
        }
        
        params.postFunc(rjs,rtext)
    }
    
    paramsToSend = new basketSendParams();
    
	paramsToSend.elm = params.elm;
	paramsToSend.isList = paramsToSend.isList;
	paramsToSend.elmIndForQtyToSend = paramsToSend.elmIndForQtyToSend;
	paramsToSend.allowRepeatAdd = paramsToSend.allowRepeatAdd;
	paramsToSend.postFunc = paramsToSend.postFunc;

	paramsToSend.preFunc = func;
    sendToBasketByButton(paramsToSend)
}

if (typeof jQuery !== 'undefined')
{
jQuery(function()
{
	var opt = jQuery.browser.opera ? 
		{
			transitionIn : 'fade',
			transitionOut : 'fade'
		} 
		:
		{
			transitionIn : 'elastic',
			transitionOut : 'elastic',
			easingIn : 'easeOutBack',
			easingOut : 'easeInBack'
		};
		
	jQuery('a.fancybox').fancybox(jQuery.extend({
		titleShow : true,
		speedIn : 800,
		speedOut : 800
		}, opt));
})
}
