/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


var geoRefWin;


function popGeoRef( url, winProperties )
{
    var sizeProperties = 'width=790, height=565, ';
    //var mapSize = '?p_mapSize=normal';
    if ((screen.width>=1024) && (screen.height>=768)) {
        sizeProperties = 'width=1024, height=680, ';
        //mapSize = '?p_mapSize=big';
    }
    else {
        sizeProperties = 'width='+ (screen.width-10) + ', height='+ (screen.height-65) + ', ' ;
        //mapSize = '?p_mapSize=normal';
    }

    geoRefWin=window.open(url,'carte', sizeProperties+winProperties);
    if (window.focus) {
        geoRefWin.focus()
    }
    return "carte";
}

var map;
var defaultZoom = 5;
function load() {
    if (GBrowserIsCompatible()) {

        map = new GMap2(document.getElementById("map"));
        bqc.overlayControl = new GOverviewMapControl();

        map.addControl(bqc.overlayControl);
        map.addControl(new MapTypeControl('', ''));
        map.addControl(new CompassControl());
        map.addControl(new StreetViewControl());
        map.addControl(new ZoombarControl());
        map.addControl(new GScaleControl());
        map.addControl(new ListControl());
        map.enableScrollWheelZoom();
        map.setCenter(new GLatLng(53, -80), defaultZoom);

        resizeMap();
        GEvent.addListener(map,"infowindowopen", function() {
            
            if (navigator.appName == "Microsoft Internet Explorer") {
                if (!map.getInfoWindow().getContentContainers()[0].childNodes[0].childNodes[0]){
                    if(map.getInfoWindow().getContentContainers()[0].childNodes[0].id != "pano"){
                        map.closeInfoWindow();
                    }
                } else {
                    var attrs = map.getInfoWindow().getContentContainers()[0].childNodes[0].childNodes[0].attributes;
                    for (var i = 0; attrs && i < attrs.length; i++) {
                        if (attrs[i].name == 'jstcache') {
                            map.closeInfoWindow();
                            break;
                        }
                    }
                }

            } else if (map.getInfoWindow().getContentContainers()[0].childNodes[0].childNodes[0] != null) {
                if (map.getInfoWindow().getContentContainers()[0].childNodes[0].childNodes[0].childNodes[0] &&
                    map.getInfoWindow().getContentContainers()[0].childNodes[0].childNodes[0].childNodes[0].textContent &&
                    map.getInfoWindow().getContentContainers()[0].childNodes[0].childNodes[0].childNodes[0].textContent.trim() == '') {
                    map.closeInfoWindow();
                }
            }
        });

        bqc.catsClicked = "";
        bqc.markers=new Array();
        bqc.logger = new Logger();
        bqc.spider= new KoremSpider(map,  bqc.markers);
    }
    if(typeof IE6 != "undefined" && IE6){
        setTimeout(function(){
            alert(bqc.locale.browser.ie6);
        },100);
    }
    setTimeout("checkOverview()",100);
}

function checkOverview() {
   
   var overmap =document.getElementById("map_overview");
    if (overmap) {
        bqc.overlayControl.hide(true);
        bqc.overlayControl.show(true);

    } else {
    setTimeout("checkOverview()",100);
  }
}




function resizeMap() {

    var viewPortHeight = getViewportSize()[1];
    

    var headerHeight = $('header').getDimensions().height ;
    var footerHeight = $('footerDiv').getDimensions().height;
    var mapHeight = (viewPortHeight - headerHeight - footerHeight - 15);

    var MAP_MIN_HEIGHT = 500;
    if (mapHeight < MAP_MIN_HEIGHT) {
        mapHeight = MAP_MIN_HEIGHT;
    }

    

    $('mapContainer').style.height = mapHeight + "px";
    $('map').style.height = mapHeight + "px";
    $('resultListBorder').style.height = mapHeight + "px";




    map.checkResize();
  
}


