//$Id: row.js,v 1.7 2007/06/09 04:53:40 A. Hari Krishnan Exp $

function findlatlong(event)
{
		var node = event.node;
		var rivername = node.label;
		if(!node.isLeaf)
		{
			return;
		}
		if(rivername && rivername !=null && (rivername.indexOf('(') != -1))
		{
			rivername = rivername.substring(0,rivername.indexOf('('));
		}
		
		rivername = encodeURIComponent(rivername);							
		
		    try {
                YAHOO.util.History.navigate("navbar", rivername);
            } catch (e) {
                loadSection(section);
            }
}

function printRiverDetails(obj)
{
	var count = obj['totalResultsCount'];
	loadSmallMap(obj);
	var boolsuccess = "No map data found ...";
	var bool = false;
	for (x = 0; x < count ; x++)
	{
		var geonamesdetails = obj['geonames'][x];
		if(geonamesdetails == null)
		{
			continue;
		}
		var lat = geonamesdetails['lat'];
		var lng = geonamesdetails['lng'];
		if(x == 0)
		{
			load(lat,lng, geonamesdetails);
			bool = true;
			boolsuccess = "Successfully found map data ...";
		}
	}
	//$('#statusmsgdiv').html(boolsuccess);
	jQuery('#statusdiv').hide();
}

function jsonFlickrApi(oResponse){
	var rsp = oResponse.responseText;
	if(rsp == null)
	{
		return;
	}	
	rsp = YAHOO.lang.JSON.parse(rsp);
	if(!rsp.photos)
	{
		return;
	}
	var photodiv = document.getElementById('photodiv');
	photodiv.innerHTML = "";
	for (var i=0; i<rsp.photos.photo.length; i++){

		var blog = rsp.photos.photo[i];

		var div = document.createElement('div');
		var txt = document.createTextNode(blog.title);

		var hr = document.createElement('img');
		hr.src="http://farm"+blog.farm+".static.flickr.com/"+blog.server+"/"+blog.id+"_"+blog.secret+"_s.jpg";
		var link = document.createElement('a');
		link.href="http://farm"+blog.farm+".static.flickr.com/"+blog.server+"/"+blog.id+"_"+blog.secret+".jpg";
		link.rel="lightbox-myGroup";
		link.title=blog.title;
		link.appendChild(hr);
		div.id="imagediv";
		div.appendChild(link);
		photodiv.appendChild(div);
	}
	jQuery('#photodiv a').lightbox();
}

// google map related functions
function loadSmallMap(obj) {
	if (GBrowserIsCompatible()) {
		var smallmap = new GMap2(document.getElementById("smallmap"));				
		smallmap.addControl(new GSmallMapControl());
		var count = obj['totalResultsCount'];
		for (x = 0; x < count ; x++)
		{
			var geonamesdetails = obj['geonames'][x];
			if(geonamesdetails == null)
			{
				continue;
			}
			var lat = geonamesdetails['lat'];
			var lng = geonamesdetails['lng'];
			if(lat == null && lng == null)
			{
				lat = 37.4419;
				lng = -122.1419;
			}							
			var point = new GLatLng(lat,lng);
			if(x == 0)
			{
				smallmap.setCenter(new GLatLng(lat,lng), 0);
			}
			smallmap.addOverlay(createSmallMapMarker(point, 1, geonamesdetails));
			document.getElementById('rivername').innerHTML=geonamesdetails['name'];
		}					
	}
}

function load(lat,lng, geonamesdetails) {
	if (GBrowserIsCompatible()) {
			var map = new GMap2(document.getElementById("map"));
			map.addControl(new GLargeMapControl());
			map.addControl(new GMapTypeControl());

			if(lat == null && lng == null)
			{
				lat = 37.4419;
				lng = -122.1419;
				map.setCenter(new GLatLng(lat,lng), 1);
				return;
			}													
			map.setCenter(new GLatLng(lat,lng), 8);
			if(geonamesdetails == null)
			{
				return;
			}
			var point = new GLatLng(lat,lng);
			window.setTimeout(function() {
				map.panTo(point);
			}, 1000);
			
			map.addOverlay(createMarker(point, 1, geonamesdetails));
	}						
}

function createMarker(point, number, geonamesdetails) {
	var marker = new GMarker(point);
	GEvent.addListener(marker, "click", function() {
		var link = geonamesdetails['name'];
		link = "http://en.wikipedia.org/wiki/" + link;
		marker.openInfoWindowHtml("<div id='marker'> Name :: <span class='valuestr'>" 
			+ geonamesdetails['name']  + "</span><br>"
			+ " CountryName :: <span class='valuestr'>" + geonamesdetails['countryName']  
			+ "</span><br>"
			+ " Latitude :: <span class='valuestr'>" + geonamesdetails['lat']  
			+ "</span><br>"
			+ " Longitude:: <span class='valuestr'>" + geonamesdetails['lng']  
			+ "</span><br>"
			+ " Wikipedia article :: " 
			+ "<a target=\"_blank\" href='" + link +"'>" 
			+  geonamesdetails['name'] + "</a><img src='http://www.rapidmonkey.com/riversoftheworld/external.png'/>" + "</div>");
	});
	return marker;
}

