var CATALAN=1;
var ENGLISH=3;
var SPANISH=2;
var FRENCH=4;

var dies_spanish= new Array("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo");
var dies_english = new Array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
var dies_french = new Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche");
var dies_catalan = new Array("Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte", "Diumenge");


function MakeArray(n) {
   this.length = n;

   for (var i = 1; i <=n; i++) {
     this[i] = 0;
   }
}





//Initialize Days of Week Array


days = new MakeArray(7);

days[0] = 6;//"Sábado"
days[1] = 7;//"Domingo"
days[2] = 1;//"Lunes"
days[3] = 2;//"Martes"
days[4] = 3;//"Miércoles"
days[5] = 4;//"Jueves"
days[6] = 5;//"Viernes"

//Initialize Months Array

months = new MakeArray(12);
months[1] = "Enero" ;
months[2] = "Febrero"; 
months[3] = "Marzo" ;
months[4] = "Abril" ;
months[5] = "Mayo" ;
months[6] = "Junio" ;
months[7] = "Julio" ;
months[8] = "Agosto";
months[9] = "Septiembre" ;
months[10] = "Octubre";
months[11] = "Noviembre";
months[12] = "Diciembre";

//Day of Week Function

function GetTextDayOfWeekNotIn (dia_setmana, idioma) {
	// dia_setmana es un entero. Funciona por pesos.
	// Lunes peso 1
	// Martes peso 2
	// Miércoles peso 4
	// Jueves peso 8
	// Viernes peso 16
	// Sábado peso 32
	// Domingo peso 64
	// Devuelve los días de la semana NO SELECCIONADOS en el idioma especificado, separados por comas y espacio.
	
	var mask=1;
	var str="";
	var i;

	for (i=0;i<7;i++) {
		if (!(dia_setmana & (mask<<i))) {
			if (idioma==SPANISH) { str = str + dies_spanish[i] + ", "; }
			if (idioma==ENGLISH) { str = str + dies_english[i] + ", "; }
			if (idioma==FRENCH)  { str = str + dies_french[i] + ", "; }
			if (idioma==CATALAN) { str = str + dies_catalan[i] + ", "; }
		}
	}
	if (str.length>0) return str.substr(0,str.length-2);
	return str;
}
			
			



function compute(dia,mes,ano) {


   var val1 = parseInt(dia, 10);


   if ((val1 < 0) || (val1 > 31)) {
      alert("Day is out of range");
   }


   var val2 = parseInt(mes, 10);


   if ((val2 < 0) || (val2 > 12)) {
      alert("Month is out of range");
   }  


   var val2x = parseInt(mes, 10);
   var val3 = parseInt(ano, 10);

   if (val3 < 1900) {
	alert("You're that old!");
   }

   if (val2 == 1) {
	val2x = 13;
	val3 = val3-1;
   }

   if (val2 == 2) {
      val2x = 14;
      val3 = val3-1;
   }


   var val4 = parseInt(((val2x+1)*3)/5, 10);
   var val5 = parseInt(val3/4, 10);
   var val6 = parseInt(val3/100, 10);
   var val7 = parseInt(val3/400, 10);
   var val8 = val1+(val2x*2)+val4+val3+val5-val6+val7+2;
   var val9 = parseInt(val8/7, 10);
   var val0 = val8-(val9*7);


   
   return (days[val0]);

}   


function existeixData(any,mes,dia) {
	if ((mes==2 || mes==4 || mes==6 || mes==9 || mes==11) && dia==31) return 0;
	if (mes==2 && dia==30) return 0;
	if (mes==2 && dia==29 && (any%4)!=0) return 0;
	return 1;
}

function dataPosteriorA(dia_ref, mes_ref, any_ref,dia,mes,any,delay_dies) {
// Quan entrem aquí, ja sabem que existeix la data.
	if (parseInt(any_ref) > parseInt(any)) return 0;
	if (any_ref == any && parseInt(mes_ref) > parseInt(mes)) return 0;
	if (any_ref == any && mes_ref == mes && parseInt(dia_ref) + parseInt(delay_dies) > parseInt(dia)) return 0;
	if ((any_ref == any && parseInt(mes_ref) + 1 == parseInt(mes)) || (parseInt(any_ref) + 1 == parseInt(any) && mes_ref==12 && mes==1)) {
		//Hem seleccionat un mes més del que estem dintre del mateix any
		//o bé, hem triat el mes de gener de l'any següent quan estem a desembre
		//És el mateix cas... He de mirar que hi hagi els delay_dies de diferència.
		if (mes_ref==1 || mes_ref==3 || mes_ref==5 || mes_ref==7 || mes_ref==8 || mes_ref==10 || mes_ref==12) {
			// Mesos de 31 dies
			if (31 - parseInt(dia_ref) + parseInt(dia) < parseInt(delay_dies)) return 0;
			return 1;
		}
		else {
			if (parseInt(mes_ref)==2) {
				if (parseInt(any) % 4 == 0) {
					//mes de 29 dies
					if (29 - parseInt(dia_ref) + parseInt(dia) < parseInt(delay_dies)) return 0;
					return 1;
				}
				else  {
					//mes de 28 dies
					if (28 - parseInt(dia_ref) + parseInt(dia) < parseInt(delay_dies)) return 0;
					return 1;
				}
			}
			// mes de 30 dies.
			if (30 - parseInt(dia_ref) + parseInt(dia) < parseInt(delay_dies)) return 0;
			return 1;
		}
	}
	return 1;
}	
	

