// Checkout
function SetElemValue(documentElem, newValue)
{
	document.getElementById(documentElem).value = newValue;
}

function SubmitForm(formId)
{
	document.getElementById(formId).submit();
}

// Funções Auxiliares
function SetDisabled(elemID)
{
	document.getElementById(elemID).disabled = "disabled";
	return true;
}

function ValidValue(value)	
{
	var value = String(value);
	return value != null && value != "" && value != "undefined";
}

function Error(id, desc)
{
	this.id = id;
	this.desc = desc;
	
	return this;
}

function Trim(str)
{
    return str.replace(/^(\s)*|(\s)*$/gi, "");
}

function ValidateEmail(email)
{
	var reg = /^(\w+(?:(\.|\-)\w+)*)@((?:\w+(?:(\.|\-)\w+)*\.)+)([a-z\d]{2,})$/i;
	return reg.test(email);
}

function ValidatePassword(pass, minLength)
{
	return String(pass).length >= minLength;
}

function ValidationLoginAux()
{
	var minPassLength = 4;
	var emailObj = document.getElementById("fldEmail");
	var passObj = document.getElementById("fldPassword");
			
	if (!ValidateEmail(emailObj.value))
	{
		emailObj.focus();
		throw new Error("Login", "O E-mail n%C3%A3o corresponde a um formato v%C3%A1lido.");
	}
	
	if (!ValidatePassword(passObj.value, minPassLength))
	{
		passObj.focus();
		throw new Error("Login", "A password deve ter, no m%C3%ADnimo, " + minPassLength + " caracteres.");
	}
}


function GetCardType( fieldValue )
{	
	switch( String( fieldValue ) )
	{
		case "AMEX":
			return 0;
			
		default:
			return 1;
			break;
	}
}

// Funções Auxiliares de validação de PASSAGEIROS 
function VerifyChar(str)
{
	var control = true;
	var ch;
	
	for (var i = 0; i < str.length; i++)
	{
		ch = str.charAt(i);
		if ((((ch < "a" || "z" < ch) && (ch < "A" || "Z" < ch)) && ch != ' ') || ch == ' ')
			control = false;
	}
	
	return control;
}

function GetDaysInMonth(month)
{
	var minDaysInMonth = 30;
	var maxDaysInMonth = 31;
										
	if (month < 8)
		return (minDaysInMonth + (month % 2));
	return (maxDaysInMonth - (month % 2));
}

function TestIfRegularYear(year)
{	
	return !(((year % 4) == 0 && (year % 100) != 0) || (year % 400) == 0);
}
			
function CheckDateAux(day, month, year) // determina se a data é ou não válida
{
	var control = (TestIfRegularYear(year) ? 28 : 29);
	
	if (day == 0 || month == 0 || year == 0)
		return false;	
	if (month == 2)
		return (day <= control);
	return (day <= GetDaysInMonth(month));
}

function VerifyDate(year, month, day)
{
	if (year != -1 && month != -1 && day != -1) 
		return CheckDateAux(day, month, year);
	return true;
}

function ValidatePassengersAux()
{	
	for (var i = 0; i < document.getElementsByName("fldNome").length; i++)
	{
		var currentNameObj = document.getElementsByName("fldNome")[i];
		var currentSurnameObj = document.getElementsByName("fldApelido")[i];
		var currentDayObj = document.getElementsByName("fldNascimentoDia")[i];
		var currentMonthObj = document.getElementsByName("fldNascimentoMes")[i];
		var currentYearObj = document.getElementsByName("fldNascimentoAno")[i];
		
		if (!ValidValue(Trim(String(currentNameObj.value))))
		{	
			currentNameObj.focus();
			throw new Error("Passengers", "Por favor, preencha o NOME do passageiro.");
		}
		
		if (!VerifyChar(Trim(String(currentNameObj.value))))
		{	
			currentNameObj.focus();
			throw new Error("Passengers", "O NOME dos passageiros apenas aceita letras (exclui acentua%C3%A7%C3%B5es, cedilhas e espa%C3%A7os).\n\nPor favor reescreva o seu nome.");
		}		
		
		if (!ValidValue(Trim(String(currentSurnameObj.value))))
		{	
			currentSurnameObj.focus();
			throw new Error("Passengers", "Por favor, preencha o APELIDO do passageiro.");
		}	
				
		if (!VerifyChar(Trim(String(currentSurnameObj.value))))
		{	
			currentSurnameObj.focus();
			throw new Error("Passengers", "O APELIDO dos passageiros apenas aceita letras (exclui acentua%C3%A7%C3%B5es, cedilhas e espa%C3%A7os).\n\nPor favor reescreva o seu nome.");
		}
		
		if (!VerifyDate(currentYearObj.value, currentMonthObj.value, currentDayObj.value))
		{	
			currentDayObj.focus();
			throw new Error("Passengers", "DATA de NASCIMENTO invv%C3%A1lida.");
		}
	}
}

