var month_days = new Array(31,28,31,30,31,30,31,31,30,31,30,31);


/**
 * Returns the sum of the days to the passed month (included)
 */
function publicMonthsSumDays( month ) {

	var sum	= 0;
	for (var n=0;n<month;n++) {
		sum += month_days[n];
	}
	return sum;
}


/**
 * Returns the complete passed months for a number of days
 */
function publicMonthsPassed( value ) {

	var month_count	= 0;
	var n			= 0;
	while (value>=month_days[n] && n<12) {
		value -= month_days[n];
		month_count++;
		n++;
	}
	return month_count;
}


/**
 * Returns year day number of a passed date (dd/mm)
 */
function publicDate2Number( date ) {

	var day		= parseInt(date.charAt(0) + date.charAt(1), 10);
	var month	= parseInt(date.charAt(3) + date.charAt(4), 10);

	return publicMonthsSumDays(month-1)+day;
}


/**
 * Returns the day and month string (dd/mm) for a passed numeric year day
 */
function publicNumber2Date( value ) {

	var month	= publicMonthsPassed(value);
	var day		= value - publicMonthsSumDays(month);

	if (day==0)
		day	= month_days[month-1];
	else
		month++;

	return (day<10 ? '0'+day : day) + '/' + (month<10 ? '0'+month : month);
}


/**
 *	Returns true if passed char is a natural digit
 */
function isNatural( value ) {

	if ( parseInt(value, 10)>=0 && parseInt(value, 10)<=9 )
		return true;
	else
		return false;
}


/**
 *	Returns true if passed string is an integer
 */
function isInteger( value ) {

	for (var n=0;n<value.length;n++) {
		if (!isNatural(value.charAt(n)))
			return false;
	}
	return true;
}


/**
 *	Checks for the correct format of a passed email
 */
function checkEmail( email ) {

	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email))
		return true;
	else
		return false;
}


/**
 *	Checks for the correct format of a passed date (dd/mm/yyyy)
 */
function checkDate( date ) {

	if (date=='')
		return false;
	if (date.length!=10)
		return false;

	var day		= parseInt(date.charAt(0) + date.charAt(1), 10);
	var month	= parseInt(date.charAt(3) + date.charAt(4), 10);

	if (day<1 || day>31)
		return false;

	if (month<1 || month>12)
		return false;

	if (day>month_days[month-1])
		return false;

	if (isNatural(date.charAt(0)) && isNatural(date.charAt(1)) && date.charAt(2)=='/' && isNatural(date.charAt(3)) && isNatural(date.charAt(4)) && date.charAt(5)=='/' && isNatural(date.charAt(6)) && isNatural(date.charAt(7)) && isNatural(date.charAt(8)) && isNatural(date.charAt(9)))
		return true;
}


/**
 *	Checks for the real data of the passed NIF
 */
function checkNIF( nif ) {

	var carstring	= "TRWAGMYFPDXBNJZSQVHLCKET";

	var dni			= nif.substring(0, nif.length-1);
	var car			= nif.charAt(nif.length-1);

	var position	= dni % 23;
	var pos_car		= carstring.substring(position, position+1);

	if (pos_car!=car.toUpperCase())
		return false;
	else
		return true;
}


/**
 *	This creates the hidden container for the preloaded images
 */
function preLoadImages() {

	var images_div					= document.createElement('div');
		images_div.style.display	= 'none';
		document.body.appendChild( images_div );

	for (var n=0;n<pre_load_images.length;n++) {
		var aux_image				= document.createElement('img');
			aux_image.src			= pre_load_images[n].path;
			images_div.appendChild( aux_image );
	}
}


/**
 *
 */
function usersUserFormSubmit() {

	var action		= document.getElementById('action');
	var id_user		= document.getElementById('id_user');

	var email		= document.getElementById('user_email');
	var password	= document.getElementById('user_passwd');
	var repasswd	= document.getElementById('user_repasswd');
	var nif			= document.getElementById('user_nif');
	var name		= document.getElementById('user_name');
	var surname		= document.getElementById('user_surname');
	var born_date	= document.getElementById('user_born_date');
	var address		= document.getElementById('user_address');
	var cp			= document.getElementById('user_cp');
	var city		= document.getElementById('user_city');
	var country		= document.getElementById('user_country');
	var phone		= document.getElementById('user_phone');

	if (email.value=='') {
		alert(document.getElementById('users_email_field_language').innerHTML);
		email.focus();
		return false;
	}
	if (!checkEmail(email.value)) {
		alert(document.getElementById('users_email_incorrect_language').innerHTML);
		email.focus();
		return false;
	}
	if (action.value=='save_new_user' && (password.value=='' || repasswd.value=='')) {
		alert(document.getElementById('users_passwd_fields_language').innerHTML);
		password.focus();
		return false;
	}
	else {
		if (password.value!=repasswd.value) {
			alert(document.getElementById('users_different_pass_language').innerHTML);
			password.focus();
			return false;
		}
	}
	if (nif.value=='') {
		alert(document.getElementById('users_nif_field_language').innerHTML);
		nif.focus();
		return false;
	}
	if (name.value=='') {
		alert(document.getElementById('users_name_field_language').innerHTML);
		name.focus();
		return false;
	}
	if (surname.value=='') {
		alert(document.getElementById('users_surname_field_language').innerHTML);
		surname.focus();
		return false;
	}
	if (born_date.value!='' && !checkDate(born_date.value)) {
		alert(document.getElementById('users_born_date_language').innerHTML);
		born_date.focus();
		return false;
	}
	if (address.value=='') {
		alert(document.getElementById('users_address_field_language').innerHTML);
		address.focus();
		return false;
	}
	if (cp.value=='') {
		alert(document.getElementById('users_cp_field_language').innerHTML);
		cp.focus();
		return false;
	}
	if (city.value=='') {
		alert(document.getElementById('users_city_field_language').innerHTML);
		city.focus();
		return false;
	}
	if (country.value=='') {
		alert(document.getElementById('users_country_field_language').innerHTML);
		country.focus();
		return false;
	}
	if (phone.value=='') {
		alert(document.getElementById('users_phone_field_language').innerHTML);
		phone.focus();
		return false;
	}

	if (action.value=='save_new_user')
		new c_Ajax().sendSimpleRequest( 'index.php?action=check_new_user_mail&mail='+email.value, 'GET', '', onUsersUserFormSubmit, global_loading_box );
	else
		new c_Ajax().sendSimpleRequest( 'index.php?action=check_edit_user_mail&id_user='+id_user.value+'&mail='+email.value, 'GET', '', onUsersUserFormSubmit, global_loading_box );

	return false;
}


