/**
 * Format a number into the correct money pattern
 * @param c (Integer) floatPoint amount of decimal places
 * @param d (String) decimalSep string that will be used as decimal separator
 * @param t (String) thousandsSep string that will be used as thousands separator
 * @return (String)
 */
Number.prototype.formatMoney = function(c, d, t)
{
    var n = this;
    c = isNaN(c = Math.abs(c)) ? 2 : c;
    d = d == undefined ? "," : d;
    t = t == undefined ? "" : t;
    i = parseInt(n = (+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
    return (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t)
    + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
};

/*Minimize or Maximize the flight information*/
function minimizeMaximizeFlights(imagePath, textMaximize, textMinimize)
{
	var groupFlights = document.getElementById('group-flights');
	var innerGroups = groupFlights.getElementsByTagName('div')
	var linkElement = document.getElementById('minimize-maximize-link');
	var img = linkElement.parentNode.getElementsByTagName('img')[0];
	if(img.src.indexOf("mini")>0)
	{
	    img.src = imagePath + '/maximizar-info.gif';
		linkElement.innerHTML = textMaximize;
	}
	else
	{
		img.src = imagePath + '/minimizar-info.gif';
		linkElement.innerHTML = textMinimize;
	}
	for (i=0; i<innerGroups.length; i++)
	{
		if (innerGroups[i].className=="group-visible")
		{
			innerGroups[i].className="group-hidden";
		}
		else if (innerGroups[i].className=="group-hidden")
		{
			innerGroups[i].className="group-visible";
		}
	}
}

/* Minimize or Maximize the flight fare conditions */
function minimizeMaximizeFareConditions(index, textMaximize, textMinimize)
{
	var conditions = document.getElementById('conditions' + index);
	var linkElement = document.getElementById('minimize-maximize-farerules-link' + index);
	if(conditions.className.indexOf("visible")>0)
	{
	    linkElement.innerHTML = textMaximize;
	    conditions.className="conditions hidden";
	}
	else
	{
		linkElement.innerHTML = textMinimize;
		conditions.className="conditions visible";
	}
}

/*Expand or collapse pannels commanded by checkBox*/
function expandCollapseCheck(idPanel,checkBox)
{
	var panel = document.getElementById(idPanel);
	if(checkBox.checked==true)
	{
		panel.style.display="block";
	}
	else
	{
		panel.style.display="none";
		//se limpian los campos 
		try{
			clearFactura();
		}catch(err){			
		}
		
	}
}
function clearFactura() {

	document.getElementById('ivName').value 	= "";
	document.getElementById('ivAddr').value 	= "";
	document.getElementById('ivCif').value 		= "";
	document.getElementById('ivCtry').value 	= "";
	document.getElementById('ivPost').value 	= "";
	document.getElementById('ivCity').value 	= "";
	document.getElementById('ivStat').value 	= "";
	  
	}
function abrirventana(varHttp, lenX, lenY, bScroll) {
    var winf = open(varHttp, null, "width=" + lenX + ",height=" + lenY + ",status=no,menubar=no,scrollbars=" + bScroll + ",resizable=no");
    winf.focus();
}

function QuitarAcentos(st) {
   st = st.toLowerCase();
//	   st = st.replace(/Ã¡/gi,"a");
//	   st = st.replace(/á/gi,"a");
//	   st = st.replace(/à/gi,"a");
//	   st = st.replace(/â/gi,"a");
//	   st = st.replace(/ä/gi,"a");
//	   st = st.replace(/ª/gi,"a");
//	   
//	   st = st.replace(/é/gi,"e");
//	   st = st.replace(/è/gi,"e");
//	   st = st.replace(/ê/gi,"e");
//	   st = st.replace(/ë/gi,"e");
//	   
//	   st = st.replace(/ì/gi,"i");
//	   st = st.replace(/í/gi,"i");
//	   st = st.replace(/î/gi,"i");
//	   st = st.replace(/ï/gi,"i");
//	   
//	   st = st.replace(/ò/gi,"o");
//	   st = st.replace(/ó/gi,"o");
//	   st = st.replace(/ô/gi,"o");
//	   st = st.replace(/ö/gi,"o");
//	   
//	   st = st.replace(/ú/gi,"u");
//	   st = st.replace(/ù/gi,"u");
//	   st = st.replace(/û/gi,"u");
//	   st = st.replace(/ü/gi,"u");
//	   
//	   st = st.replace(/ç/gi,"c");
//	   st = st.replace(/Ã±/gi,"n");
//	   st = st.replace(/ñ/gi,"n");
   return st;
}

/* Calculate Spanish CIF*/


/* Calculate Spanish DNI Control Letter, input: DNI digits */
function calculateSpanishDNILetter(dniNumber)
{
	/* Apply the Spanish DNI ChackSum */
	var dniControlLetterString = 'TRWAGMYFPDXBNJZSQVHLCKET';
	var position = dniNumber % 23;
	var result = dniControlLetterString.substring(position,position+1);
	return result;
}

/* Validate Spanish DNI, 
dni: formated DNI (8 digit + Upper Case letter) 
type: TR = Tarjeta de Residente
	  DN = DNI
*/
function validateSpanishDNI(dni,type)
{
	var result = true;
	var controlNIE = true;
	if (type == 'TR')
	{
		if (/^[xXyYzZ]/.test(dni))
		{	
			if(dni.substring(0,1)=='X'){
				dni = "0" + dni.substring(1,dni.length);
			}else if(dni.substring(0,1)=='Y'){
				dni = "1" + dni.substring(1,dni.length);
			}else if(dni.substring(0,1)=='Z'){
				dni = "2" + dni.substring(1,dni.length);
			}			
			
		}
		else
		{
			controlNIE = false;
		}
	}

	var dniNumber = dni.substring(0,dni.length - 1);						 
	var dniLetter = dni.substring(dni.length - 1, dni.length);				
	if (/^\d{1,8}$/.test(dniNumber)&& /[a-zA-Z]/.test(dniLetter)&& controlNIE == true)
	{
		var dniCalculatedLetter = calculateSpanishDNILetter(dniNumber);				
		if (dniLetter == dniCalculatedLetter)
		{
			result = true;
		}
		else
		{
			result = false;
		}
	}
	else
	{
		result = false;
	}
	return result;
}

/* Format correctly the DNI ([NIE prefix] + 8 digit + Upper Case letter) */
function formatDNI(rawDNI,type)
{
  	var re = new RegExp('/\/|\ |\-|\./', 'g');
	var formatedDNI = rawDNI.replace(re,'');
	var niePrefix = '';
	var cifPrefix = '';

	/* Remove the NIE prefix in case of TR */
	if (type == 'TR')
	{
		niePrefix = formatedDNI.substring(0,1).toUpperCase();
		formatedDNI = formatedDNI.substring(1,rawDNI.length);
	}

	/* Check if there is a final letter */
	if (!/[a-zA-Z]/.test(formatedDNI.substring(formatedDNI.length-1,formatedDNI.length)))
	{
		formatedDNI = false;
	}
	else if(type != 'CF')
	{
		/* Add leading zeros in order to obtain a 9 digit string */
		if (formatedDNI.length < 9)
		{
			var formatedDNILength = formatedDNI.length;
			
			for (var i=0;i<8-formatedDNILength;i++)
			{	
					formatedDNI = "0" + formatedDNI;
						
			}
		
		}else if(formatedDNI.length < 10)
		{
			formatedDNILength = formatedDNI.length;
			
			for(var j = 0; j<9-formatedDNILength; j++)
			{
				formatedDNI = "0" + formatedDNI;
			}
		}
		/* Put back the NIE Prefix */
		formatedDNI = niePrefix + formatedDNI;
		/* To upper case */
		formatedDNI = formatedDNI.toUpperCase();
	}
	//If the number is a CIF or NIF the last (control) letter is replaced with it's equivalent number based on the following key
	//established by the Agencia Tributaria. A=1,B=2,C=3,D=4,E=5,F=6,G=7,H=8,I=9,J=0
	if(type == 'CF')
	{	
			switch (rawDNI.substr(8,1)){
			case "A": formatedDNI = rawDNI.replace(/[A]$/,1)
				break;
			case "B": formatedDNI = rawDNI.replace(/[B]$/,2)
				break;
			case "C": formatedDNI = rawDNI.replace(/[C]$/,3)
				break;
			case "D": formatedDNI = rawDNI.replace(/[D]$/,4)
				break;
			case "E": formatedDNI = rawDNI.replace(/[E]$/,5)
				break;
			case "F": formatedDNI = rawDNI.replace(/[F]$/,6)
				break;
			case "G": formatedDNI = rawDNI.replace(/[G]$/,7)
				break;
			case "H": formatedDNI = rawDNI.replace(/[H]$/,8)
				break;
			case "I": formatedDNI = rawDNI.replace(/[I]$/,9)
				break;
			case "J": formatedDNI = rawDNI.replace(/[J]$/,0)
				break;			
			}		
	}
	
	return formatedDNI;
}
function isValidCif(abc)
{
	var result = true;
	var par = 0;
	var non = 0;
	var letras = "ABCDEFGHJKLMNPQRSUVW";
	var let = abc.charAt(0);
	var parcial;
	var ultima;
	var control;
	var suma;
	var xxx;
	var nn;
	var ultLetra = new Array("J","A","B","C","D","E","F","G","H","I");
	
	abc = abc.toString();
	abc = abc.toUpperCase();
		
	var removeSymbols = new RegExp('/\/|\ |\-|\./', 'g');
	abc = abc.replace(removeSymbols,'');
	
	var regular = new RegExp('/^[ABCDEFGHJKLMNPQRSUVW]\d{7}[0-9A-J]$/','ig');
	if(!regular.test(abc)){
		result = false;
	}

	 ultima = abc.substr(8,1);
	 

	if (abc.lenth!=9)
	{
		result = false;
	}
 
	if (letras.indexOf(let.toUpperCase())==-1)
	{
		result = false;
	}	
	
	for (var i=2;i<8;i+=2)
	{
		par = par+parseInt(abc.charAt(i));
	}
 
	for (var j=1;j<9;j+=2)
	{
		nn = 2*parseInt(abc.charAt(j));
		if (nn > 9) nn = 1+(nn-10);
		non = non+nn;
	}
 
	parcial = (par + non).toString();
	control = parseInt(parcial.substr(parcial.length-1,1));
	control = (10 - ( parcial % 10));
	if (control==10) control=0;
	 
	if (control!=abc.charAt(8))
	{
		result = false;
	}

	

	if(ultima == control||ultima == ultLetra[control])
	{
		result = true;
		
	}else{
		result = false;
	}
	 
	/*if (unumero!=abc.charAt(8))
	{
		result = false;
	}*/
	
	return result;
}

//The previously formated cif number for validation is
function reformatCIF(cifValidated){

		var reformatedCIF = cifValidated;
			
		switch(cifValidated.substr(8,1)){						
			case "1": reformatedCIF=cifValidated.replace(/[1]$/,"A")
				break;
			case "2": reformatedCIF=cifValidated.replace(/[2]$/,"B")
				break;
			case "3": reformatedCIF=cifValidated.replace(/[3]$/,"C")
				break; 
			case "4": reformatedCIF=cifValidated.replace(/[4]$/,"D")
				break;
			case "5": reformatedCIF=cifValidated.replace(/[5]$/,"E")
				break;
			case "6": reformatedCIF=cifValidated.replace(/[6]$/,"F")
				break;
			case "7": reformatedCIF=cifValidated.replace(/[7]$/,"G")
				break;
			case "8": reformatedCIF=cifValidated.replace(/[8]$/,"H")
				break;
			case "9": reformatedCIF=cifValidated.replace(/[9]$/,"I")
				break;
			case "0": reformatedCIF=cifValidated.replace(/[0]$/,"J")
				break;
		
		}

		 
		return reformatedCIF;
	
}

/* Escapa los caracteres especiales del texto para visualizar correctamente las entidades html*/
function repairString(str) {
   var temp_div = document.createElement('div');
   temp_div.innerHTML = str;
   return temp_div.firstChild.nodeValue;
}