
Element.addMethods ( 'form', {
	processMultiform: function ( element ) {
		// cargando
		$(document.body).startWaiting('bigBlackWaiting');
		FMsg.hide(element.id);
		element.request({
			onComplete: function(transport, oJSN)
						{
							if (oJSN != null && oJSN.success) {
								try {
									FMsg.set(oJSN.data.successMsg);
									FMsg.info(element.id);
								}catch(err) {
									$(document.body).stopWaiting(); 
								}
								// volver a borrar los campos creados para anadir productos
								resetProductLines(element.id);
								// After sending the data correctly, the form is reset
								element.reset();
						/* ERROR CONTROL */							
							} else if (oJSN != null && !oJSN.success && oJSN.errMsg) {
								errMsg = "";
								for (elem in oJSN.errMsg) {
									//errMsg = errMsg + "- " + oJSN.errMsg[elem] + "\n";
									try {
										FMsg.set(oJSN.errMsg[elem]);
									}catch(err) {
										$(document.body).stopWaiting(); 
									}
								}
								FMsg.error(element.id);
							} else {
								try {
									FMsg.set("Se ha producido un error desconocido. " + transport.responseText);
									FMsg.error(element.id);
								}catch(err) {
									$(document.body).stopWaiting(); 
								}
							}
							$(document.body).stopWaiting(); 
						},
			onFailure: 	function ()	// ERROR CONTROL
						{
							try {
								FMsg.error(element.id);
							}catch(err) {}
							$(document.body).stopWaiting();
						}
		});
	}
});

// Se añade el metodo de carga dinàmica de datos para un select
Element.addMethods ( 'select', {
		retrieveData:	function ( element, url, parameters )
						{ 
							if (!isNaN ( parameters) && !isArray ( parameters ) ) return false;

							var body = "";		
							for ( var index in parameters ) body += index + "=" + parameters[index] + "&";

							new Ajax.Request( url, 
							{	method: 'post', 
								postBody: body, 
								onComplete: function (oReq, oJSN) 
											{ 
												if ( (oJSN != null) && oJSN.success) {
													element.innerHTML = '';
													element.options[element.length] = new Option(); // Blank option
													for (key in oJSN.data) element.options[element.length] = new Option(oJSN.data[key], key);
											/* ERROR CONTROL */
												} else if ( (oJSN != null) && !oJSN.success && oJSN.errMsg ) { 
													errMsg = "";
													if ( isArray ( oJSN.errMsg ))
														for (elem in oJSN.errMsg) errMsg = errMsg + "- " + oJSN.errMsg[elem] + "\n";
													else{
															errMsg = oJSN.errMsg;
															FMsg.set(errMsg);
															FMsg.error(element.up('form').id);
														}
												} else {
													alert ( "Se ha producido un error desconocido.");
												}
											},
								onFailure: 	function ()	// ERROR CONTROL
											{
												alert ( "Se ha producido un error en la carga de datos.");
											}
							});
					}
});

