
//This is a nearly clone version of GREmbed, so that the preview map work as the real Embed widget
//Variables are prefixed with CW_ to avoid ambigous with the main page.
var CWmap;
var CWcomments;
var getCommentsURL;   
var HttpRequest;
var CWmarkers;
var CWgeocoder; 
var CWtotalcomments;

var CWtowers ;
var CWtowerMarkers;
var CWtotalTowers;

var CWbuildings;
var CWbuildingMarkers;
var CWtotalBuildings;
    
function CWrefreshComments()
{
    flat = CWmap.getBounds().getSouthWest().lat();
    flng = CWmap.getBounds().getSouthWest().lng();
    tlat = CWmap.getBounds().getNorthEast().lat();
    tlng = CWmap.getBounds().getNorthEast().lng();
    CWfetchComments(flat, flng, tlat, tlng, 0); 
    
    //var minTowerVisibleZoom = 10;   //later set from vb code
    if (CWmap.getZoom() >= minTowerVisibleZoom ) 
        CWfetchTowers(flat, flng, tlat, tlng);
    else
    {
        if (CWtowers != null)    
            for (i=0; i < CWtowers.length; i++)         
                CWmap.removeOverlay(CWtowers[i].marker);              
    }
    
    if (CWmap.getZoom() >= minTowerVisibleZoom ) 
        CWfetchBuildings(flat, flng, tlat, tlng);
    else
    {
        if (CWbuildings != null)    
            for (i=0; i < CWbuildings.length; i++)         
                CWmap.removeOverlay(CWbuildings[i].marker);              
    }
        
}

function CWfetchBuildings(flat, flng, tlat, tlng)
{	    
    PageMethods.GetBuildings(flat, flng, tlat, tlng, CWloadXmlBuildings);
}

function CWfetchTowers(flat, flng, tlat, tlng)
{	    
    PageMethods.GetTowers(flat, flng, tlat, tlng, CWloadXmlTowers);
}
    
function CWfetchComments(flat, flng, tlat, tlng, dFilter)
{	
    if (window.XMLHttpRequest) 
        HttpRequest = new XMLHttpRequest();
    else                       
        HttpRequest = new ActiveXObject("Microsoft.XMLHTTP");

    if (!HttpRequest) 
        return;

 	getCommentsURL = grRoot + "GetComments.ashx?flat=" + flat + "&flng=" + flng + "&tlat=" + tlat + "&tlng=" + tlng + "&dFilter=" + dFilter;    
    HttpRequest.onreadystatechange = CWfetchCommentsCallBack;
    HttpRequest.open("GET",getCommentsURL);
    HttpRequest.send("");
}

function CWfetchCommentsCallBack()
{
    if (HttpRequest.readyState == 4 && HttpRequest.status == 200)
    {
       CWloadXmlLocations(HttpRequest.responseXML);
    }
}

