
//class AjaxChain
GLOBAL_CHAIN_STACK       = new Array; // массив цепей
var GLOBAL_CHAIN_COUNTER = 0;   // c самого начала цепей вообще нету.

//===================================================================================
//
//===================================================================================
function AjaxChain()
{
 this.chain_number = GLOBAL_CHAIN_COUNTER;
 GLOBAL_CHAIN_COUNTER++;

 try {
 GLOBAL_CHAIN_STACK[this.chain_number]   =  false;  
 if  (window.XMLHttpRequest)  
   GLOBAL_CHAIN_STACK[this.chain_number] =  new  XMLHttpRequest();  
 else  if  (window.ActiveXObject)  
   GLOBAL_CHAIN_STACK[this.chain_number] =  new  ActiveXObject("Microsoft.XMLHTTP");  
}
catch(e) {alert("ERROR IN AjaxChain CONSTRUCTOR (XMLHttpRequestObj was not created) " +  e);}

this.stack         = new Array; // стек возвращаемых getAjax значений. (на самом деле это не стеки, а очереди) !
this.string_stack  = new Array; // стек передаваемых на сервер строк.
this.func_stack    = new Array; // стек функций обработчиков.
this.arg_stack     = new Array; // стек аргументов ф-ий обработчиков.
                             

//this.getAjax  = AjaxChain__getAjax;  // сразу на страницу
this.getAjax = AjaxChain__getAjax;  // только в переменную
}


function AjaxChain__getAjax(string,func_handler)
{
 var tosR = this.stack.length;
 var chain_number = this.chain_number;
 
 var arg = new Array;
 var i; 

  for(i=2;i<arguments.length;i++)
   arg[i-2] = arguments[i]; 

 if(tosR!=0 && this.stack[tosR-1] == 'wait')
 {
  this.string_stack.push(string);
  this.func_stack.push(func_handler);
  this.arg_stack.push(arg);
 }
 else
 {
		this.stack[tosR] = 'wait';
		if(GLOBAL_CHAIN_STACK[chain_number])  
		{  
			GLOBAL_CHAIN_STACK[chain_number].open("GET", string);
			var self = this;
			GLOBAL_CHAIN_STACK[chain_number].onreadystatechange  =  function()  
			{  
				if  (GLOBAL_CHAIN_STACK[chain_number].readyState  ==  4  &&  GLOBAL_CHAIN_STACK[chain_number].status  ==  200)  
				{
					self.stack[tosR]  =  GLOBAL_CHAIN_STACK[chain_number].responseText; // Получить данные с сервера
					//alert(self.stack[tosR]);
					if(tosR!=0)
					 func_handler(self.stack[tosR],arg[0]);                           // вызвать ф-ю обработчик.
					else
					 func_handler(self.stack[tosR],arg);                              // вызвать ф-ю обработчик.
					  
					if(self.string_stack.length!=0)
					 self.getAjax(self.string_stack.shift(),self.func_stack.shift(),self.arg_stack.shift());
					else
					 self.stack = new Array;
					
				}  
				else {}
					//this.stack[tosR]  = 'wait';
			}  
			GLOBAL_CHAIN_STACK[chain_number].send(null);  
		} 
		else
		 alert( "GLOBAL_CHAIN_STACK[" + chain_number + "] has not created! Error in AjaxChain__getAjax2!");
  }
 
}

function delete_goods(cl, ev, g_id)
{
	var msg = 'Вы действительно хотите удалить товар из корзины?';
	if(confirm(msg)==true)
	{
		document.getElementById('addtoorder').unit_id.value=g_id;
		document.getElementById('addtoorder').event.value=ev;
		document.getElementById('addtoorder').cl.value=cl;
		document.getElementById('addtoorder').submit();
	}
}


// выводим сообщение с вопросом
function show_message_if_find(string)
{
	var arr = new Array()  
	arr = string.split('~');
	var goods_id = arr[0];
	var count = arr[1];
	var form_name = 'AddToBasket'+goods_id;
	if(count)
	{
		var msg = 'Данный товар уже лежит в Вашей корзине в количестве: '+count+' шт.\
								Вы действительно хотите добавить еще один?';
		if(confirm(msg)==true)
		{
				document.forms[form_name].submit();
		}
	}
	else
	{
		document.forms[form_name].submit();
	}
}



// выводим сообщение с вопросом
function show_message_if_delivery(string)
{
	var arr = new Array()  
	arr = string.split('~');
	var goods_id = arr[0];
	var price_id = arr[1];
	var msg = arr[2];
	var form_name = 'AddToBasket'+goods_id;
	if(msg)
	{
		if(confirm(msg)==true)
		{
				// document.forms[form_name].submit();
				find_goods_in_basket(goods_id, price_id);
		}
	}
	else
	{
		find_goods_in_basket(goods_id, price_id);
		//document.forms[form_name].submit();
	}
}