Element.addMethods ( 'input', {
		check:		function ( element, url, parameters )
					{
						if ( element.getValue() == '' ) return;
						if ( !isNaN ( parameters ) && !isArray ( parameters ) ) return;
						
						var body = "";
						for ( var index in parameters ) body += index + "=" + parameters[index] + "&";
						
						new Ajax.Request ( url, 
						{	method: 'post',
							postBody: body,
							onComplete: function (oReq, oJSN)
										{
											if ( (oJSN != null) && !oJSN.success) {
													errMsg = "";
													if ( isArray ( oJSN.errMsg ))
														for (elem in oJSN.errMsg) errMsg = errMsg + "- " + oJSN.errMsg[elem] + "\n";
													else
														errMsg = oJSN.errMsg;
													alert(errMsg);
													// Focus on the element
													element.select();
													element.focus();
											}
										}
						})
					},

		/**
		 * 
		 * @param {Object} element
		 * @param {string} url
		 * @param {array} parameters
		 * @param {function} _function
		 */
		retrieveData: 	function ( element, url, parameters, _onComplete )
						{
							if (!isNaN ( parameters) && !isArray ( parameters ) ) return false;
						
							var body = "";		
							for ( var index in parameters ) body += index + "=" + parameters[index] + "&";

							new Ajax.Request( url, 
							{	method: 'post', 
								postBody: body, 
								onComplete: function (oReq, oJSN) 
											{ 
												if ( (oJSN != null) && oJSN.success) {
													// The result is passed to the function if _function is a valid function
													
													if ( _onComplete ) 
														_onComplete(oJSN.data);
													else {
														element.value = oJSN.data;
													}
											/* ERROR CONTROL */
												} else if ( (oJSN != null) && !oJSN.success && oJSN.errMsg ) { 
													errMsg = "";
													if ( isArray ( oJSN.errMsg ))
														for (elem in oJSN.errMsg) errMsg = errMsg + "- " + oJSN.errMsg[elem] + "\n";
													else
														errMsg = oJSN.errMsg;
													alert(errMsg);	
												} else {
													alert ( "Se ha producido un error desconocido.");
												}
								},
								onFailure: 	function ()	// ERROR CONTROL
								{
									alert ( "Se ha producido un error en la carga de datos.");
								}
							});	
					}
});

function isArray(o) {
  return Object.prototype.toString.call(o) === '[object Array]'; 
}

///////////////////////////////////////////////////////////////
// SPECIAL FUNCTIONS TO SERVE ESPECIFIC FIELDS IN SOME FORMS //
///////////////////////////////////////////////////////////////

/**
 * 
 */
/*
function frm8_lines ( element, objDOM )
{ 
	if (element.getValue() == '') return false;
	
	objDOM.innerHTML = "";
	
	element.retrieveData ( 	'multiform_retrieve', 
							{ field: 'waybills_lines', order_number: element.getValue() },
	
							function ( data )
							{
								for ( line in data )
								{
									options  = "<option value=''></option>";
									options += "<option value='No me gusta'>No me gusta</option>";
									options += "<option value='No es mi talla'>No es mi talla</option>";
									options += "<option value='El producto no es de la calidad esperada'>El producto no es de la calidad esperada</option>";
									options += "<option value='Otros(especifica el motivo en comentarios'>Otros(especifica el motivo en comentarios</option>";
									select   = "<select name='return_reason[" + line + "]'>" + options + "</select>";

									objDOM.innerHTML += "<input type='hidden' name='return_line[" + line + "]' value='" + data[line] + "' />";
									objDOM.innerHTML += "<p>";
									objDOM.innerHTML += "<dl><dt>" + data[line] + "</dt></dl>";
									objDOM.innerHTML += "<label for=''>Motivo de devolución: <span class='obligatorio'>*</span></label>";
									objDOM.innerHTML += select;
									objDOM.innerHTML += "</p>";
								}
							}
	);
}
*/
/*
function frm9_lines ( element, objDOM )
{ 
	if (element.getValue() == '') return false;
	
	objDOM.innerHTML = "";
	
	element.retrieveData ( 	'multiform_retrieve', 
							{ field: 'waybills_lines', order_number: element.getValue() },
	
							function ( data )
							{
								for ( line in data )
								{
									options  = "<option value=''></option>";
									options += "<option value='No me gusta'>No me gusta</option>";
									options += "<option value='No es mi talla'>No es mi talla</option>";
									options += "<option value='El producto no es de la calidad esperada'>El producto no es de la calidad esperada</option>";
									options += "<option value='Otros(especifica el motivo en comentarios'>Otros(especifica el motivo en comentarios</option>";
									select   = "<select name='return_reason[" + line + "]'>" + options + "</select>";

									objDOM.innerHTML += "<input type='hidden' name='return_line[" + line + "]' value='" + data[line] + "' />";
									objDOM.innerHTML += "<p>";
									objDOM.innerHTML += "<dl><dt>" + data[line] + "</dt></dl>";
									objDOM.innerHTML += "<label for=''>Motivo de devolución: <span class='obligatorio'>*</span></label>";
									objDOM.innerHTML += select;
									objDOM.innerHTML += "</p>";
								}
							}
	);
}
*/
function frm4_lines_add ( objDOM )
{
	var objP = document.createElement ('p');
	// anadido estilo para etiquetarlo y poder borrarlo al resetear
	$(objP).addClassName('prod-anadido');
	
	var objLABEL = document.createElement ('label');
	objLABEL.innerHTML = 'Producto no recibido: <span class="obligatorio">*</span>';
	
	var objINPUT = document.createElement ('input');
	objINPUT.setAttribute ('name', 'order_products_missed[]');
	objINPUT.setAttribute ('size', '80');
	objINPUT.setAttribute ('maxlength', '300');
	
	var objA     = document.createElement ('a');
	objA.setAttribute ('href', 'javascript:void(0)');
	objA.onclick = function () { objDOM.removeChild ( objP ); }
	objA.innerHTML = 'Borrar';
	
	objP.appendChild ( objLABEL );
	objP.appendChild ( objINPUT );
	objP.innerHTML += "&nbsp;&nbsp;";
	objP.appendChild ( objA );
	objDOM.appendChild ( objP );
}

