/* --------------------------------------------------------------- */
// Search page - Return Trip tab
//
// var author = Remi Palard;
// author.email = remi.palard@gmail.com;
//
/* --------------------------------------------------------------- */


/* --------------------------------------------------------------- */
/* Init */
/* --------------------------------------------------------------- */
var CookieLifeTime = 90 * 24 * 3600 * 1000;  // (90 days in millisec)
var SepSearch = '__s__';
var SepElement = '#_e_#';
var globalHash = Array();
var ReturnFieldsToSave = Array('time','city1FromReturn','city1FromReturnCode','city1ToReturn','city1ToReturnCode','l1Return', 'l1ReturnDate' , 'r1Return', 'r1ReturnDate', 'ReturnAdultsNb', 'ReturnChildrenNb','ReturnTotalPassengerNb');

/* --------------------------------------------------------------- */
/* Save Search functions 
/* 
 * Structure of the cookie :
 * cookie => search1__s__search2__s__search3
 * elements => time#_e_#city1FromReturn#_e_#city1FromReturnCode#_e_#city1ToReturnCode#_e_#city1ToReturn#_e_#l1Return#_e_#l1ReturnDate#_e_#r1ReturnDate#_e_#r1Return#_e_#ReturnAdultsNb#_e_#ReturnChildrenNb
 * 
 * http://cookie.allrecipes.com/
 * --------------------------------------------------------------- */ 

function recoverSearch() {
	var s = readCookie(CookieName);	
	var now = new Date();
	var time;
	var timeCheck = true;
	var departure = new Date();
	var departureCheck = true;
	var cookieReWrite = '';

	if ( s != null ) {
		
		// Creation of select field
		var sel = '<select onchange="javascript:recoverCookie(this.value);updateMaxPassengers(\'Return\');" class="travelSavedSearch" name="savedSearch">' + "\n";		
		sel = sel + '<option value="-" selected>' + _jssRecentSearch + '</option>' + "\n";
		
		// Split each search
		var _searches = s.split(SepSearch);	
		
		for(var i=0;i<_searches.length-1;i++){	
			var h = unserializeForCookie(_searches[i]);
			
			//for (var i in h) alert(i + '=>' + h[i]);
			
			// Check time validity (90 jours)	
			if ( (now.getTime() - h['time']) > CookieLifeTime) timeCheck = false;
			else timeCheck = true;
			
			// Check departure time validity				
			var sDate = h['l1ReturnDate'].split('-');	
			departure.setDMY(sDate[2], sDate[1]-1, sDate[0]);				
			if (now.getTime() > departure.getTime() ) departureCheck = false;	 	
			else departureCheck = true; 		
			 		
			// Proceed
			if (timeCheck == true && departureCheck == true) {
				
				// Save for recover	
				globalHash.push(h);
				var hOffset = globalHash.length - 1;
				                                           
				// Create display string
				var dString = formatSavedString(h);

				// Add option to select field			
				sel = sel + '<option value="' + hOffset +'">' + dString + '</option>' + "\n";			

				// Cookie filter for overwriting
				cookieReWrite = cookieReWrite + _searches[i] + SepSearch;	
			}								
		}		
		
		// Rewrite filtered cookie
		now.setMonth(now.getMonth() + 3);
	//	setCookie(CookieName, cookieReWrite, now, "/", null, false);			
		
		// End Select
		sel = sel + '</select>' + "\n";	
		
		// Proceed
		if (globalHash.length > 0) {
			$('savedSearchSelect').innerHTML = sel;		
			show('savedSearch');
		} else {
			hide('savedSearch');				
		}					
						
	} else {
		hide('savedSearch');			
	}
}

/* --------------------------------------------------------------- */

