﻿﻿var directions=null;
var quickroute_request = new quickrouteREQUEST();
var lastRequestRows=[];


/**
* fonction: pour effacer une destination ou une ligne sur le tableau
* 
* @param :
*            un index pour effacer la ligne designée par l'index
* @return
*/
function deleteItinerary(index) {

	if (requestRows.length > 2) {
		requestRows.splice((index), 1);
		hideDetail();
		generateItineraryForm();
	}else{
		initForm(index);
		hideDetail();
		generateItineraryForm();
	}

}
/**
* fonction:pour inverser les Itinerarys 
* @param  
* @return  
*/
function reverseTravel() {
	requestRows = requestRows.reverse();
	hideDetail();
	generateItineraryForm();
}

/**
* fonction: pour effacer les Itinerarys ou tout le tableau 
* @param  
* @return  
*/
function clearTravel() {

	requestRows = requestRows.clear();
	initApp(2);
	generateItineraryForm();

}

/**
* fonction: pour permuter les ligne vers le bas
* 
* @param :
*            index de la ligne à permuter
* @return
*/
function PermuteItineraryDown(index) {

	var i = index;
	var j = index + 1;

	// permuter les objets formObject
	var Temp = requestRows[i];
	requestRows[i] = requestRows[i + 1];
	requestRows[i + 1] = Temp;
	hideDetail();
	generateItineraryForm();
}	

/**
* fonction: pour permuter les ligne vers le haut 
* @param : index de la ligne à permuter 
* @return  
*/
function PermuteItineraryUp(index) {
	var i = (index);
	// permuter l'affichage de données
	// permuter les objets formObject
	var Temp = requestRows[i];
	requestRows[i] = requestRows[i - 1];
	requestRows[i - 1] = Temp;
	hideDetail();
	generateItineraryForm();
}

/**
* fonction: pour valider le quikeroute avant de lancer les requetes
* @param : index de la ligne 
* @return  
*/
function validateQuickRoute(index){
	
 for(i=0;i <requestRows.length ;i++) {
	  if(requestRows[i].SHOW_DETAIL=='true'){
		
			saveItinerary($('response').value,$('stat').value,$('city').value,$('destination_type').value,$('address').value,$('city_postalCode').value,'false',i,'modifier',$('response').selectedIndex,$('city').selectedIndex,$('eventDate').value);
			if((requestRows[i].LOCATION_TYPE=='Address' || requestRows[i].LOCATION_TYPE=='Ville')&& (requestRows[i].CITY_POSTALCODE!='' || requestRows[i].ADDRESS!='')){		
				 
				currentIndexLocationValidation=i;	
				adressLocationValidationRequest(index);				 
			}	
				
	  }
	  requestRows[i].SHOW_DETAIL='false';		
	}
	
}

/**
 * fonction: construit la requete dynamiquement pour les Itinerarys choisie par l'utilisateur et on execute la requte AJAX 
 * @param 
 * @return  
 */
