var AVAILABILITY_SELECTED = "";
var AVAILABILITIES = "";
var LANG_ID = 1;
var DICO = new Array();

//var BASE_URL = "/msurrel/workspace/www.chalets-tignes.com/";
var BASE_URL = "/";
function launchFormCreation(id, lang_id)
{
	LANG_ID = lang_id;
	jQuery.post(
		BASE_URL+"lang/DICO.php?jsonencode",
		null,
		function(data){
			DICO = data;

			// launch the calendar population
			jQuery.post(
				BASE_URL+"administration/modules/availability/"+JSON.datepicker.dataFile.replace("appartement_id", "appartement_id="+id),
				null,
				function(data){
					initCalendar(data);
				}
				,"json"
			);

		}
		,"json"
	);
}

function initCalendar(data)
{
	AVAILABILITIES = data;

	jQuery("#calendar").append(JSON.datepicker.html);

	var currentDate = Calendar.dateToInt(new Date());
	if (data != undefined && data.availability_date_begin != undefined)
		currentDate = data.availability_date_begin;

	var ignoreEvent = false;

	var cal = Calendar.setup({
             date			: currentDate,
             bottomBar 		: false,
             cont          	: JSON.datepicker.idPicker,
             fdow          	: 1,
             dateInfo : function(date, wantsClassName)
             {

             	if (data == undefined)
             		return;

             	var as_number = Calendar.dateToInt(date);

             	var current_date = new Date();
             	if(as_number < Calendar.dateToInt(current_date))
              		return;

				var previous_date = "";
				for(var i=0;i<data.length;i++)
              	{
              		if (as_number >= data[i]["date_begin"] && as_number <= data[i]["date_end"])
              		{
					    // disable if the week is the current week
					    if(Calendar.dateToInt(current_date) >= data[i]["date_begin"] && Calendar.dateToInt(current_date) <= data[i]["date_end"])
              				return;

					    var classReserved = "free";
					    if(data[i]["availability_is_available"] == 0)
					    	classReserved = "res";

					    if(data[(i+1)] && as_number == data[i]["date_end"] && as_number == data[(i+1)]["date_begin"] && data[(i+1)]["availability_is_available"] == 1)
					    	classReserved += "-free";
					    else if(data[(i+1)] && as_number == data[i]["date_end"] && as_number == data[(i+1)]["date_begin"] && data[(i+1)]["availability_is_available"] == 0)
					    	classReserved += "-res";
					    else if(as_number == data[i]["date_begin"])
					    	classReserved += "-first";
					    else if(as_number == data[i]["date_end"])
					    	classReserved += "-last";

					    return {
					      klass   : "DynarchCalendar-day-"+classReserved+" DynarchCalendar-weekend DynarchCalendar-day "
					    };
					}
              	}
             },
             disabled : function(date) {

             	if (data == undefined)
	              	return true;

             	var as_number = Calendar.dateToInt(date);

              	// if date is smallest than today
              	var current_date = new Date
              	if(as_number < Calendar.dateToInt(current_date))
              		return true;

              	for(var i=0;i<data.length;i++)
              		if (as_number >= data[i]["date_begin"] && as_number < data[i]["date_end"] && data[i]["availability_is_available"] == 1)
                        return false;
                return true;

             },

             onSelect : function(cal)
             {
					var selectionObject = cal.selection;
					var date_selected = Calendar.intToDate(selectionObject.get());
					if(date_selected.getDay() != 6){
                    	//if saturday not selected
                    	nb_day_needed = 7-(6-date_selected.getDay());
                    	date_selected.setDate(date_selected.getDate()-nb_day_needed);
                    }

                    if (ignoreEvent)
                            return;

                   	ignoreEvent = true;
                   	var date_begin = new Date();
					date_begin.setYear(date_selected.getFullYear());
					date_begin.setMonth(date_selected.getMonth());
					date_begin.setMonth(date_selected.getMonth());// double cause js bug ?!?
					date_begin.setDate(date_selected.getDate());

					var date_end = new Date();
					date_end.setYear(date_selected.getFullYear());
					date_end.setMonth(date_selected.getMonth());
					date_end.setMonth(date_selected.getMonth()); // double cause js bug ?!?
					date_end.setDate(date_selected.getDate()+7);

					if(date_begin <  date_end)
					{
						var date_begin_printed = Calendar.dateToInt(date_begin).toString();

						var date_end_printed = Calendar.dateToInt(date_end).toString();

						jQuery("#"+JSON.datepicker.from).val(date_begin_printed.substr(6,2)+"-"+date_begin_printed.substr(4,2)+"-"+date_begin_printed.substr(0,4));
						jQuery("#"+JSON.datepicker.to).val(date_end_printed.substr(6,2)+"-"+date_end_printed.substr(4,2)+"-"+date_end_printed.substr(0,4));

						// has to doubled cause jscal bug
						selectionObject.selectRange(date_begin, date_end);
						selectionObject.selectRange(date_begin, date_end);

						jQuery("#is_packaged").css("display","none");
						jQuery("#container_price").css("display","none");
						for(var i=0;i<AVAILABILITIES.length;i++)
              			{
              				if(AVAILABILITIES[i]["date_begin"] == Calendar.dateToInt(date_begin).toString() && AVAILABILITIES[i]["date_begin"] && Calendar.dateToInt(date_end).toString())
              				{
              					jQuery.post(
									BASE_URL+"administration/modules/availability/"+JSON.files.getFilePath,
									eval("({module:'"+JSON.module+"', "+JSON.elementId+" : "+AVAILABILITIES[i]["availability_id"]+"})"),
									function(data){
										if(data.response)
											view_packaged_form(data);
									}
									,"json"
								);
              				}
              			}
              			ignoreEvent = false;
					}
             }
     	});
}

