/**
	Dependencias:
		- FormCheck.js
		- mootools-1.2.1-core.js
		- mootools-1.2-more.js
*/

var DetalleProducto = {
	formActivo: null,
	formName: null,
	acciones: {},
	actions: {},
	messages: {},
	cache: {},
	data: {},
	IS_PRODUCTO_ESPECIAL: false,
	diasDisponibles: null,
	init: function() {
		Portal.init();
		this.formActivo = document.forms[this.formName];
		//Formulario para el cambio de idioma.
		window.formPrincipal = this.formName;

        var dateSelected = this.formActivo.fechaEntrega.value.split('/');
        var year = dateSelected[2];
		var month = dateSelected[1] - 1;
		var day = dateSelected[0];

		MOptions.date = new Date(year, month, day)
		MOptions.displayArea = "calendar-container";
		MOptions.inputField = "fechaEntrega";
		MOptions.direcction = 1;
		MOptions.onSelect = this.irADestinatario;
		if($chk(this.diasDisponibles))MOptions.availableDays = this.diasDisponibles;
		var calendario = new MCalendar(MOptions);
        $('fechaEntrega').addEvent('change', function(event){
        	//if(DetalleProducto.formCheck.validateFormNow()) {
        	if(DetalleProducto.formCheck.directElementValidate(this)) {
        		var dateSelected = this.get('value').split('/');
				var year = dateSelected[2];
				var month = dateSelected[1] - 1;
				var day = dateSelected[0];
				if($chk(DetalleProducto.diasDisponibles)){
        			var days = DetalleProducto.diasDisponibles.filter(function(objDay){
        				return year == objDay.getFullYear() && month == objDay.getMonth() && day == objDay.getDate();
					});
					if(days.length == 0) {
						this.set('value', calendario.getFormatedDate(calendario.options.dateF));
						Portal.showError('No hay disponibilidad del producto en la fecha indicada.', 'Fecha incorrecta');
					} else {
						calendario.setDate(new Date(year, month, day));
					}
        		} else {
        			calendario.setDate(new Date(year, month, day));
        		}
			}
		});
		$('lnkDestinatario').addEvent('click',function(event) {
			new Event(event).stop();
			DetalleProducto.irADestinatario();
		});
		if( $chk($('btnBuscaLoc')) ) {
			$('btnBuscaLoc').addEvent('click', function(event){
				new Event(event).stop();
				this.buscarLocalidad();
			}.bind(this));
		}

		if( $chk($('btnComprobarDisponibilidad')) ) {
			$('btnComprobarDisponibilidad').addEvent('click', function(event){
				new Event(event).stop();
				this.comprobarDisponibilidad();
			}.bind(this));
		}
		this.trackNoStock();
		this.crearFormCheck();
	},

	trackNoStock: function() {
		if(!this.isTrackNoStock) return true;
		try {
			Portal.ga_addVirtualEvent( {
				category: 'Disponibilidad',
				action: 'No-Stock',
				description: this.data.productId
				//,value: this.data.city + ' - ' + this.data.zipcode
			} );
		} catch(error) {
			this.iflr_trackError(error);
		}
	},
	/**
	* Aasigna los literales internacionalizados para cada error, crea las funciones especificas de validación
	* e inicializa el objeto formCheck.
	*/
	crearFormCheck: function() {
		//Inicialización del chequeo de formularios
		//Creo y asigno el validador del formulario.
		this.formCheck = new FormCheck(DetalleProducto.formName,{
			display : {
				showErrors: 0,
				addClassErrorToField: 1
			}
		});
	},

	buscarLocalidad: function() {
		var codPostal = $('codigoPostal').get('value').trim();
		var localidad = $('localidad').get('value').trim();
		var provincia = $('provincia').get('value').trim();
		var notif = $('notifFindLoc');
		try {
			notif.addClass('waitFieldOn');
			jsonrpc = new JSONRpcClient("/JSON-RPC");
			// Call a Java method on the server
			var localidades = null;
			var fntAsignarLocalidad = function(localidad) {
			  //Función que ejecuta al encontrar una localidad única.
				$('provincia').set('value', localidad.provincia);
				$('localidad').set('value', localidad.nombreciudad);
				$('codigoPostal').set('value', localidad.codpostal);
				DetalleProducto.localidad=localidad;
				DetalleProducto.comprobarDisponibilidad();				
      };
			
			if(localidad.length > 0 || codPostal.length > 0) {
				localidades = jsonrpc.RPCLocalidad.obtenerDatosLocalidades(null, localidad, codPostal);
			}
			if($chk(localidades) && $chk(localidades.list) && localidades.list.length == 1) {
				var locAux = localidades.list[0];
				fntAsignarLocalidad(locAux);				
        
				//Hack para IE. En caso contrario no llega a mostrarte la carga.
				notif.removeClass.delay(100, notif, 'waitFieldOn');
				return true;
			} else {
				if($chk(localidades)) {
					DetalleProducto.cache.localidades = localidades.list;
				}				
				var initFnt = function () {
					BusquedaLocalidad.init(
						null,
						localidad,
						codPostal,
						DetalleProducto,
						function (localidad) {
						  fntAsignarLocalidad(localidad);							
						}
					);
				};
				

				var jsAux = {
					id: 'jsLocalidad',
					path: '/restyling/js/BusquedaLocalidad.js'
				};
				FormHelp.showPopUp(
					'/restyling/jsp/localidad/busquedaLocalidad.jsp',
					'popupDiv',
					'popupDiv',
					true,
					null,
					{
						id: 'jsLocalidad',
						path: '/restyling/js/BusquedaLocalidad.js'
					},
					initFnt
				);
				//Hack para IE. En caso contrario no llega a mostrarte la carga.
				notif.removeClass.delay(100, notif, 'waitFieldOn');
				return false;
			}

		} catch(e) {
			notif.removeClass('waitFieldOn');
			//No lo internacionalizo. En teoría no debería mostrarse nunca.
			Portal.showError("Error inesperado al buscar su localidad.<br>"+
			"Intentelo más tarde o pruebe con otros datos.<br>" +
			"Gracias y disculpe las molestias");
		}

	},	
	

	volver: function () {
		this.formActivo.action = this.actions.ACTION_DETALLE_PRODUCTO;
		this.formActivo.accion.value = this.acciones.ACCION_VOLVER;
		this.formActivo.submit();
	},

	irADestinatario: function (event) {
		if(DetalleProducto.formCheck.validateFormNow(event)) {
			DetalleProducto.formActivo.action = DetalleProducto.actions.ACTION_DESTINATARIO;
			DetalleProducto.formActivo.accion.value = DetalleProducto.acciones.ACCION_MOSTRAR_DATOS_ENVIO;
			DetalleProducto.formActivo.submit();
		}
	},

	comprobarDisponibilidad: function (event) {
		if(DetalleProducto.formCheck.validateFormNow(event)) {
			DetalleProducto.formActivo.action = DetalleProducto.actions.ACTION_DETALLE_PRODUCTO;
			DetalleProducto.formActivo.accion.value = DetalleProducto.acciones.ACCION_COMPROBAR_DISPONIBILIDAD;
			DetalleProducto.formActivo.submit();
		}
	}



}

window.addEvent('domready', function(){
	DetalleProducto.init();
});

