function addEventHandler(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be attached");
  }
} 

function removeEventHandler(obj, evType, fn, useCapture){
  if (obj.removeEventListener){
    obj.removeEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.detachEvent){
    var r = obj.detachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be removed");
  }
} 

function getEventTarget(e) {
	if (window.event) return window.event.srcElement;
	else return e.target;
}

//---------------------------------------------------------------------------------------

addEventHandler(window, "load", init);

var productos;
var mndChange;
sprintf = utility.string.sprintf;

function init() {

    productos = new Object();
    mndChange = false;

    //Se activa en js/ciudad.js cuando se escoge la ciudad
    //document.getElementById('cotizar_link').href = "#";
    //addEventHandler(document.getElementById('cotizar_link'), 'click', codCAlert ,false);
    addEventHandler(document.getElementById('cotizar_link'), 'click', hideCart, false);

    checkCart();
}

function agregarItem(idPro, refPro, valPro){
	
	var itemRow = document.getElementById('item_' + idPro);
	
	var cant = parseInt(document.getElementById('cant_' + idPro).value);
	var disp = 0;
	
	if(itemRow == null) {
		disp = parseInt(document.getElementById('disp_' + idPro).innerHTML);
		if(cant > disp){
			window.alert(sprintf(recurso['CANT_MAX_EXCEDIDA'], disp));
			return;

        }
        var itemPro = new Producto(idPro, refPro, valPro, cant, disp);
        productos[idPro] = itemPro;
        renderProducto(idPro, refPro, valPro, cant, disp);

        updateTotales();
        //alternateRowColors();
        saveCart();
	} else {
		disp = parseInt(document.getElementById('cart_disp_' + idPro).innerHTML);
		var itemCant = document.getElementById('itemCant' + idPro);
		var valTotalItem = document.getElementById('valTotalItem' + idPro);
		var cantTotal = parseInt(itemCant.value) + cant;
		
		if(cantTotal > disp){
			window.alert(sprintf(recurso['CANT_MAX_EXCEDIDA'], disp) + "\n" + sprintf(recurso['CANT_EN_CARRITO'], itemCant.value));
			return;	
		}
		//itemCant.setAttribute('value', cantTotal); //BUG en FF
		itemCant.value = cantTotal;
		itemCant.defaultValue = cantTotal;
		valTotalItem.innerHTML = "...";
		productos[idPro].cant = cantTotal;
		updateTotales();
		saveCart();
    }

}

function updateItem(input_cant, idPro){
	var disp = parseInt(document.getElementById('cart_disp_' + idPro).innerHTML);
	var cant = input_cant.value;
	if(cant > disp){
		window.alert(sprintf(recurso['CANT_MAX_EXCEDIDA'], disp));
		input_cant.value = input_cant.defaultValue; //Se asigna el valor anterior
		return;	
	}
	productos[idPro].cant = cant;
	input_cant.defaultValue = cant;
	var valTotalItem = document.getElementById('valTotalItem' + idPro);
	valTotalItem.innerHTML = formatCurrency(productos[idPro].cant * productos[idPro].val);
	updateTotales();
	consultarPrecios();
}

function borrarItem(e){
	var row = getEventTarget(e).parentNode.parentNode;
	var table = document.getElementById("item_detail");
	var idPro = row.id.substring(row.id.indexOf('_') + 1, row.id.length);
	delete productos[idPro];
	table.deleteRow(row.rowIndex);
	updateCart();
	saveCart();
	//alternateRowColors();
}

function Producto(idPro, refPro, valPro, cantPro, dispPro){
	this.id = idPro;
	this.ref = refPro;
	this.val = valPro;
	this.cant = cantPro;
	this.disp = dispPro;
	//this.total = function(){return this.val * this.cant};
	//this.serialized = function(){return this.id+"|"+this.ref+"|"+this.val+"|"+this.cant+"|"+this.disp};
}

Producto.prototype.total = function() { return this.val * this.cant; };
Producto.prototype.serialized = function() { return this.id + "|" + this.ref + "|" + this.val + "|" + this.cant + "|" + this.disp };

function serializeCart(){
	var result = "";
	for(var idPro in productos){
		if(typeof(productos[idPro]) == "object" && productos[idPro].ref != null){
			result += productos[idPro].serialized() + "||";
		}
	}
	return result.substring(0, result.length - 2);
}

function unserializeCart(){
	var cart = getCart();
	var items_array = cart.split("||");
	for(var i=0; i<items_array.length; i++ ){
		var item_array = items_array[i].split("|");
		var p = new Producto(item_array[0],item_array[1],item_array[2],item_array[3],item_array[4]);
		productos[item_array[0]] = p;
	}
	//renderProductos();
}