function markAllAccommodation(field, groupName){
    if (field.checked) {
        var logText = '';
        switch (groupName.toLowerCase()) {
            case "accommodation":
                logText = bqc.GAnalyticsStrings.level3.hebergement;
                break;
            case "attraction":
                logText = bqc.GAnalyticsStrings.level3.acommodation;
                break;
            default:
                logText = groupName;
                break;
        }
        bqc.gaLogger.log(bqc.params.p_mode_org, bqc.GAnalyticsStrings.level2.categorySearch, logText);
    }
    bqc[groupName + 'fatherClicked'] = true;
    var checks = document.getElementsByName(groupName);
    for (i = 0; i < checks.length; i++) {
        var checkbox = checks[i];
        if (checkbox.tagName != 'DIV') {
            if (field.checked) {
                checkbox.checked = true;
            } else {
                checkbox.checked = false;
            }
            if (checkbox.id == bqc.CHECKBOX_CIRCUIT) {
                if(bqc.catsClicked == ""){
                    bqc.catsClicked += checkbox.value;
                }else{
                    bqc.catsClicked += "," + checkbox.value;
                }
                bqc.circuits.centerSearching();
                showCircuit(checkbox);
            }
            bqc.searchManager.updateCategory(bqc.searchManager.categories[checkbox.id]);
            //checkbox.onclick.apply(checkbox);
        }
    }
    bqc[groupName + 'fatherClicked'] = false;
}

//Will add a print function that will check the print mode and will call the right struts
function launchPrint(){
    bqc.gaLogger.log(bqc.params.p_mode_org, bqc.GAnalyticsStrings.level2.print);
    
    if(bqc.router.isActive()){
        $('mailPrintForm').action = "bqc/routingMailPrint.do";
        $('mailPrintForm').target = bqc.router.printRoute(false);
        $('mailPrintForm').submit();
    }else if(bqc.searchManager.isProximity){
        $('mailPrintForm').action = "bqc/proximityMailPrint.do";
        $('mailPrintForm').target = printProximity(false);
        $('mailPrintForm').submit();
    }else{
        $('mailPrintForm').action = "bqc/searchMailPrint.do";
        $('mailPrintForm').target = printSearch(false);
        $('mailPrintForm').submit();
    }
}

//Will add a print function that will check the print mode and will call the right struts
function launchEmail(){
    bqc.gaLogger.log(bqc.params.p_mode_org, bqc.GAnalyticsStrings.level2.email);
    if(bqc.router.isActive()){
        $('mailPrintForm').action = "bqc/routingMailPrint.do";
        $('mailPrintForm').target = bqc.router.printRoute(true);
        $('mailPrintForm').submit();
    }else if(bqc.searchManager.isProximity){
        $('mailPrintForm').action = "bqc/proximityMailPrint.do";
        $('mailPrintForm').target = printProximity(true);
        $('mailPrintForm').submit();
    }else{
        $('mailPrintForm').action = "bqc/searchMailPrint.do";
        $('mailPrintForm').target = printSearch(true);
        $('mailPrintForm').submit();
    }
}