function view_packaged_form(data)
{
	AVAILABILITY_SELECTED = data;

	// Set the price
	setPrice();

	jQuery("#nb_packaged_adults").val("");
	jQuery("#container_adult_persons_infos div").remove();

	jQuery("#nb_packaged_children").val("");
	jQuery("#container_children_persons_infos div").remove();

	// Set if packaged offer
	if(AVAILABILITY_SELECTED.availability_is_package == 1)
	{
		jQuery("#is_packaged").css("display","block");
		jQuery("#nb_packaged_adults").keyup(adultInputChangeHandler);
		jQuery("#nb_packaged_children").keyup(childInputChangeHandler);
	}
}

function adultInputChangeHandler()
{
	jQuery("#container_adult_persons_infos div").remove();
	var nb = parseInt(jQuery("#nb_packaged_adults").val());
	if(nb > 0 && nb <10)
	{
		var cal = Calendar.setup({
          onSelect: function(cal) { cal.hide() }
      	});

		// Set the persons infos
		for(var i=0;i<nb;i++)
		{
			jQuery("#container_adult_persons_infos").append(''+
			'<div>'+
			'	<label for="pers_adult_name_'+i+'">'+DICO[LANG_ID]["name"]+'</label><input type="text" name="pers_adult_name_'+i+'" id="pers_adult_name_'+i+'" value="">*'+
			'	| <label for="pers_adult_firstname_'+i+'">'+DICO[LANG_ID]["firstname"]+'</label><input type="text" name="pers_adult_firstname_'+i+'" id="pers_adult_firstname_'+i+'" value="">*'+
			'	| <label for="pers_adult_dateofbirth_'+i+'">'+DICO[LANG_ID]["dateofbirth"]+'</label><input type="text" readonly name="pers_adult_dateofbirth_'+i+'" id="pers_adult_dateofbirth_'+i+'" value="">*'+
			'</div>'+
			'');

			cal.manageFields('pers_adult_dateofbirth_'+i, 'pers_adult_dateofbirth_'+i, "%d-%m-%Y");
		}

	}
	setPrice();

}