function CWloadXmlTowers(result, userContext, methodName)
{
    var xml = result;       
    if(typeof(CWmap) == 'undefined')
        return;    
    CWtowerMarkers = xml.documentElement.getElementsByTagName("marker");    
    if (CWtowers != null)    
        for (i=0; i < CWtowers.length; i++)         
            CWmap.removeOverlay(CWtowers[i].marker);              
    CWtowers = new Array();    
    CWtotalTowers=0;
    for (i = 0; i < CWtowerMarkers.length; i++)     
        if (CWisCarrierIDChecked(CWtowerMarkers[i].getAttribute("carrier")) && filterState(CWtowerMarkers[i].getAttribute("state")))        
              CWtotalTowers++;        
    for (i = 0; i < CWtowerMarkers.length; i++) 
    {
        var point = new GLatLng(parseFloat(CWtowerMarkers[i].getAttribute("lat")),parseFloat(CWtowerMarkers[i].getAttribute("lng")));        
        var id = parseInt(CWtowerMarkers[i].getAttribute("id"), 10);        
        var carrier =CWtowerMarkers[i].getAttribute("carrier");        
        var address = CWtowerMarkers[i].getAttribute("address");        
        var city = CWtowerMarkers[i].getAttribute("city");
        var state = CWtowerMarkers[i].getAttribute("state");
        var date =  CWtowerMarkers[i].getAttribute("date");                
        var heightAboveGround = CWtowerMarkers[i].getAttribute("heightAboveGround");
        var heightOfStructure = CWtowerMarkers[i].getAttribute("heightOfStructure");                
        var groundElevation = CWtowerMarkers[i].getAttribute("groundElevation");                
        var heightAMSL = CWtowerMarkers[i].getAttribute("heightAMSL");                
        var structureType = CWtowerMarkers[i].getAttribute("structureType");                

        var icon = new GIcon(G_DEFAULT_ICON);
        var cZoom=CWmap.getZoom();
        switch (cZoom)
        {
            case 10: icon.iconSize = new GSize(10, 20);icon.iconAnchor = new GPoint(5, 10);break;
            case 11: icon.iconSize = new GSize(12, 24);icon.iconAnchor = new GPoint(6, 12);break;
            case 12: icon.iconSize = new GSize(14, 28);icon.iconAnchor = new GPoint(7, 14);break;
            case 13: icon.iconSize = new GSize(16, 32);icon.iconAnchor = new GPoint(8, 16);break;
            case 14: icon.iconSize = new GSize(18, 36);icon.iconAnchor = new GPoint(9, 18);break;
            case 15: icon.iconSize = new GSize(20, 40);icon.iconAnchor = new GPoint(10, 20);break;
            case 16: icon.iconSize = new GSize(22, 44);icon.iconAnchor = new GPoint(11, 22);break;
            case 17: icon.iconSize = new GSize(24, 48);icon.iconAnchor = new GPoint(12, 24);break;
            default: icon.iconSize = new GSize(20, 40);icon.iconAnchor = new GPoint(7, 14);break;
        }
        icon.shadowSize = new GSize(0,0);                         
        switch (carrier)
        {
            case '0': icon.image = "img/TOWATNT.PNG";break;
            case '1': icon.image = "img/TOWSPRINT.PNG";break;
            case '3': icon.image = "img/TOWNEXTEL.PNG";break;
            case '4': icon.image = "img/TOWTMOBILE.PNG";break;
            case '7': icon.image = "img/TOWVERIZON.PNG";break;
            default: icon.image = "img/TOWER.PNG";break;            
        }
        if (CWisCarrierIDChecked(carrier) && filterState(state))  //only show towers markers that related to a checked carrier, filter as of state
        {
            var marker ;
            marker = new GMarker(point, icon);            
            CWtowers.push(new towerObj(id, carrier, point.lat(), point.lng(), date, address, city, state, 
                        null, null, null,null,null,marker));
            marker.myhtml = '<table>';
            
            marker.myhtml += '<tr><td rowspan="4"><img src="' + icon.image + '" width="30" Alt="Tower icon"/></td><td><b><big>Tower Information</big></b></td></tr>';
            marker.myhtml += '<tr><td>Carrier: <b>' + getCarrierName(carrier) + '</b></td></tr>';
            marker.myhtml += '<tr><td>Location:<b> ' + address + ', ' + city + ', ' + state + '</b></td>';            
            marker.myhtml += '<tr><td colspan="2">Date constructed:<b> ' + (date.trim()!=""?date.trim():"Not Available") + '</b></td></tr>';
            marker.myhtml += '<tr><td colspan="2">StructureType:<b> ' + structureType + '</b></td></tr>';
            marker.myhtml += '<tr><td colspan="2">Height:<b> ' + heightOfStructure + 'm</b></td></tr>';
            marker.myhtml += '<tr><td colspan="2">Ground elevation:<b> ' + groundElevation + 'm</b></td></tr>';
            marker.myhtml += '<tr><td colspan="2">Height above ground:<b> ' + heightAboveGround + 'm</b></td></tr>';
            marker.myhtml += '<tr><td colspan="2">Overal height above mean sea level:<b> ' + heightAMSL + 'm</b></td></tr>';            
            
            marker.myhtml += '</table>';                      
            CWmap.addOverlay(marker);               
        }
    }     
}

