KEY_BACKSPACE =  8;
KEY_TAB       =  9;
KEY_RETURN    = 13;
KEY_ESC       = 27;
KEY_LEFT      = 37;
KEY_UP        = 38;
KEY_RIGHT     = 39;
KEY_DOWN      = 40;
KEY_DELETE    = 46;

FORM_COLOR = "#FFFFFF";
ERROR_COLOR = "#DEBCBC";
ERROR_IMG = '<img src="../imatges/error.gif" width="11px" height="11px" />';

function inicialitzar () {
	var colError = document.getElementsByName('error');
	for (i=0; i<colError.length; i++) {
		colError[i].innerHTML = "";
	}
	FORM_COLOR = document.getElementById('formDistribucio')? "#CEDBE1" : "#FFFFFF";
}

EventUtil.addEventHandler (window, "load", inicialitzar);


function isControlKey (key) {
	return key == null || 
	       key == 0 || 
		   key == KEY_BACKSPACE || 
		   key == KEY_TAB || 
		   key == KEY_RETURN || 
		   key == KEY_ESC; 
}

function campEditat (oCamp) {
	if (oCamp.style.backgroundColor != FORM_COLOR) {
		oCamp.style.backgroundColor = FORM_COLOR;
		var sId = oCamp.id + 'Error';
		oError = document.getElementById(sId);
		if (oError) {oError.innerHTML = "";}
	}
}

function campErroni (oCamp) {
	oCamp.style.backgroundColor = ERROR_COLOR;
	var sId = oCamp.id + 'Error';
	oError = document.getElementById(sId);
	if (oError) {oError.innerHTML = ERROR_IMG;}
}

function nomEditat (oTextbox, oEvent, bBlockPaste) {
	campEditat(oTextbox);
	oEvent = EventUtil.formatEvent(oEvent);
		
	var sChar = String.fromCharCode(oEvent.charCode);
	var key = oEvent.charCode;
	var bIsValidChar = /\w/.test(sChar) || sChar == "" || sChar == " " || isControlKey(key);
	
	if (bBlockPaste) {
		return bIsValidChar && !(oEvent.ctrlKey && sChar == "v");
	} else {
		return bIsValidChar || oEvent.ctrlKey;
	}
}

function dataEditada (oTextbox, oEvent, bBlockPaste) {
	campEditat(oTextbox);
	oEvent = EventUtil.formatEvent(oEvent);
		
	var sChar = String.fromCharCode(oEvent.charCode);
	var key = oEvent.charCode;
	//var data = oTextbox.value;
	//if (/dd\/mm\/aaaa/.test(data)) {data = "";}
	var bIsValidChar = /[\d\/]/.test(sChar) || isControlKey(key);
	
	if (bBlockPaste) {
		return bIsValidChar && !(oEvent.ctrlKey && sChar == "v");
	} else {
		return bIsValidChar || oEvent.ctrlKey;
	}
}



function mobilEditat (oTextbox, oEvent, bBlockPaste) {
	campEditat(oTextbox);
	oEvent = EventUtil.formatEvent(oEvent);
		
	var sChar = String.fromCharCode(oEvent.charCode);
	var key = oEvent.charCode;
	var mobil = oTextbox.value;
	var bIsValidChar = (mobil == "" && /6/.test(sChar)) || 
	                   (mobil != "" &&  /\d/.test(sChar)) || 
					   isControlKey(key);
	
	if (bBlockPaste) {
		return bIsValidChar && !(oEvent.ctrlKey && sChar == "v");
	} else {
		return bIsValidChar || oEvent.ctrlKey;
	}
}

function mobilValid (sMobil) {
	var reMobil = /6\d{8}/;
	return reMobil.test(sMobil);
}

function emailValid (sEmail) {
	var reEmail = /^(?:[\w-_]+\.?)*[\w-_]+@(?:[\w-_]+\.)+\w+$/;
	return sEmail == "" || reEmail.test(sEmail);
}