/**
 *
 */
function onUsersUserFormSubmit( response ) {

	if (response=='OK')
		document.getElementById('user_edit_form').submit();
	else
		alert(document.getElementById('users_user_email_exists_language').innerHTML);
}


/**
 *
 */
function usersLoginSubmit() {

	var email			= document.getElementById('user_email');
	var password		= document.getElementById('user_password');

	if (email.value=='') {
		alert(document.getElementById('users_email_field_language').innerHTML);
		email.focus();
		return false;
	}
	if (!checkEmail(email.value)) {
		alert(document.getElementById('users_email_incorrect_language').innerHTML);
		email.focus();
		return false;
	}
	if (password.value=='') {
		alert(document.getElementById('users_passwd_field_language').innerHTML);
		password.focus();
		return false;
	}

	return true;
}


/**
 *
 */
function usersRememberPasswdSubmit() {

	var email		= document.getElementById('users_remember_pass_mail');

	if (email.value=='') {
		alert(document.getElementById('users_email_field_language').innerHTML);
		email.focus();
		return false;
	}
	if (!checkEmail(email.value)) {
		alert(document.getElementById('users_email_incorrect_language').innerHTML);
		email.focus();
		return false;
	}
	return true;
}


/**
 *
 */
function supportQueriesFormSubmit() {

	var email		= document.getElementById('queries_email');

	if (email.value=='') {
		alert(document.getElementById('users_email_field_language').innerHTML);
		email.focus();
		return false;
	}
	if (!checkEmail(email.value)) {
		alert(document.getElementById('users_email_incorrect_language').innerHTML);
		email.focus();
		return false;
	}

	return true;
}


/**
 *
 */
function guestbookAddImage() {

	var title	= document.getElementById('guestbook_add_image_title');
	var comment	= document.getElementById('guestbook_add_image_comment');

	if (title.value=='') {
		alert(document.getElementById('guestbook_add_title_field_language').innerHTML);
		title.focus();
		return false;
	}
	if (comment.value=='') {
		alert(document.getElementById('guestbook_add_comment_field_language').innerHTML);
		comment.focus();
		return false;
	}
	return true;
}


/**
 *
 */
function reservationCheckForm() {

	var start_date	= document.getElementById('reservations_start_date');
	var end_date	= document.getElementById('reservations_end_date');

	//Check date format and month-days values
	if (start_date.value=='' || !checkDate(start_date.value)) {
		alert(document.getElementById('reservations_incorrect_date_language').innerHTML);
		start_date.focus();
		return false;
	}

	if (end_date.value=='' || !checkDate(end_date.value)) {
		alert(document.getElementById('reservations_incorrect_date_language').innerHTML);
		end_date.focus();
		return false;
	}

	//creates the dd/mm format dates
	var start_date_formatted	= start_date.value.charAt(0)+start_date.value.charAt(1)+'/'+start_date.value.charAt(3)+start_date.value.charAt(4);
	var start_date_year			= parseInt(start_date.value.charAt(6)+start_date.value.charAt(7)+start_date.value.charAt(8)+start_date.value.charAt(9), 10);
	var end_date_formatted		= end_date.value.charAt(0)+end_date.value.charAt(1)+'/'+end_date.value.charAt(3)+end_date.value.charAt(4);
	var end_date_year			= parseInt(end_date.value.charAt(6)+end_date.value.charAt(7)+end_date.value.charAt(8)+end_date.value.charAt(9), 10);

	//converts dd/mm format date to numeric date
	var numeric_start_date		= publicDate2Number(start_date_formatted);
	var numeric_end_date		= publicDate2Number(end_date_formatted);

	//checks that numeric_start_date < numeric_end_date
	if (start_date_year>end_date_year || (start_date_year==end_date_year && numeric_start_date>numeric_end_date)) {
		alert(document.getElementById('reservations_start_bigger_end_language').innerHTML);
		return false;
	}

	var inputs		= document.getElementsByTagName('input');

	for (var n=0;n<inputs.length;n++) {
		if (inputs[n].id && inputs[n].id.indexOf('reservations_quantity_')!=-1) {
			if (inputs[n].value=='' || !isInteger(inputs[n].value)) {
				alert(document.getElementById('reservations_incorrect_quantity_language').innerHTML);
				inputs[n].focus();
				return false;
			}
		}
	}

	return true;
}