//:)
function CWloadXmlBuildings(result, userContext, methodName)
{
    var xml = result;       
    if(typeof(CWmap) == 'undefined')
        return;    
    CWbuildingMarkers = xml.documentElement.getElementsByTagName("marker");    
    if (CWbuildings != null)    
        for (i=0; i < CWbuildings.length; i++)         
            CWmap.removeOverlay(CWbuildings[i].marker);              
    CWbuildings = new Array();    
    CWtotalBuildings=CWbuildingMarkers.length;
   
    for (i = 0; i < CWbuildingMarkers.length; i++) 
    {
        var point = new GLatLng(parseFloat(CWbuildingMarkers[i].getAttribute("lat")),parseFloat(CWbuildingMarkers[i].getAttribute("lng")));        
        var id = parseInt(CWbuildingMarkers[i].getAttribute("id"), 10);        
        var entityname =CWbuildingMarkers[i].getAttribute("entityname");
        var address = CWbuildingMarkers[i].getAttribute("address");        
        var city = CWbuildingMarkers[i].getAttribute("city");
        var state = CWbuildingMarkers[i].getAttribute("state");
        var date =  CWbuildingMarkers[i].getAttribute("date");                
        var heightAboveGround = CWbuildingMarkers[i].getAttribute("heightAboveGround");
        var heightOfStructure = CWbuildingMarkers[i].getAttribute("heightOfStructure");                
        var groundElevation = CWbuildingMarkers[i].getAttribute("groundElevation");                
        var heightAMSL = CWbuildingMarkers[i].getAttribute("heightAMSL");                
        var structureType = CWbuildingMarkers[i].getAttribute("structureType");                

        var icon = new GIcon(G_DEFAULT_ICON);
        var cZoom=CWmap.getZoom();
        switch (cZoom)
        {
            case 10: icon.iconSize = new GSize(15, 30);icon.iconAnchor = new GPoint(7, 14);break;
            case 11: icon.iconSize = new GSize(17, 34);icon.iconAnchor = new GPoint(8, 16);break;
            case 12: icon.iconSize = new GSize(19, 38);icon.iconAnchor = new GPoint(9, 18);break;
            case 13: icon.iconSize = new GSize(21, 42);icon.iconAnchor = new GPoint(10, 20);break;
            case 14: icon.iconSize = new GSize(23, 46);icon.iconAnchor = new GPoint(11, 22);break;
            case 15: icon.iconSize = new GSize(25, 50);icon.iconAnchor = new GPoint(12, 24);break;
            case 16: icon.iconSize = new GSize(27, 54);icon.iconAnchor = new GPoint(14, 28);break;
            case 17: icon.iconSize = new GSize(29, 58);icon.iconAnchor = new GPoint(15, 30);break;
            default: icon.iconSize = new GSize(20, 40);icon.iconAnchor = new GPoint(10, 20);break;
        }
        icon.shadowSize = new GSize(0,0);                         
        icon.image = "img/Building.png";        
        var marker ;
        marker = new GMarker(point, icon);            
        CWbuildings.push(new buildingObj(id, entityname, point.lat(), point.lng(), date, address, city, state, 
                    null, null, null,null,null,marker));
        marker.myhtml = '<table>';        
        marker.myhtml += '<tr><td rowspan="4"><img src="' + icon.image + '" width="30" Alt="Tower icon"/></td><td><b><big>Building Information</big></b></td></tr>';
        marker.myhtml += '<tr><td>Owner: <b>' + entityname + '</b></td></tr>';
        marker.myhtml += '<tr><td>Location:<b> ' + address + ', ' + city + ', ' + state + '</b></td>';            
        marker.myhtml += '<tr><td colspan="2">Date constructed:<b> ' + (date.trim()!=""?date.trim():"Not Available") + '</b></td></tr>';
        marker.myhtml += '<tr><td colspan="2">StructureType:<b> ' + structureType + '</b></td></tr>';
        marker.myhtml += '<tr><td colspan="2">Height:<b> ' + heightOfStructure + 'm</b></td></tr>';
        marker.myhtml += '<tr><td colspan="2">Ground elevation:<b> ' + groundElevation + 'm</b></td></tr>';
        marker.myhtml += '<tr><td colspan="2">Height above ground:<b> ' + heightAboveGround + 'm</b></td></tr>';
        marker.myhtml += '<tr><td colspan="2">Overal height above mean sea level:<b> ' + heightAMSL + 'm</b></td></tr>';                    
        marker.myhtml += '</table>';                      
        CWmap.addOverlay(marker);                       
    }     
}