function frm5_lines_add ( objDOM )
{
	var objP_products = document.createElement ('p');
	// anadido estilo para etiquetarlo y poder borrarlo al resetear
	$(objP_products).addClassName('left prod-anadido');
	
	var objP_units = document.createElement ('p');
	$(objP_units).addClassName('left padleft20 prod-anadido');
	
	var objP_info = document.createElement ('p');
	$(objP_info).addClassName('prod-anadido');
	
	var objLABEL = document.createElement ('label');
	objLABEL.innerHTML = 'Producto solicitado: <span class="obligatorio">*</span>';
	
	var objLABEL2 = document.createElement ('label');
	objLABEL2.innerHTML = 'Unidades: <span class="obligatorio">*</span>';
	
	var objLABEL3 = document.createElement ('label');
	objLABEL3.innerHTML = 'Breve descripción del producto recibido: <span class="obligatorio">*</span>';
	
	var objINPUT = document.createElement ('input');
	objINPUT.setAttribute ('name', 'order_products_requested[]');
	objINPUT.setAttribute ('size', '80');
	objINPUT.setAttribute ('maxlength', '300');
	
	var objINPUT2 = document.createElement ('input');
	objINPUT2.setAttribute ('name', 'order_units_requested[]');
	objINPUT2.setAttribute ('size', '3');
	objINPUT2.setAttribute ('maxlength', '3');
	
	var objINPUT3 = document.createElement ('textarea');
	objINPUT3.setAttribute ('name', 'order_units_info[]');
	objINPUT3.setAttribute ('cols', '76');
	objINPUT3.setAttribute ('rows', '4');
	
	var objA     = document.createElement ('a');
	objA.setAttribute ('href', 'javascript:void(0)');
	objA.onclick = function () { objDOM.removeChild ( objP_products ); objDOM.removeChild ( objP_units ); objDOM.removeChild ( objP_info ); }
	objA.innerHTML = 'Borrar';
	
	objP_products.appendChild ( objLABEL );
	objP_products.appendChild ( objINPUT );

	objP_units.appendChild ( objLABEL2 );
	objP_units.appendChild ( objINPUT2 );
	
	objP_units.innerHTML += "&nbsp;&nbsp;&nbsp;&nbsp;";
	objP_units.appendChild ( objA );
	
	objP_info.appendChild ( objLABEL3);
	objP_info.appendChild ( objINPUT3);
	
	objDOM.appendChild ( objP_products );
	objDOM.appendChild ( objP_units );
	objDOM.appendChild ( objP_info );
}