function childInputChangeHandler()
{
	jQuery("#container_children_persons_infos div").remove();
	var nb = parseInt(jQuery("#nb_packaged_children").val());
	if(nb > 0 && nb <10)
	{
		var cal = Calendar.setup({
          onSelect: function(cal) { cal.hide() }
      	});

		// Set the persons infos
		for(var i=0;i<nb;i++)
		{
			jQuery("#container_children_persons_infos").append(''+
			'<div>'+
			'	<label for="pers_child_name_'+i+'">'+DICO[LANG_ID]["name"]+'</label><input type="text" name="pers_child_name_'+i+'" id="pers_child_name_'+i+'" value="">*'+
			'	| <label for="pers_child_firstname_'+i+'">'+DICO[LANG_ID]["firstname"]+'</label><input type="text" name="pers_child_firstname_'+i+'" id="pers_child_firstname_'+i+'" value="">*'+
			'	| <label for="pers_child_dateofbirth_'+i+'">'+DICO[LANG_ID]["dateofbirth"]+'</label><input type="text" readonly name="pers_child_dateofbirth_'+i+'" id="pers_child_dateofbirth_'+i+'" value="">*'+
			'</div>'+
			'');
			cal.manageFields('pers_child_dateofbirth_'+i, 'pers_child_dateofbirth_'+i, "%d-%m-%Y");
		}

	}
	setPrice();
}

function setPrice()
{
	jQuery("#container_price").css("display","block");
	var TxtToshow = ""; // texte affichÃ© en front
	var TxtInBrutDiv = ""; // Texte dans la seconde div
	var nb_adults = 0; // nbr d'adultes
	var nb_children = 0; // nbr d'enfants
	var price_total = parseInt( AVAILABILITY_SELECTED.availability_price ); // prix brut sans réduc

	/***************************/
	/** REDUCTION APPARTEMENT **/
	/***************************/

	if(AVAILABILITY_SELECTED.availability_is_promotion == 1 || AVAILABILITY_SELECTED.availability_is_package == 1)
	{
		// Calcul du nbr d'adulte et d'enfants
		if(jQuery("#nb_packaged_adults").val() != 0)
		{
			nb_adults = parseInt(jQuery("#nb_packaged_adults").val());
			if(nb_adults > 9) nb_adults = 0;
		}
		else
		{
			nb_adults = 0;
		}
		// si plus de 9 enfants, on rÃ©initialise
		if(jQuery("#nb_packaged_children").val() != 0)
		{
			nb_children = parseInt(jQuery("#nb_packaged_children").val());
			if(nb_children > 9)	nb_children = 0;
		}
		else
		{
			nb_children = 0;
		}
		
		
		
		jQuery("div#price, div.brut_price").show();
		
		TxtToshow += "" + AVAILABILITY_SELECTED.availability_name[LANG_ID] + "";
		
		
		// Calcul du prix total
		price_total_without_reduc = price_total + parseInt(AVAILABILITY_SELECTED.availability_ticket_adult_price * nb_adults) + parseInt(AVAILABILITY_SELECTED.availability_ticket_child_price * nb_children);
			
		TxtInBrutDiv += '<p class="price_total">';
		// si il y a une r�duxtion sur l'appart, on affiche le prix barr�
		TxtInBrutDiv += '<span style="text-decoration:line-through">'+price_total_without_reduc+' &euro; </span>';

		TxtInBrutDiv += '</p>';
		
		
		/**************************/
		// Calcul du prix Avantage :
		/***************************/
		priceWithAd = parseInt(AVAILABILITY_SELECTED.availability_price_reduction) + parseInt(AVAILABILITY_SELECTED.availability_ticket_adult_price_reduction * nb_adults) + parseInt(AVAILABILITY_SELECTED.availability_ticket_child_price_reduction * nb_children);
		
		
		// 'Votre avantage client :'
		TxtInBrutDiv += '<br /><b>'+DICO[LANG_ID]["advantage_client"]+ '</b><br /><span class="price_advantage">'+ priceWithAd + '&euro;</span>';

		price_total -= parseInt(AVAILABILITY_SELECTED.availability_price_reduction);
	}
	else
	{
		jQuery("div#price").hide();
	}

	/*******************************/
	/** REDUCTION SUR LES FORFAITS */
	/*******************************/
	if(AVAILABILITY_SELECTED.availability_is_package == 1)
	{
		// si plus de 9 adultes, on rÃ©initialise
		if(jQuery("#nb_packaged_adults").val() != 0)
		{
			nb_adults = parseInt(jQuery("#nb_packaged_adults").val());
			if(nb_adults > 9) nb_adults = 0;
		}
		else
		{
			nb_adults = 0;
		}
		// si plus de 9 enfants, on rÃ©initialise
		if(jQuery("#nb_packaged_children").val() != 0)
		{
			nb_children = parseInt(jQuery("#nb_packaged_children").val());
			if(nb_children > 9)	nb_children = 0;
		}
		else
		{
			nb_children = 0;
		}

		if(nb_adults != null || nb_adults != 0) {
			price_total += parseInt(AVAILABILITY_SELECTED.availability_ticket_adult_price * nb_adults);
			price_total -= parseInt(AVAILABILITY_SELECTED.availability_ticket_adult_price_reduction * nb_adults);
		}
		if(nb_children != null || nb_children != 0) {
			price_total += parseInt(AVAILABILITY_SELECTED.availability_ticket_child_price * nb_children);
			price_total -= parseInt(AVAILABILITY_SELECTED.availability_ticket_child_price_reduction * nb_children);
		}
		var nb_personn_total = parseInt(nb_adults)  + parseInt(nb_children);
		if(nb_personn_total != 0) {
			TxtPrice = DICO[LANG_ID]["price_per_person"]+' <b>'+Math.round((price_total/nb_personn_total)*100)/100+' &euro;</b><br />';
			TxtPrice += '<span class="petit">('+DICO[LANG_ID]["total_price"]+' <b>'+price_total+' &euro;</b>)</span>';
		}
		else
		{
			TxtPrice = '<b>'+DICO[LANG_ID]["total_price"]+' '+price_total+' &euro;</b>';
		}
	}
	else
	{
		TxtPrice = '<b>'+DICO[LANG_ID]["total_price"]+' '+price_total+' &euro;</b>';
	}

	
	if(TxtInBrutDiv != "")	jQuery("div.brut_price").html(TxtInBrutDiv);
	else jQuery("div.brut_price").hide();
	
	
	jQuery("span.content_dyn_price").html(TxtPrice);
	jQuery("#price_calculated").val(price_total);
	
	
	
	
	// Affiche le titre de la promotion !
	if(TxtToshow != "")
		jQuery("#price").html(TxtToshow);
	else 	
		jQuery("#price").hide();
}

