﻿var lblfn = 'Free Nights Promotion';
var lblmn = 'Minimum Nights Promo';
var lblhm = 'Best Deal';

var defZoomCity = 14;
var defZoomLocation = 14;
var defZoomHotel = 17;
var defLatitude = 0;
var defLongitude = 0;

var centerpoint = new GLatLng(defLatitude, defLongitude);

function readHotelMap(url) { 
    
    var request = GXmlHttp.create();
    request.open("GET", url, true);
    request.onreadystatechange = function () {
		  if (request.readyState == 4) {

		   var xmlDoc = GXml.parse(request.responseText);		  
		   markers = xmlDoc.documentElement.getElementsByTagName("Hotel");		  		   
		  		  		  		  
          objElemHotelID = xmlDoc.getElementsByTagName("HotelID");
          objElemHotelName = xmlDoc.getElementsByTagName("HotelName");
          objElemHotelAddress = xmlDoc.getElementsByTagName("HotelAddress");
          objElemCityName = xmlDoc.getElementsByTagName("CityName");
          objElemCountryName = xmlDoc.getElementsByTagName("CountryName");
          objElemLocation = xmlDoc.getElementsByTagName("Location");
          objElemStarRating = xmlDoc.getElementsByTagName("StarRatingName");
          objElemBestDeal = xmlDoc.getElementsByTagName("BestDeal");
          objElemMinNight = xmlDoc.getElementsByTagName("MinNight");
          objElemFreeNight = xmlDoc.getElementsByTagName("FreeNight");
          objElemHotelDesc = xmlDoc.getElementsByTagName("HotelDescription");			
          objElemImage = xmlDoc.getElementsByTagName("ImageFileName");			
          objElemLatitude = xmlDoc.getElementsByTagName("Latitude");
          objElemLongitude = xmlDoc.getElementsByTagName("Longitude");	              	
                            	  
	      var iMax = markers.length
	      		  	  
	      document.getElementById("loading").style.visibility = "visible";
	      window.setTimeout(buildhotelMap, timeOut1);			  			    
		  }
	  };
    request.send(null);                   
}
       
