/*
	 * Carrito JavaScript Library v.0.5
	 * http://imaginais.net/
	 *
	 * Copyright (c) 2009 Imagina ingenieria del software
	 * 
	 * Date: 2009-05-26 


****************** PARAMETROS
	
	idGrupProducte = {un ID}
	idsAtributs = {un array de IDS}
	quantitat = default [0] numérico entero
	unitat = default [0] -> numérico entero
	carretTipus = default ['resum'] -> 'llista' | 'resum' | 'buit' 
	retornaHTML = default ['true'] -> true | false

****************** 	METODOS DEL CARRITO

	afegirProducte(idGrupProducte,idsAtributs,quantitat,unitat,carretTipus,retornaHTML | [carritoJsonSendParams] )
	modificarProducte(idGrupProducte,idsAtributs,quantitat,unitat,carretTipus,retornaHTML | [carritoJsonSendParams] )
	eliminarProducte (idGrupProducte,carretTipus,retornaHTML | [carritoJsonSendParams] )
	recalcularCarret(carretTipus,retornaHTML | [carritoJsonSendParams] )
	refrescaCarret(carretTipus,retornaHTML | [carritoJsonSendParams] )
	
*/
var hrefAjax = "aspimagina/cataleg/mod/carret/carret.asp";

/* OBJETO QUE SERÁ ENVIADO POR AJAX

*/
function carritoJsonSendParams(idGrupProducte,idsAtributs,quantitat,unitat,carretTipus,retornaHTML,accio){
	this.idGrupProducte = idGrupProducte;
	this.idsAtributs = (typeof(idsAtributs)!="undefined") ? idsAtributs : '';
	this.quantitat = (typeof(quantitat)!="undefined") ? quantitat : 0;
	this.unitat = (typeof(unitat)!="undefined") ? unitat : 0;
	this.carretTipus = (typeof(carretTipus)!="undefined") ? carretTipus : 'llista';
	this.retornaHTML = (typeof(retornaHTML)!="undefined") ? retornaHTML : true;
	this.accio = (typeof(quantitat)!="undefined") ? accio : '';	
//	this.r = Math.random();
}

/* METODOS PARA EL CARRO DE LA COMPRA
*
*
*/
function afegirProducte(idGrupProducte,idsAtributs,quantitat,unitat,carretTipus,retornaHTML){
	return _sendAjax(_contructor(arguments,'afegirProducte'));
}

function modificarProducte(idGrupProducte,idsAtributs,quantitat,unitat,carretTipus,retornaHTML){
	return _sendAjax(_contructor(arguments,'modificarProducte'));
}	

function eliminarProducte (idGrupProducte,idsAtributs,carretTipus,retornaHTML){
	return _sendAjax(_contructor(arguments,'eliminarProducte'));
}

function recalcularCarret(carretTipus,retornaHTML){
	return _sendAjax(_contructor(arguments,'recalcularCarret'));
}
function refrescaCarret(carretTipus,retornaHTML){
	return _sendAjax(_contructor(arguments,'refrescaCarret'));
}

/*idGrupProducte,idsAtributs,quantitat,unitat,carretTipus,retornaHTML,accio*/
function _contructor(args,accio){
	var _sendObjetc = new carritoJsonSendParams();
	if( typeof(args[0]) == "object" && args[0] instanceof carritoJsonSendParams ){
		if(accio=="afegirProducte" || accio == "modificarProducte")
			if(args[0].idGrupProducte == null || args[0].idGrupProducte.length == 0 ) throw "afegirCarrito() sin idGrupProducte";
		
		_sendObjetc = args[0];
		_sendObjetc.accio = accio		
	}
	else{
		//carritoJsonSendParams(idGrupProducte,idsAtributs,quantitat,unitat,carretTipus,retornaHTML,accio){
		switch(accio){
			case "afegirProducte":
				if(args[0].idGrupProducte.length = 0 ) throw "afegirCarrito() sin idGrupProducte";
				_sendObjetc = new carritoJsonSendParams(args[0],args[1],args[2],args[3],args[4],args[5],accio);
			break;
			case "modificarProducte":
				if(args[0].idGrupProducte.length = 0 ) throw "modificarProducte() sin idGrupProducte";		
				_sendObjetc = new carritoJsonSendParams(args[0],args[1],args[2],args[3],args[4],args[5],accio);
			break;
			case "eliminarProducte":
				_sendObjetc = new carritoJsonSendParams(args[0],args[1],'','',args[2],args[3],accio);
			break;
			case "recalcularCarret":
			case "refrescaCarret":
				_sendObjetc = new carritoJsonSendParams('','','','',args[0],args[1],accio);
			break;
			
		}
	}
	return _sendObjetc;
}


