﻿/*
    DepartureCityChanged: 
        - Populates arrival citites (destinationId) according to selected departure city.
*/

function LoadArrivalCities(departureId, destinationId)
{    
	var selDest = document.getElementById(destinationId);
	var cityList = _cities[document.getElementById(departureId).value]['to'];
	selDest.options.length = 0;
	for (var i = 0; i < cityList.length; i++) { var city = cityList[i]; selDest.options[i] = new Option(city.name, city.code); }
}

function GenerateUniqueId(leng)
{
   var idLength = leng || 32;
   var chars = "0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";
   var id = '';
   for(var i = 0; i <= idLength; i++) {
      id += chars.substr( Math.floor(Math.random() * 62), 1 );
   }
   
   return (id);
}

function Ajax(url, post, containerIds, callback)
{
	var xhr_object = null;
	
	var key = GenerateUniqueId(10);
	
	if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest();
	else if(window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
	else {window.alert("AJAX ERROR: Unsupported browser!");return false;}
	xhr_object.open("POST", url, true);
	xhr_object.onreadystatechange = function()
	{
		if(xhr_object.readyState == 4)
		{
			if (xhr_object.status != 200)
			{
				var errorPopup = window.open ("", "errorPopup","");
				errorPopup.document.write(xhr_object.responseText);
				return false;
			}
			var resArray = xhr_object.responseText.split(key);
			for (var i = 0; i < resArray.length; i++) {
				if (i < containerIds.length) document.getElementById(containerIds[i]).innerHTML = resArray[i];
				else {
					if (callback == null) eval(resArray[i]);
					else callback(resArray[i]);
				}
			}
		}
	}
	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

	post += (post != "" ? "&" : "") + "_k=" + key;
		
	xhr_object.send(post);
	return true;
}


function EncURL(s)
{
	s = encodeURI(s);
	s = s.replace(/&/g,"%26");
	s = s.replace(/=/g,"%3D");
	s = s.replace(/\+/g,"%2B");
	return s;
}

function DecURL(s)
{
	s = decodeURI(s);
	s = s.replace(/\%26/g,"&");
	s = s.replace(/\%3D/g,"=");
	s = s.replace(/\%2B/g,"+");
	return s;
}


function GetSelectedChecks(name, separator) {
	var checks = document.getElementsByName(name);
	var string = "";
	var checkedCount = 0;
	for (var i = 0; i < checks.length; i++) {
		var chk = checks[i];
		if (chk.checked) { string += (checkedCount > 0 ? separator : "") + chk.value; checkedCount++; }
	}
	return string;
}

function GetSelectedRadioValue(name) {
	var radios = document.getElementsByName(name);

	for (var i = 0; i < radios.length; i++) {
		var r = radios[i];
		if (r.checked) return r.value;
	}
	
	return null;
}

function byId(id) {
	return document.getElementById(id);
}

/*
    Array.indexOf for browser that don't implement it
*/

function ArrayIndexOf(array, value)
{
    
    if(array.indexOf)
    {
        return array.indexOf(value);
    }
    else
    {
        len = array.length;
        for(var i = 0; i < len; i++)
        {
            if(array[i] == value)
            {
                return i;
            }
        }
        return -1;
    }
}

function Blinker()
{
	this.panels = [];
}

Blinker.prototype.AddPanel = function(panelId)
{
	this.panels.push(panelId);
}

Blinker.prototype.Blink = function()
{
	for (var i = 0; i < this.panels.length; i++)
	{
		var panel = document.getElementById(this.panels[i]);

		if (!panel)
		{
			alert("Blinker error !\nPanel '" + this.panels[i] + "' doesn't exist !");
			continue;
		}
		
		if (panel.style.display == "none") {
			panel.style.display = "";
		}
		
		else {
			panel.style.display = "none";
		}
	}
}

Blinker.prototype.Start = function(instanceName, interval)
{
	setInterval(instanceName + ".Blink();", interval);
}

function DestinationChanged(destCode, citySelectId, cityArray)
{
	var citySelect = byId(citySelectId);

	var lastSelectedValue = citySelect.value;

	if (!cityArray[destCode]) {
		alert("Il n'y a aucune ville destination pour cette destination !");
		return;
	}

	var arr = cityArray[destCode];

	citySelect.options.length = 0;

	for (var i = 0; i < arr.length; i++) {
		var prop = arr[i].split(";");
		var opt = new Option(prop[1], prop[0]);
		if (prop[0] == lastSelectedValue) opt.selected = true;
		citySelect.options[i] = opt;
	}
}

function RedirectWithParams(pagename, parameters)
{
    alert(pagename + parameters);
    window.location = pagename + parameters;
}

//function to check valid email address
function IsValidEmail(strEmail)
{
    
	validRegExp = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

	// search email text for regular exp matches
	if (strEmail.search(validRegExp) == -1) 
	{
		return false;
	}
	return true;
}


// ------------------------------------------------------------------------------------------------
// Cookie management (begin)
// ------------------------------------------------------------------------------------------------
function createCookie(name,value,days)
{
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name)
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name)
{
	createCookie(name,"",-1);
}
// ------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------