function createSmallMapMarker(point, number, geonamesdetails) {
	var smallmapmarker = new GMarker(point);
	GEvent.addListener(smallmapmarker, "click", function() {
		load( geonamesdetails['lat'], geonamesdetails['lng'],geonamesdetails);
	});
	return smallmapmarker;					
}

// end of google map related functions

// function for yahoo tree
	function buildTree(oResponse) 
	{
	  var obj = oResponse.responseText;
	  obj = YAHOO.lang.JSON.parse(obj);
	   var currentIconMode;
	   //create a new tree:
	   var tree = new YAHOO.widget.TreeView("leftcol");
	   
	   //turn dynamic loading on for entire tree:
   	   tree.setDynamicLoad(loadNodeData, currentIconMode);
	   
	   //get root node for tree:
	   var root = tree.getRoot();
	   
	   	var count = obj['count'];
		var value = obj['value'];
		var items = value['items'];
		for(var i in items)
		{
			var rivername = items[i]['title'];
			if(rivername == null)
			{
				continue;
			}
			if(rivername.indexOf('List') != -1)
			{
				continue;
			}
					//begin adding children
			var tmpNode = new YAHOO.widget.TextNode(rivername, tree.getRoot(), false);
			
			if(rivername.indexOf('Category') == -1)
			{
				tmpNode.isLeaf = true;
			}
		}
		
		tree.subscribe("clickEvent", findlatlong);
		
		
		//the tree won't show up until you draw (render) it:
		tree.draw();
	}
	
	function loadNodeData(node, fnLoadComplete)  {
		var nodeLabel = encodeURI(node.label); 
		var sUrl = "/common_imports/proxy.jsp?host=yahoo&yws_path=" 
		+ encodeURIComponent("pipes/pipe.run?_id=f940980bc0aabab8139c23ee4d9468f9&_render=json&_run=1&textinput1=" + (nodeLabel))
		var callback = {
    
        //if our XHR call is successful, we want to make use
        //of the returned data and create child nodes.
        success: function(oResponse) {
		 	var obj = oResponse.responseText;
	  		obj = YAHOO.lang.JSON.parse(obj);
	   		var currentIconMode;
	   		
	   		var count = obj['count'];
			var value = obj['value'];
			var items = value['items'];
			for(var i in items)
			{
				var rivername = items[i]['title'];
				if(rivername == null)
				{
					continue;
				}
				if(rivername.indexOf('List') != -1)
				{
					continue;
				}
	   		
	   			var tempNode = new YAHOO.widget.TextNode(rivername, node, false)
	   			if(rivername.indexOf('Category') == -1)
				{
					tempNode.isLeaf = true;
				}
			}
	   		oResponse.argument.fnLoadComplete();
        },
        argument: {
            "node": node,
            "fnLoadComplete": fnLoadComplete
        },
         //timeout -- if more than 7 seconds go by, we'll abort
        //the transaction and assume there are no children:
        timeout: 7000
		};
    	YAHOO.util.Connect.asyncRequest('GET', sUrl, callback);
	}


	function loadSection(section) {
		jQuery('#statusdiv').show();
		var callback = {
	   	    	success: jsonFlickrApi,
	   	    	failure: function(oResponse) { 
	   	    	}
	   		};  
		YAHOO.util.Connect.asyncRequest('GET', 
			"/common_imports/proxy.jsp?host=flickr&yws_path=" 
			+ encodeURIComponent("services/rest/?nojsoncallback=1&method=flickr.photos.search&format=json&api_key=86a1abd84fbca52ff8dd3054c64be66e&tags=" + (section) + "&tag_mode=all&per_page=9&sort=relevance"), 
			callback);
			
		var srcurl = "http://ws.geonames.org/search?maxRows=10&fclass=H&type=json";
		srcurl = srcurl + "&q=" + section;
		jQuery.getJSON(srcurl, printRiverDetails);				
	}
	
	var html, bookmarkedSection, querySection, initSection;
	
	bookmarkedSection = YAHOO.util.History.getBookmarkedState("navbar");
    querySection = YAHOO.util.History.getQueryStringParameter("section");
    initSection = bookmarkedSection || querySection || encodeURIComponent("");
    
    YAHOO.util.History.register("navbar", initSection, function (state) {
        // This is called after calling YAHOO.util.History.navigate,
        // or after the user has trigerred the back/forward button.
        // We cannot distinguish between these two situations.
        loadSection(state);
    });
    
    function initializeNavigationBar() {
    	currentSection = YAHOO.util.History.getCurrentState("navbar");
    	loadSection(currentSection);
    }
    
    YAHOO.util.History.onReady(function () {
    	initializeNavigationBar();
	});
    
    
	
	// Initialize the browser history management library.
	try {
	    YAHOO.util.History.initialize("yui-history-field", "yui-history-iframe");
	} catch (e) {
	    // The only exception that gets thrown here is when the browser is
	    // not supported (Opera, or not A-grade) Degrade gracefully.
	    // Note that we have two options here to degrade gracefully:
	    //   1) Call initializeNavigationBar. The page will use Ajax/DHTML,
	    //      but the back/forward buttons will not work.
	    //   2) Initialize our module. The page will not use Ajax/DHTML,
	    //      but the back/forward buttons will work. This is what we
	    //      chose to do here:
	    loadSection(initSection);
	}	
		
// end of building yahoo tree
