$(document).ready(function() {

	var base_url = $('#base-url').text(); //alert(base_url);

	$('#snapshot-list').cycle({
		fx:'fade',
		timeout: 8000
	});
	
	$('#snapshot-next').click(function(){
		$('#snapshot-list').cycle('next');	
	});


	
	
	function get_weather(newcity) {
		city = newcity;
		var time = $('#time').text();
		$('#time').html('<img src="'+base_url+'images/loading.gif" />');
		var wurl = base_url + "weather/get/" + city;
		$.ajax({
			url: wurl,
			success: function(xml) {
				var found = false;
				//alert(xml);
				$(xml).find('forecast_information').each(function(){
					
					found = true;
					
					$(xml).find('city').each(function(){
						var data = $(this).attr('data');
						if( data.length > 25 ) {
							//data = data.substr(0,25) + "...";
							var splitted = data.split(", ");
							$('#city').text(splitted[0]);
						} else $('#city').text(data);
					});
					$(xml).find('forecast_date').each(function(){
						var data = $(this).attr('data');
						$('#forecast-date').text(data);
					});
					$(xml).find('temp_c').each(function(){
						var data = $(this).attr('data');
						$('#temp-c').html( data + "&deg;C" );
					});
					$(xml).find('current_date_time').each(function(){
						var data = $(this).attr('data');
						$('#time').html( data );
					});
									
					var humidity = '';
					var condition = '';
					
					$(xml).find('condition').each(function(){
						condition = $(this).attr('data');
						
					});			
					$(xml).find('humidity').each(function(){
						humidity = $(this).attr('data');
						
					});	
					
					$('#condition').html(condition + "<br>" + humidity);
									
					if(condition == "Partly Cloudy")
						$('#weather-icon').css('background','transparent url('+base_url+'images/weather/weather_4.png) no-repeat 0px -10px');
					else if(condition == "Chance of Storm")
						$('#weather-icon').css('background','transparent url('+base_url+'images/weather/weather_17.png) no-repeat 0px -10px');
					else if(condition == "Clear")
						$('#weather-icon').css('background','transparent url('+base_url+'images/weather/weather_1.png) no-repeat 0px -10px');
					else if(condition == "Partly Sunny")
						$('#weather-icon').css('background','transparent url('+base_url+'images/weather/weather_6.png) no-repeat 0px -10px');
					else if(condition == "Mostly Sunny")
						$('#weather-icon').css('background','transparent url('+base_url+'images/weather/weather_2.png) no-repeat 0px -10px');					
					else if(condition == "Cloudy")
						$('#weather-icon').css('background','transparent url('+base_url+'images/weather/weather_7.png) no-repeat 0px -10px');					
					else if(condition == "Fog")
						$('#weather-icon').css('background','transparent url('+base_url+'images/weather/weather_53.png) no-repeat 0px -10px');
					else if(condition == "Haze")
						$('#weather-icon').css('background','transparent url('+base_url+'images/weather/haze.png) no-repeat 0px -10px');
					else if(condition == "Light Rain")
						$('#weather-icon').css('background','transparent url('+base_url+'images/weather/weather_12.png) no-repeat 0px -10px');					
					else if(condition == "Rain")
						$('#weather-icon').css('background','transparent url('+base_url+'images/weather/weather_18.png) no-repeat 0px -10px');	
					else if(condition == "Thunderstorm")
						$('#weather-icon').css('background','transparent url('+base_url+'images/weather/weather_15.png) no-repeat 0px -10px');	
					else if(condition == "Chance of Rain")
						$('#weather-icon').css('background','transparent url('+base_url+'images/weather/weather_13.png) no-repeat 0px -10px');
					else if(condition == "Showers")
						$('#weather-icon').css('background','transparent url('+base_url+'images/weather/weather_12.png) no-repeat 0px -10px');	
					else if(condition == "Isolated Thunderstorms")
						$('#weather-icon').css('background','transparent url('+base_url+'images/weather/weather_16.png) no-repeat 0px -10px');	
					return true;				
				});
				if(!found) {
					$('#time').html("Information is not available");
					$('#weather-icon').css('background','transparent url('+base_url+'images/weather/haze.png) no-repeat 0px -10px');
					$('#city').text(city);
					$('#forecast-date').text("");
					$('#temp-c').html( "&deg;C" );
					$('#condition').html("");
				}
				//$('#time').html('');
				
			}
		});	
	
	}

	var city = "malang"; //default city
	$.ajax({
		url: base_url + "geoip",
		success: function( data ) {
			//alert( data );
			if( data != "") city = data;
			get_weather(city);
		}
	});
	
	$('#change-location').show();
	$('#location-input').hide();	
	
	var mouse_is_inside = false;
	$('#location-input').hover(function(){ 
		mouse_is_inside=true; 
	}, function(){ 
		mouse_is_inside=false; 
	});
	
	$('body').mouseup(function(){ 
		if(!mouse_is_inside) {
			$('#change-location').show();
			$('#location-input').hide();
		}
	});	
	
	$('#location-input').keyup(function(event){ 
		//alert(event.keyCode);
		if(event.keyCode == 27) {
			$('#change-location').show();
			$('#location-input').hide();
		}
		else if(event.keyCode == 13) {
			$('#change-location').show();
			$('#location-input').hide();				
			get_weather($('#location-input').val());
		}
	});	
	
	$('#change-location').click(function(){ 
		$('#change-location').hide();
		$('#location-input').show();
	});


	function relative_time(time_value) {
		var values = time_value.split(" ");
		//time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
		time_value = values[2] + " " + values[1] + ", " + values[3] + " " + values[4];
		var parsed_date = Date.parse(time_value);
		var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
		var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
		delta = delta + (relative_to.getTimezoneOffset() * 60);
		
		if (delta < 60) {
			return 'less than a minute ago';
		} else if(delta < 120) {
			return 'about a minute ago';
		} else if(delta < (60*60)) {
			return (parseInt(delta / 60)).toString() + ' minutes ago';
		} else if(delta < (120*60)) {
			return 'about an hour ago';
		} else if(delta < (24*60*60)) {
			return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
		} else if(delta < (48*60*60)) {
			return '1 day ago';
		} else {
			return (parseInt(delta / 86400)).toString() + ' days ago';
		}
	}

	function get_tweets(user){
		$('#twitter-tweets').html('<li style="text-align:center"><img src="'+base_url+'images/loading.gif" /></li>');
		//var wurl = base_url + 'twitter/get/' + user;
		wurl = base_url + 'twitter/';
		$.ajax({
			url: wurl,
			success: function(tweets) {	
				$('#twitter-tweets').html('');
				$(tweets).find('item').each(
				function()
				{
					var description = $(this).find("description").text();
					var author = $(this).find("author").text();
					author = author.split("@");
					author = '@<a href="http://twitter.com/'+author[0]+'">'+author[0]+'</a>';
					var pubdate = $(this).find("pubDate").text();
					//alert(pubdate);
					var statustime = relative_time(pubdate);
					// Need to work out how to handle namespaced prefixes on some
					// elements.
					var prefix = "google\\:"; // Most prefer this...
					var image = $(this).find( prefix + "image_link" ).text();
					if( image.length == 0 )
					{
						prefix = ""; // ...but some don't!
						image = $(this).find( prefix + "image_link" ).text();
					}
					image = '<img src="'+image+'" height="48" width="48" style="float:left;margin:5px 10px 5px 0px; border:1px solid #cccccc; padding:3px;" />';				
					//var image = $(this).find("google:image_link").text();
					$('#twitter-tweets').append('<li>'+image+author+': '+description+'<small>'+statustime+'</small></li>');
				});
				//alert(tweets);			
				//var image = tweets.find('profile_image_url').text();
				//<img src="'+image+'" alt="" align="left" style="padding-right:10px;" />
				/*
				$(tweets).find('status').each(function(){
					
					
					var tweet = $(this);
					var pattern = new RegExp("^"+user+": ","g");
					var status = tweet.find('text').text().replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
						return '<a href="'+url+'">'+url+'</a>';
					}).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
						return reply.charAt(0)+'<a href="http://twitter.com/'+reply.substring(1)+'">'+reply.substring(1)+'</a>';
					}).replace(pattern,'');
					//alert(status);
					var i=0;
					var statustime = "";
					tweet.find('created_at').each(function(){
						var time = $(this);
						if(i==0) {
							statustime = relative_time(time.text());
							//alert(statustime);
						}
						i++;
					});
					//
					
					$('#twitter-tweets').append('<li>'+status+'<small>'+statustime+'</small></li>');
				});
				*/
				$('#twitter-tweets').cycle({
					fx:     'scrollUp', 				
				});
			}
		});	
	}
	
	
	function get_yahoo_presence(user){
		$('#presence').html('<img src="'+base_url+'images/loading.gif" />');
		//var wurl = base_url + 'twitter/get/' + user;
		wurl = base_url + 'presence/yahoo/' + user;
		$.ajax({
			url: wurl,
			success: function(presence) {
				$('#presence').html(presence);
			}
		});	
	}
	
	function get_flickr_photostream(){
		$('#photostream').html('<img src="'+base_url+'images/loading.gif" alt="Loading..." />');
		wurl = base_url + 'flickr';
		$.ajax({
			url: wurl,
			success: function(stream) {
				
				$('#photostream').html('');
				$(stream).find('item').each(
				function()
				{
					var description = $(this).find("description").text();
					var thumbnail = $(this).find("thumbnail").text();
					var title = $(this).find("title").text();
					var url = $(this).find("link").text();
					$('#photostream').append('<li class="stream-thumbnail"><a href="'+url+'"><img src="'+thumbnail+'" alt="" border="0" title="'+title+'" /></a></li>');
				});				
			}
		});				
	}
	
	get_tweets('aryoxp');
	get_yahoo_presence('aryoxp');
	get_flickr_photostream();
});


