﻿var cams = new Array();
var sr = new Array();
var sf = new Array();
var weather = new Array();
var map;
var geocoder;

var camIconType = 'Camera';
var camIconFilepath;
var camIconWidth;
var camIconHeight;

var srIconType = 'Surf Report';
var srIconFilepath;
var srIconWidth;
var srIconHeight;

var sfIconType = 'Surf Forecast';
var sfIconFilepath;
var sfIconWidth;
var sfIconHeight;

var weatherIconType = 'Weather';
var weatherIconFilepath;
var weatherIconWidth;
var weatherIconHeight;


function initIcon(camFilepath, camWidth, camHeight, srFilepath, srWidth, srHeight, sfFilepath, sfWidth, sfHeight, weatherFilepath, weatherWidth, weatherHeight) {
    camIconFilepath = camFilepath;
    camIconWidth = camWidth;
    camIconHeight = camHeight;

    srIconFilepath = srFilepath;
    srIconWidth= srWidth;
    srIconHeight = srHeight;

    sfIconFilepath = sfFilepath;
    sfIconWidth = sfWidth;
    sfIconHeight = sfHeight;

    weatherIconFilepath = weatherFilepath;
    weatherIconWidth = weatherWidth;
    weatherIconHeight = weatherHeight;
}


function getIcon(type, filename, width, height) {
    var icon = new GIcon();
    icon.image = filename;
    icon.iconSize = new GSize(width, height);
    
    icon.iconAnchor = new GPoint(0, 0);
    icon.infoWindowAnchor = new GPoint(5, 1);
    return icon;        
}

function wheelevent(e)
{
    if (!e) e = window.event;
    if (e.preventDefault) e.preventDefault();
    e.returnValue = false;
} 

function initMap(lon, lat, zoom)
{
    if(zoom == null) {
        zoom = 15;
    }
    if(lon == '0' && lat == '0') {
       lon = 133.7698745727539;
       lat = -25.274193060052262;
       zoom = 3;
    }
    if(!map)
    {
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());       
        map.addControl(new GScaleControl());        
        map.addControl(new GOverviewMapControl());  
        map.setCenter(new GLatLng(lat, lon), parseInt(zoom));
        map.enableScrollWheelZoom();
        geocoder = new GClientGeocoder();
        map.setMapType(G_SATELLITE_MAP);
        GEvent.addDomListener(map.getContainer(), "DOMMouseScroll", wheelevent);
        map.getContainer().onmousewheel = wheelevent;     
    }
}

function cleanMap()
{
    map = null;    
}

function changeCheckboxStatus(cbID, status) {
    document.getElementById(cbID).checked = status;
}