function clearMailPrintForm(){
    if($("fromTitle")){
        $("fromTitle").parentNode.removeChild($("fromTitle"));
    }
    if($("toTitle")){
        $("toTitle").parentNode.removeChild($("toTitle"));
    }
    if($("from")){
        $("from").parentNode.removeChild($("from"));
    }
    if($("to")){
        $("to").parentNode.removeChild($("to"));
    }
    if($("longitude")){
        $("longitude").parentNode.removeChild($("longitude"));
    }
    if($("latitude")){
        $("latitude").parentNode.removeChild($("latitude"));
    }
    if($("mapType")){
        $("mapType").parentNode.removeChild($("mapType"));
    }
    if($("zoomLevel")){
        $("zoomLevel").parentNode.removeChild($("zoomLevel"));
    }
    if($("p_unit")){
        $("p_unit").parentNode.removeChild($("p_unit"));
    }
    if($("isMail")){
        $("isMail").parentNode.removeChild($("isMail"));
    }
    if($("visibleSegmentListInfos")){
        $("visibleSegmentListInfos").parentNode.removeChild($("visibleSegmentListInfos"));
    }
    if($("waypoints")){
        $("waypoints").parentNode.removeChild($("waypoints"));
    }
    if($("addIds")){
        $("addIds").parentNode.removeChild($("addIds"));
    }
    if($("regionPrint")){
        $("regionPrint").parentNode.removeChild($("regionPrint"));
    }
    if($("servicePoint")){
        $("servicePoint").parentNode.removeChild($("servicePoint"));
    }
    if($("distances")){
        $("distances").parentNode.removeChild($("distances"));
    }
    if($("p_mode")){
        $("p_mode").parentNode.removeChild($("p_mode"));
    }
    if($("p_mailBannerId")){
        $("p_mailBannerId").parentNode.removeChild($("p_mailBannerId"));
    }
    if($("p_fromSite")){
        $("p_fromSite").parentNode.removeChild($("p_fromSite"));
    }
    if($("p_mailto")){
        $("p_mailto").parentNode.removeChild($("p_mailto"));
    }
    if($("p_lcode")){
        $("p_lcode").parentNode.removeChild($("p_lcode"));
    }
    if($("p_circuitId")){
        $("p_circuitId").parentNode.removeChild($("p_circuitId"));
    }
}

function printProximity(isMail){
    clearMailPrintForm();
    var mailForm = $("mailPrintForm");
    var input = document.createElement("input");
    input.type = "hidden";
    input.name = "isMail";
    input.id = "isMail";
    input.value = isMail;
    mailForm.appendChild(input);

    var zoomLevel = map.getZoom();
    var center = map.getCenter();
    var centerY = center.lat();
    var centerX = center.lng();
    var bounds = map.getBounds();
    var mapType = getMapType(map);

    input = document.createElement("input");
    input.type = "hidden";
    input.name = "longitude";
    input.id = "longitude";
    input.value = centerX;
    mailForm.appendChild(input);

    input = document.createElement("input");
    input.type = "hidden";
    input.name = "latitude";
    input.id = "latitude";
    input.value = centerY;
    mailForm.appendChild(input);

    input = document.createElement("input");
    input.type = "hidden";
    input.name = "mapType";
    input.id = "mapType";
    input.value = mapType;
    mailForm.appendChild(input);

    if(bqc.searchManager.referenceMarker){
        input = document.createElement("input");
        input.type = "hidden";
        input.name = "servicePoint";
        input.id = "servicePoint";
        input.value = bqc.searchManager.referenceMarker.json.addId;
        mailForm.appendChild(input);
    }

    input = document.createElement("input");
    input.type = "hidden";
    input.name = "p_unit";
    input.id = "p_unit";
    if(bqc.params.p_unit){
        input.value = bqc.params.p_unit.toLowerCase();
    }else{
        input.value = "km";
    }
    mailForm.appendChild(input);

    var addIds = "";
    var distances = "";
    for(var l = 0; l < bqc.searchManager.markedMarkers.length; l++){
        var addId = bqc.searchManager.markedMarkers[l].json.addId;
        var distance = bqc.searchManager.markedMarkers[l].json.distance;
        if (distances != "") {
            distances += "|";
        }
        if (addIds != "") {
            addIds += "|";
        }
        distances += distance;
        addIds += addId;
    }
    input = document.createElement("input");
    input.type = "hidden";
    input.name = "addIds";
    input.id = "addIds";
    input.value = addIds;
    mailForm.appendChild(input);

    input = document.createElement("input");
    input.type = "hidden";
    input.name = "distances";
    input.id = "distances";
    input.value = distances;
    mailForm.appendChild(input);

    input = document.createElement("input");
    input.type = "hidden";
    input.name = "regionPrint";
    input.id = "regionPrint";
    input.value = $("regions").value;

    var selectedRegion = input.value = $("regions").value;
    var multiRegion  = $("multiRegionId").value;
    // *** One regtion is selected
    if (parseInt(selectedRegion) != 0) {
        input.value  = $("regions").value;
    // *** We check if there is a multiregion
    } else if (multiRegion) {
        input.value    = multiRegion;
    }

    mailForm.appendChild(input);

    if(bqc.circuits.kml.id && bqc.circuits.kml.id.length){
        input = document.createElement("input");
        input.type = "hidden";
        input.name = "p_circuitId";
        input.id = "p_circuitId";
        input.value = bqc.circuits.kml.id;
        mailForm.appendChild(input);
    }

    input = document.createElement("input");
    input.type = "hidden";
    input.name = "zoomLevel";
    input.id = "zoomLevel";
    input.value = zoomLevel;
    mailForm.appendChild(input);

    if(bqc.params.p_mode){
        input = document.createElement("input");
        input.type = "hidden";
        input.name = "p_mode";
        input.id = "p_mode";
        input.value = bqc.params.p_mode;
        mailForm.appendChild(input);
    }

    if(bqc.params.p_mailBannerId){
        input = document.createElement("input");
        input.type = "hidden";
        input.name = "p_mailBannerId";
        input.id = "p_mailBannerId";
        input.value = bqc.params.p_mailBannerId;
        mailForm.appendChild(input);
    }

    if(bqc.params.p_fromSite){
        input = document.createElement("input");
        input.type = "hidden";
        input.name = "p_fromSite";
        input.id = "p_fromSite";
        input.value = bqc.params.p_fromSite;
        mailForm.appendChild(input);
    }

    if(bqc.params.p_mailto){
        input = document.createElement("input");
        input.type = "hidden";
        input.name = "p_mailto";
        input.id = "p_mailto";
        input.value = bqc.params.p_mailto;
        mailForm.appendChild(input);
    }

    input = document.createElement("input");
    input.type = "hidden";
    input.name = "p_lcode";
    input.id = "p_lcode";
    input.value = bqc.locale.language;
    mailForm.appendChild(input);

    return openPrintEmptyWindow();
}

