/*
 * required:
 * 	 - commons.js
 * 	 - search.js
 */
var BASE_SUITE_NH  = "nhhoteles";
var BASE_SUITE_HESPERIA  = "nhhoteleshesperia";
var BASE_SUITE_NHWORLD  = "nhhotelesnhworld";

var SEARCH_TYPE_OMNITURE = 0;
var OMNITURE_HOME_SEARCH_TYPE = 1;
var OMNITURE_RESERVATION_SEARCH_TYPE = 2;
var OMNITURE_RESULT_SEARCH_TYPE = 3;
var OMNITURE_ADVANCED_SEARCH_TYPE = 4;
var OMNITURE_PROMOTIONS_SEARCH_TYPE = 5;
var OMNITURE_HALL_SEARCH_TYPE = 6;
var OMNITURE_BUSINESS_AREA_SEARCH_TYPE = 7; //cptp, employee,...
var OMNITURE_404_PAGE_SEARCH_TYPE = 8;

var FILER_FORM_ELEMENT_HIDDEN_SERVICE = "service_{ID}_defaultLanguage";
var ELEMENT_FILTER_FORM = "filterForm";

// Tag in home link of promotions/offers.
function tagScriptForPromotions (type, promo, position, pageTitle) {
	s=s_gi(getSuite());
	s.linkTrackVars='eVar24,eVar34';
	s.eVar24= promo;
	s.eVar34= type + position;
	s.tl(this,'o', pageTitle + promo + ' - ' + position);
}

// Tag in link to pdf hotel detail.
function tagScriptForPDFHotelDetail(hotel) {
	s.pageName="Hotels:" + hotel + ":PDF";
   	s.prop6="PDF";
   	s.prop28="Hotel info: PDF";
   	s.t();
}

// Tag in link to manualCp.
function getScriptForManualCP() {
	s=s_gi(getSuite());
	s.linkTrackVars='prop34';
	s.prop34='Companies: Help: Manual Usuario';
	s.tl(this, 'o', 'Companies: Help: Manual Usuario');
}

// Tag in link to manualTp.
function getScriptForManualTP() {
	s=s_gi(getSuite());
	s.linkTrackVars='prop36';
	s.prop36='Agencies: Help: Manual Usuario';
	s.tl(this, 'o', 'Agencies: Help: Manual Usuario');
}

// Tag for networks (used by weekend extender and the organizers)
function tagScriptForNetworksInPromotions(promotion, network) {
	s=s_gi(getSuite());
	s.linkTrackVars='prop41';
	s.prop41 = 'Promo ' + promotion + ' - ' + network;
	s.tl(this, 'o', 'Promo ' + promotion + ' - ' + network); 
}

// Tag for the position of hotel links in search results.
function tagScriptForHotelsLinkPosition (position){
	s=s_gi(getSuite());
	s.linkTrackVars='prop39,eVar15';
	s.prop39='Posicion ' + position;
	s.eVar15='Posicion ' + position;
	s.tl(this,'o','Posicion ' + position); 
}

// Tag for write form errors.
function tagScriptForFormErrors(error, pageName){
	s=s_gi(getSuite());
	s.linkTrackVars='prop40, pageName';
	if (pageName != null)
		s.pageName = pageName;
	else 
		s.pageName = s.pageName;
	s.prop40 = error;
	s.tl(this, 'o', error);
}

// Tag for search form with combos country/city/hotel
function tagScriptForSearchByCombos(filtersActive){
	s=s_gi(getSuite());
	
	s.linkTrackVars = "eVar6,eVar7,eVar8,eVar11,eVar12,eVar70,eVar71,eVar72,eVar68,prop68,events";
	s.linkTrackEvents = "event30";
	
	s.eVar6 = getCountryNameForOmniture();
	s.eVar7 = getCityNameForOmniture();
	s.eVar8 = getHotelNameForOmniture();
	s.eVar11 = getDateFromForOmniture();
	s.eVar12 = getDateToForOmniture();
	s.eVar70 = getNRoomsForOmniture();
	s.eVar71 = getRoomDataForOmniture().nAdults;
	s.eVar72 = getRoomDataForOmniture().nChilds;
	s.eVar68 = getTypeSearchForOmniture();
	s.prop68 = getTypeSearchForOmniture();
	
	setVarsForServices(filtersActive);
	
	s.events = 'event30';
	
	//alert("s.eVar6: " + s.eVar6 + "; s.eVar7: " + s.eVar7 + "; s.eVar8: " + s.eVar8 + "; s.eVar11: " + s.eVar11 + "; s.eVar12: " + s.eVar12 + "; s.eVar70: " + s.eVar70 + "; s.eVar71: " + s.eVar71 + "; s.eVar72: " + s.eVar72 + "; s.eVar68: " + s.eVar68 + "; s.eProp68: " + s.eProp68);
	
	s.tl(this,'o', getTypeSearchForOmniture());
}