function checkForm()
{
	var error = false;

	var fields = new Array(
	"name",
	"firstname",
	"address",
	"zip",
	"town",
	"country",
	"phone",
	"mail",
	"availability_date_begin",
	"availability_date_end"
	);

	// check main fields
	for(var i = 0; i<fields.length; i++)
	{
		jQuery("#"+fields[i]).css("border","none");
		if(jQuery("#"+fields[i]).val() == "")
		{
			jQuery("#"+fields[i]).css("border","1px solid #F00");
			error = true;
		}
	}


	// Check mail
	if(!isValidEmailAddress(jQuery("#mail").val()))
		jQuery("#mail").css("border","1px solid #F00");

	var dynContent = new Array();

	// Check adults ticket informations
	if(jQuery("nb_packaged_adults").val() != "")
	{
		dynContent[0] = new Array(
			"pers_adult_name_",
			"pers_adult_firstname_",
			"pers_adult_dateofbirth_"
		);
		var nb = parseInt(jQuery("#nb_packaged_adults").val());
		if(nb > 0 && nb <10)
		{
			for(var i=0;i<nb;i++)
			{
				for(var j = 0; j<dynContent[0].length;j++)
				{
					jQuery("#"+dynContent[0][j]+i).css("border","none");
					if(jQuery("#"+dynContent[0][j]+i).val() == "")
					{
						jQuery("#"+dynContent[0][j]+i).css("border","1px solid #F00");
						error = true;
					}
				}
			}
		}
	}

	// Check children ticket informations
	if(jQuery("nb_packaged_children").val() != "")
	{
		dynContent[1] = new Array(
			"pers_child_name_",
			"pers_child_firstname_",
			"pers_child_dateofbirth_"
		);
		var nb = parseInt(jQuery("#nb_packaged_children").val());
		if(nb > 0 && nb <10)
		{
			for(var i=0;i<nb;i++)
			{
				for(var j = 0; j<dynContent[1].length;j++)
				{
					jQuery("#"+dynContent[1][j]+i).css("border","none");
					if(jQuery("#"+dynContent[1][j]+i).val() == "")
					{
						jQuery("#"+dynContent[1][j]+i).css("border","1px solid #F00");
						error = true;
					}
				}
			}
		}
	}
	if(!error)
		jQuery("#resa_form").submit();
}

function isValidEmailAddress(emailAddress) {
	var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
	return pattern.test(emailAddress);
}