function printSearch(isMail){
    clearMailPrintForm();
    var mailForm = $("mailPrintForm");
    var input = document.createElement("input");
    input.type = "hidden";
    input.name = "isMail";
    input.id = "isMail";
    input.value = isMail;
    mailForm.appendChild(input);
    
    var zoomLevel = map.getZoom();
    var center = map.getCenter();
    var centerY = center.lat();
    var centerX = center.lng();
    var bounds = map.getBounds();
    var mapType = getMapType(map);

    input = document.createElement("input");
    input.type = "hidden";
    input.name = "longitude";
    input.id = "longitude";
    input.value = centerX;
    mailForm.appendChild(input);

    input = document.createElement("input");
    input.type = "hidden";
    input.name = "latitude";
    input.id = "latitude";
    input.value = centerY;
    mailForm.appendChild(input);

    input = document.createElement("input");
    input.type = "hidden";
    input.name = "mapType";
    input.id = "mapType";
    input.value = mapType;
    mailForm.appendChild(input);

    var addIds = "";
    for(var l = 0; l < bqc.searchManager.markedMarkers.length; l++){
        var addId = bqc.searchManager.markedMarkers[l].json.addId;
        if (addIds != "") {
            addIds += "|";
        }
        addIds += addId;
    }
    input = document.createElement("input");
    input.type = "hidden";
    input.name = "addIds";
    input.id = "addIds";
    input.value = addIds;
    mailForm.appendChild(input);

    input = document.createElement("input");
    input.type = "hidden";
    input.name = "regionPrint";
    input.id = "regionPrint";
    input.value = getRegionValue();

    mailForm.appendChild(input);

    if(bqc.circuits.kml.id && bqc.circuits.kml.id.length){
        input = document.createElement("input");
        input.type = "hidden";
        input.name = "p_circuitId";
        input.id = "p_circuitId";
        input.value = bqc.circuits.kml.id;
        mailForm.appendChild(input);
    }

    input = document.createElement("input");
    input.type = "hidden";
    input.name = "zoomLevel";
    input.id = "zoomLevel";
    input.value = zoomLevel;
    mailForm.appendChild(input);

    if(bqc.params.p_mode){
        input = document.createElement("input");
        input.type = "hidden";
        input.name = "p_mode";
        input.id = "p_mode";
        input.value = bqc.params.p_mode;
        mailForm.appendChild(input);
    }

    if(bqc.params.p_mailBannerId){
        input = document.createElement("input");
        input.type = "hidden";
        input.name = "p_mailBannerId";
        input.id = "p_mailBannerId";
        input.value = bqc.params.p_mailBannerId;
        mailForm.appendChild(input);
    }

    if(bqc.params.p_fromSite){
        input = document.createElement("input");
        input.type = "hidden";
        input.name = "p_fromSite";
        input.id = "p_fromSite";
        input.value = bqc.params.p_fromSite;
        mailForm.appendChild(input);
    }

    if(bqc.params.p_mailto){
        input = document.createElement("input");
        input.type = "hidden";
        input.name = "p_mailto";
        input.id = "p_mailto";
        input.value = bqc.params.p_mailto;
        mailForm.appendChild(input);
    }

    input = document.createElement("input");
    input.type = "hidden";
    input.name = "p_lcode";
    input.id = "p_lcode";
    input.value = bqc.locale.language;
    mailForm.appendChild(input);

    return openPrintEmptyWindow();
}