function ValidateGuestAux()
{	
	for (var i = 0; i < document.getElementsByName("fldNome").length; i++)
	{
		var currentNameObj = document.getElementsByName("fldNome")[i];
		var currentSurnameObj = document.getElementsByName("fldApelido")[i];
		
		if (!ValidValue(Trim(String(currentNameObj.value))))
		{	
			currentNameObj.focus();
			throw new Error("Passengers", "Por favor, preencha o NOME do passageiro.");
		}
		
		if (!VerifyChar(Trim(String(currentNameObj.value))))
		{	
			currentNameObj.focus();
			throw new Error("Passengers", "O NOME dos passageiros apenas aceita letras (exclui acentua%C3%A7%C3%B5es, cedilhas e espa%C3%A7os).\n\nPor favor reescreva o seu nome.");
		}		
		
		if (!ValidValue(Trim(String(currentSurnameObj.value))))
		{	
			currentSurnameObj.focus();
			throw new Error("Passengers", "Por favor, preencha o APELIDO do passageiro.");
		}	
				
		if (!VerifyChar(Trim(String(currentSurnameObj.value))))
		{	
			currentSurnameObj.focus();
			throw new Error("Passengers", "O APELIDO dos passageiros apenas aceita letras (exclui acentua%C3%A7%C3%B5es, cedilhas e espa%C3%A7os).\n\nPor favor reescreva o seu nome.");
		}
	}
}


function ValidateMoreServicesAux(divID)
{
	var nameObj = document.getElementsByName("fldNome");
	var divControl = document.getElementById(divID);
	
	if (String(divControl.value) == "1")
	{
		for (var i = 0; i < nameObj.length; i++)
		{
			var currentNameObj = nameObj[i];
			
			if (!ValidValue(Trim(String(currentNameObj.value))))
			{	
				currentNameObj.focus();
				throw new Error("Passengers", "Por favor, preencha o NOME do benefici%C3%A1rio.");
			}
		}
	}
}

function SetCardTypeValue()
{
	var cardType = document.getElementById('fldTipoCartao');
	var cardTypeValue = document.getElementById('fldTipoCartao').value;
	var cardTypeAux = document.getElementById('fldTipoCartaoAux');
	var cardTypeAuxValue = document.getElementById('fldTipoCartaoAux').value;
	
	cardTypeValue = cardTypeAuxValue.replace(/\_/gi, " ");
	cardType.value = cardTypeValue;
}

