
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("Foi produzido um erro desconhecido. " + 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 ( "Foi produzido um erro desconhecido.");
												}
											},
								onFailure: 	function ()	// ERROR CONTROL
											{
												alert ( "Foi produzido um erro na descarga dos dados.");
											}
							});
					}
});

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 ( "Foi produzido um erro desconhecido.");
												}
								},
								onFailure: 	function ()	// ERROR CONTROL
								{
									alert ( "Foi produzido um erro na descarga dos dados.");
								}
							});
					}
});

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 = 'Produto não recebido: <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 = 'Eliminar';

	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 = 'Produto solicitado: <span class="obligatorio">*</span>';

	var objLABEL2 = document.createElement ('label');
	objLABEL2.innerHTML = 'Unidades: <span class="obligatorio">*</span>';

	var objLABEL3 = document.createElement ('label');
	objLABEL3.innerHTML = 'Referência da etiqueta e breve descrição do produto: <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 = 'Eliminar';

	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 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 = 'Produto defeituoso: <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 = 'Eliminar';

	objP.appendChild ( objLABEL );
	objP.appendChild ( objINPUT );
	objP.innerHTML += "&nbsp;&nbsp;";
	objP.appendChild ( objA );
	objDOM.appendChild ( objP );
}

var prods = 1;
function frm6_lines_add ( objDOM )
{
	var div = 'frm18_lines';
	var newdiv = 'prod'+prods;
	
	// campo 1
	var div1 = new Element('p',{'class': 'w16'});
	$(div1).insert({
		top: new Element('label').update('Produto&nbsp;que&nbsp;deseja&nbsp;devolver:&nbsp;<span class="obligatorio">*</span>'),
		bottom: new Element('input', {
			name: 'order_products_missed[]',
			maxlength: '300'
		})
	});
	
	// campo 2
	var div2 = new Element('p',{'class': 'w17'});
	$(div2).insert({
		top: new Element('label').update('Quantidade:&nbsp;<span class="obligatorio">*</span>'),
		bottom: new Element('input', {
			name: 'order_products_missed2[]',
			maxlength: '300'
		})
	});
	
	// campo 3
	var div3 = new Element('p',{'class': 'w18'});
	
	var select = new Element('select', {name:'order_products_missed3[]'});
	select.options.add(new Option('',''))
	select.options.add(new Option('Não gosto','Não gosto'))
	select.options.add(new Option('Grande demais','Grande demais'))
	select.options.add(new Option('Pequeno demais','Pequeno demais'))
	select.options.add(new Option('Parecia diferente no site','Parecia diferente no site'))
	select.options.add(new Option('Mudei de opinião','Mudei de opinião'))
	select.options.add(new Option('Cometi um erro ao realizar meu pedido','Cometi um erro ao realizar meu pedido'))
	
	$(div3).insert({
		top: new Element('label').update('Motivo&nbsp;da&nbsp;devoluçao:&nbsp;<span class="obligatorio">*</span>'),
		bottom: select
	});
	
	// link eliminar
	eliminar = new Element('a', {
		'href' : 'javascript:void(0)'
	})
	.update('Eliminar')
		.observe('click', function() {
			$(newdiv).update('');
			$(newdiv).removeClassName('padtop10');
		})
	
	// crear div
	$(div).insert({
		bottom: new Element('div', {id: newdiv, 'class': 'padtop10'})
	});
	$(newdiv).insert({bottom: div1});
	$(newdiv).insert({bottom: div2});
	$(newdiv).insert({bottom: div3});
	$(newdiv).insert({bottom: new Element('div',{'class': 'clear padtop5'})});
	$(newdiv).insert({bottom: eliminar});
	$(newdiv).insert({bottom: new Element('div',{'class': 'clear'})});
	
	prods++;
}



/**
 * 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 == 'frmForm6') {
		$$('p.prod-anadido').each(function(e) {
			$('frm6_lines').removeChild(e);
		});
	} else if(id == 'frmForm7') {
		$$('p.prod-anadido').each(function(e) {
			$('frm7_lines').removeChild(e);
		});
	}else if(id == 'frmForm5') {
		$$('p.prod-anadido').each(function(e) {
			$('frm5_lines').removeChild(e);
		});
	}
}