function createMarkers(point, type, i, para, filename, width, height) {
    var cam = getURLParam('cam');
    var state = getURLParam('state');
    if(type == 'Weather') {
        var img = new Image();
        img.src = filename;
        alert(img.width + " " + img.height);
        var marker = new GMarker(point, { icon: getIcon(type, filename, img.width, img.height)});
        GEvent.addListener(marker, "click", function() {
            var myAjax = new Ajax.Updater(
            "mapContent", 
            "../content/ajaxPin.aspx?"+para, 
            {
                method: 'get', 
                parameters: '',			
                evalScripts: true,
                onComplete:function(request)
                {			            			            			                
                    marker.openInfoWindowHtml($('mapContent').innerHTML);    
                }
            });
        });
    }
    else {
        var marker = new GMarker(point, { icon: getIcon(type, filename, width, height)});
        var htmls = ["<iframe src='../content/ajaxSrPin.aspx?"+para+"' width='420' height='300' frameborder='0' style='border-width:0px;'></iframe>", "<iframe src='../content/ajaxSfPin.aspx?"+para+"' width='420' height='300' frameborder='0' style='border-width:0px;'></iframe>","<iframe src='../content/ajaxCamPin.aspx?"+para+"' width='420' height='300' frameborder='0' style='border-width:0px;'></iframe>"];
        var labels = ["Current","Tomorrow","Live Vision"];
        GEvent.addListener(marker, "click", function() {
              // adjust the width so that the info window is large enough for this many tabs
//              if (htmls.length > 2) {
//                htmls[0] = '<div style="width:'+htmls.length*88+'px">' + htmls[0] + '</div>';
//              }
              htmls[0] = '<div style="width:420px; ">' + htmls[0] + '</div>';
              var tabs = [];
              for (var i=0; i<htmls.length; i++) {
                tabs.push(new GInfoWindowTab(labels[i],htmls[i]));
              }
              marker.openInfoWindowTabsHtml(tabs);
            });        
    }
    if (type == 'Camera') {
        cams[i] = marker;
    }
    else if(type == 'Surf Report') {
        sr[i] = marker;
    }
    else if(type == 'Surf Forecast') {
        sf[i] = marker;
    }
    else if(type == 'Weather') {
        weather[i] = marker;
    }
    return marker;
}
function addCams(lon, lat, type, filename, width, height)
{
    initMap(lon, lat);
    var xmlFile;
    var insertPoints;
    var xmlFile = "../navXml/cam.xml";
    var para = "&markerType=1";
    GDownloadUrl(xmlFile, function(data, responseCode) {
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length; i++) {
            point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                parseFloat(markers[i].getAttribute("lng")));
            parameter = "cam="+markers[i].getAttribute("id")+"&state="+markers[i].getAttribute("state")+"&areaName="+markers[i].getAttribute("areaName")+para;   
            map.addOverlay(createMarkers(point, type, i, parameter, filename, width, height));
        }
    });

}
function addHomeCams(type, filename, width, height)
{
    initMap(133.7698745727539, -25.274193060052262, 3);
    var xmlFile;
    var insertPoints;
    var xmlFile = "../navXml/cam.xml";
    var para = "&markerType=1";
    GDownloadUrl(xmlFile, function(data, responseCode) {
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length; i++) {
            point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                parseFloat(markers[i].getAttribute("lng")));
            parameter = "cam="+markers[i].getAttribute("id")+"&state="+markers[i].getAttribute("state")+"&areaName="+markers[i].getAttribute("areaName")+para;   
            map.addOverlay(createMarkers(point, type, i, parameter, filename, width, height));
        }
    });

}

function addPoint(lon, lat, type, filename, width, height)
{
    initMap(lon, lat);
    var xmlFile;
    var insertPoints;
    var para;
    
    if(type == 'Camera') {
        xmlFile = "../navXml/cam.xml";
        para = "&markerType=1";
        if(document.getElementById('cbCam').checked == true) {
            insertPoints = true;
        }
        else {
            insertPoints = false;
        }
    }
    else if(type == 'Surf Report') {
        xmlFile = "../navXml/surfReport.xml";
        para = "&markerType=2";
        if(document.getElementById('cbSR').checked == true) {
            insertPoints = true;
        }
        else {
            insertPoints = false;
        }
    }                          
    else if(type == 'Surf Forecast') {
        xmlFile = "../navXml/surfForecast.xml";
        para = "&markerType=3";
        if(document.getElementById('cbSF').checked == true) {
            insertPoints = true;
        }
        else {
            insertPoints = false;
        }
    }                          
    else if(type == 'Weather') {
        xmlFile = "../navXml/area.xml";
        para = "&markerType=4";
        if(document.getElementById('cbWeather').checked == true) {
            insertPoints = true;
        }
        else {
            insertPoints = false;
        }
    }
    if(insertPoints) {
        GDownloadUrl(xmlFile, function(data, responseCode) {
            var xml = GXml.parse(data);
            var markers = xml.documentElement.getElementsByTagName("marker");
            for (var i = 0; i < markers.length; i++) {
                point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                    parseFloat(markers[i].getAttribute("lng")));
                parameter = "cam="+markers[i].getAttribute("id")+"&state="+markers[i].getAttribute("state")+"&areaName="+markers[i].getAttribute("areaName")+para;   
                if(type == 'Weather') {
                    var areaId = markers[i].getAttribute("id");
                    filename = "../images/"+weatherCondition[""+areaId];
                }                
                map.addOverlay(createMarkers(point,type, i, parameter, filename, width, height));
            }
        });
    }
    else {
        if( type == 'Camera') {
            for (var i = 0; i < cams.length; i++) {
                map.removeOverlay(cams[i]);
            }
        }
        else if( type == 'Surf Report') {
            for (var i = 0; i < sr.length; i++) {
                map.removeOverlay(sr[i]);
            }
        }
        else if( type == 'Surf Forecast') {
            for (var i = 0; i < sf.length; i++) {
                map.removeOverlay(sf[i]);
            }
        }
        else if( type == 'Weather') {
            for (var i = 0; i < weather.length; i++) {
                map.removeOverlay(weather[i]);
            }
        }
    }    
}