function CWloadXmlLocations(result)
{       
    var xml = result;      
    
    if (CWcomments != null)
    {
        for (i=0; i < CWcomments.length; i++) 
        {
            CWmap.removeOverlay(CWcomments[i].marker);        
        }
    }    
    
    if  (CWmap.getZoom() < minCommentVisibleZoom ) 
        return;
    
    CWcomments = new Array();
         
    CWmarkers = xml.documentElement.getElementsByTagName("marker");
    
    CWtotalcomments=0;
    for (i = 0; i < CWmarkers.length; i++) 
    {
        if (CWisCarrierChecked(CWmarkers[i].getAttribute("carrier")))
            CWtotalcomments++;
    }
    
    
    for (i = 0; i < CWmarkers.length; i++) 
    {
        point = new GLatLng(parseFloat(CWmarkers[i].getAttribute("lat")),
                           parseFloat(CWmarkers[i].getAttribute("lng")));
        rating = parseInt(CWmarkers[i].getAttribute("rating"), 10);
        id = parseInt(CWmarkers[i].getAttribute("id"), 10);
        display = CWmarkers[i].getAttribute("display");
        overallrating = parseInt(CWmarkers[i].getAttribute("overallrating"), 10);
        carrier = CWmarkers[i].getAttribute("carrier");
        phoneb = CWmarkers[i].getAttribute("phoneb");
        phonem = CWmarkers[i].getAttribute("phonem");
        zip = CWmarkers[i].getAttribute("zip");
        address = CWmarkers[i].getAttribute("address");
        address2 = CWmarkers[i].getAttribute("address2");
        city = CWmarkers[i].getAttribute("city");
        state = CWmarkers[i].getAttribute("state");
        date =  CWmarkers[i].getAttribute("date");
        comment =  CWmarkers[i].getAttribute("comment");
        var username =  CWmarkers[i].getAttribute("username");
        avatarPic =  CWmarkers[i].getAttribute("avatarpic");
        phonePic =  CWmarkers[i].getAttribute("phonepic");
        signalIcon0 =  CWmarkers[i].getAttribute("signalicon0"); 
        signalIcon1 =  CWmarkers[i].getAttribute("signalicon1"); 
        signalIcon2 =  CWmarkers[i].getAttribute("signalicon2"); 
        signalIcon3 =  CWmarkers[i].getAttribute("signalicon3"); 
        signalIcon4 =  CWmarkers[i].getAttribute("signalicon4"); 
        signalIcon5 =  CWmarkers[i].getAttribute("signalicon5"); 
        logo_small =  CWmarkers[i].getAttribute("logo_small");        
               
        icon = new GIcon(baseIcon);
        switch(rating)
        {
            case 0:
                icon.image = grRoot + "UploadedImages/" + signalIcon0;
                break;
            case 1:
                icon.image = grRoot +  "UploadedImages/" + signalIcon1;
                break;
            case 2:
                icon.image = grRoot +  "UploadedImages/" + signalIcon2;
                break;
            case 3:
                icon.image = grRoot +  "UploadedImages/" + signalIcon3;
                break;
            case 4:
                icon.image = grRoot +  "UploadedImages/" + signalIcon4;
                break;
            case 5:
                icon.image = grRoot +  "UploadedImages/" + signalIcon5;
                break;                
        }                                          
                    
        if (CWisCarrierChecked(carrier))  //only show comments markers that related to a checked carrier
        {                    
            var marker = new GMarker(point, icon);            
            CWcomments.push(new commentObj(id, point.lat(), point.lng(), rating, overallrating, carrier, phoneb, phonem, zip, address, address2, city, state, date, comment, username, avatarPic, phonePic, logo_small, marker));           
            marker.myhtml = '<table><tr><td colspan="2">';
            marker.myhtml += '<b>Signal: <img class="rate" src="img/signal/' + rating + '.gif" alt="' + rating + '" /><br>Carrier: ' + carrier + '<br>Phone: ' + phoneb + ' ' + phonem + '<br>Address: ' + address + '<br>' + address2 + '</b>';
            marker.myhtml += '</td></tr>';
            marker.myhtml += '<tr><td><b>' + city + '<br>' + state + ', ' + zip + '</b></td>'
            marker.myhtml += '</td>';
            marker.myhtml += '<td>';
           if (phonePic != '')
                if(phonePic.indexOf('http')==0)
                    marker.myhtml += '<img src="' + phonePic  + '" alt="' + phonem +'" width="80" />&nbsp;&nbsp;';
                else
                    marker.myhtml += '<img src="UploadedImages/' + phonePic  + '" alt="' + phonem +'" width="80" />&nbsp;&nbsp;';
           if (avatarPic != '')
                marker.myhtml += '<img src="' + grRoot + 'UploadedImages/' + avatarPic  + '" alt="' + username +'" width="80" />';
           marker.myhtml += '</td>';
           marker.myhtml += '</tr>';
           marker.myhtml += '<tr>';
           marker.myhtml += '<td colspan="2">';
           marker.myhtml += '<a href="http://www.cellswapper.com" target=_blank >Escape any cell phone contract</a>';
           marker.myhtml += '</td>';
           marker.myhtml += '</tr>';
           marker.myhtml += '</table>';           
           CWmap.addOverlay(marker);
           }
   }
   
   //GEvent.addListener(CWmap, "click", CWmapClick);      
}

    function CWmapClick(theMarker, coord)
    {
        if (CWcomments != null)
        {
            for (i=0; i < CWtotalcomments; i++) 
            {
                if(typeof(CWcomments[i])!='undefined')
                {
                    if(CWcomments[i].marker == theMarker)
                    {                        
                        CWcomments[i].marker.openInfoWindowHtml(CWcomments[i].marker.myhtml);    
                    }
                }
            }
        } 

        if(CWtowers != null)
        {
            for (i=0; i < CWtotalTowers; i++) 
            {
                if(typeof(CWtowers[i])!='undefined')
                {
                    if(CWtowers[i].marker == theMarker)
                    {                        
                        CWtowers[i].marker.openInfoWindowHtml(CWtowers[i].marker.myhtml);    
                    }
                }
            }  
        }
        
         if(CWbuildings != null)
        {
            for (i=0; i < CWtotalBuildings; i++) 
            {
                if(typeof(CWbuildings[i])!='undefined')
                {
                    if(CWbuildings[i].marker == theMarker)
                    {                        
                        CWbuildings[i].marker.openInfoWindowHtml(CWbuildings[i].marker.myhtml);    
                    }
                }
            }  
        }
    }
    