function frm17_lines_add ( objDOM )
{	
	var objP_products = document.createElement ('p');
	// anadido estilo para etiquetarlo y poder borrarlo al resetear
	$(objP_products).addClassName('left prod-anadido');
	
	var objP_units = document.createElement ('p');
	$(objP_units).addClassName('left padleft20 prod-anadido');
	
	var objP_info = document.createElement ('p');
	$(objP_info).addClassName('prod-anadido');
	
	var objLABEL = document.createElement ('label');
	objLABEL.innerHTML = 'Producto que desea devolver: <span class="obligatorio">*</span>';
	
	var objLABEL2 = document.createElement ('label');
	objLABEL2.innerHTML = 'Cantidad: <span class="obligatorio">*</span>';
	
	var objINPUT = document.createElement ('input');
	objINPUT.setAttribute ('name', 'order_products_returned***[]');
	objINPUT.setAttribute ('size', '80');
	objINPUT.setAttribute ('maxlength', '300');
	
	var objINPUT2 = document.createElement ('input');
	objINPUT2.setAttribute ('name', 'order_products_returned_number***[]');
	objINPUT2.setAttribute ('size', '3');
	objINPUT2.setAttribute ('maxlength', '3');
	
	var objA     = document.createElement ('a');
	objA.setAttribute ('href', 'javascript:void(0)');
	objA.onclick = function () { objDOM.removeChild ( objP_products ); objDOM.removeChild ( objP_units ); objDOM.removeChild ( objP_info ); }
	objA.innerHTML = 'Borrar';
	
	objP_products.appendChild ( objLABEL );
	objP_products.appendChild ( objINPUT );

	objP_units.appendChild ( objLABEL2 );
	objP_units.appendChild ( objINPUT2 );
	
	objP_units.innerHTML += "&nbsp;&nbsp;&nbsp;&nbsp;";
	objP_units.appendChild ( objA );
	
	objDOM.appendChild ( objP_products );
	objDOM.appendChild ( objP_units );
}
function frm7_lines_add ( objDOM )
{
	var objP = document.createElement ('p');
	// anadido estilo para etiquetarlo y poder borrarlo al resetear
	$(objP).addClassName('prod-anadido');
	
	var objLABEL = document.createElement ('label');
	objLABEL.innerHTML = 'Producto defectuoso: <span class="obligatorio">*</span>';
	
	var objINPUT = document.createElement ('input');
	objINPUT.setAttribute ('name', 'order_products_missed[]');
	objINPUT.setAttribute ('size', '80');
	objINPUT.setAttribute ('maxlength', '300');
	
	var objA     = document.createElement ('a');
	objA.setAttribute ('href', 'javascript:void(0)');
	objA.onclick = function () { objDOM.removeChild ( objP ); }
	objA.innerHTML = 'Borrar';
	
	objP.appendChild ( objLABEL );
	objP.appendChild ( objINPUT );
	objP.innerHTML += "&nbsp;&nbsp;";
	objP.appendChild ( objA );
	objDOM.appendChild ( objP );
}

/**
 * Borrar las lineas de producto que se anaden dinamicamente en los forms 4, 5 y 7
 * @param {Object} id
 */
function resetProductLines(id) {
	if(id == 'frmForm4') {
		$$('p.prod-anadido').each(function(e) {
			$('frm4_lines').removeChild(e);
		});
	} else if(id == 'frmForm7') {
		$$('p.prod-anadido').each(function(e) {
			$('frm7_lines').removeChild(e);
		});
	} else if(id == 'frmForm17') {
		$$('p.prod-anadido').each(function(e) {
			$('frm17_lines').removeChild(e);
		});
	}else if(id == 'frmForm5') {
		$$('p.prod-anadido').each(function(e) {
			$('frm5_lines').removeChild(e);
		});
	}
}