$(document).ready(function() {

	var language = $("#language").val();
	var locale = new Object();

	locale.format = function( text )
	{
	    //check if there are two arguments in the arguments list
	    if ( arguments.length <= 1 )
	    {
	        //if there are not 2 or more arguments there is nothing to replace
	        //just return the original text
	        return text;
	    }
	    //decrement to move to the second argument in the array
	    var tokenCount = arguments.length - 2;
	    for( var token = 0; token <= tokenCount; token++ )
	    {
	        //iterate through the tokens and replace their placeholders from the original text in order
	        text = text.replace( new RegExp( "\\{" + token + "\\}", "gi" ), arguments[ token + 1 ] );
	    }
	    return text;
	};
	
	if(language == "pt")
	{
		locale.searchPath = "/horario";
		locale.searchButton = "Pesquisar";
		locale.searchValidationTitle = "Campos de pesquisa incompletos"
		locale.searchValidationOrigin = "Por favor digite a <strong>Origem</strong> da sua viagem.";
		locale.searchValidationDestination = "Por favor digite o <strong>Destino</strong> da sua viagem.";
		locale.searchValidationDate = "Por favor digite a <strong>Data</strong> da sua viagem.";

	    $('#bo_search_input_date').datepicker({ 
	        showOn: "button",  
	        buttonImage: "/images/calendar.png",  
	        buttonImageOnly: true,
	        buttonText: '',
	        clearText: 'Limpar', clearStatus: '',
	        closeText: 'Fechar', closeStatus: '',
	        prevText: '&#x3c;Anterior', prevStatus: '',
	        prevBigText: '&#x3c;&#x3c;', prevBigStatus: '',
	        nextText: 'Pr&oacute;ximo&#x3e;', nextStatus: '',
	        nextBigText: '&#x3e;&#x3e;', nextBigStatus: '',
	        currentText: 'Hoje', currentStatus: '',
	        monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho',
	                     'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
	        monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
	                          'Jul','Ago','Set','Out','Nov','Dez'],
	        monthStatus: '', yearStatus: '',
	        weekHeader: 'Sm', weekStatus: '',
	        dayNames: ['Domingo','Segunda-feira','Terca-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sabado'],
	        dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'],
	        dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sab'],
	        dayStatus: 'DD', dateStatus: 'D, M d',
	        dateFormat: 'dd/mm/yy', firstDay: 0,
	        initStatus: '', isRTL: false,
	        showMonthAfterYear: false, yearSuffix: ''                        
	    });                 
	}
	if(language == "en")
	{
		locale.searchPath = "/en/timetable";
		locale.searchButton = "Search";
		locale.searchValidationTitle = "Search fields missing"
		locale.searchValidationOrigin = "Please provide the <strong>Origin</strong> of your trip.";
		locale.searchValidationDestination = "Please provide the <strong>Destination</strong> of your trip.";
		locale.searchValidationDate = "Please provide the <strong>Date</strong> of your trip.";
		
	    $('#bo_search_input_date').datepicker({ 
			showOn: "button",  
	        buttonImage: "/images/calendar.png",  
	        buttonImageOnly: true,
	        buttonText: '',
	        dayStatus: 'DD', dateStatus: 'D, M d',
	        dateFormat: 'dd/mm/yy', firstDay: 0,
	        initStatus: '', isRTL: false,
	        showMonthAfterYear: false, yearSuffix: ''
	    });                 
		
	}
	
    function validateInputFields()
    {
    	var list = "<ul>{0}</ul>";
    	var line = "<li>{0}</li>";
    	var resultMessage = "";
        if($("#bo_search_input_origin").val() == "")
        {
        	resultMessage += locale.format(line,locale.searchValidationOrigin);
        }
        if($("#bo_search_input_destination").val() == "")
        {
        	resultMessage += locale.format(line,locale.searchValidationDestination);
        }
        if($("#bo_search_input_date").val() == "")
        {
        	resultMessage += locale.format(line,locale.searchValidationDate);
        }
        if(resultMessage == "")
        {
            return true;     
        }
        $("#bo_search_validation_message").html(locale.format(list,resultMessage));
        $('#bo_search_validation_dialog').dialog('open');
        return false;
    }
	
    // Searching Dialog            
    $("#bo_searching_dialog").dialog({
        autoOpen: false,
        title: "",
        modal: true,
        resizable: false,
        draggable: false,
        width: 470
    });     

    $(".bo_searching").click(function(e) {
    	if (e.metaKey){
    		//ctrl or shift key pressed causing the link to open in another tab/window - Avoid showing the dialog
    		return true;
    	}
    	var routeText = "";
    	var link = $(this).attr("href");
        var linkParts = link.split("/");
        if(linkParts.length>3){
        	var originId = linkParts[linkParts.length-2];
        	var destinationId = linkParts[linkParts.length-1];
        	if(boLocations["locations"][originId] && boLocations["locations"][destinationId]){
        		routeText=boLocations["locations"][originId].htmlName+"&nbsp;&nbsp;&nbsp;&gt;&nbsp;&nbsp;&nbsp;"+boLocations["locations"][destinationId].htmlName;        		
        	}
        }
        if(routeText == ""){
        	routeText = $(this).html().replace(" - ","&nbsp;&nbsp;&nbsp;&gt;&nbsp;&nbsp;&nbsp;");	
        }
        $("#bo_searching_route").html("");
        $("#bo_searching_dialog").dialog("option", "title", routeText );
        $("#bo_searching_dialog").dialog("open");
    });
    
    $("#bo_search_return").click(function() {
		var origin = $("#bo_search_input_origin").val();
		var destination = $("#bo_search_input_destination").val();
		var originId = $("#bo_search_origin_id").val();
		var destinationId = $("#bo_search_destination_id").val();
		$("#bo_search_input_origin").val(destination);
		$("#bo_search_input_destination").val(origin);
		$("#bo_search_origin_id").val(destinationId);
		$("#bo_search_destination_id").val(originId);		
		_gaq.push(["_trackEvent", "InternalAction", "SearchReturn", origin + " - " + destination, 1]);
		return false;
    });
    
    searchSubmitFunction = function() {
    	if(validateInputFields() == true){
			var originVal = $("#bo_search_input_origin").val()
			var destinationVal = $("#bo_search_input_destination").val()
			var originId = $("#bo_search_origin_id").val();
			var destinationId = $("#bo_search_destination_id").val();
			
	    	var routeText = originVal + "&nbsp;&nbsp;&nbsp;&gt;&nbsp;&nbsp;&nbsp;" + destinationVal;
	        $("#bo_searching_route").html("");
	        $("#bo_searching_dialog").dialog("option", "title", routeText );
	        $("#bo_searching_dialog").dialog("open");
	        var searchUrl = locale.searchPath;
	        var dateSeparator = "&";
	    	if(boLocations["locations"][originId] && boLocations["locations"][originId].htmlFullName == originVal && boLocations["locations"][destinationId] && boLocations["locations"][destinationId].htmlFullName == destinationVal){
	    		searchUrl += '/'+originId+'/'+destinationId;
	    		dateSeparator = "?";
	    	}
	    	else{
	    		searchUrl += '';
	    		if(boLocations["locations"][originId] && boLocations["locations"][originId].htmlFullName == originVal){
	        		searchUrl += '?o='+encodeURI(originId);
	    		}
	    		else{
	        		searchUrl += '?o='+encodeURI(originVal);        			
	    		}
	    		if(boLocations["locations"][destinationId] && boLocations["locations"][destinationId].htmlFullName == destinationVal){
	        		searchUrl += '&d='+encodeURI(destinationId);
	    		}
	    		else{
	        		searchUrl += '&d='+encodeURI(destinationVal);        			
	    		}
	    	}
	    	searchUrl += dateSeparator + "dt=" + encodeURI($("#bo_search_input_date").val());
	        window.location = searchUrl;
		}
    	return false;
    };

    $("#bo_search_input_submit").click(searchSubmitFunction);
    $("#bo_search_form").submit(searchSubmitFunction);        
    
    // search autocomplete
	searchOriginSelectFunction = function(event, ui) {
		$("#bo_search_origin_id").val(ui.item.id);
		_gaq.push(["_trackEvent", "InternalAction", "OriginSelected", ui.item.value, 1]);
	};
	searchDestinationSelectFunction = function(event, ui) {
		$("#bo_search_destination_id").val(ui.item.id);
		_gaq.push(["_trackEvent", "InternalAction", "DestinationSelected", ui.item.value, 1]);
	};
	$("#bo_search_input_origin").boLocationSearch({
		locationList: boLocations["locations"],
		selectFunction: searchOriginSelectFunction
	});
	$("#bo_search_input_destination").boLocationSearch({
		locationList: boLocations["locations"],
		selectFunction: searchDestinationSelectFunction
	});
    // Search Validation Dialog            
    $("#bo_search_validation_dialog").dialog({
        autoOpen: false,
        modal: true,
        resizable: false,
        draggable: false,
        width: 400,
        title: locale.searchValidationTitle,
        buttons: {
            "Ok": function() { 
                $(this).dialog("close"); 
            } 
        }
    });     
    
    /* Open external links with target="_blank" */
    
    $(".bo_external").attr("target","_blank");
    
	/* Track events */

    $(".bo_external").click(function() {
    	var eventCategory = "ExternalLink";
    	var eventAction = "Other";
    	var eventValue = $(this).attr("href");
    	if($(this).parents(".bo_results").length > 0)
    	{
    		eventAction = "CompanyTimetable";
    	}
    	else if($(this).parents(".bo_company_images").length > 0)
    	{
    		eventAction = "CompanyImage";
    	}
    	else if($(this).parents(".bo_twitter").length > 0)
    	{
    		eventAction = "Twitter";
    	}
    	else if($(this).parents(".widget_mundinheiro").length > 0)
    	{
    		eventAction = "Mundinheiro";
    	}
    	else if($(this).parents(".bo_affiliate_glispa_mundi").length > 0)
    	{
    		eventCategory = "AffiliateHotel";
    		eventAction = "GlispaMundi";
    		eventValue = $(this).find("img").attr('src');
    		eventValueArray = eventValue.split("/");
    		eventValue = eventValueArray[eventValueArray.length-1];
    	}
    	else if($(this).parents(".bo_affiliate_hotel_search").length > 0)
    	{
    		eventCategory = "AffiliateHotel";
    		eventAction = "UnknownAffiliateHotel";    			
    		if($('#bo_affiliate_hotel_search_form').attr('action').search('hostelworld') > 0) {
        		eventAction = "HostelWorld";    			
    		}
    		else if($('#bo_affiliate_hotel_search_form').attr('action').search('booking') > 0) {
        		eventAction = "Booking";    			    			
    		}
    		if(!eventValue)
    		{
    			eventValue = $("#bo_affiliate_hotel_search_input_destination").val();
    		}
    	}
        _gaq.push(["_trackEvent", eventCategory, eventAction, eventValue]);
    });

	/* Track ResultsView */
	var companyRealtimeList = [];
	var resultsCount = 0;
	var resultsFlag = ($(".bo_search_results_error").length > 0);
	
    $(".bo_results td img").each(function(index) {	
    	var sits = $(this).parents("tr").contents("td:eq(2)").html();
		var company = $(this).attr("title");
		if(!(company in companyRealtimeList))
		{
			companyRealtimeList[company]=0;
	    	if($.trim(sits) != "*")
	    	{
				companyRealtimeList[company]=1;
	    	}
		}
		resultsCount++;
		resultsFlag = true;
  	});
  	
  	if(resultsFlag == true)
  	{
		var route = $("#bo_search_input_origin").val() + "-" + $("#bo_search_input_destination").val();
		_gaq.push(["_trackEvent", "ResultsView", "Results Count", route, resultsCount]);
		for(company in companyRealtimeList)
		{
			_gaq.push(["_trackEvent", "ResultsView", "Company Realtime", company, companyRealtimeList[company]]);
		}
  	}
  	
  	$(".bo_new").each(function(index) {	
  		//alert($(this).position().top - 8);
  		//alert($(this).offset().top - 8);
  		var text = (language == 'en')?'New!':'Novo!';
  		var top = $(this).offset().top - 18;
  		var left = $(this).position().left + $(this).outerWidth() - 40;
  		var newDiv = jQuery('<div/>', {  text: text, css: {position: 'absolute', 'z-index': 1,top: top,left: left,color:'#FFFFFF','font-weight':'bold','font-size':'10px','background-color':'#FF3333',padding:1,border:'1px solid #FFFFFF'}});
  		$('.bo_header_logo').append(newDiv);
  	});
	
});