function getQuickRoute(fileType,booklet,overviewonly){
	
	quickroute_request = null;
	var continueQuuickRoute = 'true'; 
	//ici on valide la location avant d'aller chercher l'itineraire
	if(fileType=='png'){			
		validateQuickRoute(currentIndex);		
	}
	var LOCATION = [];	
	for(i=0; i< requestRows.length ; i++){	
		
		if(fileType=='pdf' && i==lastRequestRows.length){
			 break;
		}
			if(locationTypeHashTable.get(requestRows[i].LOCATION_TYPE)=='Address'){	 
				
			 var countryName =states.get(requestRows[i].STATE)[1].toLowerCase();	 
			 var REQUEST = {
						type : 'Address',
						ADDRESS : [ {
							location : (requestRows[i].ADDRESS=='' || requestRows[i].LOCATION_TYPE =='Ville' ? '-':requestRows[i].ADDRESS),
							CITY : {
								name : requestRows[i].CITY_POSTALCODE,
								STATE : {
									abbr : requestRows[i].STATE,
									COUNTRY : {
										name : countryName
									}
								}
							}
						} ]
					};
			 
			 LOCATION.push(REQUEST);
			} else if(locationTypeHashTable.get(requestRows[i].LOCATION_TYPE)=='Poi') {
				
					if(TypeTdrOrGisHashTable.get(requestRows[i].LOCATION_TYPE)=='TDR'){
						/*if(requestRows[i].LOCATION_TYPE=='lmrch' && requestRows[i].STATE=='quebec'){
							var countryName =states.get(requestRows[i].STATE)[1].toLowerCase();	 
							var REQUEST = {
									type : 'Address',
									ADDRESS : [ {
										location : (requestRows[i].ADDRESS=='' ? '-':requestRows[i].ADDRESS),
										CITY : {
											name : requestRows[i].CITY_POSTALCODE,
											STATE : {
												abbr : requestRows[i].STATE,
												COUNTRY : {
													Name : countryName
												}
											}
										}
									} ]
								};
							LOCATION.push(REQUEST);
						}else*/{
						var REQUEST ={
								type:'GEOPOINT',
								GEOPOINT:	
								[{
									long:requestRows[i].LONG,
									lat:requestRows[i].LAT
									
								}]										
							};
							LOCATION.push(REQUEST);
						}						
					}else{
							var countryAbbr =(states.get(requestRows[i].STATE)[1].toLowerCase()=='ca' ? 'can':'usa');
							
							var REQUEST ={
										type:'POI',
										POI:	
										[{
											id:requestRows[i].POI_ID,
											type:requestRows[i].LOCATION_TYPE,
											countryAbbr:countryAbbr
										}]										
									};
							LOCATION.push(REQUEST);
					}
			}else if(requestRows[i].LOCATION_TYPE==''){				
				alert(ressourceLang.get('avertissement_message'));
				return false;
			}			 
			
		}   
	  
		quickroute_request = {
					type : 'quick route',
					LOCATIONS : {
						count : requestRows.length,
						LOCATION : LOCATION
					},
					ROUTE_ATTRIBUTES : [ {
						ROUTE_ATTRIBUTE : [
					    {
							filetype : fileType,
							language : 'french',
							type : 'directions'					
							
						},
						{
							filetype : fileType,
							language : 'french',
							type : 'hideConstruction',
							booklet : booklet,
							overviewonly : overviewonly,
							pagesize : 'letter',
							overviewdirections : overviewonly,
							routecolor : (fileType=='pdf' ? '9966FF':'PATTERN')
							
						},	
						{
							filetype : fileType,
							language : 'french',
							type : 'hideScenic',
							booklet : booklet,
							overviewonly : overviewonly,
							pagesize : 'letter',
							overviewdirections : overviewonly,
							routecolor : (fileType=='pdf' ? '9966FF':'PATTERN')
							
						},	
						{				
							language : 'french',
							type : 'map',
							filetype : fileType,
							booklet : booklet,
							overviewonly : overviewonly,
							pagesize : 'letter',
							overviewdirections : overviewonly,
							routecolor : (fileType=='pdf' ? '9966FF':'PATTERN')
						},			
						{				
							
							language : 'french',
							type : 'totalTime',
							filetype : fileType,
							booklet : booklet,
							overviewonly : overviewonly,
							pagesize : 'letter',
							overviewdirections : overviewonly,
							routecolor : (fileType=='pdf' ? '9966FF':'PATTERN')
							
						},
						{
							
							language : 'french',
							type : 'totalDistance',
							filetype : fileType,
							booklet : booklet,
							overviewonly : overviewonly,
							pagesize : 'letter',
							overviewdirections : overviewonly,
							routecolor :(fileType=='pdf' ? '9966FF':'PATTERN')
							
						}
						
						
						]
					} ],
					MAP_ATTRIBUTES:[{			
						MAP_ATTRIBUTE:[{
							width :itineraryImageW,
							height:itineraryImageH	            
				                 }]
					}],
					REQUEST_ATTRIBUTES : {
						REQUEST_ATTRIBUTE : [ {
							type : 'kilometers'
						} ]
					}
				};
	isForm=true;
	if(fileType=='png'){	
	getDataFormVector(lastRequestRows,requestRows);
	GisQuickRouteService.doRequest(quickroute_request,{callback:handleGetDataDirections});	
	}else{		
	GisQuickRouteService.doRequest(quickroute_request,{callback:handleGetDataPdfUrl,async:true});
	}
	
	
}

/**
 * fonction: pour recuperer le fichier pdf avec Ajax apartir du serveur. 
 * @param 
 * @return  
 */
function handleGetDataPdfUrl(data){
	
	if (data != null && typeof data == 'object') {
		if (data.RESPONSE.ERROR.length == 0){	
			for (i = 0; i < data.RESPONSE.DIRECTIONSCount; i++) {
	
				//$('urlPdf').href = data.RESPONSE.MAP_IMAGE[i].url;
				//$('urlPdfBooklet').href = data.RESPONSE.MAP_IMAGE[i].url;
				
				window.open(data.RESPONSE.MAP_IMAGE[i].url,"caattp"); 
				
			}
		}else{
			return false;
		}

	} else {
		
		alert(ressourceLang.get('error_message'));
	}
}


/**
* Cette fonction génére un formulaire pour l'itinéraire   
* @param : 
* @return :
*/
function generateItineraryForm() {
	var sizeRows = requestRows.length;

	$('quickRoute').update();
	$('localisationDiv').update(); // FAUT VIDER LE FORMULAIRE POUR NE PLUS
									// AVOIR LE MEME ID FIELDSET

	var destFormHTML = '';

	for (i = 0; i < sizeRows; i++) {

		destFormHTML += getDestinationFieldset(requestRows[i], i);
	}

	$('quickRoute').update(destFormHTML);
	/*
	 * if(browser=='Microsoft Internet Explorer'){ ;//nop }else{
	 * Sortable.create("quickRoute",{tag:"fieldset",dropOnEmpty:true,constraint:false,onUpdate:function(){updateList();}}); }
	 */
}
function updateList() {
	hideDetail();
	var DragDropList = [];
	var sequence = Sortable.sequence('quickRoute');
	var list = escape(sequence);
	var sorted_ids = unescape(list).split(',');
	for ( var i = 0; i < sorted_ids.length; i++) {
		DragDropList.push(requestRows[sorted_ids[i]]);
	}
	requestRows = DragDropList;
	generateItineraryForm();
}