//Tag for search form with maporama search
function tagScriptForSearchByMaporama(filtersActive){
	s=s_gi(getSuite());
	
	s.linkTrackVars = "eVar73,eVar6,eVar7,eVar8,eVar11,eVar12,eVar70,eVar71,eVar72,eVar68,prop68,events";
	s.linkTrackEvents = "event30";
	
	s.eVar73 = getSearchTextForOmniture();
	
	if(!isDefined(omnitureSuggestSearchObjectSelected)){
		s.eVar74 = ''; 
		s.eVar75 = '';
		s.eVar6 = '';
		s.eVar7 = '';
		s.eVar8 = '';
	}else{	
		s.eVar74 = omnitureSuggestSearchObjectSelected.suggestValueSelected; 
		s.eVar75 = omnitureSuggestSearchObjectSelected.suggestNumSelected + "";
		s.eVar6 = omnitureSuggestSearchObjectSelected.country;
		s.eVar7 = omnitureSuggestSearchObjectSelected.city;
		s.eVar8 = omnitureSuggestSearchObjectSelected.hotel;
	}
		
	s.eVar11 = getDateFromForOmniture();
	s.eVar12 = getDateToForOmniture();
	s.eVar70 = getNRoomsForOmniture();
	s.eVar71 = getRoomDataForOmniture().nAdults;
	s.eVar72 = getRoomDataForOmniture().nChilds;
	s.eVar68 = getTypeSearchForOmniture();
	s.prop68 = getTypeSearchForOmniture();
	
	setVarsForServices(filtersActive);
	
	s.events = 'event30';
	
	//alert("s.eVar74: " + s.eVar74 + "; s.eVar75: " + s.eVar75 + "; s.eVar73: " + s.eVar73 + "; s.eVar6: " + s.eVar6 + "; s.eVar7: " + s.eVar7 + "; s.eVar8: " + s.eVar8 + "; s.eVar11: " + s.eVar11 + "; s.eVar12: " + s.eVar12 + "; s.eVar70: " + s.eVar70 + "; s.eVar71: " + s.eVar71 + "; s.eVar72: " + s.eVar72 + "; s.eVar68: " + s.eVar68 + "; s.eProp68: " + s.eProp68);
	s.tl(this,'o', getTypeSearchForOmniture());
}

// Method for get the account of Omniture.
// Account similar to: nhhotelesdev,nhhotelesdeven.
function getAccount(defaultLanguage, isNhworld){
	// Variables
	var COMMA = ",";
	var ENGLISH = "en";
	var NEDERLANDS = "ne";	
	var domain = document.domain;
	
	if(!isDefined(isNhworld)) var isNhworld = false;

	var suite = getSuite(domain, isNhworld);

	// LANGUAGE
	var language = defaultLanguage; 
	
	if (language == null)
		var language = domain.substring(domain.lastIndexOf(".")+1);
	
	if (language == "com"){
		language = ENGLISH;
	}else if(language == "nl"){ language = NEDERLANDS };
	
	if(language == ENGLISH && searchIsDomainHesperiaFunction(domain)){
		language = "com";
		suite = BASE_SUITE_NH + suite;
	}
	

	// S_ACCOUNT FINAL VALUE
	var account = (isNhworld)?suite: suite + language;
	if(!isNhworld && !searchIsDomainHesperiaFunction(domain)) account = suite + COMMA + account;
	if(get("s_account")) get("s_account").innerHTML = account; //To check the value of s_account quickly. Only you can do with Firebug or similar.
	return account;
} 

// Method for get the suite with the domain.
// Suite similar to nhhotelesdev.
function getSuite(domain, isNhworld){
	if (domain == null)
		domain = document.domain;
	var DEV = "dev";
	var PROD = "prod";
	
	var baseSuite = (isNhworld)?BASE_SUITE_NHWORLD : BASE_SUITE_NH;
	
	if(searchIsDomainHesperiaFunction(domain)){
		baseSuite = BASE_SUITE_HESPERIA;
	}else{
		if (domain.search('www') != -1) { 
			baseSuite = baseSuite + PROD;
		} else {
			baseSuite = baseSuite + DEV;
		}	
	}
		
	return baseSuite;
}

function searchIsDomainHesperiaFunction (domain){
	if (typeof isDomainOfHesperia !== 'function'){	
		return false;
	}else{
		return isDomainOfHesperia(domain);
	}
}

function getOldLanguage(languageNumber){
	if (languageNumber == "1") 
		return "spanish";
	else if (languageNumber == "2")
		return "english";
	else if (languageNumber == "3")
		return "dutch";
	else if (languageNumber == "4")
		return "german";
	else if (languageNumber == "5")
		return "italian";		
	else if (languageNumber == "6")
		return "french";
	else if (languageNumber == "7")
		return "portuguese";
}