function buildhotelMap() {
    
    if (ii < markers.length) {        
        var keep = Math.min(ii + 1, markers.length);
        while (ii < keep) {
            var nul = '';               
            var hid = objElemHotelID.item(ii).firstChild.data;                
            var htl = objElemHotelName.item(ii).firstChild.data;
            var had = objElemHotelAddress.item(ii).firstChild.data; 
            var cty = objElemCityName.item(ii).firstChild.data;        
            var cnt = objElemCountryName.item(ii).firstChild.data;  
            var loc = objElemLocation.item(ii).firstChild.data;     
            var hrt = objElemStarRating.item(ii).firstChild.data;    
            var bst = objElemBestDeal.item(ii).firstChild.data;    
            var min = objElemMinNight.item(ii).firstChild.data;    
            var fre = objElemFreeNight.item(ii).firstChild.data;                          
            var des = objElemHotelDesc.item(ii).firstChild.data;     
            var img = objElemImage.item(ii).firstChild.data;   
            var lat = parseFloat(objElemLatitude.item(ii).firstChild.data); 
            var lng = parseFloat(objElemLongitude.item(ii).firstChild.data);                                

            //validate default value for null
            if (hrt == '-'){hrt = 'N/A'};
            if (bst == '-'){bst = nul}else{bst = lblhm};
            if (min == '-'){min = nul}else{min = lblmn};
            if (fre == '-'){fre = nul}else{fre = lblfn};
            if (loc == '-'){loc = nul};
            if (img == '-'){img = 'imgCommon/tn_noimage.jpg'};
                                                        
            var id = hrt + '_' + loc + '_' + bst + '_' + min + '_' + fre + '_' + hid;                           
            var point = new GLatLng(lat, lng);
		    var mNumber = ii + 1;			
		                                            
            var html = formatHotelInfo(hid, htl, had, hrt, bst, min, fre, des, img, '', ii);                
            
            var flag = 0;
            var marker = createHotelMarker(point, id, html, hrt);                
            map.addOverlay(marker);                
            
            objddhotelList += '<option value=' + hid + '> ' + htl + '<\/option>';                
            objtbhotelList = formatHotelListing(hid, htl, had, hrt, bst, min, fre, des, img, '', ii); 
                                                            
            if (ii == 0){
                //Set Zoom and Center Default                     
                if (defLatitude == 0) {
                    centerpoint = new GLatLng(lat, lng);                    
                }                           
                map.setCenter(centerpoint, defZoomCity);
            }
            
            if (strstarRatingList.indexOf(hrt) == -1){
                var srv = hrt;
                arrstarRatingList[ss] = '<option value="' + srv + '"> ' + hrt + '<\/option>';
                strstarRatingList += hrt + ',';
                ss++;
            }
            
            if (strlocationList.indexOf(loc) == -1){
                var lcv = loc + '_'+ lat + '_' + lng;
                var lcs = '';
                
                if (loc.toLowerCase() == deflocation.toLowerCase()){
                    lcs = 'selected'
                    var currentPoint = new GLatLng(lat, lng); 
                    map.panTo(currentPoint);     
                } 
                
                arrlocationList[ll] = '<option value="' + lcv + '"  ' + lcs + '> ' + loc + '<\/option>';
                strlocationList += loc + ',';
                ll++;
            }      
            
            if (strdealList.indexOf(bst) == -1){                                                        
                var dlv = bst + '_'+ lat + '_' + lng;
                var dlc = '';
                
                if (bst.toLowerCase() == defdeal.toLowerCase()){
                    dlc = 'checked'
                    var currentPoint = new GLatLng(lat, lng); 
                    map.panTo(currentPoint);     
                }                     
                                    
                arrdealList[dd] = '<input type="checkbox" id="' + bst + '" value="' + dlv + '" onclick="filterChange(this,this.value,3)" ' + dlc + '/> ' + bst + '<br/> ';
                strdealList += bst + ',';
                dd++;
            }  
            
            if (strdealList.indexOf(min) == -1){                                                        
                var mnv = min + '_'+ lat + '_' + lng;
                var mnc = '';
                
                if (min == defdeal){
                    mnc = 'checked'
                    var currentPoint = new GLatLng(lat, lng); 
                    map.panTo(currentPoint);     
                }                     
                                    
                arrdealList[dd] = '<input type="checkbox" id="' + min + '" value="' + mnv + '" onclick="filterChange(this,this.value,3)" ' + mnc + '/> ' + min + '<br/> ';
                strdealList += min + ',';
                dd++;
            }  
            
            if (strdealList.indexOf(fre) == -1){                                                        
                var frv = fre + '_'+ lat + '_' + lng;
                var frc = '';
                
                if (fre == defdeal){
                    frc = 'checked'
                    var currentPoint = new GLatLng(lat, lng); 
                    map.panTo(currentPoint);     
                }                     
                                    
                arrdealList[dd] = '<input type="checkbox" name="chkDeal" id="' + fre + '" value="' + frv + '" onclick="filterChange(this,this.value,3)" ' + frc + '/> ' + fre + '<br/> ';
                strdealList += fre + ',';
                dd++;
            }                                                                                          
            
            if (deflocation.length > 0){
                if (loc.toLowerCase() == deflocation.toLowerCase()){gmarkers[ii].show();}else{gmarkers[ii].hide();}
            }
            
            if (defdeal.length > 0){
                gmarkers[ii].hide();
                if (bst.toLowerCase() == defdeal.toLowerCase()){gmarkers[ii].show();}
                if (min == defdeal){gmarkers[ii].show();}
                if (fre == defdeal){gmarkers[ii].show();}
            }                
            
            var divTag = document.createElement("div");
            divTag.id = 'divListHotel'+ii;
            divTag.innerHTML = objtbhotelList;
                                                                                                
            document.getElementById("divListHotel").appendChild(divTag); 
                                    
            ii++;                                
        }            
                                
        if (document.getElementById("loadingMessage")) {
        
            var pct = markers.length / 100;
            
            //document.getElementById("loadingMessage").innerHTML = "Searching Hotels...<br><b>" + ii + " of " + markers.length + "</b><br>";
            document.getElementById("loadingMessage").innerHTML = "<b>Loading Hotels... " + parseInt(ii/pct) + "% of 100% </b>";
        }        
                
	    window.setTimeout(buildhotelMap, timeOut);
	    
    } else {               
               
        document.getElementById("divSelectStarRating").innerHTML = '<select onChange="filterChange(this,this.value,1)" class="ctrlSelect160px">' +  
                                                          '<option value="0_0_0">All<\/option>' +                                                                   
                                                          arrstarRatingList.sort() + 
                                                          '<\/select>';    

        document.getElementById("divSelectLocation").innerHTML = '<select onChange="filterChange(this,this.value,2)" class="ctrlSelect160px">' +  
                                                          '<option value="0_0_0">All<\/option>' +                                                                   
                                                          arrlocationList.sort() + 
                                                          '<\/select>';    
                                                          
        document.getElementById("divSelectDeal").innerHTML = arrdealList.sort().toString().replace(/ ,/gi,'');                                                                

        //document.getElementById("divSelectHotel").innerHTML = '<select onChange="filterChange(this,this.value,4)" class="ctrlSelect160px" size="15">' +                                                                                                                                                                                            
        //                                                      objddhotelList + 
        //                                                      '<\/select>'; 
        
        document.getElementById("divSelectHotel").innerHTML = '<select onChange="myclick(this.value)" class="ctrlSelect160px" size="15">' +                                                                                                                                                                                            
                                                              objddhotelList + 
                                                              '<\/select>';         
                                                                                      
        document.getElementById("loading").style.visibility = "hidden";            
        map.setMapType(G_NORMAL_MAP);
        ii = 0;               
                                            
        //readAirportMap("http://book.asiatravel.com/LookupData.aspx?v=2&type=2");                  
        //../../../data/
                                                                                 
    }
}