/**
 * Cette fonction cache la liste des suggestion dans le cas ou la localisation
 * n'est pas valide
 * 
 * @param :
 * @return :
 */
function hideErrMsg() {
	var idError = 'errMsgItinerary' + currentIndexLocationValidation;
	$(idError).remove();
}

function getCompleteAdress(index) {
	var data;

	if (requestRows[index].RESPONSE != ''
			&& locationTypeHashTable.get(requestRows[index].LOCATION_TYPE) == 'Poi'
			&& requestRows[index].ERROORISPRESENT == 'false') {

		data = (requestRows[index].RESPONSE == '' ? ''
				: unescape(requestRows[index].RESPONSE))
				+ (requestRows[index].CITY == '' ? '' : ", "
						+ requestRows[index].CITY)
				+ (requestRows[index].STATE == '' ? '' : ", "
						+ states.get(requestRows[index].STATE)[0]);

	} else if (requestRows[index].CITY_POSTALCODE != ''
			&& requestRows[index].ADDRESS == ''
			&& locationTypeHashTable.get(requestRows[index].LOCATION_TYPE) == 'Address'
			&& requestRows[index].ERROORISPRESENT == 'false') {

		data = (requestRows[index].CITY_POSTALCODE == '' ? ''
				: requestRows[index].CITY_POSTALCODE)
				+ (requestRows[index].CITY == '' ? '' : ", "
						+ requestRows[index].CITY)
				+ (requestRows[index].STATE == '' ? '' : ", "
						+ states.get(requestRows[index].STATE)[0]);
	} else if (requestRows[index].ADDRESS != ''
			&& locationTypeHashTable.get(requestRows[index].LOCATION_TYPE) == 'Address'
			&& requestRows[index].ERROORISPRESENT == 'false') {

		data = (requestRows[index].CITY_POSTALCODE == ''
				&& requestRows[index].ADDRESS == '' ? ''
				: requestRows[index].ADDRESS)
				+ (requestRows[index].CITY_POSTALCODE == '' ? '' : ", "
						+ requestRows[index].CITY_POSTALCODE)
				+ (requestRows[index].CITY == '' ? '' : ", "
						+ requestRows[index].CITY)
				+ (requestRows[index].STATE == '' ? '' : ", "
						+ states.get(requestRows[index].STATE)[0]);
	}

	return data;
}

function getSegment(index, data) {
	var segment = '<div class="directions"><p class="segment"><strong>'
			+ ressourceLang.get('quickroute_segment') + '</strong>: '
			+ getCompleteAdress(index) + '<strong>'
			+ ressourceLang.get('quickroute_to') + '</strong>'
			+ getCompleteAdress(index + 1) + '<br /><strong>'
			+ ressourceLang.get('quickroute_distance') + '</strong>: '
			+ +roundNumber(data * 1.61, 2)
			+ ressourceLang.get('quickroute_km') + ' ('
			+ roundNumber(data , 2)
			+ ressourceLang.get('quickroute_miles') + ')' + '</p>';
	return segment;
}

function roundNumber(num, dec) {
	var result = Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
	return result;
}
function getPDFIndications() {	
	GisQuickRouteService.pdfRequest(lastRequestRows, quickroute_request, {
		callback : handleGetDataPdfIndications,
		async : true
	});
}

function getDataFormVector(locationFormDataRows, rows) {
	locationFormDataRows.clear();
	for ( var i = 0; i < rows.length; i++) {
		var FormData = new locationFormData();
		FormData.location_type = rows[i].LOCATION_TYPE;
		FormData.state = rows[i].STATE;
		FormData.show_detail = rows[i].SHOW_DETAIL;
		FormData.city_selected_index = rows[i].CITY_SELECTED_INDEX;
		FormData.date = rows[i].DATE;
		FormData.poi_id = rows[i].POI_ID;
		FormData.city = rows[i].CITY;
		FormData.city_postalcode = rows[i].CITY_POSTALCODE;
		FormData.response = rows[i].RESPONSE;
		FormData.address = rows[i].ADDRESS;
		FormData.longitude = rows[i].LONG;
		FormData.erroorispresent = rows[i].ERROORISPRESENT;
		FormData.response_selected_index = rows[i].RESPONSE_SELECTED_INDEX;
		FormData.lat = rows[i].LAT;
		locationFormDataRows.push(FormData);
	}

}
/************************************************************************************************************/