function showAddress(lon, lat, address) {
    for( i = 0; i < document.getElementsByName('searchRegion').length; i++ )
    {
        if( document.getElementsByName('searchRegion')[i].checked == true )
        region = document.getElementsByName('searchRegion')[i].value;
    }
    if(region == 'Australia') {
        address = address + " " + region;
    }
    
    initMap(lon, lat);
    if(geocoder) {
        geocoder.getLatLng(address, 
            function(point) {
                if(!point) {
                    alert(address + " not found");
                }
                else {
                    map.setCenter(point, 15);
                }
            }
         );
     }
}

function getURLParam(strParamName){
    var strReturn = "";
    var strHref = window.location.href;
    if ( strHref.indexOf("?") > -1 ){
        var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
        var aQueryString = strQueryString.split("&");
        for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
            if (
                aQueryString[iParam].indexOf(strParamName.toLowerCase() + "=") > -1 ){
                var aParam = aQueryString[iParam].split("=");
                strReturn = aParam[1];
                break;
            }
        }
    }
    return unescape(strReturn);
}

function email_friend(homepage) {
    var center = map.getCenter();
    var lon = center.x;
    var lat = center.y;
    var zoom = map.getZoom();
    var cam = getURLParam('cam');
    var state = getURLParam('state');
//    var index = document.getElementById('camTabNavigator1_ddlCam').value;

    if(document.getElementById('cbCam').checked == true) {
        var cbCam = '1';
    }
    else {
        var cbCam = '0';
    }
//    if(document.getElementById('cbSR').checked == true) {
//        var cbSR = '1';
//    }
//    else {
//        var cbSR = '0';
//    }
//    if(document.getElementById('cbSF').checked == true) {
//        var cbSF = '1';
//    }
//    else {
//        var cbSF = '0';
//    }
//    if(document.getElementById('cbWeather').checked == true) {
//        var cbWeather = '1';
//    }
//    else {
        var cbWeather = '0';
//    }
    window.open('../camera/email_friend.aspx?cam='+cam+'&state='+state+'&lon='+lon+'&lat='+lat+'&zoom='+zoom+'&cbCam='+cbCam+'&cbWeather='+cbWeather+'&homepage='+homepage,'mywindow','width=570,height=285')
    //window.open('../camera/email_friend.aspx?cam='+cam+'&state='+state+'&lon='+lon+'&lat='+lat+'&zoom='+zoom+'&cbCam='+cbCam+'&cbSR='+cbSR+'&cbSF='+cbSF+'&cbWeather='+cbWeather+'&index='+index+'&homepage='+homepage,'mywindow','width=570,height=240')
    //alert('../camera/email_friend.aspx?cam='+cam+'&state='+state+'&lon='+lon+'&lat='+lat+'&zoom='+zoom+'&cbCam='+cbCam+'&cbSR='+cbSR+'&cbSF='+cbSF+'&cbWeather='+cbWeather+'&homepage='+homepage);    
} 

