
var httpObj;

// Effectue une requete GET et retourne le XML sous forme d'un Array()
function getXml(urlPath, fnctName, createNewHttpObj, method, postData)
{
	if(method == null)
		method = "GET";

	if(httpObj == null || createNewHttpObj != null)
		httpObj = createHttpObject();
	else
	{
		httpObj.abort();
		httpObj.onreadystatechange = function() { };
	}

	httpObj.open(method, urlPath, true);
	httpObj.onreadystatechange = function()
		{
			if (httpObj.readyState == 4)
			{
				if (httpObj.status == 200)
				{
					var xml = httpObj.responseXML;
					if(xml != null)
					{
						var xmlArray = parseXml(xml);
						eval(fnctName + "(xmlArray)");
					}
				}
				else
				{
					//alert('Error : getXml failed !\r\nReason : ' + httpObj.statusText);
				}   
			}
		}

	if(method == "GET") { httpObj.send(null); }
	else
	{
		httpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
		httpObj.send(postData);
	}
}

// Creation de l'objet httpObj
function createHttpObject()
{
	httpObj = null;

	if (typeof XMLHttpRequest != 'undefined')
	{
		try
		{
			// Native XML support (Firefox, etc...)
			httpObj = new XMLHttpRequest();
		}
		catch (e1) {}
	}
	else
	{
		try
		{
			// Internet Explorer support (new library)
			httpObj = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e2)
		{
			try
			{
				// Internet Explorer support (old library)
				httpObj = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e3) {}
		}
	}

	return httpObj;
}


// Transforme le xml en un Array()
function parseXml(xml)
{
	var xmlContent = Array();
	var node = xml.documentElement;
	
	xmlContent[0] = Array();
	xmlContent[0]["nodeName"] = node.nodeName;
	xmlContent[0]["nodeValue"] = nodeToArray(node);
	if(node.getAttributeNode("item") != null) { xmlContent[0]["nodeItem"] = node.getAttributeNode("item").value; }
	else { xmlContent[0]["nodeItem"] = null; }

	return xmlContent;
}

function nodeToArray(node)
{
	if(node.childNodes.length == 1 && (node.childNodes[0].nodeType == 3 || node.childNodes[0].nodeType == 4))
	{
		return node.childNodes[0].nodeValue;
	}

	var xmlContent = Array();
	for (var i = 0; i < node.childNodes.length; i++)
	{
		xmlContent[i] = Array();
		xmlContent[i]["nodeName"] = node.childNodes[i].nodeName;
		xmlContent[i]["nodeValue"] = nodeToArray(node.childNodes[i]);
		if(node.childNodes[i].getAttributeNode("item") != null) { xmlContent[i]["nodeItem"] = node.childNodes[i].getAttributeNode("item").value; }
		else { xmlContent[i]["nodeItem"] = null; }
	}

	return xmlContent;
}

// Transforme le Array xml en un Array associatif
function arrayToAssoc(mytab)
{
	var assoc = Array();
	var tmp = "";
	var card = 0;

	for(var i = 0; i < mytab.length; i++)
	{
		if( assoc[mytab[i]["nodeName"]] != null && !(assoc[mytab[i]["nodeName"]] instanceof Array))
		{
			tmp = assoc[mytab[i]["nodeName"]];
			assoc[mytab[i]["nodeName"]] = Array();
			assoc[mytab[i]["nodeName"]][0] = tmp;
		}

		if(mytab[i]["nodeItem"] != null)
		{
			card = mytab[i]["nodeItem"];
			if(assoc[mytab[i]["nodeName"]] == null) { assoc[mytab[i]["nodeName"]] = Array(); }
			if(mytab[i]["nodeValue"] instanceof Array) assoc[mytab[i]["nodeName"]][card] = arrayToAssoc(mytab[i]["nodeValue"]);
			else assoc[mytab[i]["nodeName"]][card] = mytab[i]["nodeValue"];
		}
		else if(assoc[mytab[i]["nodeName"]] instanceof Array)
		{
			card = assoc[mytab[i]["nodeName"]].length;
			if(mytab[i]["nodeValue"] instanceof Array) assoc[mytab[i]["nodeName"]][card] = arrayToAssoc(mytab[i]["nodeValue"]);
			else assoc[mytab[i]["nodeName"]][card] = mytab[i]["nodeValue"];
		}
		else
		{
			if(mytab[i]["nodeValue"] instanceof Array) assoc[mytab[i]["nodeName"]] = arrayToAssoc(mytab[i]["nodeValue"]);
			else assoc[mytab[i]["nodeName"]] = mytab[i]["nodeValue"];
		}
	}

	return assoc;
}