//========== go to get lat/long from address+zip and move the map to that location
function go()
{
    var zip  = $('txtZipCode').value;
    var addr =$('txtAddress').value;
    var city =$('txtCity').value;
    var state = $('txtState').value;
            
    if(zip=="" && addr =="" && city =="" && state=="")
    {
        alert("Please enter address information");
        return;
    }        
        
    var theCase=2; //default is lookup from Google
        
    //zip => lookup zip from gotreception (despite city and state)
    if(zip!="" && addr =="" && city =="" && state =="")
        theCase=0;
    
    //zip+address => lookup city state from gotreception then lookup all from google        
    if(zip!="" && addr !="" && city =="" && state=="" )
        theCase =1;
    
    //address+city+state => lookup all from google (zip is optional)
    if(addr !="" && city !="" && state!="")
        theCase=2;
        
    //city+state => lookup city/state from gotreception
    if(zip=="" && addr =="" && city !="" && state!="")
        theCase=3;
        
        //for other cases: we just consider as case 2 (full info and lookup to google)
    
    if (window.XMLHttpRequest) 
        HttpRequest = new XMLHttpRequest();
    else                       
        HttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    if (!HttpRequest) 
        return;
    
    var query="";
    
    if (theCase==0)
    {
        getZipCoordURL=grRoot+"getZipCoord.ashx?zip=" + zip;
        HttpRequest.onreadystatechange = getZipCoordCallBack;
        HttpRequest.open("GET",getZipCoordURL);
        HttpRequest.send("");    
    }
    else if (theCase==1)
    {
        getCityStateURL = grRoot + "GetCityState.ashx?q=" +zip;
        HttpRequest.onreadystatechange = CWgetCityStateCallBack;
        HttpRequest.open("GET",getCityStateURL);
        HttpRequest.send("");    
    }
    else if (theCase==2)
    {
        query = addr + ", ";            
        query += city + ", ";
        query += state + " ";
        query += " " + zip;
        CWgeocoder.getLocations(query, CWgotAddress);
    }
    else if (theCase==3)
    {
        getZipCoordURL=grRoot+"getZipCoord.ashx?city=" + city + "&state=" + state;
        HttpRequest.onreadystatechange = getZipCoordCallBack;
        HttpRequest.open("GET",getZipCoordURL);
        HttpRequest.send("");            
    }
}