function recoverCookie(hOffset) {	
	var f = document.forms['returnTravel'];
	
	// Get data	
	if (hOffset != '-') { // The 'Use a recent search' value in the <select></select>...
		var h = globalHash[hOffset];

		var city1FromReturnCode = "";
		var city1ToReturnCode = "";
		for (var i=0;i<ReturnFieldsToSave.length;i++) {	
			if (ReturnFieldsToSave[i] != 'time' && ReturnFieldsToSave[i] != 'city1FromReturn' && ReturnFieldsToSave[i] != 'city1ToReturn') {
				if (ReturnFieldsToSave[i] == 'city1FromReturnCode') {
					city1FromReturnCode = h[ReturnFieldsToSave[i]];
				}
				if (ReturnFieldsToSave[i] == 'city1ToReturnCode') {
					city1ToReturnCode = h[ReturnFieldsToSave[i]];
				}
				f.elements[ReturnFieldsToSave[i]].value = h[ReturnFieldsToSave[i]];
				saveCommonFields(ReturnFieldsToSave[i],h[ReturnFieldsToSave[i]]);		
			}
		}
		if (city1FromReturnCode != '') {
			var newValue = city1FromReturnCode + " | " + h['city1FromReturn'];
			f.elements['city1FromReturn'].value = newValue;
			saveCommonFields('city1FromReturn',newValue);
		}
		if (city1ToReturnCode != '') {
			var newValue = city1ToReturnCode + " | " + h['city1ToReturn'];
			f.elements['city1ToReturn'].value = newValue;
			saveCommonFields('city1ToReturn',newValue);
		}	
	}
}

/* --------------------------------------------------------------- */

function formatSavedString(h) {
	// Montreal YUL - Frankfurt FTK | Dec 12 - Dec 30 | BUS
	var cityFrom;
	var cityTo;
	var d = '';
		
	// Cities - Limited to 12 characters
	var cf = h['city1FromReturn'].split('-');
	var ct = h['city1ToReturn'].split('-');	
	var cityFrom = ((cf[0].length >12) ? cf[0].substring(0,11) + '. ' : cf[0] + ' ' );
	var cityTo = ((ct[0].length >12) ? ct[0].substring(0,11) + '. ' : ct[0] + ' ' );	
  
	// Dates
	var df = h['l1ReturnDate'].split('-');
	var dt = h['r1ReturnDate'].split('-');	
	var dateFrom = month_names[(df[1]-1)].substring(0,3) + ' ' + df[2];
	var dateTo = month_names[(dt[1]-1)].substring(0,3)+ ' ' + dt[2];	
	
	// Display
	d += cityFrom;
	d += h['city1FromReturnCode'];
	d += ' - ';
	d += cityTo;
	d += h['city1ToReturnCode'];
	d += ' | ';
	d += dateFrom;
	d += ' - ';
	d += dateTo;	

	return  d;
}

/* --------------------------------------------------------------- */

function serializeForCookie() {
		var f = document.forms['returnTravel'];			
		var s = '';
		
		// Serialize		
		for (var i=0;i<ReturnFieldsToSave.length;i++) {	
			if (i >0 ) s = s + SepEntities;
			s = s + ReturnFieldsToSave[i] + SepHash + f.elements[ReturnFieldsToSave[i]].value;			
		}				
		return escape(s); 	
}

/* --------------------------------------------------------------- */

function unserializeForCookie(s) {
	var h = {};
	var el = unescape(s).split(SepElement);
	
	// Unserialise
	for(var i=0;i<el.length;i++) h[ReturnFieldsToSave[i]] = el[i];	
	
	return h;		
}	

/* --------------------------------------------------------------- */

function returnSubmit(isAlternate) {
	
	var f = document.forms['returnTravel'];	 
	
	if ($('returnunaccompaniedWarning').style.display != 'none')
		return;
	
	if ($('returnmaxWarning').style.display != 'none')
		return;
	
	if (!isPosted){
		if(!isAlternate){
			var params = $H({"idd":"4.1.1", "trip_type":f.currentTripTab.value});
			pingSurfaid(params);
		}
		isPosted = true;

		// Patch the airport control fields since they may be not synchronized with their visual pairs. 
		["from", "to"].each(function(direction) {
			var name = "city1" + direction.capitalize() + "Return";
			var field = $(name);
			if(field.value.length > 2) {
				$(name + "Code").value = field.value.substr(0, 3).toUpperCase();
			}
		});

		f.submit();
	}
	
	// Close city popup
	if (WindowCityPopup != '') WindowCityPopup.close();	
}

/* --------------------------------------------------------------- */ 