function RemoveAccent(charValue, upper) {
	charValue = charValue.toUpperCase();
	
	switch (charValue) {
	
		case "À" : charValue = "A"; break;
		case "Á" : charValue = "A"; break;
		case "Â" : charValue = "A"; break;
		case "Ä" : charValue = "A"; break;
		case "A" : charValue = "A"; break;
		
		case "B" : charValue = "B"; break;
		
		case "C" : charValue = "C"; break;
		case "Ç" : charValue = "C"; break;
		
		case "D" : charValue = "D"; break;		

		case "È" : charValue = "E"; break;
		case "É" : charValue = "E"; break;
		case "Ê" : charValue = "E"; break;
		case "Ë" : charValue = "E"; break;
		case "E" : charValue = "E"; break;
		
		case "F" : charValue = "F"; break;		
		case "G" : charValue = "G"; break;		
		case "H" : charValue = "H"; break;
		
		case "Î" : charValue = "I"; break;
		case "Ï" : charValue = "I"; break;
		case "Í" : charValue = "I"; break;
		case "Ì" : charValue = "I"; break;
		case "?" : charValue = "I"; break;
		case "?" : charValue = "I"; break;
		case "I" : charValue = "I"; break;		
		
		case "J" : charValue = "J"; break;		
		case "K" : charValue = "K"; break;		
		case "L" : charValue = "L"; break;		
		case "M" : charValue = "M"; break;		
		case "N" : charValue = "N"; break;
				
		case "O" : charValue = "O"; break;
		case "Ó" : charValue = "O"; break;
		case "Ô" : charValue = "O"; break;
		case "Ò" : charValue = "O"; break;
		case "Õ" : charValue = "O"; break;
		case "Ö" : charValue = "O"; break;
			
		case "P" : charValue = "P"; break;
		case "Q" : charValue = "Q"; break;
		case "R" : charValue = "R"; break;
		case "S" : charValue = "S"; break;
		case "T" : charValue = "T"; break;
		
		case "U" : charValue = "U"; break;
		case "Ú" : charValue = "U"; break;
		case "Û" : charValue = "U"; break;
		case "Ü" : charValue = "U"; break;
		case "Ù" : charValue = "U"; break;
		case "?" : charValue = "U"; break;
		
		case "V" : charValue = "V"; break;
		case "W" : charValue = "W"; break;
		case "X" : charValue = "X"; break;
		case "Y" : charValue = "Y"; break;
		case "Ÿ" : charValue = "Y"; break;
		case "Z" : charValue = "Z"; break;

	}
	
	if (upper) {return charValue;}
	else return charValue.toLowerCase();
}

function GetCaretPosition (oField) {

     // Initialize
     var iCaretPos = 0;

     // IE Support
     if (document.selection) { 

       // Set focus on the element
       oField.focus ();
  
       // To get cursor position, get empty selection range
       var oSel = document.selection.createRange ();
  
       // Move selection start to 0 position
       oSel.moveStart ('character', -oField.value.length);
  
       // The caret position is selection length
       iCaretPos = oSel.text.length;
     }

     // Firefox support
     else if (oField.selectionStart || oField.selectionStart == '0')
       iCaretPos = oField.selectionStart;

     // Return results
     return (iCaretPos);
   }

function SetCaretPosition (oField, iCaretPos) {

     // IE Support
     if (document.selection) { 

       // Set focus on the element
       oField.focus ();
  
       // Create empty selection range
       var oSel = document.selection.createRange ();
  
       // Move selection start and end to 0 position
       oSel.moveStart ('character', -oField.value.length);
  
       // Move selection start and end to desired position
       oSel.moveStart ('character', iCaretPos);
       oSel.moveEnd ('character', 0);
       oSel.select ();
     }

     // Firefox support
     else if (oField.selectionStart || oField.selectionStart == '0') {
       oField.selectionStart = iCaretPos;
       oField.selectionEnd = iCaretPos;
       oField.focus ();
     }
   }

function InsertAtCursor(myField, myValue) {
	//IE support
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
	}
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == 0) {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		myField.value = myField.value.substring(0, startPos)
		+ myValue
		+ myField.value.substring(endPos, myField.value.length);
		
		SetCaretPosition(myField, endPos + 1);
	}
	else {
		myField.value += myValue;
	}
	
	
}




function OnKeyToUpperWithoutAccent(e, input) {
	var e=window.event || e
	var keyunicode=e.charCode || e.keyCode
	
	var charValue = String.fromCharCode(keyunicode);
	
	var modCharValue = RemoveAccent(charValue, true);
	
	if (charValue != modCharValue) { InsertAtCursor(input, modCharValue); }
	else return true;

	return false;
}

function OnKeyEmail(e, input) {
	var e=window.event || e
	var keyunicode=e.charCode || e.keyCode
	
	var charValue = String.fromCharCode(keyunicode);
	
	var modCharValue = RemoveAccent(charValue, false);
	
	if (charValue != modCharValue) { InsertAtCursor(input, modCharValue); }
	else return true;

	return false;
}