// Affiche un Array
function varDump(arr, level)
{
	var dumped_text = "";
	if(!level) level = 0;

	// The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";

	if(typeof(arr) == 'object')
	{
		for(var item in arr)
		{
			var value = arr[item];

			if(typeof(value) == 'object')
			{
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += varDump(value,level+1);
			}
			else
			{
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	}
	else
	{
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}

	return dumped_text;
}

function divMove(id, initHeight, finalHeight, interval, reverse, textId, content)
{
	// Identification de l'objet
	var oElem = document.getElementById(id);
	if(!oElem) return;

	// Contrôle des valeurs de variables
	if(typeof(initHeight || finalHeight || interval) != 'number') return false;

	// Contrôle d'éxécution de la méthode
	if(oElem.movement) clearTimeout(oElem.movement);

	// Initialisation des paramètres
	if( !oElem.style.height ) oElem.style.height = parseInt(initHeight) + 'px';
	var iDimY = parseInt(oElem.style.height);

	// Condition de fin de la méthode
	if(iDimY == finalHeight && reverse == false) return true;

	// Conditions d'incrémentation et décrémentation
	if(iDimY == initHeight && reverse == true)
	{
		reverse = false;
		if(document.getElementById(textId) != null)
		{
			document.getElementById(textId).innerHTML = content;
		}
	}

	if(reverse == true)
	{
		if(iDimY > initHeight)
		{
			var dist = Math.ceil((iDimY - initHeight)/3);
			iDimY = iDimY - dist;
		}

		if(iDimY < initHeight)
		{
			var dist = Math.ceil((initHeight - iDimY)/3);
			iDimY = iDimY + dist;
		}
	}
	else
	{
		if(iDimY < finalHeight)
		{
			var dist = Math.ceil((finalHeight - iDimY)/7);
			iDimY = iDimY + dist;
		}

		if(iDimY > finalHeight)
		{
			var dist = Math.ceil((iDimY - finalHeight)/7);
			iDimY = iDimY - dist;
		}
	}
	oElem.style.height = iDimY + 'px';

	// Répétition de la méthode
	var repeat = "divMove('" + id + "'," + initHeight + "," + finalHeight + "," + interval + "," + reverse + ", '" + textId + "', \"" + content + "\")";
	oElem.movement = setTimeout(repeat, interval);
	return true;
}

function showDiv(divId, divHeight, textId, content, noRewind)
{
	if(document.getElementById(divId).style.height != '0px' && noRewind == null)
	{
		divMove(divId, 0, divHeight, 40, true, textId, content);
	}
	else
	{
		if(document.getElementById(textId) != null)
		{
			document.getElementById(textId).innerHTML = content;
		}
		divMove(divId, 0, divHeight, 40, false, textId, content);
	}
}

function hideDiv(id)
{
	var divHeight = document.getElementById(id).offsetHeight;
	divMove(id, divHeight, 0, 40, false);
}
/**
 *  author:		Timothy Groves - http://www.brandspankingnew.net
 *  version:		2.1.3 - 2007-07-19
 *
 */

if (typeof(bsn) == "undefined")
	_b = bsn = {};

if (typeof(_b.Autosuggest) == "undefined")
	_b.Autosuggest = {};
else
	alert("Autosuggest is already set!");

_b.AutoSuggest = function (id, param)
{
	// no DOM - give up!
	//
	if (!document.getElementById)
		return 0;

	// get field via DOM
	//
	this.fld = _b.DOM.gE(id);

	if (!this.fld)
		return 0;

	// init variables
	//
	this.sInp 	= "";
	this.nInpC 	= 0;
	this.aSug 	= [];
	this.iHigh 	= 0;

	// parameters object
	//
	this.oP = param ? param : {};

	// defaults	
	//
	var k, def = {minchars:1, meth:"get", varname:"input", className:"autosuggest", timeout:2500, delay:500, offsety:-5, shownoresults: true, noresults: "No results!", maxheight: 250, cache: true, maxentries: 25};
	for (k in def)
	{
		if (typeof(this.oP[k]) != typeof(def[k]))
			this.oP[k] = def[k];
	}

	// set keyup handler for field
	// and prevent autocomplete from client
	//
	var p = this;

	// NOTE: not using addEventListener because UpArrow fired twice in Safari
	//_b.DOM.addEvent( this.fld, 'keyup', function(ev){ return pointer.onKeyPress(ev); } );
	
	this.fld.onkeypress 	= function(ev){ return p.onKeyPress(ev); };
	this.fld.onkeyup 	= function(ev){ return p.onKeyUp(ev); };
	
	this.fld.setAttribute("autocomplete","off");
}

_b.AutoSuggest.prototype.onKeyPress = function(ev)
{
	
	var key = (window.event) ? window.event.keyCode : ev.keyCode;

	// set responses to keydown events in the field
	// this allows the user to use the arrow keys to scroll through the results
	// ESCAPE clears the list
	// TAB sets the current highlighted value
	//
	var RETURN = 13;
	var TAB = 9;
	var ESC = 27;
	
	switch(key)
	{
		case RETURN:
			this.setHighlightedValue();
			this.clearSuggestions();
			return false;
			break;

		case ESC:
			this.clearSuggestions();
			break;

		case TAB:
			this.clearSuggestions();
			break;
	}

	return 1;
}

_b.AutoSuggest.prototype.onKeyUp = function(ev)
{
	var key = (window.event) ? window.event.keyCode : ev.keyCode;

	// set responses to keydown events in the field
	// this allows the user to use the arrow keys to scroll through the results
	// ESCAPE clears the list
	// TAB sets the current highlighted value
	//

	var ARRUP = 38;
	var ARRDN = 40;
	
	var bubble = 1;

	switch(key)
	{
		case ARRUP:
			this.changeHighlight(key);
			bubble = 0;
			break;

		case ARRDN:
			this.changeHighlight(key);
			bubble = 0;
			break;

		default:
			this.getSuggestions(this.fld.value);
	}

	return bubble;
}

_b.AutoSuggest.prototype.getSuggestions = function (val)
{
	// if input stays the same, do nothing
	//
	if (val == this.sInp)
		return 0;

	// kill list
	//
	_b.DOM.remE(this.idAs);

	this.sInp = val;

	// input length is less than the min required to trigger a request
	// do nothing
	//
	if (val.length < this.oP.minchars)
	{
		this.aSug = [];
		this.nInpC = val.length;
		return 0;
	}

	var ol = this.nInpC; // old length
	this.nInpC = val.length ? val.length : 0;

	// if caching enabled, and user is typing (ie. length of input is increasing)
	// filter results out of aSuggestions from last request
	//
	var l = this.aSug.length;

	if (this.nInpC > ol && l && l < this.oP.maxentries && this.oP.cache)
	{
		var arr = [];
		for(var i=0; i<l; i++)
		{
			var currSugg = this.aSug[i].value.toLowerCase();
			var currVal = val.toLowerCase();
			
			// On reformate
			while(currSugg.search('-') != -1) { currSugg = currSugg.replace('-', ' '); }
			while(currSugg.search(',') != -1) { currSugg = currSugg.replace(',', ' '); }
			while(currSugg.search('"') != -1) { currSugg = currSugg.replace('"', ' '); }
			while(currSugg.search("'") != -1) { currSugg = currSugg.replace("'", ' '); }

			while(currVal.search('  ') != -1) { currVal = currVal.replace('  ', ' '); }
			while(currVal.search('-') != -1) { currVal = currVal.replace('-', ' '); }
			while(currVal.search(',') != -1) { currVal = currVal.replace(',', ' '); }
			while(currVal.search('"') != -1) { currVal = currVal.replace('"', ' '); }
			while(currVal.search("'") != -1) { currVal = currVal.replace("'", ' '); }
			
			if(currSugg.indexOf(currVal) >= 0)
				arr.push(this.aSug[i]);
		}
		this.aSug = arr;
		
		// Si plus aucune suggestion, on passe
		if(this.aSug.length > 0)
		{
			this.createList(this.aSug);
			return false;
		}
	}

	// do new request
	//
	var pointer = this;
	var input = this.sInp;
	clearTimeout(this.ajID);
	this.ajID = setTimeout( function() { pointer.doAjaxRequest(input) }, this.oP.delay );

	return false;
}

_b.AutoSuggest.prototype.doAjaxRequest = function (input)
{
	// check that saved input is still the value of the field
	//
	if (input != this.fld.value)
		return false;

	var pointer = this;

	// create ajax request
	//
	if (typeof(this.oP.script) == "function")
		var url = this.oP.script(encodeURIComponent(this.sInp));
	else
		var url = this.oP.script+this.oP.varname+"="+encodeURIComponent(this.sInp);

	if (!url)
		return false;
	
	var meth = this.oP.meth;
	var input = this.sInp;
	
	var onSuccessFunc = function (req) { pointer.setSuggestions(req, input) };
	//var onErrorFunc = function (status) { alert("AJAX error: "+status); };
	var onErrorFunc = function (status) { };

	var myAjax = new _b.Ajax();
	myAjax.makeRequest( url, meth, onSuccessFunc, onErrorFunc );
}

_b.AutoSuggest.prototype.setSuggestions = function (req, input)
{
	if(document.getElementById('loading') != null)
		fader('loading', 100, 0, 300);

	// if field input no longer matches what was passed to the request
	// don't show the suggestions
	//
	if (input != this.fld.value)
		return false;

	this.aSug = [];

	if (this.oP.json)
	{
		var jsondata = eval('(' + req.responseText + ')');
		
		for (var i=0;i<jsondata.results.length;i++)
		{
			this.aSug.push(  { 'id':jsondata.results[i].id, 'value':jsondata.results[i].value, 'info':jsondata.results[i].info }  );
		}
	}
	else
	{

		var xml = req.responseXML;
	
		// traverse xml
		//
		var results = xml.getElementsByTagName('results')[0].childNodes;

		var l = results.length;
		if(l > this.oP.maxentries)
		{
			l = this.oP.maxentries;
		}

		for (var i=0; i<l; i++)
		{
			if (results[i].hasChildNodes())
				this.aSug.push(
					{
						'id' : results[i].getAttribute('id'),
						'value' : results[i].childNodes[0].nodeValue,
						'info' : results[i].getAttribute('info'),
						'state_id' : results[i].getAttribute('state_id'),
						'region_id' : results[i].getAttribute('region_id'),
						'province_id' : results[i].getAttribute('province_id'),
						'district_id' : results[i].getAttribute('district_id'),
						'map_x' : results[i].getAttribute('map_x'),
						'map_y' : results[i].getAttribute('map_y')
					} );
		}
	
	}
	
	this.idAs = "as_" + this.fld.id;

	this.createList(this.aSug);
}

_b.AutoSuggest.prototype.createList = function(arr)
{
	var pointer = this;

	// get rid of old list
	// and clear the list removal timeout
	//
	_b.DOM.remE(this.idAs);
	this.killTimeout();

	// if no results, and shownoresults is false, do nothing
	//
	if (arr.length == 0 && !this.oP.shownoresults)
		return false;

	// create holding div
	//
	var div = _b.DOM.cE("div", {id:this.idAs, className:this.oP.className});

	var hcorner = _b.DOM.cE("div", {className:"as_corner"});
	var hbar = _b.DOM.cE("div", {className:"as_bar"});
	var header = _b.DOM.cE("div", {className:"as_header"});
	header.appendChild(hcorner);
	header.appendChild(hbar);
	div.appendChild(header);
	
	var a = _b.DOM.cE("a", {className:"as_closelink",href:"javascript:as.clearSuggestions();"}, this.oP.close);
	var close = _b.DOM.cE("div", {className:"as_close"}, a);
	div.appendChild(close);

	// create and populate ul
	//
	var ul = _b.DOM.cE("ul", {id:"as_ul"});

	// loop throught arr of suggestions
	// creating an LI element for each suggestion
	//
	for (var i=0;i<arr.length;i++)
	{
		// format output with the input enclosed in a EM element
		// (as HTML, not DOM)
		//

		// On reformate
		var currSugg = arr[i].value.toLowerCase();
		while(currSugg.search('-') != -1) { currSugg = currSugg.replace('-', ' '); }
		while(currSugg.search(',') != -1) { currSugg = currSugg.replace(',', ' '); }
		while(currSugg.search('"') != -1) { currSugg = currSugg.replace('"', ' '); }
		while(currSugg.search("'") != -1) { currSugg = currSugg.replace("'", ' '); }

		var currVal = this.sInp.toLowerCase();
		while(currVal.search('  ') != -1) { currVal = currVal.replace('  ', ' '); }
		while(currVal.search('-') != -1) { currVal = currVal.replace('-', ' '); }
		while(currVal.search(',') != -1) { currVal = currVal.replace(',', ' '); }
		while(currVal.search('"') != -1) { currVal = currVal.replace('"', ' '); }
		while(currVal.search("'") != -1) { currVal = currVal.replace("'", ' '); }

		var val = arr[i].value;
		var st = currSugg.indexOf(currVal);
		if(st != -1)
			var output = val.substring(0,st) + "<em>" + val.substring(st, st+currVal.length) + "</em>" + val.substring(st+this.sInp.length);
		else
			var output = val;

		var span = _b.DOM.cE("span", {}, output, true);

		if (arr[i].info != "")
		{
			var br = _b.DOM.cE("br", {});
			span.appendChild(br);
			var small = _b.DOM.cE("small", {}, arr[i].info);
			span.appendChild(small);
		}

		var a = _b.DOM.cE("a", { href:"#" });
		
		var tl = _b.DOM.cE("span", {className:"tl"}, " ");
		var tr = _b.DOM.cE("span", {className:"tr"}, " ");
		a.appendChild(tl);
		a.appendChild(tr);
		
		a.appendChild(span);
		
		a.name = i+1;
		a.onclick = function () { pointer.setHighlightedValue(); return false; };
		a.onmouseover = function () { pointer.setHighlight(this.name); };
		
		var li = _b.DOM.cE("li", {}, a);
		
		ul.appendChild(li);
	}

	// no results
	//
	if (arr.length == 0 && this.oP.shownoresults)
	{
		var li = _b.DOM.cE(  "li", {className:"as_warning"}, this.oP.noresults  );
		ul.appendChild( li );
	}

	div.appendChild(ul);

	var fcorner = _b.DOM.cE("div", {className:"as_corner"});
	var fbar = _b.DOM.cE("div", {className:"as_bar"});
	var footer = _b.DOM.cE("div", {className:"as_footer"});
	footer.appendChild(fcorner);
	footer.appendChild(fbar);
	div.appendChild(footer);

	// get position of target textfield
	// position holding div below it
	// set width of holding div to width of field
	//
	var pos = _b.DOM.getPos(this.fld);
	
	
	div.style.top 		= ( pos.y + this.fld.offsetHeight + this.oP.offsety ) + "px";
	
	if(this.oP.minwidth && this.oP.minwidth >  this.fld.offsetWidth)
	{
		div.style.left 		= pos.x - parseInt((this.oP.minwidth - this.fld.offsetWidth) / 2) + "px";
		div.style.width 	= this.oP.minwidth + "px";
	}
	else
	{
		div.style.left 		= pos.x + "px";
		div.style.width 	= this.fld.offsetWidth + "px";
	}

	// set mouseover functions for div
	// when mouse pointer leaves div, set a timeout to remove the list after an interval
	// when mouse enters div, kill the timeout so the list won't be removed
	//
	if(pointer.oP.timeout != 0)
	{
		div.onmouseover 	= function(){ pointer.killTimeout() };
		div.onmouseout 		= function(){ pointer.resetTimeout() };
	}

	// add DIV to document
	//
	document.getElementsByTagName("body")[0].appendChild(div);

	// currently no item is highlighted
	//
	this.iHigh = 0;

	// remove list after an interval
	//
	if(this.oP.timeout != 0)
	{
		var pointer = this;
		this.toID = setTimeout(function () { pointer.clearSuggestions() }, this.oP.timeout);
	}
}

_b.AutoSuggest.prototype.changeHighlight = function(key)
{	
	var list = _b.DOM.gE("as_ul");
	if (!list)
		return false;

	var n;

	if (key == 40)
		n = this.iHigh + 1;
	else if (key == 38)
		n = this.iHigh - 1;

	if (n > list.childNodes.length)
		n = list.childNodes.length;
	if (n < 1)
		n = 1;

	this.setHighlight(n);
}

_b.AutoSuggest.prototype.setHighlight = function(n)
{
	var list = _b.DOM.gE("as_ul");
	if (!list)
		return false;

	if (this.iHigh > 0)
		this.clearHighlight();

	this.iHigh = Number(n);

	list.childNodes[this.iHigh-1].className = "as_highlight";

	this.killTimeout();
}

_b.AutoSuggest.prototype.clearHighlight = function()
{
	var list = _b.DOM.gE("as_ul");
	if (!list)
		return false;

	if (this.iHigh > 0)
	{
		list.childNodes[this.iHigh-1].className = "";
		this.iHigh = 0;
	}
}

_b.AutoSuggest.prototype.setHighlightedValue = function ()
{
	if (this.iHigh)
	{
		this.sInp = this.fld.value = this.aSug[ this.iHigh-1 ].value;
		
		// move cursor to end of input (safari)
		//
		this.fld.focus();
		if (this.fld.selectionStart)
			this.fld.setSelectionRange(this.sInp.length, this.sInp.length);

		this.clearSuggestions();
		
		// pass selected object to callback function, if exists
		//
		if (typeof(this.oP.callback) == "function")
			this.oP.callback( this.aSug[this.iHigh-1] );
	}
}

_b.AutoSuggest.prototype.killTimeout = function()
{
	clearTimeout(this.toID);
}

_b.AutoSuggest.prototype.resetTimeout = function()
{
	clearTimeout(this.toID);
	var pointer = this;
	this.toID = setTimeout(function () { pointer.clearSuggestions() }, 1000);
}

_b.AutoSuggest.prototype.clearSuggestions = function ()
{
	
	this.killTimeout();
	
	var ele = _b.DOM.gE(this.idAs);
	var pointer = this;
	if (ele)
	{
		var fade = new _b.Fader(ele,1,0,250,function () { _b.DOM.remE(pointer.idAs) });
	}
}

// AJAX PROTOTYPE _____________________________________________

if (typeof(_b.Ajax) == "undefined")
	_b.Ajax = {};

_b.Ajax = function ()
{
	this.req = {};
	this.isIE = false;
}

_b.Ajax.prototype.makeRequest = function (url, meth, onComp, onErr)
{
	if (meth != "POST")
		meth = "GET";
	
	this.onComplete = onComp;
	this.onError = onErr;
	
	var pointer = this;
	
	// branch for native XMLHttpRequest object
	if (window.XMLHttpRequest)
	{
		this.req = new XMLHttpRequest();
		this.req.onreadystatechange = function () { pointer.processReqChange() };
		this.req.open("GET", url, true); //
		this.req.send(null);
	// branch for IE/Windows ActiveX version
	}
	else if (window.ActiveXObject)
	{
		this.req = new ActiveXObject("Microsoft.XMLHTTP");
		if (this.req)
		{
			this.req.onreadystatechange = function () { pointer.processReqChange() };
			this.req.open(meth, url, true);
			this.req.send();
		}
	}
}

_b.Ajax.prototype.processReqChange = function()
{
	
	// only if req shows "loaded"
	if (this.req.readyState == 4) {
		// only if "OK"
		if (this.req.status == 200)
		{
			this.onComplete( this.req );
		} else {
			this.onError( this.req.status );
		}
	}
}

// DOM PROTOTYPE _____________________________________________

if (typeof(_b.DOM) == "undefined")
	_b.DOM = {};

/* create element */
_b.DOM.cE = function ( type, attr, cont, html )
{
	var ne = document.createElement( type );
	if (!ne)
		return 0;
		
	for (var a in attr)
		ne[a] = attr[a];
	
	var t = typeof(cont);
	
	if (t == "string" && !html)
		ne.appendChild( document.createTextNode(cont) );
	else if (t == "string" && html)
		ne.innerHTML = cont;
	else if (t == "object")
		ne.appendChild( cont );

	return ne;
}

/* get element */
_b.DOM.gE = function ( e )
{
	var t=typeof(e);
	if (t == "undefined")
		return 0;
	else if (t == "string")
	{
		var re = document.getElementById( e );
		if (!re)
			return 0;
		else if (typeof(re.appendChild) != "undefined" )
			return re;
		else
			return 0;
	}
	else if (typeof(e.appendChild) != "undefined")
		return e;
	else
		return 0;
}

/* remove element */
_b.DOM.remE = function ( ele )
{
	var e = this.gE(ele);
	
	if (!e)
		return 0;
	else if (e.parentNode.removeChild(e))
		return true;
	else
		return 0;
}

/* get position */
_b.DOM.getPos = function ( e )
{
	var e = this.gE(e);

	var obj = e;

	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	
	var obj = e;
	
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;

	return {x:curleft, y:curtop};
}

// FADER PROTOTYPE _____________________________________________

if (typeof(_b.Fader) == "undefined")
	_b.Fader = {};

_b.Fader = function (ele, from, to, fadetime, callback)
{	
	if (!ele)
		return 0;
	
	this.e = ele;
	
	this.from = from;
	this.to = to;
	
	this.cb = callback;
	
	this.nDur = fadetime;
		
	this.nInt = 50;
	this.nTime = 0;
	
	var p = this;
	this.nID = setInterval(function() { p._fade() }, this.nInt);
}

_b.Fader.prototype._fade = function()
{
	this.nTime += this.nInt;
	
	var ieop = Math.round( this._tween(this.nTime, this.from, this.to, this.nDur) * 100 );
	var op = ieop / 100;
	
	if (this.e.filters) // internet explorer
	{
		try
		{
			this.e.filters.item("DXImageTransform.Microsoft.Alpha").opacity = ieop;
		} catch (e) { 
			// If it is not set initially, the browser will throw an error.  This will set it if it is not set yet.
			this.e.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity='+ieop+')';
		}
	}
	else // other browsers
	{
		this.e.style.opacity = op;
	}
	
	
	if (this.nTime == this.nDur)
	{
		clearInterval( this.nID );
		if (this.cb != undefined)
			this.cb();
	}
}

_b.Fader.prototype._tween = function(t,b,c,d)
{
	return b + ( (c-b) * (t/d) );
}








/* Personal functions
 ***/

// Gestion du choix de l'utilisateur
function setSuggest(town)
{
	document.getElementById('town_id').value = town.id;

	setGeoSelect(town.state_id, town.region_id, town.province_id);

	if(document.getElementById('announce_town_alert') != null)
		document.getElementById('announce_town_alert').src = imgPathForOk;

	// Check if we must change map dynamically
	if(mapViewImg != null)
	{
		if(town.province_id != mapViewProvinceId)
			changeMap(town.state_id, town.region_id, town.province_id, town.map_x, town.map_y);
		else
		{
			setTarget(town.map_x, town.map_y);
			setMapPosition(town.map_x, town.map_y);
		}
	}
}

function unsetSuggest()
{
	if((document.getElementById('announce_town_name') != null || document.getElementById('town_name') != null) && document.getElementById('town_id') != null)
	{
		if(document.getElementById('town_name') != null)
		{
			document.getElementById('town_name').className = 'prefill-field';
			if(prefillTownName != null)
				document.getElementById('town_name').value = prefillTownName;
			else
				document.getElementById('town_name').value = '';
		}

		document.getElementById('town_id').value = '';

		if(document.getElementById('announce_town_name') != null)
			document.getElementById('announce_town_name').value = '';
		if(document.getElementById('announce_town_alert') != null)
			document.getElementById('announce_town_alert').src = imgPathForAlert;

		if(document.getElementById('map_x') != null)
			document.getElementById('map_x').value = '';
		if(document.getElementById('map_y') != null)
			document.getElementById('map_y').src = '';
	}
}

function suggestRequest(value)
{
	document.getElementById('town_id').value = '';

	if(typeof(state_id) == 'undefined')
		var state_id = '';
	if(document.getElementById('statesFormSelect') != null)
		var state_id = document.getElementById('statesFormSelect').options[document.getElementById('statesFormSelect').selectedIndex].value;
	if(document.getElementById('state_id') != null)
		var state_id = document.getElementById('state_id').value;

	if(typeof(region_id) == 'undefined')
		var region_id = '';
	if(document.getElementById('regionsFormSelect') != null)
		region_id = document.getElementById('regionsFormSelect').options[document.getElementById('regionsFormSelect').selectedIndex].value;
	if(document.getElementById('region_id') != null)
		var region_id = document.getElementById('region_id').value;

	if(typeof(province_id) == 'undefined')
		var province_id = '';
	if(document.getElementById('provincesFormSelect') != null)
		province_id = document.getElementById('provincesFormSelect').options[document.getElementById('provincesFormSelect').selectedIndex].value;
	if(document.getElementById('province_id') != null)
		var province_id = document.getElementById('province_id').value;

	// Check if we can do search if states is state we have all datas
	if(states_without_maps[state_id] != null && states_without_maps[state_id] == true)
		return '';

	var url = baseUrl + "/ajax/suggest-town?state_id=" + state_id + "&region_id=" + region_id + "&province_id=" + province_id + "&search=" + value;

	if(document.getElementById('announce_town_alert') != null)
		document.getElementById('announce_town_alert').src = imgPathForAlert;

	if(document.getElementById('loading') != null)
		fader('loading', 0, 100, 300);

	return url;
}



function opacityObj(id, opacity)
{
	var object = document.getElementById(id);
	object.style.opacity = (opacity / 100);
	object.style.MozOpacity = (opacity / 100);
	object.style.KhtmlOpacity = (opacity / 100);
	object.style.filter = 'alpha(opacity=' + opacity + ')';

	if(opacity > 0)
		document.getElementById(id).style.display = "";
	else
		document.getElementById(id).style.display = "none";
}

function fader(id, opacityStart, opacityEnd, msec)
{
	var speed = Math.round(msec/100);
	var timer = 0;

	if(opacityStart > opacityEnd)
	{
		for(i = opacityStart; i >= opacityEnd; i--)
		{
			setTimeout("opacityObj('" + id + "', " + i + ")", (timer * speed));
			timer++;
		}
	}
	else if(opacityStart < opacityEnd)
	{
		for(i = opacityStart; i <= opacityEnd; i++)
		{
			setTimeout("opacityObj('" + id + "', " + i + ")", (timer * speed));
			timer++;
		}
	}

}

var mapViewDragging = false;
var mapViewTop;
var mapViewLeft;
var mapViewTargetTop;
var mapViewTargetLeft;
var dragStartTop;
var dragStartLeft;
var mapViewProvinceId;

var mapViewActive;
var mapViewOuterDiv;
var mapViewInnerDiv;
var mapViewImg;
var mapViewTargetImg;
var baseUrl;

// Initialise la mapView
function initMapView(outerDivId, innerDivId, mapImgId, targetImgId, contextBaseUrl)
{
	// Outer Div
	mapViewOuterDiv			= document.getElementById(outerDivId);
	mapViewOuterDiv.onselectstart	= function () { return false; }

	// Inner div
	mapViewInnerDiv			= document.getElementById(innerDivId);

	// Map img
	mapViewImg			= document.getElementById(mapImgId);

	// Target img
	mapViewTargetImg		= document.getElementById(targetImgId);
	
	// Set website base url
	baseUrl				= contextBaseUrl;
}

// Set up the application when the page loads
function startMapView(provinceId, position_x, position_y)
{
	// Set the ids
	mapViewProvinceId = provinceId;

	// Size the inner Div    
	mapViewInnerDiv.style.width	= mapViewImg.offsetWidth + 'px';
	mapViewInnerDiv.style.height	= mapViewImg.offsetHeight + 'px';
	mapViewTop			= stripPx(mapViewInnerDiv.style.top);
	mapViewLeft			= stripPx(mapViewInnerDiv.style.left);

	// Prepare the outerDIV to listen to our cursor
	document.getElementById('mapViewMask').onmousedown	= startMove;
	document.getElementById('mapViewMask').onmousemove	= processMove;
	document.getElementById('mapViewMask').onmouseup	= stopMove;
	document.getElementById('mapViewMask').onmouseout	= stopMove;

	// Active map view
	mapViewActive			= true;

	// Positioning map and targetDiv
	if(position_x == null || position_y == null || (position_x == 0 && position_y == 0))
	{
		unsetTarget();
		initMapPosition();
	}
	else
	{
		// Set target position
		setTarget(position_x, position_y);

		// Set map position
		setMapPosition(position_x, position_y);
	}

	// Set map visible
	mapViewImg.style.visibility	= 'visible';

	// Hack up Internet Explorer
	mapViewOuterDiv.ondragstart	= function() { return false; }
}

function setTarget(target_x, target_y)
{
	// Correct position
	target_y -= 3;

	mapViewTargetImg.style.left	= target_x - parseInt(mapViewTargetImg.offsetWidth / 2) + 'px';
	mapViewTargetImg.style.top	= target_y - mapViewImg.offsetHeight - parseInt(mapViewTargetImg.offsetHeight / 2) + 'px';
	mapViewTargetImg.style.visibility = 'visible';
}

function unsetTarget()
{
	mapViewTargetImg.style.visibility	= 'hidden';
}

function setMapPosition(position_x, position_y)
{
	// Adjust position
	position_y = parseInt(position_y) + 2;
	position_x = parseInt(position_x) + 2;

	// Calculate new position
	position_x = - position_x + parseInt(mapViewOuterDiv.offsetWidth / 2);
	position_y = - position_y + parseInt(mapViewOuterDiv.offsetHeight / 2);

	// Check for map borders
	if(position_x > 0)
		position_x = 0;
	if(position_y > 0)
		position_y = 0;
	if(position_x < (- mapViewImg.offsetWidth + mapViewOuterDiv.offsetWidth))
		position_x = (- mapViewImg.offsetWidth + mapViewOuterDiv.offsetWidth);
	if(position_y < (- mapViewImg.offsetHeight + mapViewOuterDiv.offsetHeight))
		position_y = (- mapViewImg.offsetHeight + mapViewOuterDiv.offsetHeight);

	// Set map position
	mapViewInnerDiv.style.left	= position_x + 'px';
	mapViewInnerDiv.style.top	= position_y + 'px';
}

function initMapPosition()
{
	// Set position to center
	mapViewInnerDiv.style.left	= - parseInt(mapViewImg.offsetWidth / 2) + parseInt(mapViewOuterDiv.offsetWidth / 2) + 'px';
	mapViewInnerDiv.style.top	= - parseInt(mapViewImg.offsetHeight / 2) + parseInt(mapViewOuterDiv.offsetHeight / 2) + 'px';
}

// Responds when moving begins
function startMove(event)
{
	// Check if mapView is actived
	if(mapViewActive == null) return false;

	// Hack up Internet Explorer
	if(!event) event		= window.event;

	// Get the starting X,Y coordinates
	dragStartLeft			= event.clientX;
	dragStartTop			= event.clientY;

	// Target the innerDIV; fiddle with the cursor style
	mapViewInnerDiv.style.cursor	= "move";

	// Get the cursor position
	mapViewTop			= stripPx(mapViewInnerDiv.style.top);
	mapViewLeft			= stripPx(mapViewInnerDiv.style.left);

	var scrollx = (document.all) ? document.documentElement.scrollLeft : window.pageXOffset;
	var scrolly = (document.all) ? document.documentElement.scrollTop : window.pageYOffset; 

	// Set click position
	var map_x			= dragStartLeft - mapViewOuterDiv.offsetLeft - mapViewLeft + scrollx - 1;
	var map_y			= dragStartTop - mapViewOuterDiv.offsetTop - mapViewTop + scrolly - 1;

	// Correct position for IE
	if(/MSIE (\d+\.\d+);/.test(navigator.userAgent))
	{
		map_x -= 2;
		map_y -= 2;
	}

	// Start loading gif
	if(document.getElementById('loading') != null)
		fader('loading', 0, 100, 300);

	// Lance la recherche de la ville la plus proche via Ajax
	getXml(baseUrl + "/ajax/search-town?province_id=" + encodeURIComponent(mapViewProvinceId) + "&map_x=" + encodeURIComponent(map_x) + "&map_y=" + encodeURIComponent(map_y), 'setGeoData');

	// Set target position
	setTarget(map_x, map_y);

	// Set a boolean to indicate things are happening
	mapViewDragging			= true;

	return false;
}

// Things are moving
function processMove(event)
{
	// Hack up Internet Explorer
	if(!event) event		= window.event;

	// If things are happening, reset the left and top positions
	if(mapViewDragging)
	{
		var newTop		= mapViewTop + (event.clientY - dragStartTop);
		if(newTop <= 0 && mapViewOuterDiv.offsetHeight <= (mapViewImg.offsetHeight + newTop + 2))
			mapViewInnerDiv.style.top = newTop + 'px';
		var newLeft		= mapViewLeft + (event.clientX - dragStartLeft);
		if(newLeft <= 0 && mapViewOuterDiv.offsetWidth <= (mapViewImg.offsetWidth + newLeft + 2))
			mapViewInnerDiv.style.left = newLeft + 'px';
	}
}

// Stop dragging
function stopMove()
{
	mapViewInnerDiv.style.cursor = "";
	mapViewDragging = false;
}

// A helper function for turning strings like "250px" into numbers like "250"
function stripPx(value)
{
	if(value == "") return 0;
	return parseFloat(value.substring(0, value.length - 2));
}

// Set GeoData in focus form
function setGeoData(xmlArray)
{
	var xmlAssoc = arrayToAssoc(xmlArray);
	var xmlAssoc = xmlAssoc['towns']['town'][0];

	// Set selects
	setGeoSelect(xmlAssoc['state_id'], xmlAssoc['region_id'], xmlAssoc['province_id']);

	// Cancel loading gif
	if(document.getElementById('loading') != null)
		fader('loading', 100, 0, 300);

	// Set town
	clearTownField();
	document.getElementById('town_id').value = '';
	document.getElementById('town_name').value = '';
	if(document.getElementById('map_x') != null)
		document.getElementById('map_x').value = '';
	if(document.getElementById('map_y') != null)
		document.getElementById('map_y').value = '';
	if(xmlAssoc['town_id'] != null && xmlAssoc['town_id'] != '')
	{
		document.getElementById('town_id').value = xmlAssoc['town_id'];
		if(xmlAssoc['district_name'] == '')
			document.getElementById('town_name').value = xmlAssoc['town_name'] + ' (' + xmlAssoc['province_name'] + ')';
		else
			document.getElementById('town_name').value = xmlAssoc['town_name'] + ' (' + xmlAssoc['district_name'] + ', ' + xmlAssoc['province_name'] + ')';
		if(document.getElementById('map_x') != null)
			document.getElementById('map_x').value = xmlAssoc['map_x'];
		if(document.getElementById('map_y') != null)
			document.getElementById('map_y').value = xmlAssoc['map_y'];
	}

	// Check if we must change map dynamically
	if(xmlAssoc['province_id'] != mapViewProvinceId)
		changeMap(xmlAssoc['state_id'], xmlAssoc['region_id'], xmlAssoc['province_id'], xmlAssoc['map_x'], xmlAssoc['map_y']);
	else
		setTarget(xmlAssoc['map_x'], xmlAssoc['map_y']);
}

// Change map img and reinitialize
function changeMap(state_id, region_id, province_id, map_x, map_y)
{
	mapViewImg.onload = function() { startMapView(province_id, map_x, map_y); if(document.getElementById('mapViewMoveIcon') != null) document.getElementById('mapViewMoveIcon').style.display = ''; }
	var mapUrl = baseUrl + "/maps/detailed/" + state_id + "/" + region_id + "/" + province_id + ".png";
	mapViewImg.src = mapUrl;
}

// Désactive mapView
function unsetMapView()
{
	mapViewImg.src = '';
	mapViewProvinceId = null;
	mapViewActive = null;
	if(document.getElementById('mapViewMoveIcon') != null)
		document.getElementById('mapViewMoveIcon').style.display = 'none';
}



var count_period = 0;
var data = Array();

var month = Array();
month["01"] = html_entity_decode("enero");
month["02"] = html_entity_decode("febrero");
month["03"] = html_entity_decode("marzo");
month["04"] = html_entity_decode("abril");
month["05"] = html_entity_decode("mayo");
month["06"] = html_entity_decode("junio");
month["07"] = html_entity_decode("julio");
month["08"] = html_entity_decode("agosto");
month["09"] = html_entity_decode("septiembre");
month["10"] = html_entity_decode("octubre");
month["11"] = html_entity_decode("noviembre");
month["12"] = html_entity_decode("diciembre");

var status = Array();
status["nd"] = html_entity_decode("No disponible");
status["ts"] = html_entity_decode("Temporada pico");
status["hs"] = html_entity_decode("Temporada alta");
status["ms"] = html_entity_decode("Temporada media");
status["bs"] = html_entity_decode("Temporada baja");

function addPeriod()
{
	if(!checkPeriod(false))
		return false;

	// On récupère la veille de la date de fin
	var yesterday = getYesterday(document.getElementById('year_stop').value, document.getElementById('month_stop').value, document.getElementById('day_stop').value);

	var id = prepareData(document.getElementById('day_start').value, document.getElementById('month_start').value, document.getElementById('year_start').value, yesterday["day"], yesterday["month"], yesterday["year"]);

	data[id] = Array();
	data[id]["status"] = document.getElementById('status').value;
	data[id]["day_start"] = document.getElementById('day_start').value;
	data[id]["month_start"] = document.getElementById('month_start').value;
	data[id]["year_start"] = document.getElementById('year_start').value;
	data[id]["day_stop"] = yesterday["day"];
	data[id]["month_stop"] = yesterday["month"];
	data[id]["year_stop"] = yesterday["year"];
	data[id]["locked"] = false;

	compressPeriod();
	showPeriods();
}

function addPromo(isLocked)
{
	if(!checkPeriod(true))
		return false;

	if(isLocked == null)
		isLocked = false;

	if(isNaN(parseFloat(Math.abs(document.getElementById('status').value))))
		return false;

	// On récupère la veille de la date de fin
	var yesterday = getYesterday(document.getElementById('year_stop').value, document.getElementById('month_stop').value, document.getElementById('day_stop').value);
	var id = prepareData(document.getElementById('day_start').value, document.getElementById('month_start').value, document.getElementById('year_start').value, yesterday["day"], yesterday["month"], yesterday["year"]);

	data[id] = Array();
	data[id]["status"] = parseFloat(Math.abs(document.getElementById('status').value));
	data[id]["day_start"] = document.getElementById('day_start').value;
	data[id]["month_start"] = document.getElementById('month_start').value;
	data[id]["year_start"] = document.getElementById('year_start').value;
	data[id]["day_stop"] = yesterday["day"];
	data[id]["month_stop"] = yesterday["month"];
	data[id]["year_stop"] = yesterday["year"];
	data[id]["locked"] = isLocked;

	compressPeriod();
	showPromos();
}

function checkPeriod(isPromo)
{
	// Vérification de la cohérence des dates
	var date_start = String(document.getElementById('year_start').value) + String(document.getElementById('month_start').value) + String(document.getElementById('day_start').value);
	var yesterday = getYesterday(document.getElementById('year_stop').value, document.getElementById('month_stop').value, document.getElementById('day_stop').value);
	var date_stop = String(yesterday["year"]) + String(yesterday["month"]) + String(yesterday["day"]);

	// Vérifie si les dates sont conformes
	if(date_start > date_stop)
	{
		alert(html_entity_decode("Se ha detectado un error : \n\nLa fecha de llegada es superior o igual a la fecha de salida.\nVerifique de nuevo las fechas yvalide otra vez."));
		return false;
	}

	// Vérification que les jours existent bien
	if(!checkDate(document.getElementById('year_start').value, document.getElementById('month_start').value, document.getElementById('day_start').value))
	{
		alert(html_entity_decode("Se ha detectado un error : \n\nLa fecha de llegada no es v&aacute;lida.\n nVerifique de nuevo las fechas y valide otra vez."));
		return false;
	}

	// Vérification que les jours existent bien
	if(!checkDate(document.getElementById('year_stop').value, document.getElementById('month_stop').value, document.getElementById('day_stop').value))
	{
		alert(html_entity_decode("Se ha detectado un error : \n\nLa fecha de salida no es v&aacute;lida.\n nVerifique de nuevo las fechas y valide otra vez."));
		return false;
	}

	if(isPromo == false)
	{
		// Vérification du statut
		if(document.getElementById('status').value == "")
		{
			alert(html_entity_decode("Se ha detectado un error : \n\nNo est&aacute; seleccionado el tipo de este periodo.\nSeleccione el tipo de periodo y valide otra vez."));
			return false;
		}
	}
	else
	{
		// Vérification de la promo
		if(document.getElementById('status').value == "")
		{
			alert(html_entity_decode("Se ha detectado un error : \n\nNo puso ninguna informaci&oacute;n relativa al porcentaje de descuento.\nIndique el porcentaje y valide otra vez.."));
			return false;
		}
	}

	// On vérifie que la période ne marche pas sur une autre période lockée
	var end_yesterday = getYesterday(document.getElementById('year_stop').value, document.getElementById('month_stop').value, document.getElementById('day_stop').value);
	if(!checkLocked(document.getElementById('day_start').value, document.getElementById('month_start').value, document.getElementById('year_start').value, end_yesterday['day'], end_yesterday['month'], end_yesterday['year']))
	{
		alert(html_entity_decode("Se ha detectado un error : \n\nEl periodo deseado sobresale en un periodo cerrado.\nCambie las fechas y valide otra vez."));
		return false;
	}

	return true;
}

function getPromoNbDay()
{
	var unit_price = 3;
	var total = 0;
	var nb_day = 0;

	// On parcours toutes les périodes
	for (i = 0; i < count_period; i++)
	{
		if(data[i]["locked"] == false)
		{
			nb_day += getNbDay(data[i]);
		}
	}

	return nb_day;
}

function checkPromosPrice()
{
	var unit_price = 3;
	var total = 0;
	var nb_day = getPromoNbDay();

	// On fait le calcul
	nb = Math.ceil(nb_day / 7);
	total = nb * unit_price;

	return total;
}

function getNbDay(period)
{
	var date1 = new Date(period["year_start"], period["month_start"]-1, period["day_start"]);
	var date2 = new Date(period["year_stop"], period["month_stop"]-1, period["day_stop"]);
	var dayDiff = Math.round(((date2.getTime() - date1.getTime()) / 86400000) + 1);

	return dayDiff;
}

function checkDate(y, m, d)
{
	m--;
	var date = new Date(y, m, d);
	return (date.getFullYear() == y && date.getMonth() == m);
}

function checkLocked(day_start, month_start, year_start, day_stop, month_stop, year_stop)
{
	var date_start = "";
	var date_stop = "";
	var p_date_start = "";
	var p_date_stop = "";
	var id;
	var flag = 0;

	// On recherche l'id de la période qui pourrait être en conflit
	for (i = 0; i < count_period; i++)
	{
		if(data[i]["locked"] == true)
		{
			date_start = year_start + "-" + month_start + "-" + day_start;
			date_stop = year_stop + "-" + month_stop + "-" + day_stop;
			p_date_start = data[i]["year_start"] + "-" + data[i]["month_start"] + "-" + data[i]["day_start"];
			p_date_stop = data[i]["year_stop"] + "-" + data[i]["month_stop"] + "-" + data[i]["day_stop"];

			// Cas ou la date de départ est inférieure et la date de fin est supérieur
			if(p_date_start <= date_start && p_date_stop >= date_start)
			{
				return false;
			}
			
			// Cas ou le début est inclue dans une période lockée
			if(p_date_start <= date_stop && p_date_stop >= date_start)
			{
				return false;
			}
		}
	}

	return true;
}

function prepareData(day_start, month_start, year_start, day_stop, month_stop, year_stop)
{
	var date_start = "";
	var date_stop = "";
	var p_date_start = "";
	var p_date_stop = "";
	var yesterday = Array();
	var tomorrow = Array();
	var id;
	var flag = 0;

	// On recherche l'id de la période précédente
	for (i = 0; i < count_period; i++)
	{
		date_start = year_start + "-" + month_start + "-" + day_start;
		date_stop = year_stop + "-" + month_stop + "-" + day_stop;
		p_date_start = data[i]["year_start"] + "-" + data[i]["month_start"] + "-" + data[i]["day_start"];
		p_date_stop = data[i]["year_stop"] + "-" + data[i]["month_stop"] + "-" + data[i]["day_stop"];

		// Cas ou la nouvelle période est à l'intérieur d'une autre période : On scinde
		if(p_date_start < date_start && p_date_stop > date_stop)
		{
			// On ajoute une période dans le tableau
			for (j = count_period; j > (i+1); j--)
			{
				data[j] = data[j-1];
			}
			count_period++;

			tomorrow = getTomorrow(year_stop, month_stop, day_stop);
			data[i+1] = Array();
			data[i+1]["year_start"] = tomorrow["year"];
			data[i+1]["month_start"] = tomorrow["month"];
			data[i+1]["day_start"] = tomorrow["day"];
			data[i+1]["year_stop"] = data[i]["year_stop"];
			data[i+1]["month_stop"] = data[i]["month_stop"];
			data[i+1]["day_stop"] = data[i]["day_stop"];
			data[i+1]["status"] = data[i]["status"];
			data[i+1]["locked"] = data[i]["locked"];
		}

		// Cas ou la date de départ est inférieure et la date de fin est supérieur, chevauchement : On décale
		if(p_date_start < date_start && p_date_stop >= date_start)
		{
			yesterday = getYesterday(year_start, month_start, day_start);
			data[i]["year_stop"] = yesterday["year"];
			data[i]["month_stop"] = yesterday["month"];
			data[i]["day_stop"] = yesterday["day"];

			flag = 1;
			break;
		}

		// Cas ou on arrive à des périodes supérieures
		else if(p_date_start >= date_start)
		{
			break;
		}
	}

	if(count_period > 0 && flag == 1) id = i + 1;
	else if(count_period > 0) id = i;
	else id = 0;

	// On corrige le start de la période suivante
	for (i = id; i < count_period; i++)
	{
		date_start = year_start + "-" + month_start + "-" + day_start;
		date_stop = year_stop + "-" + month_stop + "-" + day_stop;
		p_date_start = data[i]["year_start"] + "-" + data[i]["month_start"] + "-" + data[i]["day_start"];
		p_date_stop = data[i]["year_stop"] + "-" + data[i]["month_stop"] + "-" + data[i]["day_stop"];

		// Cas ou une periode est entièrement dans la nouvelle période : a supprimer
		if(p_date_start >= date_start && p_date_stop <= date_stop)
		{
			delPeriod(i);
			i = id - 1;
		}

		// Cas ou le départ est dans la nouvelle période mais pas la fin : On décale
		else if(p_date_start <= date_stop && p_date_stop > date_stop)
		{
			tomorrow = getTomorrow(year_stop, month_stop, day_stop);
			data[i]["year_start"] = tomorrow["year"];
			data[i]["month_start"] = tomorrow["month"];
			data[i]["day_start"] = tomorrow["day"];
		}
	}

	// On décale
	for (i = count_period; i > id; i--)
	{
		data[i] = data[i-1];
	}
	count_period++;
	data[id] = Array();

	return id;
}

function compressPeriod()
{
	for (var i = 0; i < (count_period-1); i++)
	{
		tomorrow = getTomorrow(data[i]["year_stop"], data[i]["month_stop"], data[i]["day_stop"]);
		
		// Deux périodes identiques se suivent
		if(data[i+1]["year_start"] == tomorrow["year"] && data[i+1]["month_start"] == tomorrow["month"] && data[i+1]["day_start"] == tomorrow["day"] && data[i]["status"] == data[i+1]["status"])
		{
			data[i]["year_stop"] = data[i+1]["year_stop"];
			data[i]["month_stop"] = data[i+1]["month_stop"];
			data[i]["day_stop"] = data[i+1]["day_stop"];
			delPeriod(i+1);
			i--;
		}
	}

	return true;
}

function delPeriod(id)
{
	for (var i = id; i < (count_period-1); i++)
	{
		data[i] = data[i+1];
	}
	count_period--;
}

function showPeriods()
{
	// Initialisation
	var content = Array();
	var className = "";
	var input = "";
	var date_start = "";
	var date_stop = "";

	// On efface l'historique
	deleteTr();
	document.getElementById("scheduler_inputs").innerHTML = "";

	// On s'occupe de chaque période
	for (i = (count_period-1); i >= 0; i--)
	{
		if( data[i]["status"] == "ts" ) className = "scheduler_period_ts";
		if( data[i]["status"] == "hs" ) className = "scheduler_period_hs";
		if( data[i]["status"] == "ms" ) className = "scheduler_period_ms";
		if( data[i]["status"] == "bs" ) className = "scheduler_period_bs";
		if( data[i]["status"] == "nd" ) className = "scheduler_period_nd";
		//if( data[i]["locked"] == true ) className = "scheduler_locked";

		var tomorrow = getTomorrow(data[i]["year_stop"], data[i]["month_stop"], data[i]["day_stop"]);

		content[0] = data[i]["day_start"] + " " + month[data[i]["month_start"]] + " " + data[i]["year_start"];
		content[1] = tomorrow["day"] + " " + month[tomorrow["month"]] + " " + tomorrow["year"];
		content[2] = status[data[i]["status"]];
		content[3] = "javascript:delPeriod(" + i + "); showPeriods();";

		insertTr(content, className, data[i]["locked"]);

		// On renseigne le formulaire
		date_start = data[i]["year_start"] + "-" + data[i]["month_start"] + "-" + data[i]["day_start"];
		date_stop = data[i]["year_stop"] + "-" + data[i]["month_stop"] + "-" + data[i]["day_stop"];
		input  = "";
		input += "<input type=\"hidden\" name=\"scheduler_date_start[" + i + "]\" value=\"" + date_start + "\" />";
		input += "<input type=\"hidden\" name=\"scheduler_date_stop[" + i + "]\" value=\"" + date_stop + "\" />";
		input += "<input type=\"hidden\" name=\"scheduler_status[" + i + "]\" value=\"" + data[i]["status"] + "\" />";
		document.getElementById("scheduler_inputs").innerHTML = input + document.getElementById("scheduler_inputs").innerHTML;
	}
}

function showPromos()
{
	// Initialisation
	var content = Array();
	var className = "";
	var input = "";
	var date_start = "";
	var date_stop = "";

	// On efface l'historique
	deleteTr();
	document.getElementById("scheduler_inputs").innerHTML = "";

	// On s'occupe de chaque période
	for (i = (count_period-1); i >= 0; i--)
	{
		className = "scheduler_promo_0";
		if( data[i]["status"] >= 10 ) className = "scheduler_promo_10";
		if( data[i]["status"] >= 30 ) className = "scheduler_promo_30";
		if( data[i]["status"] >= 50 ) className = "scheduler_promo_50";
		//if( data[i]["locked"] == true ) className = "scheduler_locked";

		var tomorrow = getTomorrow(data[i]["year_stop"], data[i]["month_stop"], data[i]["day_stop"]);

		content[0] = data[i]["day_start"] + " " + month[data[i]["month_start"]] + " " + data[i]["year_start"];
		content[1] = tomorrow["day"] + " " + month[tomorrow["month"]] + " " + tomorrow["year"];
		content[2] = "-" + parseFloat(data[i]["status"]) + "%";
		content[3] = "javascript:delPeriod(" + i + "); showPromos();";

		insertTr(content, className, data[i]["locked"]);

		// On renseigne le formulaire
		date_start = data[i]["year_start"] + "-" + data[i]["month_start"] + "-" + data[i]["day_start"];
		date_stop = data[i]["year_stop"] + "-" + data[i]["month_stop"] + "-" + data[i]["day_stop"];
		input  = "";
		input += "<input type=\"hidden\" name=\"scheduler_date_start[" + i + "]\" value=\"" + date_start + "\" />";
		input += "<input type=\"hidden\" name=\"scheduler_date_stop[" + i + "]\" value=\"" + date_stop + "\" />";
		input += "<input type=\"hidden\" name=\"scheduler_status[" + i + "]\" value=\"" + data[i]["status"] + "\" />";
		document.getElementById("scheduler_inputs").innerHTML = input + document.getElementById("scheduler_inputs").innerHTML;
	}

	if(document.getElementById("promo_nbday") != null)
	{
		var nbDay = getPromoNbDay();
		document.getElementById("promo_nbday").innerHTML = nbDay;
	}

	if(document.getElementById("promo_price") != null)
	{
		var total = checkPromosPrice();
		document.getElementById("promo_price").innerHTML = total;
	}

	if(typeof(showOptionP) == 'function')
	{
		showOptionP();
	}

	if(typeof(refreshRecap) == 'function')
	{
		refreshRecap();
	}
}

function getYesterday(today_year, today_month, today_day)
{
	var yesterday_year, yesterday_month, yesterday_day;
	var year = parseInt(today_year,10);
	var month = parseInt(today_month,10);
	var day = parseInt(today_day,10);
	var feb;
	var result = Array();

	// gestion des années bissextile
	if (year%4 == 0 && year%100 !=0 || year%400 == 0)
	{
		feb = 29;
	}
	else
	{
		feb = 28;
	}

	// Nombre de jours pour chaque mois
	var nbDays = new Array(31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

	// On calcul
	if (month == 1 && day == 1)
	{
		yesterday_year = year - 1;
		yesterday_month = 12;
		yesterday_day = 31;
	}
	else if(day == 1)
	{
		yesterday_year = year;
		yesterday_month = month - 1;
		yesterday_day = nbDays[month - 2];
	}
	else
	{
		yesterday_year = year;
		yesterday_month = month;
		yesterday_day = day - 1;
	}
	
	result["year"] = yesterday_year;
	if(yesterday_month < 10) result["month"] = "0" + yesterday_month; else result["month"] = yesterday_month;
	if(yesterday_day < 10) result["day"] = "0" + yesterday_day; else result["day"] = yesterday_day;
	
	return result;
}

function getTomorrow(today_year, today_month, today_day)
{
	var tomorrow_year, tomorrow_month, tomorrow_day;
	var year = parseInt(today_year,10);
	var month = parseInt(today_month,10);
	var day = parseInt(today_day,10);
	var feb;
	var result = Array();

	// gestion des années bissextile
	if (year%4 == 0 && year%100 !=0 || year%400 == 0)
	{
		feb = 29;
	}
	else
	{
		feb = 28;
	}

	// Nombre de jours pour chaque mois
	var nbDays = new Array(31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

	// On calcul
	if (month == 12 && day == 31)
	{
		tomorrow_year = year + 1;
		tomorrow_month = 1;
		tomorrow_day = 1;
	}
	else if(day == nbDays[month-1])
	{
		tomorrow_year = year;
		tomorrow_month = month + 1;
		tomorrow_day = 1;
	}
	else
	{
		tomorrow_year = year;
		tomorrow_month = month;
		tomorrow_day = day + 1;
	}
	
	result["year"] = tomorrow_year;
	if(tomorrow_month < 10) result["month"] = "0" + tomorrow_month; else result["month"] = tomorrow_month;
	if(tomorrow_day < 10) result["day"] = "0" + tomorrow_day; else result["day"] = tomorrow_day;
	
	return result;
}

// Insertion d'une ligne
function insertTr(col, className, isLocked)
{
	var newTr = document.createElement("tr");
	newTr.className = className;

	// Rempli les 3 premières cases avec du texte
	var newTd = document.createElement("td");
	var newText = document.createTextNode(col[0]);
	newTd.appendChild(newText);
	newTr.appendChild(newTd);

	var newTd = document.createElement("td");
	var newText = document.createTextNode(col[1]);
	newTd.appendChild(newText);
	newTr.appendChild(newTd);

	var newTd = document.createElement("td");
	var newText = document.createTextNode(col[2]);
	newTd.appendChild(newText);
	newTr.appendChild(newTd);
	
	// La 4ème colonne est un lien js si non locké
	var newTd = document.createElement("td");
	if(!isLocked)
	{
		var link=document.createElement('a');
		link.setAttribute('href', col[3]);
		link.className = "scheduler_link";
		link.appendChild(document.createTextNode(html_entity_decode("suprimir")));
		newTd.appendChild(link);
	}
	else
	{
		var newText = document.createTextNode(html_entity_decode("-"));
		newTd.appendChild(newText);
	}
	newTr.appendChild(newTd);

	// On ajoute la ligne au tbody
	var tbodyElmt = document.getElementById("scheduler_content");
	var refTbody = tbodyElmt.getElementsByTagName("tr").item(0);
	tbodyElmt.insertBefore(newTr, refTbody);
}

// Suppression de toutes les lignes
function deleteTr()
{
	var Node = document.getElementById("scheduler_content");
	var NodeList = Node.getElementsByTagName("tr");
	var j = NodeList.length;
	for (var i = 0; i < j; i++)
	{
		var child = NodeList.item(0);
		Node.removeChild(child);
	}
}

var states = new Array();
var states_without_maps = new Array();
var regions = new Array();
var provinces = new Array();

states['deutschland'] = "Alemania";
states_without_maps['deutschland'] = true;
regions['deutschland'] = new Array();
provinces['deutschland'] = new Array();
states['andorre'] = "Andorra";
states_without_maps['andorre'] = true;
regions['andorre'] = new Array();
provinces['andorre'] = new Array();
states['belgique'] = "Bélgica";
states_without_maps['belgique'] = true;
regions['belgique'] = new Array();
provinces['belgique'] = new Array();
states['croatia'] = "Croacia";
states_without_maps['croatia'] = true;
regions['croatia'] = new Array();
provinces['croatia'] = new Array();
states['egypt'] = "Egipto";
states_without_maps['egypt'] = true;
regions['egypt'] = new Array();
provinces['egypt'] = new Array();
states['espana'] = "España";
regions['espana'] = new Array();
provinces['espana'] = new Array();
states['france'] = "Francia";
regions['france'] = new Array();
provinces['france'] = new Array();
states['greece'] = "Grecia";
states_without_maps['greece'] = true;
regions['greece'] = new Array();
provinces['greece'] = new Array();
states['ile-maurice'] = "Isla de Francia ";
states_without_maps['ile-maurice'] = true;
regions['ile-maurice'] = new Array();
provinces['ile-maurice'] = new Array();
states['italia'] = "Italia";
regions['italia'] = new Array();
provinces['italia'] = new Array();
states['luxembourg'] = "Luxemburgo";
states_without_maps['luxembourg'] = true;
regions['luxembourg'] = new Array();
provinces['luxembourg'] = new Array();
states['maroc'] = "Marruecos";
states_without_maps['maroc'] = true;
regions['maroc'] = new Array();
provinces['maroc'] = new Array();
states['monaco'] = "Mónaco";
states_without_maps['monaco'] = true;
regions['monaco'] = new Array();
provinces['monaco'] = new Array();
states['portugal'] = "Portugal";
regions['portugal'] = new Array();
provinces['portugal'] = new Array();
states['senegal'] = "Senegal";
states_without_maps['senegal'] = true;
regions['senegal'] = new Array();
provinces['senegal'] = new Array();
states['suisse'] = "Suiza";
states_without_maps['suisse'] = true;
regions['suisse'] = new Array();
provinces['suisse'] = new Array();
states['tunisie'] = "Túnez";
states_without_maps['tunisie'] = true;
regions['tunisie'] = new Array();
provinces['tunisie'] = new Array();

regions['portugal']['centro'] = "Região Centro";
provinces['portugal']['centro'] = new Array();
regions['italia']['abruzzo'] = "Abruzos";
provinces['italia']['abruzzo'] = new Array();
regions['portugal']['alentejo'] = "Alentejo";
provinces['portugal']['alentejo'] = new Array();
regions['portugal']['algarve'] = "Algarve";
provinces['portugal']['algarve'] = new Array();
regions['france']['alsace'] = "Alsacia";
provinces['france']['alsace'] = new Array();
regions['france']['haute-normandie'] = "AltoNormandía";
provinces['france']['haute-normandie'] = new Array();
regions['espana']['andalucia'] = "Andalucía";
provinces['espana']['andalucia'] = new Array();
regions['italia']['puglia'] = "Apulia";
provinces['italia']['puglia'] = new Array();
regions['france']['aquitaine'] = "Aquitania";
provinces['france']['aquitaine'] = new Array();
regions['espana']['aragon'] = "Aragón";
provinces['espana']['aragon'] = new Array();
regions['france']['auvergne'] = "Auvernia";
provinces['france']['auvergne'] = new Array();
regions['portugal']['regiao-autonoma-dos-acores'] = "Azores";
provinces['portugal']['regiao-autonoma-dos-acores'] = new Array();
regions['france']['basse-normandie'] = "Baja Normandía";
provinces['france']['basse-normandie'] = new Array();
regions['italia']['basilicata'] = "Basilicata";
provinces['italia']['basilicata'] = new Array();
regions['france']['bourgogne'] = "Borgoña";
provinces['france']['bourgogne'] = new Array();
regions['france']['bretagne'] = "Bretaña";
provinces['france']['bretagne'] = new Array();
regions['italia']['calabria'] = "Calabria";
provinces['italia']['calabria'] = new Array();
regions['italia']['campania'] = "Campania";
provinces['italia']['campania'] = new Array();
regions['espana']['cantabria'] = "Cantabria";
provinces['espana']['cantabria'] = new Array();
regions['espana']['castilla-y-leon'] = "Castilla y León";
provinces['espana']['castilla-y-leon'] = new Array();
regions['espana']['castilla-la-mancha'] = "Castilla-La Mancha";
provinces['espana']['castilla-la-mancha'] = new Array();
regions['espana']['cataluna'] = "Cataluña";
provinces['espana']['cataluna'] = new Array();
regions['france']['centre'] = "Centro";
provinces['france']['centre'] = new Array();
regions['italia']['sardegna'] = "Cerdeña";
provinces['italia']['sardegna'] = new Array();
regions['france']['champagne-ardenne'] = "Champaña-Ardenas";
provinces['france']['champagne-ardenne'] = new Array();
regions['espana']['ciudad-autonoma-de-ceuta'] = "Ciudad Autónoma de Ceuta";
provinces['espana']['ciudad-autonoma-de-ceuta'] = new Array();
regions['espana']['ciudad-autonoma-de-melilla'] = "Ciudad Autónoma de Melilla";
provinces['espana']['ciudad-autonoma-de-melilla'] = new Array();
regions['france']['collectivites-d-outre-mer'] = "Colectividad de ultramar";
provinces['france']['collectivites-d-outre-mer'] = new Array();
regions['espana']['comunidad-de-madrid'] = "Comunidad de Madrid";
provinces['espana']['comunidad-de-madrid'] = new Array();
regions['espana']['comunidad-valenciana'] = "Comunidad Valenciana";
provinces['espana']['comunidad-valenciana'] = new Array();
regions['france']['corse'] = "Córcega";
provinces['france']['corse'] = new Array();
regions['france']['departements-d-outre-mer'] = "Departamento de ultramar";
provinces['france']['departements-d-outre-mer'] = new Array();
regions['italia']['emilia-romagna'] = "Emilia-Romaña";
provinces['italia']['emilia-romagna'] = new Array();
regions['espana']['extremadura'] = "Extremadura";
provinces['espana']['extremadura'] = new Array();
regions['france']['franche-comte'] = "Franco Condado";
provinces['france']['franche-comte'] = new Array();
regions['italia']['friuli-venezia-giulia'] = "Friuli-Venecia Julia";
provinces['italia']['friuli-venezia-giulia'] = new Array();
regions['espana']['galicia'] = "Galicia";
provinces['espana']['galicia'] = new Array();
regions['portugal']['lisboa'] = "Gran Lisboa";
provinces['portugal']['lisboa'] = new Array();
regions['france']['ile-de-france'] = "Isla de Francia";
provinces['france']['ile-de-france'] = new Array();
regions['espana']['illes-balears'] = "Islas Baleares";
provinces['espana']['illes-balears'] = new Array();
regions['espana']['canarias'] = "Islas Canarias";
provinces['espana']['canarias'] = new Array();
regions['espana']['la-rioja'] = "La Rioja";
provinces['espana']['la-rioja'] = new Array();
regions['italia']['lazio'] = "Lacio";
provinces['italia']['lazio'] = new Array();
regions['france']['languedoc-roussillon'] = "Languedoc-Rosellón";
provinces['france']['languedoc-roussillon'] = new Array();
regions['france']['limousin'] = "Lemosín";
provinces['france']['limousin'] = new Array();
regions['italia']['liguria'] = "Liguria";
provinces['italia']['liguria'] = new Array();
regions['italia']['lombardia'] = "Lombardía";
provinces['italia']['lombardia'] = new Array();
regions['france']['lorraine'] = "Lorena";
provinces['france']['lorraine'] = new Array();
regions['portugal']['regiao-autonoma-da-madeira'] = "Madeira";
provinces['portugal']['regiao-autonoma-da-madeira'] = new Array();
regions['italia']['marche'] = "Marcas";
provinces['italia']['marche'] = new Array();
regions['france']['midi-pyrenees'] = "Mediodía-Pirineos";
provinces['france']['midi-pyrenees'] = new Array();
regions['italia']['molise'] = "Molise";
provinces['italia']['molise'] = new Array();
regions['espana']['comunidad-foral-de-navarra'] = "Navarra";
provinces['espana']['comunidad-foral-de-navarra'] = new Array();
regions['portugal']['norte'] = "Norte";
provinces['portugal']['norte'] = new Array();
regions['france']['nord-pas-de-calais'] = "Norte-Paso de Calais";
provinces['france']['nord-pas-de-calais'] = new Array();
regions['france']['pays-de-la-loire'] = "País del Loira";
provinces['france']['pays-de-la-loire'] = new Array();
regions['espana']['pais-vasco'] = "País Vasco";
provinces['espana']['pais-vasco'] = new Array();
regions['italia']['piemonte'] = "Piamonte";
provinces['italia']['piemonte'] = new Array();
regions['france']['picardie'] = "Picardía";
provinces['france']['picardie'] = new Array();
regions['france']['poitou-charentes'] = "Poitou-Charentes";
provinces['france']['poitou-charentes'] = new Array();
regions['espana']['principado-de-asturias'] = "Principado de Asturias";
provinces['espana']['principado-de-asturias'] = new Array();
regions['france']['provence-alpes-cote-d-azur'] = "Provenza-Alpes-Costa Azul";
provinces['france']['provence-alpes-cote-d-azur'] = new Array();
regions['espana']['region-de-murcia'] = "Región de Murcia";
provinces['espana']['region-de-murcia'] = new Array();
regions['france']['rhone-alpes'] = "Ródano-Alpes";
provinces['france']['rhone-alpes'] = new Array();
regions['italia']['sicilia'] = "Sicilia";
provinces['italia']['sicilia'] = new Array();
regions['italia']['toscana'] = "Toscana";
provinces['italia']['toscana'] = new Array();
regions['italia']['trentino-alto-adige'] = "Trentino-Alto Adigio";
provinces['italia']['trentino-alto-adige'] = new Array();
regions['italia']['umbria'] = "Umbría";
provinces['italia']['umbria'] = new Array();
regions['italia']['valle-d-aosta'] = "Valle de Aosta";
provinces['italia']['valle-d-aosta'] = new Array();
regions['italia']['veneto'] = "Véneto";
provinces['italia']['veneto'] = new Array();

provinces['france']['rhone-alpes']['ain'] = "Ain";
provinces['france']['picardie']['aisne'] = "Aisne";
provinces['portugal']['alentejo']['alto-alentejo'] = "Alto Alentejo";
provinces['france']['midi-pyrenees']['ariege'] = "Ariège";
provinces['france']['champagne-ardenne']['aube'] = "Aube";
provinces['france']['languedoc-roussillon']['aude'] = "Aude";
provinces['france']['midi-pyrenees']['aveyron'] = "Aveyron";
provinces['portugal']['alentejo']['baixo-alentejo'] = "Baixo Alentejo";
provinces['france']['basse-normandie']['calvados'] = "Calvados";
provinces['france']['auvergne']['cantal'] = "Cantal";
provinces['france']['limousin']['correze'] = "Corrèze";
provinces['france']['limousin']['creuse'] = "Creuse";
provinces['france']['franche-comte']['doubs'] = "Doubs";
provinces['portugal']['norte']['douro'] = "Douro";
provinces['france']['ile-de-france']['essonne'] = "Essonne";
provinces['france']['haute-normandie']['eure'] = "Eure";
provinces['france']['aquitaine']['gironde'] = "Gironde";
provinces['france']['languedoc-roussillon']['herault'] = "Hérault";
provinces['france']['rhone-alpes']['isere'] = "Isère";
provinces['italia']['molise']['isernia'] = "Isernia";
provinces['france']['aquitaine']['landes'] = "Landes";
provinces['portugal']['alentejo']['leziria-do-tejo'] = "Lezíria do Tejo";
provinces['france']['rhone-alpes']['loire'] = "Loire";
provinces['france']['languedoc-roussillon']['lozere'] = "Lozère";
provinces['france']['basse-normandie']['manche'] = "Manche";
provinces['france']['champagne-ardenne']['marne'] = "Marne";
provinces['portugal']['centro']['medio-tejo'] = "Médio Tejo";
provinces['france']['lorraine']['meuse'] = "Meuse";
provinces['france']['bourgogne']['nievre'] = "Nièvre";
provinces['france']['picardie']['oise'] = "Oise";
provinces['italia']['basilicata']['potenza'] = "Potenza";
provinces['france']['picardie']['somme'] = "Somme";
provinces['france']['provence-alpes-cote-d-azur']['var'] = "Var";
provinces['france']['poitou-charentes']['vienne'] = "Vienne";
provinces['france']['lorraine']['vosges'] = "Vosges";
provinces['france']['bourgogne']['yonne'] = "Yonne";
provinces['espana']['galicia']['a-coruna'] = "A Coruña";
provinces['italia']['sicilia']['agrigento'] = "Agrigento";
provinces['espana']['comunidad-valenciana']['alicante'] = "Alacant";
provinces['espana']['pais-vasco']['alava'] = "Álava";
provinces['espana']['castilla-la-mancha']['albacete'] = "Albacete";
provinces['portugal']['alentejo']['alentejo-central'] = "Alentejo Central";
provinces['portugal']['alentejo']['alentejo-litoral'] = "Alentejo Litoral";
provinces['italia']['piemonte']['alessandria'] = "Alessandria";
provinces['portugal']['algarve']['algarve'] = "Algarve";
provinces['france']['auvergne']['allier'] = "Allier";
provinces['espana']['andalucia']['almeria'] = "Almería";
provinces['france']['provence-alpes-cote-d-azur']['alpes-de-haute-provence'] = "Alpes de Alta Provenza";
provinces['france']['provence-alpes-cote-d-azur']['alpes-maritimes'] = "Alpes Marítimos";
provinces['france']['corse']['haute-corse'] = "Alta Córcega";
provinces['france']['rhone-alpes']['haute-savoie'] = "Alta Saboya";
provinces['france']['midi-pyrenees']['haute-garonne'] = "Alto Garona";
provinces['france']['auvergne']['haute-loire'] = "Alto Loira";
provinces['france']['champagne-ardenne']['haute-marne'] = "Alto Marne";
provinces['france']['alsace']['haut-rhin'] = "Alto Rin";
provinces['france']['franche-comte']['haute-saone'] = "Alto Saona";
provinces['portugal']['norte']['alto-tras-os-montes'] = "Alto Trás-os-Montes";
provinces['france']['limousin']['haute-vienne'] = "Alto Vienne";
provinces['france']['provence-alpes-cote-d-azur']['hautes-alpes'] = "Altos Alpes";
provinces['france']['ile-de-france']['hauts-de-seine'] = "Altos del Sena";
provinces['france']['midi-pyrenees']['hautes-pyrenees'] = "Altos Pirineos";
provinces['italia']['marche']['ancona'] = "Ancona";
provinces['france']['rhone-alpes']['ardeche'] = "Ardèche";
provinces['france']['champagne-ardenne']['ardennes'] = "Ardenas";
provinces['italia']['toscana']['arezzo'] = "Arezzo";
provinces['italia']['marche']['ascoli-piceno'] = "Ascoli Piceno";
provinces['italia']['piemonte']['asti'] = "Asti";
provinces['espana']['principado-de-asturias']['asturias'] = "Asturias";
provinces['portugal']['norte']['ave'] = "Ave";
provinces['italia']['campania']['avellino'] = "Avellino";
provinces['espana']['castilla-y-leon']['avila'] = "Ávila";
provinces['portugal']['regiao-autonoma-dos-acores']['acores-central'] = "Azores Central";
provinces['portugal']['regiao-autonoma-dos-acores']['acores-ocidental'] = "Azores Occidental";
provinces['portugal']['regiao-autonoma-dos-acores']['acores-oriental'] = "Azores Oriental";
provinces['espana']['extremadura']['badajoz'] = "Badajoz";
provinces['portugal']['centro']['baixo-mondego'] = "Baixo Mondego";
provinces['portugal']['centro']['baixo-vouga'] = "Baixo Vouga";
provinces['espana']['cataluna']['barcelona'] = "Barcelona";
provinces['italia']['puglia']['bari'] = "Bari";
provinces['portugal']['centro']['beira-interior-norte'] = "Beira Interior Norte";
provinces['portugal']['centro']['beira-interior-sul'] = "Beira Interior Sul";
provinces['italia']['veneto']['belluno'] = "Belluno";
provinces['italia']['campania']['benevento'] = "Benevento";
provinces['italia']['lombardia']['bergamo'] = "Bérgamo";
provinces['italia']['piemonte']['biella'] = "Biella";
provinces['france']['provence-alpes-cote-d-azur']['bouches-du-rhone'] = "Bocas del Ródano";
provinces['italia']['emilia-romagna']['bologna'] = "Bolonia";
provinces['italia']['trentino-alto-adige']['bolzano'] = "Bolzano";
provinces['italia']['lombardia']['brescia'] = "Brescia";
provinces['italia']['puglia']['brindisi'] = "Brindisi";
provinces['espana']['castilla-y-leon']['burgos'] = "Burgos";
provinces['espana']['extremadura']['caceres'] = "Cáceres";
provinces['espana']['andalucia']['cadiz'] = "Cádiz";
provinces['italia']['sardegna']['cagliari'] = "Cagliari";
provinces['italia']['sicilia']['caltanissetta'] = "Caltanissetta";
provinces['italia']['molise']['campobasso'] = "Campobasso";
provinces['espana']['cantabria']['cantabria'] = "Cantabria";
provinces['italia']['campania']['caserta'] = "Caserta";
provinces['espana']['comunidad-valenciana']['castellon'] = "Castelló";
provinces['italia']['sicilia']['catania'] = "Catania";
provinces['italia']['calabria']['catanzaro'] = "Catanzaro";
provinces['portugal']['norte']['cavado'] = "Cávado";
provinces['espana']['ciudad-autonoma-de-ceuta']['ceuta'] = "Ceuta";
provinces['france']['poitou-charentes']['charente'] = "Charente";
provinces['france']['poitou-charentes']['charente-maritime'] = "Charente Marítimo";
provinces['france']['centre']['cher'] = "Cher";
provinces['italia']['abruzzo']['chieti'] = "Chieti";
provinces['espana']['castilla-la-mancha']['ciudad-real'] = "Ciudad Real";
provinces['italia']['lombardia']['como'] = "Como";
provinces['france']['corse']['corse-du-sud'] = "Córcega del Sur";
provinces['espana']['andalucia']['cordoba'] = "Córdoba";
provinces['italia']['calabria']['cosenza'] = "Cosenza";
provinces['france']['bourgogne']['cote-d-or'] = "Côte-d'Or";
provinces['france']['bretagne']['cotes-d-armor'] = "Côtes d'Armor";
provinces['portugal']['centro']['cova-da-beira'] = "Cova da Beira";
provinces['italia']['lombardia']['cremona'] = "Cremona";
provinces['italia']['calabria']['crotone'] = "Crotona";
provinces['espana']['castilla-la-mancha']['cuenca'] = "Cuenca";
provinces['italia']['piemonte']['cuneo'] = "Cuneo";
provinces['portugal']['centro']['dao-lafoes'] = "Dão-Lafões";
provinces['france']['alsace']['bas-rhin'] = "Departamento del Bajo Rin";
provinces['france']['poitou-charentes']['deux-sevres'] = "Deux-Sèvres";
provinces['france']['aquitaine']['dordogne'] = "Dordoña";
provinces['france']['rhone-alpes']['drome'] = "Drôme";
provinces['italia']['sicilia']['enna'] = "Enna";
provinces['portugal']['norte']['entre-douro-e-vouga'] = "Entre Douro e Vouga";
provinces['france']['centre']['eure-et-loir'] = "Eure y Loir";
provinces['italia']['emilia-romagna']['ferrara'] = "Ferrara";
provinces['france']['bretagne']['finistere'] = "Finisterre";
provinces['italia']['toscana']['firenze'] = "Florencia";
provinces['italia']['puglia']['foggia'] = "Foggia";
provinces['italia']['lazio']['frosinone'] = "Frosinone";
provinces['france']['languedoc-roussillon']['gard'] = "Gard";
provinces['italia']['liguria']['genova'] = "Génova";
provinces['france']['midi-pyrenees']['gers'] = "Gers";
provinces['espana']['cataluna']['gerona'] = "Girona";
provinces['italia']['friuli-venezia-giulia']['gorizia'] = "Gorizia";
provinces['portugal']['lisboa']['grande-lisboa'] = "Gran Lisboa";
provinces['portugal']['norte']['grande-porto'] = "Gran Oporto";
provinces['espana']['andalucia']['granada'] = "Granada";
provinces['italia']['toscana']['grosseto'] = "Grosseto";
provinces['espana']['castilla-la-mancha']['guadalajara'] = "Guadalajara";
provinces['france']['departements-d-outre-mer']['guadeloupe'] = "Guadalupe";
provinces['france']['departements-d-outre-mer']['guyane'] = "Guayana Francesa";
provinces['espana']['pais-vasco']['guipuzcoa'] = "Guipúzcoa";
provinces['espana']['andalucia']['huelva'] = "Huelva";
provinces['espana']['aragon']['huesca'] = "Huesca";
provinces['france']['bretagne']['ille-et-vilaine'] = "Ille y Vilaine";
provinces['italia']['liguria']['imperia'] = "Imperia";
provinces['france']['centre']['indre'] = "Indre";
provinces['france']['centre']['indre-et-loire'] = "Indre y Loira";
provinces['espana']['illes-balears']['illes-balears'] = "Islas Baleares";
provinces['espana']['andalucia']['jaen'] = "Jaén";
provinces['france']['franche-comte']['jura'] = "Jura";
provinces['italia']['abruzzo']['l-aquila'] = "L'Aquila";
provinces['espana']['la-rioja']['la-rioja'] = "La Rioja";
provinces['italia']['liguria']['la-spezia'] = "La Spezia";
provinces['espana']['canarias']['las-palmas'] = "Las Palmas";
provinces['italia']['lazio']['latina'] = "Latina";
provinces['italia']['puglia']['lecce'] = "Lecce";
provinces['italia']['lombardia']['lecco'] = "Lecco";
provinces['espana']['castilla-y-leon']['leon'] = "León";
provinces['italia']['toscana']['livorno'] = "Livorno";
provinces['espana']['cataluna']['lerida'] = "Lleida";
provinces['italia']['lombardia']['lodi'] = "Lodi";
provinces['france']['centre']['loir-et-cher'] = "Loir y Cher";
provinces['france']['pays-de-la-loire']['loire-atlantique'] = "Loira Atlántico";
provinces['france']['centre']['loiret'] = "Loiret";
provinces['france']['midi-pyrenees']['lot'] = "Lot";
provinces['france']['aquitaine']['lot-et-garonne'] = "Lot y Garona";
provinces['italia']['toscana']['lucca'] = "Lucca";
provinces['espana']['galicia']['lugo'] = "Lugo";
provinces['italia']['marche']['macerata'] = "Macerata";
provinces['portugal']['regiao-autonoma-da-madeira']['madeira'] = "Madeira";
provinces['espana']['comunidad-de-madrid']['madrid'] = "Madrid";
provinces['france']['pays-de-la-loire']['maine-et-loire'] = "Maine y Loira";
provinces['espana']['andalucia']['malaga'] = "Málaga";
provinces['italia']['lombardia']['mantova'] = "Mantua";
provinces['france']['departements-d-outre-mer']['martinique'] = "Martinica";
provinces['italia']['basilicata']['matera'] = "Matera";
provinces['france']['pays-de-la-loire']['mayenne'] = "Mayenne";
provinces['france']['collectivites-d-outre-mer']['mayotte'] = "Mayotte";
provinces['espana']['ciudad-autonoma-de-melilla']['melilla'] = "Melilla";
provinces['italia']['sicilia']['messina'] = "Mesina";
provinces['france']['lorraine']['meurthe-et-moselle'] = "Meurthe y Mosela";
provinces['italia']['lombardia']['milano'] = "Milán";
provinces['portugal']['norte']['minho-lima'] = "Minho-Lima";
provinces['italia']['emilia-romagna']['modena'] = "Módena";
provinces['france']['bretagne']['morbihan'] = "Morbihan";
provinces['france']['lorraine']['moselle'] = "Mosela";
provinces['espana']['region-de-murcia']['murcia'] = "Murcia";
provinces['italia']['campania']['napoli'] = "Nápoles";
provinces['espana']['comunidad-foral-de-navarra']['navarra'] = "Navarra";
provinces['france']['nord-pas-de-calais']['nord'] = "Norte";
provinces['italia']['piemonte']['novara'] = "Novara";
provinces['france']['collectivites-d-outre-mer']['nouvelle-caledonie'] = "Nueva Caledonia";
provinces['italia']['sardegna']['nuoro'] = "Nuoro";
provinces['portugal']['centro']['oeste'] = "Oeste";
provinces['italia']['sardegna']['oristano'] = "Oristán";
provinces['france']['basse-normandie']['orne'] = "Orne";
provinces['espana']['galicia']['ourense'] = "Ourense";
provinces['italia']['veneto']['padova'] = "Padua";
provinces['espana']['castilla-y-leon']['palencia'] = "Palencia";
provinces['italia']['sicilia']['palermo'] = "Palermo";
provinces['france']['ile-de-france']['paris'] = "París";
provinces['italia']['emilia-romagna']['parma'] = "Parma";
provinces['france']['nord-pas-de-calais']['pas-de-calais'] = "Paso de Calais";
provinces['italia']['lombardia']['pavia'] = "Pavía";
provinces['portugal']['lisboa']['peninsula-de-setubal'] = "Península de Setúbal";
provinces['italia']['umbria']['perugia'] = "Perugia";
provinces['italia']['abruzzo']['pescara'] = "Pescara";
provinces['portugal']['centro']['pinhal-interior-norte'] = "Pinhal Interior Norte";
provinces['portugal']['centro']['pinhal-interior-sul'] = "Pinhal Interior Sul";
provinces['portugal']['centro']['pinhal-litoral'] = "Pinhal Litoral";
provinces['france']['aquitaine']['pyrenees-atlantiques'] = "Pirineos Atlánticos";
provinces['france']['languedoc-roussillon']['pyrenees-orientales'] = "Pirineos Orientales";
provinces['italia']['toscana']['pisa'] = "Pisa";
provinces['italia']['toscana']['pistoia'] = "Pistoia";
provinces['italia']['emilia-romagna']['piacenza'] = "Plasencia";
provinces['france']['collectivites-d-outre-mer']['polynesie-francaise'] = "Polinesia Francesa";
provinces['espana']['galicia']['pontevedra'] = "Pontevedra";
provinces['italia']['friuli-venezia-giulia']['pordenone'] = "Pordenone";
provinces['italia']['toscana']['prato'] = "Prato";
provinces['italia']['sardegna']['carbonia-iglesias'] = "Provincia de Carbonia-Iglesias";
provinces['italia']['emilia-romagna']['forli-cesena'] = "Provincia de Forlì-Cesena";
provinces['italia']['toscana']['massa-carrara'] = "Provincia de Massa-Carrara";
provinces['italia']['sardegna']['medio-campidano'] = "Provincia de Medio Campidano";
provinces['italia']['sardegna']['ogliastra'] = "Provincia de Ogliastra";
provinces['italia']['sardegna']['olbia-tempio'] = "Provincia de Olbia-Tempio";
provinces['italia']['marche']['pesaro-e-urbino'] = "Provincia de Pesaro y Urbino";
provinces['italia']['piemonte']['verbano-cusio-ossola'] = "Provincia de Verbano-Cusio-Ossol";
provinces['france']['auvergne']['puy-de-dome'] = "Puy-de-Dôme";
provinces['italia']['sicilia']['ragusa'] = "Ragusa";
provinces['italia']['emilia-romagna']['ravenna'] = "Rávena";
provinces['italia']['emilia-romagna']['reggio-nell-emilia'] = "Reggio Emilia";
provinces['italia']['calabria']['reggio-di-calabria'] = "Regio de Calabria";
provinces['france']['departements-d-outre-mer']['la-reunion'] = "Reunión";
provinces['italia']['lazio']['rieti'] = "Rieti";
provinces['italia']['emilia-romagna']['rimini'] = "Rímini";
provinces['france']['rhone-alpes']['rhone'] = "Ródano";
provinces['italia']['lazio']['roma'] = "Roma";
provinces['italia']['veneto']['rovigo'] = "Rovigo";
provinces['france']['rhone-alpes']['savoie'] = "Saboya";
provinces['espana']['castilla-y-leon']['salamanca'] = "Salamanca";
provinces['italia']['campania']['salerno'] = "Salerno";
provinces['france']['collectivites-d-outre-mer']['saint-pierre-et-miquelon'] = "San Pedro y Miguelón";
provinces['espana']['canarias']['santa-cruz-de-tenerife'] = "Santa Cruz de Tenerife";
provinces['france']['bourgogne']['saone-et-loire'] = "Saona y Loira";
provinces['france']['pays-de-la-loire']['sarthe'] = "Sarthe";
provinces['italia']['sardegna']['sassari'] = "Sassari";
provinces['italia']['liguria']['savona'] = "Savona";
provinces['espana']['castilla-y-leon']['segovia'] = "Segovia";
provinces['france']['haute-normandie']['seine-maritime'] = "Sena Marítimo";
provinces['france']['ile-de-france']['seine-et-marne'] = "Sena y Marne";
provinces['france']['ile-de-france']['seine-saint-denis'] = "Sena-Saint Denis";
provinces['espana']['andalucia']['sevilla'] = "Sevilla";
provinces['italia']['toscana']['siena'] = "Siena";
provinces['portugal']['centro']['serra-da-estrela'] = "Sierra de la Estrella";
provinces['italia']['sicilia']['siracusa'] = "Siracusa";
provinces['italia']['lombardia']['sondrio'] = "Sondrio";
provinces['espana']['castilla-y-leon']['soria'] = "Soria";
provinces['portugal']['norte']['tamega'] = "Tâmega";
provinces['italia']['puglia']['taranto'] = "Tarento";
provinces['france']['midi-pyrenees']['tarn'] = "Tarn";
provinces['france']['midi-pyrenees']['tarn-et-garonne'] = "Tarn y Garona";
provinces['espana']['cataluna']['tarragona'] = "Tarragona";
provinces['italia']['abruzzo']['teramo'] = "Teramo";
provinces['italia']['umbria']['terni'] = "Terni";
provinces['france']['franche-comte']['territoire-de-belfort'] = "Territorio de Belfort";
provinces['espana']['aragon']['teruel'] = "Teruel";
provinces['espana']['castilla-la-mancha']['toledo'] = "Toledo";
provinces['italia']['sicilia']['trapani'] = "Trapani";
provinces['italia']['trentino-alto-adige']['trento'] = "Trento";
provinces['italia']['veneto']['treviso'] = "Treviso";
provinces['italia']['friuli-venezia-giulia']['trieste'] = "Trieste";
provinces['italia']['piemonte']['torino'] = "Turín";
provinces['italia']['friuli-venezia-giulia']['udine'] = "Udine";
provinces['espana']['comunidad-valenciana']['valencia'] = "València";
provinces['espana']['castilla-y-leon']['valladolid'] = "Valladolid";
provinces['italia']['valle-d-aosta']['valle-d-aosta'] = "Valle de Aosta";
provinces['france']['ile-de-france']['val-de-marne'] = "Valle del Marne";
provinces['france']['ile-de-france']['val-d-oise'] = "Valle del Oise";
provinces['france']['pays-de-la-loire']['vendee'] = "Vandea";
provinces['italia']['lombardia']['varese'] = "Varese";
provinces['france']['provence-alpes-cote-d-azur']['vaucluse'] = "Vaucluse";
provinces['italia']['veneto']['venezia'] = "Venecia";
provinces['italia']['piemonte']['vercelli'] = "Vercelli";
provinces['italia']['veneto']['verona'] = "Verona";
provinces['italia']['calabria']['vibo-valentia'] = "Vibo Valentia";
provinces['italia']['veneto']['vicenza'] = "Vicenza";
provinces['italia']['lazio']['viterbo'] = "Viterbo";
provinces['espana']['pais-vasco']['vizcaya'] = "Vizcaya";
provinces['france']['collectivites-d-outre-mer']['wallis-et-futuna'] = "Wallis y Futuna";
provinces['france']['ile-de-france']['yvelines'] = "Yvelines";
provinces['espana']['castilla-y-leon']['zamora'] = "Zamora";
provinces['espana']['aragon']['zaragoza'] = "Zaragoza";


function showStates(defaultStateId, defaultRegionId, defaultProvinceId)
{
	var i = 1;
	for(var key_state_id in states)
	{
		var newOption = new Option(states[key_state_id], key_state_id, false, true);
		document.getElementById('statesFormSelect').options[i] = newOption;
		if(defaultStateId == key_state_id)
			var selectedIndex = i;
		i++;
	}
	if(selectedIndex == null || selectedIndex == '')
		document.getElementById('statesFormSelect').selectedIndex = 0;
	else
	{
		document.getElementById('statesFormSelect').selectedIndex = selectedIndex;
		if(document.getElementById('regionsFormSelect') != null)
			showRegions(defaultRegionId, defaultProvinceId);
	}
}

function showRegions(defaultRegionId, defaultProvinceId)
{
	var state_id = document.getElementById('statesFormSelect').options[document.getElementById('statesFormSelect').selectedIndex].value;
	var i = 1;

	reinitializeSelect(document.getElementById('regionsFormSelect'), 1);
	reinitializeSelect(document.getElementById('provincesFormSelect'), 1);
	for(var key_region_id in regions[state_id])
	{
		var newOption = new Option(regions[state_id][key_region_id], key_region_id, false, true);
		document.getElementById('regionsFormSelect').options[i] = newOption;
		if(defaultRegionId == key_region_id)
			var selectedIndex = i;
		i++;
	}
	if(selectedIndex == null || selectedIndex == '')
		document.getElementById('regionsFormSelect').selectedIndex = 0;
	else
		document.getElementById('regionsFormSelect').selectedIndex = selectedIndex;

	showProvinces(defaultProvinceId);
}

function showProvinces(defaultProvinceId)
{
	var state_id = document.getElementById('statesFormSelect').options[document.getElementById('statesFormSelect').selectedIndex].value;
	var region_id = document.getElementById('regionsFormSelect').options[document.getElementById('regionsFormSelect').selectedIndex].value;
	var i = 1;

	reinitializeSelect(document.getElementById('provincesFormSelect'), 1);
	if(region_id != '')
	{
		for(var key_province_id in provinces[state_id][region_id])
		{
			var newOption = new Option(provinces[state_id][region_id][key_province_id], key_province_id, false, true);
			document.getElementById('provincesFormSelect').options[i] = newOption;
			if(defaultProvinceId == key_province_id)
				var selectedIndex = i;
			i++;
		}
	}
	else
	{
		for(var key_region_id in provinces[state_id])
		{
			optGroup = document.createElement('optgroup');
			optGroup.label = regions[state_id][key_region_id];
			document.getElementById('provincesFormSelect').appendChild(optGroup);
			for(var key_province_id in provinces[state_id][key_region_id])
			{
				var newOption = document.createElement("option");
				newOption.innerHTML = provinces[state_id][key_region_id][key_province_id];
				newOption.value = key_province_id;
				optGroup.appendChild(newOption);

				if(defaultProvinceId == key_province_id)
					var selectedIndex = i;
				i++;
			}
		}
	}

	if(selectedIndex == null || selectedIndex == '')
		document.getElementById('provincesFormSelect').selectedIndex = 0;
	else
	{
		document.getElementById('provincesFormSelect').selectedIndex = selectedIndex;
		checkProvinces();
	}
}

function checkProvinces(map_x, map_y)
{
	var state_id = document.getElementById('statesFormSelect').options[document.getElementById('statesFormSelect').selectedIndex].value;
	var region_id = document.getElementById('regionsFormSelect').options[document.getElementById('regionsFormSelect').selectedIndex].value;
	var province_id = document.getElementById('provincesFormSelect').options[document.getElementById('provincesFormSelect').selectedIndex].value;
	var real_region_id;

	// On recherche la region du departement selectionne
	for(var key_region_id in provinces[state_id])
	{
		for(var key_province_id in provinces[state_id][key_region_id])
		{
			if(key_province_id == province_id)
			{
				real_region_id = key_region_id;
				break;
			}
		}
	}

	// Si region incoherente, on force la region
	if(real_region_id != region_id && real_region_id != '')
	{
		for(var i = 0; i < document.getElementById('regionsFormSelect').options.length; i++)
		{
			if(document.getElementById('regionsFormSelect').options[i].value == real_region_id)
			{
				document.getElementById('regionsFormSelect').selectedIndex = i;
				break;
			}
		}
		region_id = document.getElementById('regionsFormSelect').options[document.getElementById('regionsFormSelect').selectedIndex].value;
	}

	// Check if we must change map dynamically
	if(mapViewOuterDiv != null && province_id != '' && province_id != mapViewProvinceId)
	{
		changeMap(state_id, region_id, province_id, map_x, map_y);
	}
}

function reinitializeSelect(selectObj, startIndex)
{
	var optgroups = selectObj.getElementsByTagName('optgroup');
	if(optgroups.length == 0)
	{
		for(var i = (selectObj.length-1); i >= startIndex; i--)
			selectObj.remove(i);
	}
	else
	{
		if(navigator.userAgent.indexOf("Opera") != -1)
			// For Opera
			while(selectObj.childNodes.length > startIndex)
				selectObj.removeChild(selectObj.childNodes[startIndex]);
		else
			for(var i = (optgroups.length-1); i >= 0 ; i--)
				selectObj.removeChild(optgroups[i]);
	}
}

function setGeoSelect(state_id, region_id, province_id)
{
	// Set state
	if(document.getElementById('statesFormSelect') != null)
	{
		for(var i = 0; i < document.getElementById('statesFormSelect').options.length; i++)
		{
			if(document.getElementById('statesFormSelect').options[i].value == state_id)
			{
				if(document.getElementById('statesFormSelect').selectedIndex != i)
				{
					document.getElementById('statesFormSelect').selectedIndex = i;
					if(document.getElementById('regionsFormSelect') != null)
						showRegions();
				}
			}
		}
	}

	// Set region
	if(document.getElementById('regionsFormSelect') != null)
	{
		for(var i = 0; i < document.getElementById('regionsFormSelect').options.length; i++)
		{
			if(document.getElementById('regionsFormSelect').options[i].value == region_id)
			{
				if(document.getElementById('regionsFormSelect').selectedIndex != i)
				{
					document.getElementById('regionsFormSelect').selectedIndex = i;
					if(document.getElementById('provincesFormSelect') != null)
						showProvinces();
				}
			}
		}
	}

	// Set province
	if(document.getElementById('provincesFormSelect') != null)
	{
		for(var i = 0; i < document.getElementById('provincesFormSelect').options.length; i++)
		{
			if(document.getElementById('provincesFormSelect').options[i].value == province_id)
				document.getElementById('provincesFormSelect').selectedIndex = i;
		}
	}
}

function clearTownField()
{
	if(document.getElementById('town_name') != null)
	{
		if(document.getElementById('town_name').className == 'prefill-field')
		{
			document.getElementById('town_name').value = '';
			document.getElementById('town_id').value = '';
			document.getElementById('town_name').className = 'field';
		}
	}
}



/***** Manage Cookies *****/

function setCookie(name, value, expires, path, domain, secure)
{
	var szCookie =	name + "=" + escape (value) +
			((expires) ? "; expires=" + expires.toGMTString() : "") +
			((path) ? "; path=" + path : "") +
			((domain) ? "; domain=" + domain : "") +
			((secure) ? "; secure" : "");
	document.cookie = szCookie;
}

function getCookie(c_name)
{
	if(document.cookie.length > 0)
	{
		c_start = document.cookie.indexOf(c_name + "=");
		if(c_start != -1)
		{
			c_start = c_start + c_name.length + 1;
			c_end = document.cookie.indexOf(";", c_start);
			if (c_end == -1) c_end = document.cookie.length;
			return unescape(document.cookie.substring(c_start, c_end));
		}
	}
	return "";
}

// Set or unset selection
function setSelection(imgObj, id)
{
	var selection = getCookie('SE');
	if(selection != null && selection != '')
		var sArray = selection.split('-');
	else
		var sArray = new Array();

	// Expiration in ten years
	var expDate = new Date();
	expDate.setTime(expDate.getTime() + 10*365*24*60*60*1000);

	// Already checked : uncheck
	var index = in_array(id, sArray);
	if(index > -1)
	{
		if(imgObj != null)
		{
			imgObj.style.width = "12px";
			imgObj.style.height = "12px";
			imgObj.src = "images/checkbox_off.gif";
		}
		if(document.getElementById('add-selection-link') != null)
			document.getElementById('add-selection-link').innerHTML = "A&ntilde;adir a mi selecci&oacute;n";
		sArray.splice(index, 1);
		selection = sArray.join('-');
		setCookie('SE', selection, expDate, '/');
	}
	// Not checked : Check
	else
	{
		if(imgObj != null)
		{
			imgObj.style.width = "12px";
			imgObj.style.height = "12px";
			imgObj.src = "images/checkbox_on.gif";
		}
		if(document.getElementById('add-selection-link') != null)
			document.getElementById('add-selection-link').innerHTML = "Suprimir de mi selecci&oacute;n";
		sArray[sArray.length] = id;
		selection = sArray.join('-');
		setCookie('SE', selection, expDate, '/');
	}

	// Set label about selection
	if(document.getElementById('selection-link') != null)
	{
		var count = sArray.length;
		if(count > 1)
			var label = "Ver mi selecci&oacute;n (%num anuncios)";
		else if(count == 1)
			var label = "Ver mi selecci&oacute;n (%num anuncio)";
		else
			var label = "Editar mi selecci&oacute;n de anuncios";
		label = str_replace('%num', count, label);
		document.getElementById('selection-link').innerHTML = label;
	}
}

// Check if value is in array
function in_array(value, sArray)
{
	for(var i = 0, l = sArray.length; i < l; i++)
	{
		if(sArray[i] == value)
		{
			return i;
		}
	}

	return -1;
}

function str_replace(search, replace, subject)
{
	var s = subject;
	var ra = r instanceof Array, sa = s instanceof Array;
	var f = [].concat(search);
	var r = [].concat(replace);
	var i = (s = [].concat(s)).length;
	var j = 0;

	while (j = 0, i--)
	{
		if (s[i])
		{
			while (s[i] = (s[i]+'').split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
		}
	}

	return sa ? s : s[0];
}



/***** Char Counter *****/

function char_counter(textareaId, counterId, nbCharMax)
{
	StrLen = document.getElementById(textareaId).value.length;
	if (StrLen > nbCharMax)
	{
		document.getElementById(textareaId).value = document.getElementById(textareaId).value.substring(0, nbCharMax);
		CharsLeft = 0;
	}
	else
	{
		CharsLeft = nbCharMax - StrLen;
	}
	document.getElementById(counterId).innerHTML = CharsLeft;
}


function isEmail(string)
{
	return (string.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1);
}



/***** HTML entities management *****/

// Encode une chaîne
function htmlentities(text)
{
	text = text.replace(/"/g,'&quot;'); // 34 22
	text = text.replace(/&/g,'&amp;'); // 38 26
	text = text.replace(/\'/g,'&#39;'); // 39 27
	text = text.replace(/</g,'&lt;'); // 60 3C
	text = text.replace(/>/g,'&gt;'); // 62 3E
	text = text.replace(/\^/g,'&circ;'); // 94 5E
	text = text.replace(//g,'&lsquo;'); // 145 91
	text = text.replace(//g,'&rsquo;'); // 146 92
	text = text.replace(//g,'&ldquo;'); // 147 93
	text = text.replace(//g,'&rdquo;'); // 148 94
	text = text.replace(//g,'&bull;'); // 149 95
	text = text.replace(//g,'&ndash;'); // 150 96
	text = text.replace(//g,'&mdash;'); // 151 97
	text = text.replace(//g,'&tilde;'); // 152 98
	text = text.replace(//g,'&trade;'); // 153 99
	text = text.replace(//g,'&scaron;'); // 154 9A
	text = text.replace(//g,'&rsaquo;'); // 155 9B
	text = text.replace(//g,'&oelig;'); // 156 9C
	text = text.replace(//g,'&#357;'); // 157 9D
	text = text.replace(//g,'&#382;'); // 158 9E
	text = text.replace(//g,'&Yuml;'); // 159 9F
	text = text.replace(/ /g,'&nbsp;'); // 160 A0
	text = text.replace(/¡/g,'&iexcl;'); // 161 A1
	text = text.replace(/¢/g,'&cent;'); // 162 A2
	text = text.replace(/£/g,'&pound;'); // 163 A3
	text = text.replace(/ /g,'&curren;'); // 164 A4
	text = text.replace(/¥/g,'&yen;'); // 165 A5
	text = text.replace(/Š/g,'&brvbar;'); // 166 A6
	text = text.replace(/§/g,'&sect;'); // 167 A7
	text = text.replace(/š/g,'&uml;'); // 168 A8
	text = text.replace(/©/g,'&copy;'); // 169 A9
	text = text.replace(/ª/g,'&ordf;'); // 170 AA
	text = text.replace(/«/g,'&laquo;'); // 171 AB
	text = text.replace(/¬/g,'&not;'); // 172 AC
	text = text.replace(/­/g,'&shy;'); // 173 AD
	text = text.replace(/®/g,'&reg;'); // 174 AE
	text = text.replace(/¯/g,'&macr;'); // 175 AF
	text = text.replace(/°/g,'&deg;'); // 176 B0
	text = text.replace(/±/g,'&plusmn;'); // 177 B1
	text = text.replace(/²/g,'&sup2;'); // 178 B2
	text = text.replace(/³/g,'&sup3;'); // 179 B3
	text = text.replace(/Ž/g,'&acute;'); // 180 B4
	text = text.replace(/µ/g,'&micro;'); // 181 B5
	text = text.replace(/¶/g,'&para'); // 182 B6
	text = text.replace(/·/g,'&middot;'); // 183 B7
	text = text.replace(/ž/g,'&cedil;'); // 184 B8
	text = text.replace(/¹/g,'&sup1;'); // 185 B9
	text = text.replace(/º/g,'&ordm;'); // 186 BA
	text = text.replace(/»/g,'&raquo;'); // 187 BB
	text = text.replace(/Œ/g,'&frac14;'); // 188 BC
	text = text.replace(/œ/g,'&frac12;'); // 189 BD
	text = text.replace(/Ÿ/g,'&frac34;'); // 190 BE
	text = text.replace(/¿/g,'&iquest;'); // 191 BF
	text = text.replace(/À/g,'&Agrave;'); // 192 C0
	text = text.replace(/Á/g,'&Aacute;'); // 193 C1
	text = text.replace(/Â/g,'&Acirc;'); // 194 C2
	text = text.replace(/Ã/g,'&Atilde;'); // 195 C3
	text = text.replace(/Ä/g,'&Auml;'); // 196 C4
	text = text.replace(/Å/g,'&Aring;'); // 197 C5
	text = text.replace(/Æ/g,'&AElig;'); // 198 C6
	text = text.replace(/Ç/g,'&Ccedil;'); // 199 C7
	text = text.replace(/È/g,'&Egrave;'); // 200 C8
	text = text.replace(/É/g,'&Eacute;'); // 201 C9
	text = text.replace(/Ê/g,'&Ecirc;'); // 202 CA
	text = text.replace(/Ë/g,'&Euml;'); // 203 CB
	text = text.replace(/Ì/g,'&Igrave;'); // 204 CC
	text = text.replace(/Í/g,'&Iacute;'); // 205 CD
	text = text.replace(/Î/g,'&Icirc;'); // 206 CE
	text = text.replace(/Ï/g,'&Iuml;'); // 207 CF
	text = text.replace(/Ð/g,'&ETH;'); // 208 D0
	text = text.replace(/Ñ/g,'&Ntilde;'); // 209 D1
	text = text.replace(/Ò/g,'&Ograve;'); // 210 D2
	text = text.replace(/Ó/g,'&Oacute;'); // 211 D3
	text = text.replace(/Ô/g,'&Ocirc;'); // 212 D4
	text = text.replace(/Õ/g,'&Otilde;'); // 213 D5
	text = text.replace(/Ö/g,'&Ouml;'); // 214 D6
	text = text.replace(/×/g,'&times;'); // 215 D7
	text = text.replace(/Ø/g,'&Oslash;'); // 216 D8
	text = text.replace(/Ù/g,'&Ugrave;'); // 217 D9
	text = text.replace(/Ú/g,'&Uacute;'); // 218 DA
	text = text.replace(/Û/g,'&Ucirc;'); // 219 DB
	text = text.replace(/Ü/g,'&Uuml;'); // 220 DC
	text = text.replace(/Ý/g,'&Yacute;'); // 221 DD
	text = text.replace(/Þ/g,'&THORN;'); // 222 DE
	text = text.replace(/ß/g,'&szlig;'); // 223 DF
	text = text.replace(/à/g,'&agrave;'); // 224 E0
	text = text.replace(/á/g,'&aacute;'); // 225 E1
	text = text.replace(/â/g,'&acirc;'); // 226 E2
	text = text.replace(/ã/g,'&atilde;'); // 227 E3
	text = text.replace(/ä/g,'&auml;'); // 228 E4
	text = text.replace(/å/g,'&aring;'); // 229 E5
	text = text.replace(/æ/g,'&aelig;'); // 230 E6
	text = text.replace(/ç/g,'&ccedil;'); // 231 E7
	text = text.replace(/è/g,'&egrave;'); // 232 E8
	text = text.replace(/é/g,'&eacute;'); // 233 E9
	text = text.replace(/ê/g,'&ecirc;'); // 234 EA
	text = text.replace(/ë/g,'&euml;'); // 235 EB
	text = text.replace(/ì/g,'&igrave;'); // 236 EC
	text = text.replace(/í/g,'&iacute;'); // 237 ED
	text = text.replace(/î/g,'&icirc;'); // 238 EE
	text = text.replace(/ï/g,'&iuml;'); // 239 EF
	text = text.replace(/ð/g,'&eth;'); // 240 F0
	text = text.replace(/ñ/g,'&ntilde;'); // 241 F1
	text = text.replace(/ò/g,'&ograve;'); // 242 F2
	text = text.replace(/ó/g,'&oacute;'); // 243 F3
	text = text.replace(/ô/g,'&ocirc;'); // 244 F4
	text = text.replace(/õ/g,'&otilde;'); // 245 F5
	text = text.replace(/ö/g,'&ouml;'); // 246 F6
	text = text.replace(/÷/g,'&divide;'); // 247 F7
	text = text.replace(/ø/g,'&oslash;'); // 248 F8
	text = text.replace(/ù/g,'&ugrave;'); // 249 F9
	text = text.replace(/ú/g,'&uacute;'); // 250 FA
	text = text.replace(/û/g,'&ucirc;'); // 251 FB
	text = text.replace(/ü/g,'&uuml;'); // 252 FC
	text = text.replace(/ý/g,'&yacute;'); // 253 FD
	text = text.replace(/þ/g,'&thorn;'); // 254 FE
	text = text.replace(/ÿ/g,'&yuml;'); // 255 FF

	return text;
}

// Décode une chaîne
function html_entity_decode(text)
{
	text = text.replace(/&quot;/g,'"'); // 34 22
	text = text.replace(/&amp;/g,'&'); // 38 26	
	text = text.replace(/&#39;/g,"'"); // 39 27
	text = text.replace(/&#039;/g,"'"); // 39 27
	text = text.replace(/&lt;/g,'<'); // 60 3C
	text = text.replace(/&gt;/g,'>'); // 62 3E
	text = text.replace(/&circ;/g,'^'); // 94 5E
	text = text.replace(/&lsquo;/g,''); // 145 91
	text = text.replace(/&rsquo;/g,''); // 146 92
	text = text.replace(/&ldquo;/g,''); // 147 93
	text = text.replace(/&rdquo;/g,''); // 148 94
	text = text.replace(/&bull;/g,''); // 149 95
	text = text.replace(/&ndash;/g,''); // 150 96
	text = text.replace(/&mdash;/g,''); // 151 97
	text = text.replace(/&tilde;/g,''); // 152 98
	text = text.replace(/&trade;/g,''); // 153 99
	text = text.replace(/&scaron;/g,''); // 154 9A
	text = text.replace(/&rsaquo;/g,''); // 155 9B
	text = text.replace(/&oelig;/g,''); // 156 9C
	text = text.replace(/&#357;/g,''); // 157 9D
	text = text.replace(/&#382;/g,''); // 158 9E
	text = text.replace(/&Yuml;/g,''); // 159 9F
	text = text.replace(/&nbsp;/g,' '); // 160 A0
	text = text.replace(/&iexcl;/g,'¡'); // 161 A1
	text = text.replace(/&cent;/g,'¢'); // 162 A2
	text = text.replace(/&pound;/g,'£'); // 163 A3
	text = text.replace(/&curren;/g,' '); // 164 A4
	text = text.replace(/&yen;/g,'¥'); // 165 A5
	text = text.replace(/&brvbar;/g,'Š'); // 166 A6
	text = text.replace(/&sect;/g,'§'); // 167 A7
	text = text.replace(/&uml;/g,'š'); // 168 A8
	text = text.replace(/&copy;/g,'©'); // 169 A9
	text = text.replace(/&ordf;/g,'ª'); // 170 AA
	text = text.replace(/&laquo;/g,'«'); // 171 AB
	text = text.replace(/&not;/g,'¬'); // 172 AC
	text = text.replace(/&shy;/g,'­'); // 173 AD
	text = text.replace(/&reg;/g,'®'); // 174 AE
	text = text.replace(/&macr;/g,'¯'); // 175 AF
	text = text.replace(/&deg;/g,'°'); // 176 B0
	text = text.replace(/&plusmn;/g,'±'); // 177 B1
	text = text.replace(/&sup2;/g,'²'); // 178 B2
	text = text.replace(/&sup3;/g,'³'); // 179 B3
	text = text.replace(/&acute;/g,'Ž'); // 180 B4
	text = text.replace(/&micro;/g,'µ'); // 181 B5
	text = text.replace(/&para/g,'¶'); // 182 B6
	text = text.replace(/&middot;/g,'·'); // 183 B7
	text = text.replace(/&cedil;/g,'ž'); // 184 B8
	text = text.replace(/&sup1;/g,'¹'); // 185 B9
	text = text.replace(/&ordm;/g,'º'); // 186 BA
	text = text.replace(/&raquo;/g,'»'); // 187 BB
	text = text.replace(/&frac14;/g,'Œ'); // 188 BC
	text = text.replace(/&frac12;/g,'œ'); // 189 BD
	text = text.replace(/&frac34;/g,'Ÿ'); // 190 BE
	text = text.replace(/&iquest;/g,'¿'); // 191 BF
	text = text.replace(/&Agrave;/g,'À'); // 192 C0
	text = text.replace(/&Aacute;/g,'Á'); // 193 C1
	text = text.replace(/&Acirc;/g,'Â'); // 194 C2
	text = text.replace(/&Atilde;/g,'Ã'); // 195 C3
	text = text.replace(/&Auml;/g,'Ä'); // 196 C4
	text = text.replace(/&Aring;/g,'Å'); // 197 C5
	text = text.replace(/&AElig;/g,'Æ'); // 198 C6
	text = text.replace(/&Ccedil;/g,'Ç'); // 199 C7
	text = text.replace(/&Egrave;/g,'È'); // 200 C8
	text = text.replace(/&Eacute;/g,'É'); // 201 C9
	text = text.replace(/&Ecirc;/g,'Ê'); // 202 CA
	text = text.replace(/&Euml;/g,'Ë'); // 203 CB
	text = text.replace(/&Igrave;/g,'Ì'); // 204 CC
	text = text.replace(/&Iacute;/g,'Í'); // 205 CD
	text = text.replace(/&Icirc;/g,'Î'); // 206 CE
	text = text.replace(/&Iuml;/g,'Ï'); // 207 CF
	text = text.replace(/&ETH;/g,'Ð'); // 208 D0
	text = text.replace(/&Ntilde;/g,'Ñ'); // 209 D1
	text = text.replace(/&Ograve;/g,'Ò'); // 210 D2
	text = text.replace(/&Oacute;/g,'Ó'); // 211 D3
	text = text.replace(/&Ocirc;/g,'Ô'); // 212 D4
	text = text.replace(/&Otilde;/g,'Õ'); // 213 D5
	text = text.replace(/&Ouml;/g,'Ö'); // 214 D6
	text = text.replace(/&times;/g,'×'); // 215 D7
	text = text.replace(/&Oslash;/g,'Ø'); // 216 D8
	text = text.replace(/&Ugrave;/g,'Ù'); // 217 D9
	text = text.replace(/&Uacute;/g,'Ú'); // 218 DA
	text = text.replace(/&Ucirc;/g,'Û'); // 219 DB
	text = text.replace(/&Uuml;/g,'Ü'); // 220 DC
	text = text.replace(/&Yacute;/g,'Ý'); // 221 DD
	text = text.replace(/&THORN;/g,'Þ'); // 222 DE
	text = text.replace(/&szlig;/g,'ß'); // 223 DF
	text = text.replace(/&agrave;/g,'à'); // 224 E0
	text = text.replace(/&aacute;/g,'á'); // 225 E1
	text = text.replace(/&acirc;/g,'â'); // 226 E2
	text = text.replace(/&atilde;/g,'ã'); // 227 E3
	text = text.replace(/&auml;/g,'ä'); // 228 E4
	text = text.replace(/&aring;/g,'å'); // 229 E5
	text = text.replace(/&aelig;/g,'æ'); // 230 E6
	text = text.replace(/&ccedil;/g,'ç'); // 231 E7
	text = text.replace(/&egrave;/g,'è'); // 232 E8
	text = text.replace(/&eacute;/g,'é'); // 233 E9
	text = text.replace(/&ecirc;/g,'ê'); // 234 EA
	text = text.replace(/&euml;/g,'ë'); // 235 EB
	text = text.replace(/&igrave;/g,'ì'); // 236 EC
	text = text.replace(/&iacute;/g,'í'); // 237 ED
	text = text.replace(/&icirc;/g,'î'); // 238 EE
	text = text.replace(/&iuml;/g,'ï'); // 239 EF
	text = text.replace(/&eth;/g,'ð'); // 240 F0
	text = text.replace(/&ntilde;/g,'ñ'); // 241 F1
	text = text.replace(/&ograve;/g,'ò'); // 242 F2
	text = text.replace(/&oacute;/g,'ó'); // 243 F3
	text = text.replace(/&ocirc;/g,'ô'); // 244 F4
	text = text.replace(/&otilde;/g,'õ'); // 245 F5
	text = text.replace(/&ouml;/g,'ö'); // 246 F6
	text = text.replace(/&divide;/g,'÷'); // 247 F7
	text = text.replace(/&oslash;/g,'ø'); // 248 F8
	text = text.replace(/&ugrave;/g,'ù'); // 249 F9
	text = text.replace(/&uacute;/g,'ú'); // 250 FA
	text = text.replace(/&ucirc;/g,'û'); // 251 FB
	text = text.replace(/&uuml;/g,'ü'); // 252 FC
	text = text.replace(/&yacute;/g,'ý'); // 253 FD
	text = text.replace(/&thorn;/g,'þ'); // 254 FE
	text = text.replace(/&yuml;/g,'ÿ'); // 255 FF

	return text;
}


/***** Scheduler interface management *****/

// Scroll la liste des calendriers
function schedulerScroll(monthId)
{
	var table = document.getElementById(monthId);
	var div = document.getElementById('scheduler');						

	if(/MSIE (\d+\.\d+);/.test(navigator.userAgent) && (document.documentMode == null || document.documentMode <= 7))
		var yleft = parseInt(table.offsetTop) - 14;
	else
		var yleft = parseInt(table.offsetTop) - parseInt(div.offsetTop) - 21;

	if(yleft < 0) yleft = 0;
	div.scrollTop = yleft;

	return false;
}


/***** Language management *****/

function changeLang()
{
	var langTable = new Array();
	langTable['fr'] = 'locations-vacances';
	langTable['es'] = 'alquiler-vacaciones';
	langTable['it'] = 'affitto-vacanze';
	langTable['pt'] = 'aluguer-ferias';
	langTable['de'] = 'vermietung-ferienwohnung';
	langTable['nl'] = 'vakantiehuizen';
	langTable['en'] = 'holidays-rental';

	var currentLocation = document.location.href;
	currentLocation = str_replace("http://www.vacances-location.net/alquiler-vacaciones/", '', currentLocation);
	langObj = document.getElementById('lang-select');
	document.location.href = 'http://www.vacances-location.net/' + langTable[langObj.options[langObj.selectedIndex].value] + '/' + currentLocation;
}




/* For reservation date
 ***/

function myNextDay(today_year, today_month, today_day)
{
	var tomorrow_year, tomorrow_month, tomorrow_day;
	var year = parseInt(today_year,10);
	var month = parseInt(today_month,10);
	var day = parseInt(today_day,10);
	var feb;
	var result = Array();

	// gestion des années bissextile
	if (year%4 == 0 && year%100 !=0 || year%400 == 0)
	{
		feb = 29;
	}
	else
	{
		feb = 28;
	}

	// Nombre de jours pour chaque mois
	var nbDays = new Array(31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

	// On calcul
	if (month == 12 && day == 31)
	{
		tomorrow_year = year + 1;
		tomorrow_month = 1;
		tomorrow_day = 1;
	}
	else if(day == nbDays[month-1])
	{
		tomorrow_year = year;
		tomorrow_month = month + 1;
		tomorrow_day = 1;
	}
	else
	{
		tomorrow_year = year;
		tomorrow_month = month;
		tomorrow_day = day + 1;
	}
	
	result["year"] = tomorrow_year;
	if(tomorrow_month < 10) result["month"] = "0" + tomorrow_month; else result["month"] = tomorrow_month;
	if(tomorrow_day < 10) result["day"] = "0" + tomorrow_day; else result["day"] = tomorrow_day;
	
	return result;
}

function manageReservationDates(e)
{
	if(e.yyyy != null && e.mm != null && e.dd != null)
	{
		var nextDay = myNextDay(e.yyyy,e.mm,e.dd);
		var reservationDate = nextDay['year'] + '' + nextDay['month'] + '' + nextDay['day'];
		datePickerController.setRangeLow('ed', reservationDate);
	}
}
