	if(Array.prototype.push && ([0].push(true)==true)) Array.prototype.push = null;
	if(Array.prototype.splice && typeof([0].splice(0))=="number") Array.prototype.splice = null;
	
	if(!Array.prototype.shift) {
		function array_shift() {
			firstElement = this[0];
			this.reverse();
			this.length = Math.max(this.length-1,0);
			this.reverse();
			return firstElement;
		}
		Array.prototype.shift = array_shift;
	}
	
	if(!Array.prototype.unshift) {
		function array_unshift() {
			this.reverse();
			for(var i=arguments.length-1;i>=0;i--){
				this[this.length]=arguments[i]
			}
			this.reverse();
			return this.length
		}
		Array.prototype.unshift = array_unshift;
	}
	
	if(!Array.prototype.push) {
		function array_push() {
			for(var i=0;i<arguments.length;i++){
				this[this.length]=arguments[i]
			};
			return this.length;
		}
		Array.prototype.push = array_push;
	}
	
	if(!Array.prototype.pop) {
		function array_pop(){
			lastElement = this[this.length-1];
			this.length = Math.max(this.length-1,0);
			return lastElement;
		}
	
		Array.prototype.pop = array_pop;
	}
	
	if(!Array.prototype.splice) {
		function array_splice(ind,cnt){
			if(arguments.length == 0) return ind;
			if(typeof ind != "number") ind = 0;
			if(ind < 0) ind = Math.max(0,this.length + ind);
			if(ind > this.length) {
				if(arguments.length > 2) ind = this.length;
				else return [];
			}
			if(arguments.length < 2) cnt = this.length-ind;
			cnt = (typeof cnt == "number") ? Math.max(0,cnt) : 0;
			removeArray = this.slice(ind,ind+cnt);
			endArray = this.slice(ind+cnt);
			this.length = ind;
			for(var i=2;i<arguments.length;i++){
				this[this.length] = arguments[i];
			}
			for(var i=0;i<endArray.length;i++){
				this[this.length] = endArray[i];
			}
			return removeArray;
		}
		Array.prototype.splice = array_splice;
	}
	
	if (!window.Array.prototype.roll)
	{
		function array_roll (direction) {
			
			direction = direction || false
			if ( !direction )
			{
				this.splice(this.length, 1, this[0])
				this.splice(0,1)
			} else
			{
				this.splice(0,0, this[this.length-1])
				this.splice(this.length-1,1)
			}
		}
		window.Array.prototype.roll = array_roll; 
	}
	
	var encodeURIComponentSupport = true;
	var encodeURIComponentCharacters = ' "#$%&+,/:;<=>?@[\\]^`{|}';
	function encodeURIString(value)
	{
		if (encodeURIComponentSupport) {
			try {
				return encodeURIComponent(value);
			}
			catch(e) {
				encodeURIComponentSupport = false;
			}
		}
		
		var encodedString = '';
		for(var i=0;i<value.length;i++){
			var vchar = value.charAt(i);
			var achar = value.charCodeAt(i);
			if (encodeURIComponentCharacters.indexOf(vchar) >= 0 || achar < 32)
				encodedString += + '%' + achar.toString(16);
			else if (achar < 128)
				encodedString += vchar;
			else if (achar > 127 && achar < 2048) {
				encodedString += escape(String.fromCharCode((achar >> 6) | 192));
				encodedString += escape(String.fromCharCode((achar & 63) | 128));
			}
			else {
				encodedString += escape(String.fromCharCode((achar >> 12) | 224));
				encodedString += escape(String.fromCharCode(((achar >> 6) & 63) | 128));
				encodedString += escape(String.fromCharCode((achar & 63) | 128));
			}
		};
	
		return encodedString;
	}


	function ButtonOver(obj) {
		obj.className = obj.id + 'Hover';
	}
	
	function ButtonOut(obj) {
		obj.className = obj.id + 'Off';
	}
	
	function TextBoxFocus(obj, hint) {
		obj.className = "TextBox Focus";
		if (obj.value == hint)
			obj.value = '';
	}
	
	function TextBoxBlur(obj, hint) {
		if (obj.value == '') {
			obj.value = hint;
			obj.className = "TextBox Blur";
		}
		else {
			obj.className = "TextBox Focus";
		}
	}


	var ajaxRequestQueue = [];

	function ajaxRequest(url, element) { 
		var curRequest = new ajaxRequestQueueObject(url, element);
		if (curRequest.XmlHttp == null)
			return;
		curRequest.XmlHttp.open('GET', curRequest.url, true);
		curRequest.XmlHttp.onreadystatechange = ajaxRequestQueueStateChanged;
		ajaxRequestQueue.push(curRequest);
		curRequest.XmlHttp.send(null);
	}

	function ajaxRequestQueueObject(url, element) {
		this.XmlHttp = getXmlHttpObject();
		this.url = url;
		this.element = element;
	}

	function ajaxRequestQueueStateChanged() {
		var maxAttemps = (ajaxRequestQueue.length * 2) + 1;
		while (maxAttemps > 0 && ajaxRequestQueue.length > 0) {
			maxAttemps--;
			var curRequest = ajaxRequestQueue.shift();
			if (curRequest.XmlHttp.readyState == 4) {
				document.getElementById(curRequest.element).innerHTML = curRequest.XmlHttp.responseText;
				maxAttemps = (ajaxRequestQueue.length * 2) + 1;
			}
			else { ajaxRequestQueue.push(curRequest); }
		}
	}

	function getXmlHttpObject() {
		var xmlHttp = null;
		try {
			// Firefox, Opera 8.0+, Safari
			xmlHttp = new XMLHttpRequest();
		}
		catch(e) {
			// Internet Explorer
			try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); }
			catch(e) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }
		}
		return xmlHttp;
	}

	var CitySearch;
	var CitySearchID;
	var CitySearchTextBox;
	var CitySearchProvince;
	var CitySearchTableRows;
	var AJAXCities;

	function CitySearchInit(value) {
		CitySearchTextBox.LastSearch = value;
		CitySearchTextBox.Timer = 0;
		CitySearchTextBox.Matched = (value.length > 0);
		CitySearchTextBox.HasFocus = false;
		CitySearchTextBox.PreviousRow = -1;
		CitySearchTextBox.PreviousRowClassName = '';
		CitySearchTextBox.SelectedRow = -1;
	}

	function CitySearchFocus(hint) {
		CitySearchTextBox.className = "TextBox Focus";
		CitySearchTextBox.HasFocus = true;
		if (CitySearchTextBox.value == hint)
			CitySearchTextBox.value = '';
		else
			CitySearchProcess();
	}

	function CitySearchKeyDown(event) {
		CitySearchTableRows = document.getElementById('CitySearchTable').getElementsByTagName("tr");
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
		if (keyCode == 38) {
			if (CitySearchTableRows.length > 0)
				CitySearchHighlightRow(CitySearchTextBox.SelectedRow - 1);
			return false;
		}
		else if (keyCode == 40) {
			if (CitySearchTableRows.length > 0)
				CitySearchHighlightRow(CitySearchTextBox.SelectedRow + 1);
			return false;
		}
		else if (keyCode == 13) {
			if (CitySearchTableRows.length > 0 && CitySearchTextBox.SelectedRow >= 0)
					CitySearchSelect(CitySearchTableRows[CitySearchTextBox.SelectedRow].getElementsByTagName("td")[0].innerHTML, CitySearchTableRows[CitySearchTextBox.SelectedRow].getElementsByTagName("td")[1].innerHTML, CitySearchTableRows[CitySearchTextBox.SelectedRow].getElementsByTagName("td")[2].innerHTML)
			else if (CitySearchTableRows.length > 0 && CitySearchTextBox.SelectedRow < 0)
				CitySearchSelect(CitySearchTableRows[0].getElementsByTagName("td")[0].innerHTML, CitySearchTableRows[0].getElementsByTagName("td")[1].innerHTML, CitySearchTableRows[0].getElementsByTagName("td")[2].innerHTML)
			return false;
		}
		return true;
	}

	function CitySearchKeyUp(event) {
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
		if (keyCode == 13)
			return false;

		CitySearchProcess();
		return true;
	}

	function CitySearchKeyPress(event) {
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
		if (keyCode == 13)
			return false;
		
		return true;
	}

	function CitySearchProcess() {
		if (CitySearchTextBox.value != CitySearchTextBox.LastSearch) {
			if (CitySearchTextBox.Timer > 0) {
				clearTimeout(CitySearchTextBox.Timer);
				CitySearchTextBox.Timer = 0;
			}
			CitySearchTextBox.Matched = false;
		}
		
		if (CitySearchTextBox.value.length >= 2) {
			if (CitySearchTextBox.value != CitySearchTextBox.LastSearch) {
				CitySearchTextBox.LastSearch = CitySearchTextBox.value;
				CitySearchTextBox.Timer = setTimeout('CitySearchLookup();', 500);
			}
		}
		else {
			CitySearch.style.display = 'none';
		}
	}

	function CitySearchLookup() {
		AJAXCities.innerHTML = '<table cellpadding="0" cellspacing="0" border="0" style="width: 310px; height: 80px;"><tr><td style="width: 100%; height: 100%; text-align: center; vertical-align: middle;"><table cellpadding="4" cellspacing="0" border="0" style="margin: 0 auto;"><tr><td><img alt="" src="/nouveau/Design/Spinner.gif" style="width: 16px; height: 16px;" /></td></tr></table></td></tr></table><table id="CitySearchTable" class="defaultGridView" cellspacing="0" cellpadding="0" border="0"></table>';					
		CitySearch.style.display = '';
		CitySearchTextBox.PreviousRow = -1;
		CitySearchTextBox.SelectedRow = -1;
		CitySearchTextBox.Timer = ajaxRequest('/listeVille/AJAXCities.asp?Language=<%=Language %>&City=' + encodeURIString(CitySearchTextBox.value) + '&Province=' + encodeURIString(CitySearchProvince.value), 'AJAXCities');
	}

	function CitySearchSelect(id, city, province) {
		CitySearchID.value = parseInt(id.replace('<!--', '').replace('-->', ''));
		CitySearchTextBox.value = city;
		CitySearchTextBox.LastSearch = city;
		CitySearchTextBox.Matched = true;
		CitySearchTextBox.HasFocus = false;
		setTimeout('CitySearchClose();', 500);
	}

	function CitySearchHighlightRow(row) {
		CitySearchTableRows = document.getElementById('CitySearchTable').getElementsByTagName("tr");
		if (CitySearchTextBox.PreviousRow >= 0)
			CitySearchTableRows[CitySearchTextBox.PreviousRow].className = CitySearchTextBox.PreviousRowCssClass;

		CitySearchTextBox.SelectedRow = row; 
		
		if (CitySearchTextBox.SelectedRow < 0)
			CitySearchTextBox.SelectedRow = CitySearchTableRows.length - 1;
		else if (CitySearchTextBox.SelectedRow >= CitySearchTableRows.length)
			CitySearchTextBox.SelectedRow = 0;

		CitySearchTextBox.PreviousRow = CitySearchTextBox.SelectedRow;					
		CitySearchTextBox.PreviousRowCssClass = CitySearchTableRows[CitySearchTextBox.SelectedRow].className;
		CitySearchTableRows[CitySearchTextBox.SelectedRow].className = 'defaultGridViewSelectedRow';
	}		

	function CitySearchClose() {
		if (!CitySearchTextBox.HasFocus) {
			CitySearch.style.display = 'none';
		}
	}

	function CitySearchBlur(hint) {
		CitySearchTextBox.HasFocus = false;
		if (CitySearchTextBox.value == '') {
			CitySearchTextBox.value = hint;
			CitySearchID.value = '0';
			CitySearchTextBox.className = "TextBox Blur";
		}
		else
			CitySearchTextBox.className = "TextBox Focus";
		setTimeout('CitySearchClose();', 500);
	}
	
	function Recherche() {
		document.getElementById('SearchProvinceID').value = document.getElementById('SearchProvince').value.substr(3,document.getElementById('SearchProvince').value.length);
		document.SearchForm.submit();
	}