function renderProductos(){
	for(var idPro in productos){
		if(typeof(productos[idPro]) == "object" && productos[idPro].ref != null){
			renderProducto(productos[idPro].id,productos[idPro].ref,productos[idPro].val,productos[idPro].cant,productos[idPro].disp);
		}
	}
	updateTotales();
	//alternateRowColors();
}

function renderProducto(idPro, refPro, valPro, cantPro, dispPro){
	
	var table = document.getElementById('item_detail');	
	var itemRow = table.insertRow(-1);
	itemRow.setAttribute('id', 'item_' + idPro);
	
	//Cantidad disponible
	var dispItem = document.createElement('span');
	dispItem.setAttribute('id','cart_disp_' + idPro);
	dispItem.innerHTML = dispPro;
	
	//Cantidad
	var itemCant = document.createElement('input');
	itemCant.type='text';
	itemCant.setAttribute('id','itemCant' + idPro);
	itemCant.setAttribute('value', cantPro);
	itemCant.setAttribute('size','3');
	itemCant.setAttribute('onblur',"updateItem(this," + idPro + ")");

	//Referencia
	var refItem = document.createElement('span');
	refItem.innerHTML = "<a href='javascript:void(0)'>" + refPro + "</a>";
	refItem.setAttribute('onclick', "productoDetalle(" + idPro + ")" );
	
	//Precio (valor)
	var valItem = document.createElement('span');
	valItem.setAttribute('id','valItem' + idPro);
	valItem.innerHTML = formatCurrency(valPro);
	
	//Valor Total (cantidad * valor)
	var valTotalItem = document.createElement('span');
	valTotalItem.setAttribute('id','valTotalItem' + idPro);
	valTotalItem.innerHTML = formatCurrency(cantPro * valPro);
	
	var borrarBtn = document.createElement('input');
	borrarBtn.type = 'button';
	borrarBtn.value = 'X';
	//var borrarImg = document.createElement('img');
	//borrarImg.src = "img_anuack/del.gif";
	//borrarBtn.setAttribute('href',"#");
	//debugger;
	addEventHandler(borrarBtn,"click", borrarItem,true);
	
	var pro_row = itemRow.insertCell(0);
	var disp_row = itemRow.insertCell(1);
	var cant_row = itemRow.insertCell(2);
	var precio_row = itemRow.insertCell(3);
	var total_row = itemRow.insertCell(4);
	var borrar_row = itemRow.insertCell(5);
	
	cant_row.setAttribute('align','center');
	precio_row.setAttribute('align', 'right');
	total_row.setAttribute('align', 'right');
	borrar_row.setAttribute('align','center');
	
	pro_row.appendChild(refItem);
	disp_row.appendChild(dispItem);
	cant_row.appendChild(itemCant);
	precio_row.appendChild(valItem);
	total_row.appendChild(valTotalItem);
	borrar_row.appendChild(borrarBtn);
	
}

function updateCart(){
	consultarPrecios();
	var cart_values = document.getElementById('cart_values');
	var values = '';
	for(idPro in productos){
		values += idPro + "|" + productos[idPro].cant + ",";
	}
	
	cart_values.setAttribute("value", values.substring(0, values.length - 1));
}

function saveCart(){
	var value = serializeCart();
	var expiredays = 1;
	var c_name = "cart";
	var exdate=new Date();
	exdate.setDate(exdate.getDate()+expiredays);
	//document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : "; expires="+exdate.toGMTString());
	document.cookie=c_name+ "=" + value +((expiredays==null) ? "" : "; expires="+exdate.toGMTString());
}

function getCart(){
	var c_name = "cart";
	if (document.cookie.length>0){
		c_start=document.cookie.indexOf(c_name + "=");
		if (c_start!=-1){ 
			c_start=c_start + c_name.length+1 ;
			c_end=document.cookie.indexOf(";",c_start);
			if (c_end==-1) c_end=document.cookie.length;
			//return unescape(document.cookie.substring(c_start,c_end));
			return document.cookie.substring(c_start,c_end);
		} 
	}
	return "";
}

function checkCart(){
	//createCloseLink();
	cart = getCart('cart');
	if (cart != null && cart != ""){
		//var itemContainer = document.getElementById("item_container");
		//itemContainer.innerHTML = cart;
		unserializeCart();
		consultarPrecios();
		renderProductos();
	} else {
		return false;
	}
}

function showCart(){
	updateCart();
	document.getElementById('cart_detail').style.display='block';
	document.getElementById('fade').style.display='block';
}

function createCloseLink(){
	var itemContainer = document.getElementById("item_container");			
	
	var closeLink = document.createElement('a');
	closeLink.setAttribute('href','javascript:void(0)');	//closeLink.setAttribute('onclick',"document.getElementById('cart_detail').style.display='none';document.getElementById('fade').style.display='none'");
	closeLink.onclick = hideCart;
	closeLink.innerHTML = "cerrar";
	
	itemContainer.appendChild(closeLink);
}