function getTypeSearchForOmniture(){
	//set the value of SEARCH_TYPE_OMNITURE in page of the form
	var type = (!isDefined(SEARCH_TYPE_OMNITURE))? 0 : SEARCH_TYPE_OMNITURE;
	
	switch (type){
		case 1: return "home search";
		case 2: return "reservation search";
		case 3: return "result search";
		case 4: return "advanced search";
		case 5: return "special offers search";
		case 6: return "hall search";
		case 7: return "business area search";
		case 8: return "e404 search";
		default: return "UNDEFINED"; //not indicated by Omniture, is not error for the function.
	}
}


function getCountryNameForOmniture(){
	var countryId = getValue(SEARCH_FORM_COUNTRY_ELEMENT_NAME);
	return (countryId != null && countryId != '0')? jsCountries[getMapKey(countryId)].nameDefault : "";
}

function getCityNameForOmniture(){
	var cityId = getValue(SEARCH_FORM_CITY_ELEMENT_NAME);
	return (cityId != null && cityId != '0')? jsCities[getMapKey(cityId)].nameDefault : "";
}

function getHotelNameForOmniture(){
	var hotelId = getValue(SEARCH_FORM_HOTEL_ELEMENT_NAME);
	return (hotelId != null && hotelId != '0')? jsHotels[getMapKey(hotelId)].name : "";
}

function getDateFromForOmniture(){
	var element = get(SEARCH_FORM_DATE_FROM_ELEMENT_NAME_VIEW);
	return (element == null)? '' : element.value;
}

function getDateToForOmniture(){
	var element = get(SEARCH_FORM_DATE_TO_ELEMENT_NAME_VIEW);
	return (element == null)? '' : element.value;
}

function getNRoomsForOmniture(){
	var nRooms = getValue(SEARCH_FORM_N_ROOMS_ELEMENT_NAME);
	return (nRooms == null)? '0' : nRooms + "";
}

function getRoomDataForOmniture(){
	var roomData = new RoomData(0, 0); //view funtion RoomData in search.js
	for (var i = 1; i < MAX_ROOMS; i++) {
		var nAdults = get(getAdultElementIdFromPrefix(DEFAULT_ROOM_ELEMENT_ID, i), mapParentDocument);
		var nChilds = get(getChildElementIdFromPrefix(DEFAULT_ROOM_ELEMENT_ID, i), mapParentDocument);
		if (nAdults == null || nChilds == null) break; // no more rooms defined right now 
		roomData.nAdults += parseInt(nAdults.value);
		roomData.nChilds += parseInt(nChilds.value);
	}
	//convert to string
	roomData.nAdults += "";
	roomData.nChilds += "";
	return roomData
}

function getSearchTextForOmniture(){
	var text = getValue(SEARCH_FORM_INPUT_MAPORAMA);
	return (text == null)? '' : text;
}

/*
 * If not filtersActive, not set the omniture vars
 * require search.js for functions
 * 	- getMaxPriceSelected()
 * and for var filtersActive and other vars/constants
 */
function setVarsForServices(filtersActive){
	//if(get(ELEMENT_FILTER_FORM) != null){
	if(filtersActive){
		var services = getServicesSelectedForOmniture();
		var maxPrice = maxPrice = getMaxPriceSelected();
		if(maxPrice == "") maxPrice = "no restrictions";
	
		s.prop67 = services;
		s.eVar68 = s.prop67;
		s.prop15 = maxPrice.toString();
		s.evar13 = s.prop15;
		//alert("prop67: " + s.prop67 + "; s.prop15: " + s.prop15);
	}
}

function getServicesSelectedForOmniture(){
	var serviceElement = get(SEARCH_FORM_FILTER_PARENT_ELEMENT_ID);
	if (serviceElement == null) return;
	
	var serviceCheckboxes = serviceElement.getElementsByTagName('input');
	if (serviceCheckboxes.length == 0) return;
	
	var allServices = "";
	for (var i = 0; i < serviceCheckboxes.length; i++) {
		var service = serviceCheckboxes[i];
		if (service.checked == true && service.disabled == false){
			allServices += getServiceName(service.id.substr(SEARCH_FORM_FILTER_SERVICE_ID_PREFIX.length));
			allServices += "+";
		}
	}
	if(allServices != "") allServices = allServices.substring(0, allServices.length-1)
	return allServices;
	
}

function getServiceName(id){
	var name = getValue(FILER_FORM_ELEMENT_HIDDEN_SERVICE.replace("{ID}", id));
	return (name == null)?id + "_UNDEFINED":name;
}