function ValidatePaymentsAux()
{	
	var cardNameObj = document.getElementsByName('fldNomeCartao')[0];
	var paymentType = document.getElementsByName('fldMetodoPagamento');
	var paymentTypeSelected;
	var cardType = document.getElementById('fldTipoCartao');
	var cardTypeValue = document.getElementById('fldTipoCartao').value;
	var cardTypeAux = document.getElementById('fldTipoCartaoAux');
	var cardTypeAuxValue = document.getElementById('fldTipoCartaoAux').value;
	var currentYearObj = document.getElementsByName('fldCartaoValidadeAno')[0];
	var currentMonthObj = document.getElementsByName('fldCartaoValidadeMes')[0];
	var cardNumberColection = document.getElementsByName('fldNumeroCartaoAux');
	var cardNumberStr = ConcatStringsArray(cardNumberColection);	
	var securityField = document.getElementsByName('fldCodigoSeguranca')[0].value;
	
	if (!ValidValue(cardTypeAuxValue))
		throw new Error("Payments", "%C3%89 necess%C3%A1rio escolher um tipo de CART%C3%83O.");	
	else
	{
		cardTypeValue = cardTypeAuxValue.replace(/\_/gi, " ");
		cardType.value = cardTypeValue;
	}
	
	if (cardNameObj.value == '')	
	{	
		cardNameObj.focus();
		throw new Error("Payments", "%C3%89 necess%C3%A1rio preencher o NOME no CART%C3%83O.");
	}	
	
	if (Number(GetCardNumberArrLengthSum(cardNumberColection)) < 16)
	{
		cardNumberColection[0].focus();
		throw new Error("Payments", "%C3%89 necess%C3%A1rio preencher o N%C3%9AMERO do CART%C3%83O.");
	}
		
	switch (cardTypeAuxValue)
	{
		case "Unibanco_Business_Gold":
			if (!ValidSubString(cardNumberStr, "427304", 6))
			{
				cardNumberColection[0].focus();
				throw new Error("Payments", "O n%C3%BAmero de cart%C3%A3o introduzido n%C3%A3o %C3%A9 v%C3%A1lido ou n%C3%A3o %C3%A9 de um cart%C3%A3o Unibanco Business");
			}
			break;
			
		default:
			if (!ValidSubString(cardNumberStr, "427729", 6))
			{
				cardNumberColection[0].focus();
				throw new Error("Payments", "O n%C3%BAmero de cart%C3%A3o introduzido n%C3%A3o %C3%A9 v%C3%A1lido ou n%C3%A3o %C3%A9 de um cart%C3%A3o Unibanco Business");
			}
			break;
	}	
	
	if (isNaN(Number(cardNumberStr)))
	{
		cardNumberColection[0].focus();
		throw new Error("Payments", "N%C3%9AMERO de CART%C3%83O inv%C3%A1lido");
	}
	
	
	document.getElementById('fldNumeroCartao1').value = document.getElementsByName('fldNumeroCartaoAux')[0].value;
	document.getElementById('fldNumeroCartao2').value = document.getElementsByName('fldNumeroCartaoAux')[1].value;
	document.getElementById('fldNumeroCartao3').value = document.getElementsByName('fldNumeroCartaoAux')[2].value;
	document.getElementById('fldNumeroCartao4').value = document.getElementsByName('fldNumeroCartaoAux')[3].value;	
	
	
	if ( securityField == '' )
	{
		document.getElementsByName('fldCodigoSeguranca')[0].focus();
		throw new Error("Payments", "%C3%89 necess%C3%A1rio preencher o C%C3%93DIGO de SEGURAN%C3%87A.");
	}
	
	if (isNaN(securityField))
	{
		document.getElementsByName('fldCodigoSeguranca')[0].focus();
		throw new Error("Payments", "C%C3%93DIGO de SEGURAN%C3%87A inv%C3%A1lido.");
	}
	
	if (securityField.length > 3)
	{
		document.getElementsByName('fldCodigoSeguranca')[0].focus();
		throw new Error("Payments", "O C%C3%93DIGO de SEGURAN%C3%87A aceita no m%C3%A1ximo 3 digitos.");
	}
		
	if (!VerifyDate(currentYearObj.value, currentMonthObj.value, 1))
	{	
		currentYearObj.focus();
		throw new Error("Payments", "DATA de VALIDADE incorrecta.");
	}
		
	return false;
}


function ValidateDeliveryType()
{ 
  var deliveryTypeObj = document.getElementsByName('fldMetodoEntrega');  
  var deliveryTypeSelected;
  
  for ( var x = 0; x < deliveryTypeObj.length; x++ )
	{	
		if ( deliveryTypeObj[x].checked == true )
		{
			deliveryTypeSelected = deliveryTypeObj[x].value;
			break;
		}
	}
	
	switch (deliveryTypeSelected)
	{
		case "DocElectro":
	    break;
	  case "DocInHand":
	    if (document.getElementsByName('fldDeliveryTypeAddress')[0].value == "")
	    {
	      document.getElementsByName('fldDeliveryTypeAddress')[0].focus();
	      throw new Error("Payments", "%C3%89 necess%C3%A1rio preencher a Morada de Entrega");	       
	    }  
	    if (document.getElementsByName('fldDeliveryTypeCP1')[0].value == "")
	    {
	      document.getElementsByName('fldDeliveryTypeCP1')[0].focus();
	      throw new Error("Payments", "%C3%89 necess%C3%A1rio preencher o C%C3%B3digo Postal de Entrega");	      
	    }
	    if (document.getElementsByName('fldDeliveryTypeCPLocal')[0].value == "")
	    {
	      document.getElementsByName('fldDeliveryTypeCPLocal')[0].focus();
	      throw new Error("Payments", "%C3%89 necess%C3%A1rio preencher a Localidade de Entrega");	      
			}
	    break;
	  case "DocInBalcony":
	    if (document.getElementsByName('stores')[0].value == "")
	    {
	      document.getElementsByName('stores')[0].focus();
	      throw new Error("Payments", "%C3%89 necess%C3%A1rio escolher uma loja");
	    }
	    break;
	  default:
	    break;
	}    
}

function SetGenderValue(idForm, idElem)
{	
	var currentValue = "";
	var count = 0;

	for (var i = 0; i < document.getElementsByTagName("input").length; i++)
	{
		if (document.getElementsByTagName("input").item(i).id == idElem && document.getElementsByTagName("input").item(i).checked)
			currentValue = currentValue + ((count++ > 0) ? "," : "") + document.getElementsByTagName("input").item(i).value;

	}
	document.getElementsByName(idElem)[0].value = currentValue;
}