function CWgetCityStateCallBack()
{
    if (HttpRequest.readyState == 4 && HttpRequest.status == 200)
    {
        var query = $('txtAddress').value + ", ";
        query += HttpRequest.responseText;
        query += " " + $('txtZipCode').value;                       
        geocoder.getLocations(query, CWgotAddress);            
    }
}    
 
 function getZipCoordCallBack()
    {
        if (HttpRequest.readyState == 4 && HttpRequest.status == 200)
        {
            var point=new GLatLng(eval(HttpRequest.responseText.split(',')[0]),eval(HttpRequest.responseText.split(',')[1]));
            //map.setCenter(point, map.getZoom());
            if($('CWmap').style.display=="none")
            {
                window.open(grRoot+"default.aspx?exactmap=true&lat=" + point.lat() + "&lng=" + point.lng() + "&zoom=" + CWmap.getZoom())
            }
            else
            {
                CWmap.setCenter(point, CWmap.getZoom());                
            }            
        }        
    }
    
function CWgotAddress(response) 
{       
    if(response.Status.code = 200)    
    {
        if(typeof(response.Placemark)=='undefined')
            return;
        if(response.Placemark.length>0)
        {
            place = response.Placemark[0];
            point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
            if($('CWmap').style.display=="none")
            {
                window.open(grRoot+"default.aspx?exactmap=true&lat=" + point.lat() + "&lng=" + point.lng() + "&zoom=15"); // + CWmap.getZoom())
            }
            else
            {
                CWmap.setCenter(new GLatLng(point.lat(),point.lng()),CWmap.getZoom());                
            }
        }
        else
            alert("We were unable to find your location, please insert more details");
    }
}