function diesMes(mes, any) {
	switch (mes) {
		case 0:  return 31; break;
		case 1:	 if (any % 4 == 0) {
			 		if (any % 400 == 0) {
		 				return 29;
	 				} else {
						if (any % 100 == 0) {
							return 28;
						} else {
							return 29;
						}
					}
				 } else {
					return 28;
				 };
				 break;
		case 2:  return 31; break;
		case 3:  return 30; break;
		case 4:  return 31; break;
		case 5:  return 30; break;
		case 6:  return 31; break;
		case 7:  return 31; break;
		case 8:  return 30; break;
		case 9:  return 31; break;
		case 10: return 30; break;
		case 11: return 31; break;
	}
}

function dataValida (sData) {
	var reData = /(?:0[1-9]|[12][0-9]|3[01])\/(?:0[1-9]|1[0-2])\/(?:19|20\d{2})/;
	var bFormatValid = reData.test(sData);
	var iDia = parseInt(sData.substring(0,2)); // dd/mm/aaaa
	var iMes = parseInt(sData.substring(3,5));
	var iAny = parseInt(sData.substring(6));
	var bError =  iDia > diesMes(iMes-1);
	var dAvui = new Date();
	var dData = new Date(iAny, iMes-1, iDia);
	var bPosterior = dData >= dAvui;
	return bFormatValid && !bError && !bPosterior;
	}

function enviaContacte (oForm) {
	
	var oNom = oForm.fNom;
	if (oNom.value == "") {
		alert('Introduïu el vostre nom'); 
		oNom.focus();
		oNom.select();
		campErroni(oNom);
		return false;
	} else {
		var oEmail = oForm.fEmail;
		if (!emailValid(oEmail.value)) {	
			alert('Introduïu una adreça de correu electrònic vàlida'); 
			oEmail.focus();
			oEmail.select();
			campErroni(oEmail);
			return false;
		} else {
			var oConsulta = oForm.fConsulta;
			if (oConsulta.value == "") {
				alert('Introduïu la vostra consulta'); 
				oConsulta.focus();
				oConsulta.select();
				campErroni(oConsulta);
				return false;
			} // Consulta
		} // Email
	} // Nom
	return true;
}


function enviaDistribucio (oForm) {
	
	// Nom i llinatges
	var oNom = oForm.fNom;
	if (oNom.value == "") {
		alert('Introduïu el vostre nom'); 
		oNom.focus();
		oNom.select();
		campErroni(oNom);
		return false;
	} else {
		// Data de naixement
		var oData = oForm.fDatNai;
		if (oData.value == "" || !dataValida(oData.value)) {
			if (oData.value == "") alert("Introduïu la vostra data de naixement"); 
			else alert("Introduïu una data vàlida. Recordau que el format és: dd/mm/aaaa");
			oData.focus();
			oData.select();
			campErroni(oData);
			return false;
		} else {
			// Mòbil
			var oMobil = oForm.fMobil;
			if (oMobil.value == "" || !mobilValid(oMobil.value)) {
				if (oMobil.value == "") alert('Introduïu el vostre telèfon mòbil'); 
				else alert("Introduïu un número de mòbil vàlid");
				oMobil.focus();
				oMobil.select();
				campErroni(oMobil);
				return false;
			} else {
				// Adreça electrònica
				var oEmail = oForm.fEmail;
				if (!emailValid(oEmail.value)) {
					alert('Introduïu una adreça de correu electrònic vàlida'); 
					oEmail.focus();
					oEmail.select();
					campErroni(oEmail);
					return false;
				} else {
					// Temes
					var counter = 0;
					if (oForm.fOci.checked) {counter++};
					if (oForm.fEsports.checked) {counter++};
					if (oForm.fAuditori.checked) {counter++};
					if (oForm.fJuvenil.checked) {counter++};
					if (counter > 2) {
						alert('Seleccionau fins a un màxim de dos temes');
						return false;
					} // Temes
				} // Email
			} // Mòbil
		} // Data de naixement
	} // Nom i llinatges
	return true;
}