function openPrintEmptyWindow() {
    var popupWindow = window.open("Loading.jsp", "_blank", "location=no,toolbar=no,titlebar=no,status=yes,resizable=yes,scrollbars=yes,width=700,height=700");
    var millis = new Date().getTime();
    popupWindow.name = "popupwindow-" + millis;
    popupWindow.focus();
    return popupWindow.name;
}

function unMarkFather(field, fatherName){
    var father = document.getElementById(fatherName);
    var circuitLogged = false;
    if (!field.checked) {
        father.checked = false;
    }else if(field.id == bqc.CHECKBOX_CIRCUIT){
        var catId = field.value;
        for(var i = 0; i < bqc.catsClicked.length; i++){
            if(bqc.catsClicked[i] == catId){
                circuitLogged = true;
            }
        }
        if(!circuitLogged){
            bqc.logger.log(null, null, bqc.params.p_mode + '', bqc.params.p_fromSite + '', 'ACTION_SEARCH_CATEGORY', catId);
        }
    }
}

function showCircuit(field){
    if (field.checked){
        bqc.gaLogger.log(bqc.params.p_mode_org, bqc.GAnalyticsStrings.level2.categorySearch, field.value);
        bqc.circuits.reset();
        bqc.circuits.load();
    } else {
        bqc.circuits.unload();
    }
}


function getRegionInfo(regionCombo,savePos, regionId ){
    var regionSelected = ( regionId || regionCombo.value );
    

    TuristRegion.clearRegions();

    

    if (regionSelected != '0') {
        bqc.showLoading();
        new Ajax.Request('getRegionInfo.do', {
            method: 'post',
            evalJSON: true,
            parameters:{
                regionCode: regionSelected
            },
            onComplete:function(transport) {
                loadJson(transport,savePos, regionSelected);
            }
        });
    }
}

function loadJson(json,savePos, regionSelected){
    TuristRegion.loadFromJSON(json, map,savePos, false);
    bqc.logger.log(null, null, bqc.params.p_mode, bqc.params.p_fromSite, "ACTION_SEARCH_REGION", regionSelected);
}