function hideCart(){
	updateTotales();
	document.getElementById('cart_detail').style.display='none';
	document.getElementById('fade').style.display='none';
}

function formatCurrency(num){
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$ ' + num + '.' + cents);
}

var xhr;

function createXHR(){
	try {
		xhr = new XMLHttpRequest();
	} catch(e1) {
		try {
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e2) {
			try {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e3) {
				window.alert (recurso['SIN_SOPORTE_AJAX']);
				return false;
			}
		}
	}
}

function consultarPrecios(){
	createXHR();
	
	var ids = "";
	var cnt = "";
	
	for(var idPro in productos){
		if(typeof(productos[idPro]) == "object" && productos[idPro].id != null){
			ids += productos[idPro].id + ",";
			cnt += productos[idPro].cant + ",";
		}
	}
	
	ids = ids.substring(0, ids.length - 1);
	cnt = cnt.substring(0, cnt.length - 1);
	var mnd = document.getElementById('mnd').value;
	
	var params = "ids="+ids+"&cnt="+cnt+"&mnd="+mnd;
	
	//window.alert(params);
	//xhr.open("GET", "consultar_precios.php?ids=" + ids + "&mnd=" + mnd, true);
	xhr.open("POST", "consultar_precios.php", true);
	
	xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhr.setRequestHeader("Content-length", params.length);
	xhr.setRequestHeader("Connection", "close");
	
	xhr.onreadystatechange = consultarPreciosHandler;
	//xhr.send(null);
	xhr.send(params);
}

function consultarPreciosHandler(){
	if(xhr.readyState == 4 && xhr.status == 200){
	    //window.alert(xhr.responseText);
	    var response = xhr.responseText;
		if (response != ""){
        var precios = response.split("||");
			for (var i = 0; i < precios.length; i++) {
				var values = precios[i].split("|");
				var idPro = values[0];
				var precio = values[1];
				productos[idPro].val = precio;
	
				var itemCant = document.getElementById('itemCant' + idPro);
				var valItem = document.getElementById('valItem' + idPro);
				var valTotalItem = document.getElementById('valTotalItem' + idPro);
				var cantTotal = parseInt(itemCant.value);
				valItem.innerHTML = formatCurrency(precio);
				valTotalItem.innerHTML = formatCurrency(cantTotal * productos[idPro].val);
			}
		   
			saveCart();
		}
        if (mndChange) {
            window.location.reload()
        } else {
            updateTotales();
        }
	}	
}

function  updateTotales(){
	var cart_unidades = 0;
	var cart_total = 0;
	
	for(var idPro in productos){
		if(typeof(productos[idPro]) == "object" && productos[idPro].id != null){
			cart_unidades += parseInt(productos[idPro].cant);
			cart_total += (parseInt(productos[idPro].cant) * parseFloat(productos[idPro].val))
		}
	}
	
	document.getElementById('cart_unidades').innerHTML = cart_unidades;
	document.getElementById('cart_total').innerHTML = formatCurrency(cart_total);
}

function alternateRowColors(){
	var table   = document.getElementById('item_detail');
	var colors  = ['FFFFFF','F0FFFF'];
	var counter = 0;
	var tr;

	if (typeof (window.event) != "undefined") {
	    tr = table.tBodies[1].firstChild;
	} else {
	    tr = table.tBodies[0].firstChild;
	}
	
	while(tr){
		tr.style.backgroundColor = colors[counter++ % 2];
		tr = tr.nextSibling;
	}
}

function codCAlert() {
    window.alert(recurso['PAIS_CIUDAD_SIN_SELECCIONAR']); 
}

function updateCodC(codC){
	var cotizar_link = document.getElementById('cotizar_link');
	//var url = cotizar_link.href;
	//cotizar_link.href = url.replace(/codC=([0-9]|[A-Z])+/, "codC=" + codC);
	removeEventHandler(cotizar_link, 'click', codCAlert, false);
	cotizar_link.href = "index.php?codC=" + codC + "&principal_ajax__state=cart_cotizar";
	//cotizar_link.ajaxified = true;
}

function productoDetalle(idPro){
	window.open('producto_detalle.php?idPro=' + idPro,'producto_detalle','width=750,height=600');	
}

function showReferencias(idPro){
	document.getElementById('referencias_'+idPro).style.display='block';
	document.getElementById('fade').style.display='block';
}

function hideReferencias(idPro){
	document.getElementById('referencias_'+idPro).style.display='none';
	document.getElementById('fade').style.display='none';
}

function cambiar_moneda() {
    mndChange = true;
    consultarPrecios();
}