// Funções de validação
function Validation_Login()
{
	try
	{
		ValidationLoginAux();
		SetElemValue('Event', 'Login');
		SetElemValue('State', 'Login');
	}
	catch(e)
	{
		alert(decodeURIComponent(e.desc));
		return false;
	}
}

function Validation_TripSummary()
{
	try
	{
		ValidatePassengersAux();		
		SetElemValue('State', 'Login');
		SetElemValue('Event', 'Login');
	}
	catch(e)
	{
		alert(decodeURIComponent(e.desc));
		return false;
	}		
}

function Validation_Passengers()
{
	try
	{
		ValidatePassengersAux();
		SetElemValue('Event', 'Book');
		SetElemValue('State', 'Passengers');
	}
	catch(e)
	{
		alert(decodeURIComponent(e.desc));
		return false;
	}		
}

function Validate_Guests()
{
	try
	{
		ValidateGuestAux();
		SetElemValue('Event', 'Book');
		SetElemValue('State', 'Passengers');
	}
	catch(e)
	{
		alert(decodeURIComponent(e.desc));
		return false;
	}
}

function Validate_Vacations_Guests()
{
	try
	{
		ValidateGuestAux();
		SetElemValue('Event', 'Book');
		SetElemValue('State', 'Passengers');
	}
	catch(e)
	{
		alert(decodeURIComponent(e.desc));
		return false;
	}
}

function Validation_MoreServices(divID)
{
	try
	{
		ValidateMoreServicesAux(divID)
		SetElemValue('Event', 'Book'); 
		SetElemValue('State', 'MoreServices');
	}
	catch(e)
	{
		alert(decodeURIComponent(e.desc));
		return false;
	}
}

function Validation_Payments(idButton)
{
	try
	{
		ValidatePaymentsAux();
		ValidateDeliveryType();
		document.getElementById(idButton).style.visibility = "hidden";
		SetElemValue('Event', 'Reservation')
		SetElemValue('State', 'Payment');		
	}
	catch(e)
	{
		alert(decodeURIComponent(e.desc));
		return false;
	}
}

function MoreServices_Back()
{
	try
	{
		SetElemValue('Event', 'Back'); 
		SetElemValue('State', 'MoreServices');
	}
	catch(e)
	{
		alert(decodeURIComponent(e.desc));
		return false;
	}		
}

function SetFormActionNonSSLUrl(aFormId) {

	if ( typeof(aFormName) == "undefined" )
		return;
	if ( typeof(NonSSLCheckOutUrl) == "undefined" )
		return;
		
	document.getElementById(aFormId).action = NonSSLCheckOutUrl;
	
}

function MoreServices_Cancel()
{
	try
	{
		SetElemValue('Event', 'Cancel'); 
		SetElemValue('State', 'MoreServices');
		SetFormActionNonSSLUrl('Form1');
		SubmitForm('Form1');
		return true;
	}
	catch(e)
	{
		alert(decodeURIComponent(e.desc));
		return false;
	}	
}

function Payments_Back()
{
	try
	{
		SetElemValue('Event', 'Back'); 
		SetElemValue('State', 'MoreServices');
	}
	catch(e)
	{
		alert(decodeURIComponent(e.desc));
		return false;
	}		
}

function Payments_Cancel()
{
	try
	{
		SetElemValue('Event', 'Cancel'); 
		SetElemValue('State', 'Payment');
		SetFormActionNonSSLUrl('Form1');
		SubmitForm('Form1');
		//return true;
	}
	catch(e)
	{
		alert(decodeURIComponent(e.desc));
		//return false;
	}	
}


function Validation_Conclusion(idButton)
{
	try
	{
		document.getElementById(idButton).style.visibility = "hidden";
		SetElemValue('State', 'Reservation');		
	}
	catch(e)
	{
		alert(decodeURIComponent(e.desc));
		return false;
	}
}


function Reservation_Cancel()
{
	try
	{
		SetElemValue('Event', 'Cancel'); 
		SetElemValue('State', 'Reservation');
		SetFormActionNonSSLUrl('Form1');
		SubmitForm('Form1');
		//return true;
	}
	catch(e)
	{
		alert(decodeURIComponent(e.desc));
		//return false;
	}	
}


function Validation_OK()
{
	try
	{
		SetElemValue('State', 'PrintReservation');
	}
	catch(e)
	{
		alert(decodeURIComponent(e.desc));
		return false;
	}
}

