/* clase de apoyo para el carro de compras */
var CarroCompras = new Class
({
	Implements: [Events, Options],
	options: {
		oper:''
		,iId:$empty
		,iCant:1
		,sScriptOperAdd:'./librerias/carrito/ccarrocompra.agregaritem.php'
		,sScriptOperUpdate:'./librerias/carrito/ccarrocompra.modificaritem.php'
		,sScriptOperDel:'./librerias/carrito/ccarrocompra.borraritem.php'
		,sScriptOperDelAll:'./librerias/carrito/ccarrocompra.cancelar.php'
		,sScriptOperAddData:'./librerias/carrito/ccarrocompra.agregardatos.php'
		,sScriptOperCheck:''
		,sScriptRespOperAdd:'./librerias/carrito/resumencarrito.php'
		,sScriptOperRespUpdate:'./librerias/carrito/resumencarrito.php'
		,sScriptRespOperDel:'./librerias/carrito/resumencarrito.php'
		,sScriptRespOperDelAll:''
		,sScriptRespOperCheck:''
		,sScriptRespOperSummary:'./librerias/carrito/resumencarrito.php'
		,sKeyId:'iID'
		,sKeyCant:'iCant'
		,sKeyImp:'rImporte'
		,sKeyOper:'oper'
		,sKeyDivResp:'divResp'
		,sProgress:"<p>&nbsp;<img src='images/loader_small.gif' border = 0 style='vertical-align:middle;' />&nbsp;Actualizando...</p>"
		,sProgressRed:"<p><img src='images/loader_small.gif' border = 0 style='vertical-align:middle;' /></p>"
		,requestReload: true
		,useSmallPg: false
	}
	,onSuccess:function(){}
	,initialize: function(elements, options)
	{
		if(options)
		{
			this.setOptions(options);
		}
		return this;
	}
	,fromElement: function(element,options)
	{
		if(!element.rel)
			return false;
		if(options)
		{
			$merge(this.options,options);
			if(options.requestReload)
				this.options.requestReload = options.requestReload;
			if(options.useSmallPg)
				this.options.useSmallPg = options.useSmallPg; 
		}
		this.setOptions(options);
		try
		{
			this.hParmsItem=$H(JSON.decode(element.rel));
			this.doAction();	
		}
		catch(err)
		{
			// do nothing
		}
		return this;
	}
	,fromElementId: function(elementId,options)
	{
		var element = $(elementId);
		return this.fromElement(element);
	}
	,doAction: function()
	{
		var Div = null;
		var sScript;
		switch(this.hParmsItem.get(this.options.sKeyOper))
		{
			case 'add':
				sScript = this.options.sScriptOperAdd;
				sScriptRest = this.options.sScriptRespOperAdd;
				Div = $(this.hParmsItem.get(this.options.sKeyDivResp));
				break;
			case 'updateCant':
				sScript = this.options.sScriptOperUpdate;
				sScriptRest = this.options.sScriptOperRespUpdate;
				var CantField = $(this.hParmsItem.get(this.options.sKeyCant));
				if(!CantField.value)
				{
					alert('Debe especificar un valor para la cantidad.');
					CantField.focus();
					return;	
				}else if(CantField.value<=0)
				{
					alert('Debe especificar un valor positivo y mayor que cero para la cantidad.');
					CantField.focus();
					return;
				}
			
				this.hParmsItem.set(this.options.sKeyCant,CantField.value);
				Div = $(this.hParmsItem.get(this.options.sKeyDivResp));
				break;
			case 'del':
				sScript = this.options.sScriptOperDel;
				sScriptRest = this.options.sScriptRespOperDel;
				Div = $(this.hParmsItem.get(this.options.sKeyDivResp));
				break;
			case 'delAll':
				sScript = this.options.sScriptOperDelAll;
				sScriptRest = this.options.sScriptRespOperDelAll;
				Div = $(this.hParmsItem.get(this.options.sKeyDivResp));
				break;
			case 'addData':
				sScript = this.options.sScriptOperAddData;
				Div = $(this.hParmsItem.get(this.options.sKeyDivResp));
				break;
			case 'viewSummary':
				sScript = this.options.sScriptRespOperSummary;
				sScriptRest = ''
				Div = $(this.hParmsItem.get(this.options.sKeyDivResp));
				break;
		}
		
		if(sScript==''||!sScript)
			return false;
		var queryStr = this.hParmsItem.toQueryString();
		var requestReload = this.options.requestReload;
		var progresInd = this.options.sProgress;
		if(this.options.useSmallPg==true)
			progresInd = this.options.sProgressRed;
		var Yo = this;
		
		var oReq = new Request(
		{
			url:sScript
			,method:'post'
			,onSuccess:function(responseText,responseXML)
			{
				if(requestReload==true && sScriptRest!='')
				{
					var oReqResp = new Request(
					{
						url:sScriptRest
						,method:'post'
						,onSuccess:function(responseText,responseXML)
						{
							if(Div && Div!=null)
								Div.innerHTML = responseText;
							Yo.onSuccess();
						}
						,onComplete:function()
						{
							
						}
						,onRequest:function()
						{
							if(Div)
								Div.innerHTML = progresInd;
						}
						,onFailure:function(e)
						{
							alert('Ups! Ha ocurrido un problema en la solicitud enviada!!. ');
							if(Div)
								Div.innerHTML = '';
						}
					}
					);
					oReqResp.send(queryStr);
						
				}
				else
				{
					if(Div)
						Div.innerHTML = responseText;
					Yo.onSuccess();
				}
					
			}
			,onComplete:function()
			{
				Yo.fireEvent('onComplete', params);
				Yo.removeEvents('complete');
			}
			,onRequest:function()
			{
				if(Div)
					Div.innerHTML = progresInd;
			}
			,onFailure:function(e)
			{
				alert('Ups! Ha ocurrido un problema en la solicitud enviada!!. '+e);
				if(Div)
					Div.innerHTML = '';
			}
		}
		);
		oReq.send(queryStr);
		var params;
		this.fireEvent('onRequest', params);
		this.removeEvents('request');
	}
	,hParmsItem:new Hash()
	
});