function getReducedBounds(map, sizeLeft, sizeTop, sizeRight) {
    var minx = sizeLeft;
    var miny = sizeTop;
    var maxx = map.getSize().width - sizeRight;
    var maxy = map.getSize().height - sizeTop;
    return new GLatLngBounds(
        map.fromContainerPixelToLatLng(new GPoint(minx, maxy)),
        map.fromContainerPixelToLatLng(new GPoint(maxx, miny)));
}

function getIncreasedBounds(map, sizeLeft, sizeTop, sizeRight){

    var tmpPix = map.fromLatLngToContainerPixel(map.getBounds().getSouthWest());
    tmpPix.x -= sizeLeft;
    var xmin = map.fromContainerPixelToLatLng(tmpPix).lng();

    tmpPix = map.fromLatLngToContainerPixel(map.getBounds().getNorthEast());
    tmpPix.x += sizeRight;
    var xmax = map.fromContainerPixelToLatLng(tmpPix).lng();

    tmpPix = map.fromLatLngToContainerPixel(map.getBounds().getNorthEast());
    tmpPix.y -= sizeTop;
    var ymax = map.fromContainerPixelToLatLng(tmpPix).lat();

    var boundSW = map.getBounds().getSouthWest();
    var ymin = boundSW.lat();

    var bounds = new GLatLngBounds(new GLatLng(ymin, xmin), new GLatLng(ymax, xmax));
    return bounds;
}

function launchRegionSearch(field){
    if (field.value != '0') {
        bqc.gaLogger.log(bqc.params.p_mode_org, bqc.GAnalyticsStrings.level2.regionSearch, field.value);
        getRegionInfo(field);
    }
}

bqc.createPoint = function(lat, lon, img) {
    var icon = new GIcon();
    icon.image = 'images/' + img;

    icon.iconSize = new GSize(38, 48);
    icon.iconAnchor = bqc.itinaryPointAnchor;
    icon.infoWindowAnchor = new GPoint(20, 14);
    var opts = {
        icon: icon,
        clickable: true
    }
    var marker = new GMarker(new GLatLng(lat, lon), opts);
    return marker;
}

bqc.trim = function(str) {
    return str.replace(/^\s+/, '').replace(/\s+$/, '');
}

bqc.multiResults={};
bqc.multiResults.getMbr = function(addIds){
    bqc.resultList.showList();
    bqc.resultList.showLoading();
    new Ajax.Request('extent.do', {
        method: 'post',
        evalJSON: true,
        parameters: {
            "p_add_ids": addIds
        },
        onSuccess: function(transport) {
            var bounds = new GLatLngBounds(
                new GLatLng(transport.responseJSON.ymin, transport.responseJSON.xmin),
                new GLatLng(transport.responseJSON.ymax, transport.responseJSON.xmax));
           this.map.setCenter(bounds.getCenter(), this.map.getBoundsZoomLevel(bounds));
           bounds = getIncreasedBounds(this.map, 16, 40,16);
           this.map.setCenter(bounds.getCenter(), this.map.getBoundsZoomLevel(bounds));    
           map.savePosition();
           bqc.searchManager.multiResultSearch(addIds);
        }
    });
}


bqc.multiResults.getAllHostsMbr = function(){
    new Ajax.Request('extent.do', {
        method: 'post',
        evalJSON: true,
        parameters: {
            "p_host": true
        },
        onSuccess: function(transport) {
            var bounds = new GLatLngBounds(
                new GLatLng(transport.responseJSON.ymin, transport.responseJSON.xmin),
                new GLatLng(transport.responseJSON.ymax, transport.responseJSON.xmax));
            this.map.setCenter(bounds.getCenter(), this.map.getBoundsZoomLevel(bounds));
            this.map.savePosition();
            bqc.searchManager.hostsSearch();
        }
    });
}





bqc.showLoading = function() {
    $('loadingPanel').style.display = '';
    $('regions').disabled = true;
}

bqc.hideLoading = function() {
    $('loadingPanel').style.display = 'none';
    $('regions').disabled = false;
}