function check_delivery_date(goods_id, price_id)
{
	var AJAX_CHAIN =  new AjaxChain; 
	var link='/cgi-bin/dsp.pl?cl=order&event=get_delivery_msg&goods_id='+goods_id+'&price_id='+price_id; 
	AJAX_CHAIN.getAjax(link, show_message_if_delivery);
}

// ищем такой же товар в корзине
function find_goods_in_basket(goods_id, price_id)
{
	var select_price_id = document.getElementById('select_price_id');
	if(select_price_id.value!=0)
	{
		price_id = select_price_id.value;
	}
	
	if(price_id && goods_id)
	{
		var AJAX_CHAIN =  new AjaxChain; 
		var rnd = Math.random();
		var link='/cgi-bin/dsp.pl?cl=order&event=find_this_goods_in_basket&price_id='+price_id+'&goods_id='+goods_id+'&rnd='+rnd; 
		AJAX_CHAIN.getAjax(link, show_message_if_find);
	}
}

function find_this_goods_in_basket(goods_id, price_id)
{
	var tmp = check_delivery_date(goods_id, price_id);
}

function set_checked_price_id(price_id)
{
	var select_price_id = document.getElementById('select_price_id');
	select_price_id.value = price_id;
}

function view_goods(goods_id)
{
	document.location.href = "/item"+goods_id+".html";
}

function goods_view_counter(){
	var goods_id = $("input[name='goods_id']").attr("value");
	var goods_title = $("input[name='goods_title']").attr("value");
	var pic_type = $("input[name='pic_type']").attr("value");
	if(goods_id)
	{
		$.post('/cgi-bin/dsp.pl',{'cl':'goods_view_counter', 'event':'increase_counter', 'goods_id':goods_id, 'goods_title': goods_title, 'pic_type': pic_type, 'rnd':Math.random(), 'utf8': 1}
			,function(data){
				  // alert(data);
			}
		);
	}
}


function reserve_coins_for_order(type_action){

	var coins_reserve = $('#coins_for_reserve').val();
	var coins_reserve_number = Number(coins_reserve);
		 
	var submit_form = 0;
	
	if(type_action == 'return_coins'){
		coins_reserve_number *= (-1);
		submit_form = 1;
	}
	else if(type_action == 'reserve_coins'){	

	  // сумма для резерва монет для заказа
		var summa_order = $('#order_total_summa').val();
		var summa_order_number = Number(summa_order);
		
		// сумма монет пользователя
		var coins_user = $('#total_coins_sum').val();
		var coins_user_number = Number(coins_user);
		
		// сумма для списания доступная пользователю
		var remove_sum = (summa_order_number < coins_user_number) ? summa_order_number : coins_user_number; 
		remove_sum = Math.floor(remove_sum);
			
		if(coins_reserve_number == 0){
			msg = 'Укажите сумму для списания.';
			confirm(msg)
			$('#coins_for_reserve').val(remove_sum);
		}
		else if(coins_reserve_number > coins_user_number){
			msg = 'Не хватает монет. Максимальная сумма для использования '+coins_user_number+' руб.';
			confirm(msg);
			$('#coins_for_reserve').val(remove_sum);
		}
		else if(summa_order_number < coins_reserve_number){
			msg = 'Введена сумма, превышающая стоимость заказа. Максимальная сумма для использования '+remove_sum+' руб.';
			confirm(msg);
			$('#coins_for_reserve').val(remove_sum);
		}
		else{
			submit_form = 1;
		}
	}
	
	if(submit_form){
		document.getElementById('pay_coins').coins_for_reserve.value = coins_reserve_number;
		document.getElementById('pay_coins').event.value = 'reserve_coins_for_order';
		document.getElementById('pay_coins').cl.value = 'order';
		document.getElementById('pay_coins').submit();
	}
}
function create_floating_msg(msg_data)
{
	if($('.floating_msg').length) {$('.floating_msg').remove();}
	$('<div class="floating_msg"></div>').appendTo("body");
	var obj = $('.floating_msg');
	if(msg_data.width) { obj.width(msg_data.width); }
	if(msg_data.height) { obj.height(msg_data.height); }
	center_on_window(obj);
	obj.html('<img src="/js/loading1.gif" width="16" height="16" vspace="10">');
	return obj;
}

function center_on_window(obj)
{
	var w = obj.outerWidth();
	var h = obj.outerHeight()
	obj.css({
		position:'absolute',
		top: parseInt($(window).scrollTop() + ($(window).height() - h) / 2 - 100),
		left: parseInt($(window).scrollLeft() +($(window).width() - w) / 2)
	});
}