// HTML object control
function show(val,type) {
    
    var cnt = 0;    
    var gmarkersID;
    var strFilterType1 = document.getElementById("ddlstarRating").value;
    var strFilterType2 = document.getElementById("ddlLocation").value;
                    
    for (var i=0; i<gmarkers.length; i++) {
        
        gmarkersID = gmarkers[i].makerID;

        var strCriteria = gmarkersID.split("_");
        var strCriteria1 = strCriteria[1];
        var strCriteria2 = strCriteria[2];
        var strCriteria3 = strCriteria[3];    
        var strCriteria4 = strCriteria[4];    
        var strCriteria5 = strCriteria[5];
        var strCriteria6 = strCriteria[6];    

        if(type==0){                          
            gmarkers[i].show();   
            cnt++;                                                       
        }else if((type==1) || (type==2)){                    
            if ((strFilterType1 == 'All') && (strFilterType2 == 'All')){
                gmarkers[i].show();
                cnt++;
            }else{                                    
                if (strFilterType1 == 'All'){
                    if (strCriteria2 == strFilterType2) {
                        gmarkers[i].show(); 
                        cnt++;                       
                    }                            
                }else if (strFilterType2 == 'All'){
                    if (strCriteria1 == strFilterType1) {
                        gmarkers[i].show();     
                        cnt++;                   
                    }                           
                }else{                        
                    if ((strCriteria1 == strFilterType1) && (strCriteria2 == strFilterType2)){
                        gmarkers[i].show();
                        cnt++;
                    }
                }                                                                       
            }
        }else if(type==3){
            if ((strCriteria3 == val) || (strCriteria4 == val) || (strCriteria5 == val)){
                gmarkers[i].show();     
                cnt++;
                // == check the checkbox ==
                document.getElementById(val).checked = true;                                   
            }              
        }else if(type==4){
            gmarkers[i].show(); 
            cnt++;
        }else if(type==5){
            if (strCriteria6 == val){
                gmarkers[i].show();     
                GEvent.trigger(gmarkers[i],"click")    
                cnt++;
            }                     
        }             
    }
    
    if (cnt==0){
        alert("No hotel matching your search criteria.");
    }
}
    
