//
// Yahoo Map Controller File
// Opens and maintains a Yahoo map using mapstraction.js
//////////////////////////////////////////////////////////////////////////      

// AJAX variables
var xmlDoc;
var xmlObj;
var yahoomap;
var zoomLevel = 15;
var rssFeed; 
    
// Variables to contain marker data to be passed back 
// and forth to create dynamic popup windows
var m_title;
var m_description;
var m_link;
var m_lat;
var m_long;    

var longCount = 0.0;
var latCount = 0.0;
var nodes = 0;
      
function loadMap()
{
    if (isCommunityjs == true) // Use community feed
    {
        rssFeed = '/community/feeds/rss.asp?mode=geo&cat=' + catIDjs;
        rssFeed += '&cfl=1';
    }
    else                        // Use single blog feed
    {
        rssFeed = '/rss.asp?mode=geo&cat=' + catIDjs;
    }
        
    if (recacheValjs == 1) // recache parameter
        rssFeed += '&recache=1';
        
    // code for IE
    if (window.ActiveXObject)
    {
         xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
         xmlDoc.async=false;
         xmlDoc.load(rssFeed);
         xmlObj = xmlDoc.documentElement;
         showMapwithIE();
    }

    // code for Mozilla, Firefox, Opera, etc.
    else if (document.implementation && document.implementation.createDocument)
    {
        xmlDoc=document.implementation.createDocument("","",null);
        xmlDoc.async=false;
        xmlDoc.load(rssFeed);
        showMapofFireFox();         
    }

    // Junk browser
    else
    { 
        alert("Your browser cannot handle this script");
    }
}

function average(axis)
{
    if (nodes == 0)
    {
        zoomLevel = 16;
        return 0;
    }
    if (axis == 0)
    {
        return (latCount / nodes);
    }
    else
    {        
        return (longCount / nodes);
    }
}

function showMapwithIE()
{

    // Try to implement yahoo map features
    yahoomap = new YMap(document.getElementById("mapContainer"), YAHOO_MAP_REG);
    yahoomap.addZoomLong();   
    yahoomap.addTypeControl();       

    for(var i=9; i < xmlObj.childNodes(0).childNodes.length; i++)
    {
        try // Get Title from XML
        { m_title = xmlObj.childNodes(0).childNodes(i).firstChild.text; }
        catch ( e ) // No title - use blank
        { m_title = '[Untitled]'; }
        
        m_title = xmlObj.childNodes(0).childNodes(i).firstChild.text;
        m_link = xmlObj.childNodes(0).childNodes(i).childNodes(1).text;
        m_description = xmlObj.childNodes(0).childNodes(i).childNodes(2).text;
        m_lat = xmlObj.childNodes(0).childNodes(i).childNodes(7).text;
        m_long = xmlObj.childNodes(0).childNodes(i).childNodes(8).text;
        
        latCount += (m_lat - 0);
        longCount += (m_long - 0);
        nodes++;
          
        // Post Marker
        genMarker();
    } 
        
    yahoomap.drawZoomAndCenter(new YGeoPoint(average(0),average(1)), zoomLevel); // FIX TO AVERAGE     
            
}

// show map on FireFox
function showMapofFireFox()
{
    // Try to implement yahoo map features
    var items = xmlDoc.getElementsByTagName('item');          
    yahoomap = new YMap(document.getElementById("mapContainer"), YAHOO_MAP_REG);    
    yahoomap.addZoomLong();
    yahoomap.addTypeControl();
    
    var items = xmlDoc.getElementsByTagName('item');   

    for(var i=0; i < items.length; i++) 
    {
         try // Get Title from XML
            { m_title = items[i].getElementsByTagName('title')[0].childNodes[0].nodeValue; }
         catch ( e ) // No title - use blank
            { m_title = '[Untitled]'; }
                
         try {       
         m_link = items[i].getElementsByTagName('link')[0].childNodes[0].nodeValue;
         m_description = items[i].getElementsByTagName('description')[0].childNodes[0].nodeValue;             
         m_lat = items[i].getElementsByTagNameNS('http://www.w3.org/2003/01/geo/wgs84_pos#', 'lat')[0].childNodes[0].nodeValue;
         m_long = items[i].getElementsByTagNameNS('http://www.w3.org/2003/01/geo/wgs84_pos#', 'long')[0].childNodes[0].nodeValue;          
         
        latCount += (m_lat - 0);
        longCount += (m_long - 0);
        nodes++;
        
         genMarker();
         }
         catch (ex) { }
    }   
    
    //var centreObj = yahoomap.getBestZoomAndCenter(yahoomap.getMarkerIDs());
    
    yahoomap.drawZoomAndCenter(new YGeoPoint(average(0),average(1)), zoomLevel); 

    


}       
     
// Generates the onscreen marker for a point     
function genMarker() 
{
    // Create the point at the lat long coords
    var newPoint = new YGeoPoint(m_lat,m_long);        
        
    // Load this communities marker, and set up its size and offsets
    var myImage = new YImage();        
    myImage.src = '/community/image_library/' + communityNamejs + '/marker.png';
    myImage.offsetSmartWindow = new YCoordPoint(imgX, imgH - imgY);
    myImage.offset = new YCoordPoint(-1 * imgX, imgH - imgY);
    myImage.size = new YSize(imgW, imgH);
        
    // Add the image to the marker
    var marker = new YMarker(newPoint,myImage);
    marker.addLabel(' ');
    marker.addAutoExpand(m_title);
    marker.setSmartWindowColor(imgColour);  
    
    // Create a new string for the popup menu body,
    // pull the string from the function in the included js
    var myBody = new String();
    myBody = getBody();
    
    // Open the popup
    function onMouseClick() 
    {                
        marker.openSmartWindow(myBody);
    }

    function onSWindowOpen() {
        //yahoomap.panToLatLon(newPoint);
    }

     YEvent.Capture(marker, EventsList.MouseClick, onMouseClick);
     YEvent.Capture(marker, EventsList.openSmartWindow, onSWindowOpen);                                   
     yahoomap.addOverlay(marker);
}    