function carritoJsonRecived() {
	this.resultat = null;
	this.idError = null;
	this.descripcionError = null;	
	
}


/* UITILS DE ENVIO DE AJAX
*
*
*/
function _sendAjax(obj){
	if (arguments.length == 0 ) _errAjax("","failed","Llamada sin parametros [pruebaCarrito.js Line:76]");
	if (typeof(obj) != "object" ) _errAjax("","failed","Se esperaba un objeto con los datos");
	//if (typeof(obj.quantitat) == "undefined" || typeof(obj.unitat) == "undefined") _errAjax("","failed","No hay cantidad o unidades del productos");
	//obj.quantitat= null;
	var jsArguments = obj;//{ name: "John", time: "2pm" };
	var recibedObject = new carritoJsonRecived();
	//_log(obj)
	var a = $.ajax({
      async:false,
	  url: hrefAjax,
	  cache: false,
	  data: jsArguments,
	  type: "POST",
      dataType: "json",
	  error: null,
	  beforeSend:null,
	  success: null,
	  complete:null
	});
	
/*	debug( a.readyState,true );
	debug( a.status,true );	
	debug( typeof(a.status),true );		
*/	
	//alert( a.responseText );		
	if(a.status==200){
		recibedObject = (new Function("return " + a.responseText))()
	}
	else
		recibedObject.idError = "999"
	
	return recibedObject;


}

function _callBackFunction(XMLHttpRequest, textStatus){
	if(textStatus=='success'){		
		recibedObject = XMLHttpRequest;
	}
	/*debug("recibedObject.idError: " + recibedObject.idError,true)
	debug("recibedObject.descriptionError: " + recibedObject.descripcionError,true)
	debug("recibedObject.resultat: " + recibedObject.resultat,true)*/
}
function _startAjax(XMLHttpRequest){
	
}
function _completeAjax(data, textStatus){
	 debug("_completeAjax [data] " + data ,true)
	 debug("_completeAjax [textStatus] " + textStatus ,true)	 
}
function _errAjax(XMLHttpRequest, textStatus, errorThrown){
	debug("Err XMLHttpRequest: " + XMLHttpRequest.length,true)
	debug("Err textStatus: " + textStatus,true)
	debug("Err errorThrown: " + errorThrown,true)
}

function _log(obj){
	s = "idGrupProducte=" + obj.idGrupProducte + "&idsAtributs=" + obj.idsAtributs + "&quantitat=" + obj.quantitat + "&unitat=" + obj.unitat + "&carretTipus=" + obj.carretTipus + "&accio=" +obj.accio +"&retornaHTML=" + obj.retornaHTML ;
	debug(s,true)
}

var _errTags = new Array();
_errTags[1] = "Ha fallat el insert de pedido";
_errTags[2] = "Falla al cridar el cargaTot el carret";
_errTags[3] = "Ha fallat el actualitzaLinies ";
_errTags[4] = "Ha fallat el visor retornaLlista";
_errTags[5] = "No hi ha tarifa";
_errTags[6] = "No hi ha la quantitat d'afegir";
_errTags[7] = "Falta el idGrupProducte";
_errTags[8] = "Falta la unitat del producte";
_errTags[9] = "No s'ha localitzat el producte per llegir el preu";
_errTags[10] = "S'intenta eliminar un producte i no hi ha el idGrup";
_errTags[11] = "El producte que es vol modificar no existeix, s'afagirà";
_errTags[12] = "Error eliminant el producte";
_errTags[13] = "Insert de pedido";
_errTags[14] = "cargaTot no te el idPedido";
_errTags[15] = "actualitzaLinies no te el idPedido";
_errTags[16] = "actualitzaLinies no te la Tarifa";
_errTags[17] = "No hi ha acció";
_errTags[999] = "Error de Ajax";