function linkToUs(homepage) {
    var center = map.getCenter();
    var lon = center.x;
    var lat = center.y;
    var zoom = map.getZoom();
    var cam = getURLParam('cam');
    var state = getURLParam('state');
//    var index = document.getElementById('camTabNavigator1_ddlCam').value;
    
    if(document.getElementById('cbCam').checked == true) {
        var cbCam = '1';
    }
    else {
        var cbCam = '0';
    }
//    if(document.getElementById('cbSR').checked == true) {
//        var cbSR = '1';
//    }
//    else {
//        var cbSR = '0';
//    }
//    if(document.getElementById('cbSF').checked == true) {
//        var cbSF = '1';
//    }
//    else {
//        var cbSF = '0';
//    }
//    if(document.getElementById('cbWeather').checked == true) {
//        var cbWeather = '1';
//    }
//    else {
        var cbWeather = '0';
//    }
    if(homepage) {
        document.getElementById('txtLink').value = 'http://www.coastalwatch.com/templates/navigator.aspx?state='+state+'&lon='+lon+'&lat='+lat+'&zoom='+zoom+'&cbCam='+cbCam+'&cbWeather='+cbWeather+'&homepage=true';
//        document.getElementById('txtLink').value = 'http://staging.rhodon.com/coastalwatch16/templates/navigator.aspx?state='+state+'&lon='+lon+'&lat='+lat+'&zoom='+zoom+'&cbCam='+cbCam+'&cbSR='+cbSR+'&cbSF='+cbSF+'&cbWeather='+cbWeather+'&index=' + index;
    }
    else {
        document.getElementById('txtLink').value = 'http://www.coastalwatch.com/camera/cameras_navigator.aspx?cam='+cam+'&state='+state+'&lon='+lon+'&lat='+lat+'&zoom='+zoom+'&cbCam='+cbCam+'&cbWeather='+cbWeather;
//        document.getElementById('txtLink').value = 'http://staging.rhodon.com/coastalwatch16/camera/cameras_navigator.aspx?cam='+cam+'&state='+state+'&lon='+lon+'&lat='+lat+'&zoom='+zoom+'&cbCam='+cbCam+'&cbSR='+cbSR+'&cbSF='+cbSF+'&cbWeather='+cbWeather+'&index=' + index;
    }
    document.getElementById('spLink').style.display='';
    document.getElementById('txtLink').focus(); 
    document.getElementById('txtLink').select();
    
    //window.open('../camera/email_friend.aspx?cam='+cam+'&state='+state+'&lon='+lon+'&lat='+lat+'&zoom='+zoom+'&cbCam='+cbCam+'&cbSR='+cbSR+'&cbSF='+cbSF+'&cbWeather='+cbWeather+'&homepage='+homepage,'mywindow','width=570,height=240')
}

function changeCamera(dropdown) {
    var id_array = document.getElementById('ids').value.split(',');
    var latitude_array = document.getElementById('latitudes').value.split(',');
    var longitude_array = document.getElementById('longitudes').value.split(',');
    
    for(i=0; i<id_array.length; i++ ) {
        if(id_array[i] == dropdown.options[dropdown.selectedIndex].value) {
            latitude = latitude_array[i];
            longitude = longitude_array[i];
            map.setZoom(15);
            map.panTo(new GLatLng(latitude, longitude));
            return;
        }
    }
    latitude = -25.274193060052262;
    longitude = 133.7698745727539;
    map.setCenter(new GLatLng(latitude, longitude), 3);
}

function downloadKML(cameraId)
{
//    var cameraId = document.getElementById('camTabNavigator1_ddlCam').value;
    var myAjax = new Ajax.Updater(
    "kmlURL", 
    '../content/ajaxLaunchGoogleMap.aspx?cId=' + cameraId, 
    {
    method: 'get', 
    parameters: '',			
    evalScripts: true,
    onComplete:function(request)
    {   
        if(String($('kmlURL').innerHTML).indexOf('This Camera is not available') >= 0)
        {   
            alert(String($('kmlURL').innerHTML));
        }
        else
        {   
            window.location.href = String($('kmlURL').innerHTML).replace(' ','');                                             
        }
    }
    });
    return false;
}


function initMap_Nav() {
    var lon = getURLParam("lon");
    var lat = getURLParam("lat");
    var zoom = getURLParam("zoom");
    if(lon != "" && lat != "" && zoom != "") {
        //alert(lon + " " +  lat + " " + zoom);
        initMap(lon,lat,zoom);
        var cbCam = getURLParam("cbCam");
        var cbSR = getURLParam("cbSR");
        var cbSF = getURLParam("cbSF");
        var cbWeather = getURLParam("cbWeather");
        
        if(cbCam == "1") {
            changeCheckboxStatus('cbCam', true);
            addPoint(lon, lat, camIconType, camIconFilepath, camIconWidth, camIconHeight);
        }
        else if (cbCam == "0") {
            changeCheckboxStatus('cbCam', false);
        }
        if (cbSR == "1") {
            changeCheckboxStatus('cbSR', true);
            addPoint(lon, lat, srIconType, srIconFilepath, srIconWidth, srIconHeight);
        }
        if (cbSF == "1") {
            changeCheckboxStatus('cbSF', true);
            addPoint(lon, lat, sfIconType, sfIconFilepath, sfIconWidth, sfIconHeight);
        }
        if (cbWeather == "1") {
            changeCheckboxStatus('cbWeather', true);
            addPoint(lon, lat, weatherIconType, weatherIconFilepath, weatherIconWidth, weatherIconHeight);
        }
        
    }

}