// ютф-8
var rq;
var rqTimeout;

function obj(name){
	if(!name){return false;}
	return document.getElementById(name);
}

//---------------------------------------
function requestObject() {
	//var name="requestObject";
	var nrq;
    if (window.XMLHttpRequest) {
        try {
            nrq = new XMLHttpRequest();
        } catch (e){}
    } else if (window.ActiveXObject) {
        try {
            nrq = new ActiveXObject('Msxml2.XMLHTTP');
        } catch (e){}
        try {
            nrq = new ActiveXObject('Microsoft.XMLHTTP');
        } catch (e){}
    }
	if(typeof(nrq)=="undefined"){ return null; }

	var xreq = { r:nrq, 
				 timeout: "",
				 run:function(params){
				 	if(!params || !params.callback ||!params.url){ return false; }
				 	params.method = params.method || "GET";
				 	params.async = params.async || true;
				 	this.r.onreadystatechange = params.callback;
				 	this.r.open(params.method, params.url, params.async);
				 	this.timeout = window.setTimeout("rq.r.abort()", 3000);
				 	this.r.send(params.q_string ? params.q_string : null);
				 }
	};

	return xreq;
}
//--------------------------------
function basket_add(id){
	if(!id || rq){ return false; }
	rq = requestObject();
	
	if(!rq){ return true; }
	rq.run( { url: "?service=basket&xf=1&add="+id, callback: function(){ basket_callback("add") } } );
	return false;
}

//---------------------------------
function basket_delete(id, subject){
	if(!id && id!=0 || rq){ return false; }
	rq = requestObject();
	if(!rq){ return true; }
	
	rq.run( { url: "?service=basket&xf=1&delete="+id, callback: function(){basket_callback("delete", subject)} } );
	return false;
}

//---------------------------------
function basket_clone(id, subject){
	return true; //it is hard to make clone by JS for now, since we have to construct enumerable form names for new DIVs and INPUTs.
				 //so just turn it off
	if(!id && id!=0 || rq){ return false; }

	rq = requestObject();
	if(!rq){ return true; }
	rq.run( { url: "?service=basket&xf=1&clone="+id, callback: function(){basket_callback("clone",subject)} } );
	
	return false;
}

//------------------------------
function basket_reset(){
	if(rq){ return false; }
	rq = requestObject();
	if(!rq){ return true; }
	rq.run( { url: "?service=basket&xf=1&reset=1", callback: function(){basket_callback("reset")} } );
	return false;
}
//---------------------------------------------
function basket_callback(action, subject){
	//action - что делаем в корзине
	//subject - имя(его id) элемента-субъекта, с которым надо что-то сделать

	if (rq.r.readyState == 4){ //complete
		window.clearTimeout( rq.timeout ? rq.timeout : rqTimeout );
		if (rq.r.status && rq.r.status == 200) {
        	var res = parseInt(rq.r.responseText);

        	if(res == -1){
        		var msg;
        		switch(action){
        			case "add": msg = "Такой товар уже в корзине."; break;
        			case "clone": msg = "Указан несуществующий товар."; break;
        			case "delete": msg = "Указан несуществующий товар, либо товар уже был удален ранее."; break;
        			default: msg = "Не удалось выполнить указанное действие";
				}
        		alert(msg); 
        		rq = undefined;
        		return true;
			}

        	var basket = obj('basket');
        	basket.innerHTML = (res ? '<a href="?service=basket">В корзине <span id="basket_products_count">'+res+'</span> товар(ов)</a>'
        							: "Корзина пуста");
    	
        	switch(action){
        		case "add": alert("Товар добавлен в корзину."); break;
            	case "delete": 
            		subj = obj(subject);
            		alert("Товар удален из корзины.");
            		if(subj){
            			var parent = subj.parentNode;
            			parent.removeChild(subj);
            			if(!res){
            				//корзина пуста. совсем пуста.
            				obj("content").innerHTML="";
						}
            		}
            		basket_change_total_price();
            		break;
				case "clone" :
					subj = obj(subject);
					alert("Копия товара добавлена в корзину.");
					if(subj){
						var node = subj.cloneNode(true);
						node.id += "_1";
						var a=node.innerHTML;
						node.innerText = a;
						if(node){ subj.parentNode.appendChild(node); }
					}
					break;
				case "reset": 
					obj("content").innerHTML="";
					alert("Корзина очищена.");
					
					break;
			}
			basket_change_total_price();
			rq = undefined;
        } else {
        	alert("К сожалению, запрос выполнить не удалось. Попробуйте еще раз позже.\n"+(rq.status?rq.status:""));
		}//!200
		rq = undefined;
	}
	return true;
}

function basket_change_price(id) {
	obj('full_price'+id).innerHTML = format_price(basket_item_price(id));
	basket_change_total_price();
	return false;
}

function basket_change_total_price() {
	if(obj('total_price'))
		obj('total_price').innerHTML = format_price(basket_total_price());
	return false;
}


function basket_item_price(id) {
	var price_obj = obj('price_item'+id);
	var qty_obj = obj('qty'+id);

	if (!price_obj || !qty_obj) return 0;

	price = price_obj.value;
	qty = Number(qty_obj.value).toFixed(0);

	qty = (isNaN(qty)) ? 1 : qty;
	qty_obj.value = qty;
	return 	price*qty;
}

function basket_total_price() {
	var total=0; 
	for (var i=basket_items.length-1; i >= 0; i--) {
		total += basket_item_price(basket_items[i]);
	}
	return total;
}

function format_price(num) {
	num = String(num.toFixed(2)).split('.');
	var result = '';
	/*while (num[0].length) {
		result = ' '+num[0].substr(-3)+result;
		num[0] = num[0].substring(num[0].length - 3);
	}*/
	//result = result.substr(1)+','+num[1];
	result = num[0]+','+num[1];
	return result;
}