function hide(val,type) {                                

    var gmarkersID;
    var strFilterType1 = document.getElementById("ddlstarRating").value;
    var strFilterType2 = document.getElementById("ddlLocation").value;
                             
    for (var i=0; i<gmarkers.length; i++) {
    
        gmarkersID = gmarkers[i].makerID;
                        
        var strCriteria = gmarkersID.split("_");
        var strCriteria1 = strCriteria[1];
        var strCriteria2 = strCriteria[2]; 
        var strCriteria3 = strCriteria[3];  
        var strCriteria4 = strCriteria[4];    
        var strCriteria5 = strCriteria[5];              
                       
        if(type==0){                
            gmarkers[i].hide();              
        }else if((type==1) || (type==2)){                                            
            if ((strFilterType1 != 'All') && (strFilterType2 != 'All')){                
                if (gmarkersID != val + '_' + strFilterType1 + '_' + strFilterType2) {
                    gmarkers[i].hide();                        
                }                                                                
            }else{                    
                if (strFilterType1 != 'All'){
                    if (strCriteria2 != strFilterType2) {
                        gmarkers[i].hide();                        
                    }                            
                }else if (strFilterType2 != 'All'){
                    if (strCriteria1 != strFilterType1) {
                        gmarkers[i].hide();                        
                    }                           
                }else{
                    if ((strCriteria1 != strFilterType1) && (strCriteria2 != strFilterType2)){
                        gmarkers[i].hide();
                    }
                }                                       
            }                                                    
        }else if(type==3){
            if ((strCriteria3 == val) || (strCriteria4 == val) || (strCriteria5 == val)){
                gmarkers[i].hide();    

                // == check the checkbox ==
                document.getElementById(val).checked = false;                                              
            }              
        }else if(type==4){
            gmarkers[i].hide(); 
        }
    }                                                 
    // == close the info window, in case its open on a marker that we just hid
    map.closeInfoWindow();            
}

function filterChange(opt,val,src) {

    if (src==1){        
        document.getElementById("ddlstarRating").value = opt.options[opt.selectedIndex].text;
        
        hide(val,src);        
        show(val,src);                    
        
        map.setZoom(defZoomCity); 
                                                                                                                    
    }else if(src==2){
        document.getElementById("ddlLocation").value = opt.options[opt.selectedIndex].text;                       
        
        var ldt = opt.options[opt.selectedIndex].value.split("_");
                        
        if (ldt[1] != 0){
            var currentPoint = new GLatLng(ldt[1], ldt[2]);             
            map.panTo(currentPoint);                            
        }   

        hide(val,src);        
        show(val,src);    
        
        map.setZoom(defZoomLocation);                                                                                                                           
                                
    }else if(src==3){  
    
        var clk = parseFloat(document.getElementById("hdnClick").value);

        if (clk == 0){
            hide(0,0); 
        } 
                                                                                        
        var ddt = val.split("_");                  
        
        map.setZoom(defZoomCity); 
                                                
        if (opt.checked) {                        
            document.getElementById("hdnClick").value = clk + 1
                                   
            var currentPoint = new GLatLng(ddt[1], ddt[2]); 
            map.panTo(currentPoint);                                                                                                   
            show(ddt[0],src);                    
        } else {               
            document.getElementById("hdnClick").value = clk - 1
                                    
            if ((clk-1) == 0){
                show(0,0); 
                map.setCenter(centerpoint, defZoomCity);                   
            }else{
                hide(ddt[0],src);
            }             
        }             
        
    }else if(src==4){
        var i = opt.selectedIndex; 
                          
        if (i > -1) {
            hide(val,src); 
            
            GEvent.trigger(gmarkers[i],"click");           
                        
            gmarkers[i].show();                     
        }else {            
            map.closeInfoWindow();
        } 
               
    }else if (src==5){        
                    
        var ddlObj = document.getElementById('ddlstarRating');
	    ddlObj.selectedIndex = opt;
                          
        hide(val,src);        
        show(val,src);                                                                                                                               
         
    }else if (src==6){        
                    
        show(0,0);                                                                                                                               
        map.closeInfoWindow(); 
        
        //Set Zoom and Center Default        
        map.setCenter(centerpoint, defZoomCity);
    }               
}             
    
function myclick(i){
    hide(0,0); 
    show(i,5);
    location.hash="#map";
        
    //Set Zoom for Hotel
    map.setZoom(defZoomHotel); 
}