function openPopupInfo(popupType)
{
	window.open("/popupInfoCheckout.aspx?popupType="+popupType, "", "width=450px, height=320px");
	//window.open("/popupInfoCheckout.aspx?popupType="+popupType, "", "");
}

function openPopupEmBreveConsigo(popupType)
{
	window.open("/popupInfo.aspx", "", "width=250px, height=100px");
}

function openPopupInfoWithURL(url, popupType)
{
	window.open(url + "/popupInfoCheckout.aspx?popupType="+popupType, "", "width=400px, height=320px");
}

function ConcatStringsArray(arr)
{
	var out = "";
	
	for (var i = 0; i < arr.length; i++)
		out += arr[i].value;
	
	return out;
}

function GetCardNumberArrLengthSum(arr)
{
	var totalLength = 0;
	
	for (var i = 0; i < arr.length; i++)
		totalLength += Number(arr[i].value.length);
	
	return totalLength;
}

function ValidSubString(str1, str2, index)
{
	return str1.substring(0, index) == str2;
}


function verifyChar( obj, ch ,txt)
  {
    if ((((ch < "a" || "z" < ch) && (ch < "A" || "Z" < ch)) && ch != ' ') || ch == ' ')
    {
      alert("\nO "+txt+" do condutor apenas aceita letras(exclui acentuações, cedilhas e espaços).\n\nPor favor reescreva o seu "+txt+".");
      obj.select();
      obj.focus();
      return false;
    }
    
    return true;
}
	
	function ValidateFields(field, txt)
	{					
		var nomeStr, apelidoStr, ch;
					
			if(field == null)
				return false;
			
			fieldStr = String( field.value );			
		
			if(fieldStr == "" || nomeStr == " ")
			{	
				alert("Tem de preencher o "+txt+" do condutor.");
				field.focus();
				return false;
			}
			else
			{
				for (var a = 0; a < fieldStr.length; a++) 
				{
				
					ch = fieldStr.substring(a, a + 1);            
					if (!verifyChar( field, ch ,txt))
						return false;
				}          
			}
																
		return true;
	}
	
	function ValidateYear(field,desc)
	{
		var result = (document.getElementById(field).value == "");
		if (result) 
		{
			alert("Tem de preencher o "+desc+".");
			document.getElementById(field).focus();
		}		
		
		return result;
			
	}
	
	function ConstructDLDates(fldAno,fldMes,fldDia,fldData)
	{
		var ano = document.getElementById(fldAno).value;
		var mes = document.getElementById(fldMes).value;
		var dia = document.getElementById(fldDia).value;
	
		document.getElementById(fldData).value = ano + "/" + mes + "/" + dia;
	}
	
	function numericOnly(varStr)
	{
		var str = new String(varStr);
		var ValidChars = "0123456789";
		var Char;
		
		for (i = 0; i < str.length; i++)
		{
			Char = str.charAt(i);			
			if (ValidChars.indexOf(Char) == -1)
			{
				return false;
			}
			
		}
				
		return true;
		
	}

	function ValidNumber(fld, desc)
	{
		if (fld.value == "")
		{
			alert("Tem de preencher o "+desc+".");
			return false;
		}
		if (!numericOnly(fld.value))
		{
			alert("O "+desc+" só pode conter algarismos.");
			return false;
		}
		
		return true;
	}
	
	function ValidateNullField(fld, desc)
	{
		if (fld.value == "")
		{
			alert("Tem de preencher o "+desc+".");
			return false;
		}
				
		return true;
	}
	
	function ValidateFormRentACar()
	{
				
		if ((!ValidateFields(document.getElementsByName("fldNome")[0], "nome")) ||			
		(!ValidateFields(document.getElementsByName("fldApelido")[0], "apelido")) ||		
		(ValidateYear("fldNascimentoAno", "ano de nascimento")) || 		
		(ValidateYear("fldDLIssuedDateAno","ano de emissão da sua carta de condução" )) || (ValidateYear("fldDLValidDateAno", "ano da validade da sua carta de condução")) ||
		(!ValidateNullField(document.getElementsByName("fldDLNumber")[0], "número da carta de condução")))		
			return false;
		
		ConstructDLDates("fldDLIssuedDateAno", "fldDLIssuedDateMes", "fldDLIssuedDateDia", "fldDLIssuedDate");
		ConstructDLDates("fldDLValidDateAno", "fldDLValidDateMes", "fldDLValidDateDia", "fldDLValidDate");
		
		SetElemValue('Event', 'Book'); 
		SetElemValue('State', 'Passengers');
		
		return true;
		
	}
