
/**

Copyright (c) 2009 Yacht Club St. Nikolay.
Based on the coolweather wordpress plugin
by andot and bawbaw.
http://wordpress.org/extend/plugins/cool-weather/

*/



coolweather_iconspath = 'images/icons/';
cities = {
	Burgas: 'Бургас',
	Varna: 'Варна',
	Balchik: 'Балчик',
	Nesebar: 'Несебър',
	Samokov: 'Самоков'
};
current_city = '';
function get_nav_language() {
    var nav_lng;
    if(navigator.userlanguage) nav_lng = navigator.userlanguage;
    if(navigator.browserLanguage) nav_lng = navigator.browserLanguage;
    if(navigator.systemLanguage) nav_lng = navigator.systemLanguage;
    if(navigator.language) nav_lng = navigator.language;
    return new String(nav_lng).toLowerCase();
}

var coolweather_nav_lng = get_nav_language();
var coolweather_nav_language = "en";
if (coolweather_nav_language.indexOf(coolweather_nav_lng) == -1) coolweather_nav_lng = 'en';

var coolweather_lang = [];

coolweather_lang['en'] = [];
coolweather_lang['en']['currentconditions'] = "Current Conditions";
coolweather_lang['en']['changecity'] = "Change the city";
coolweather_lang['en']['temperature'] = "Temperature: ";
coolweather_lang['en']['hightemperature'] = "High Temperature: ";
coolweather_lang['en']['lowtemperature'] = "Low Temperature: ";
coolweather_lang['en']['realfeel'] = "Realfeel<sup>&reg;</sup>: ";
coolweather_lang['en']['realfeelhigh'] = "Realfeel<sup>&reg;</sup> High: ";
coolweather_lang['en']['realfeellow'] = "Realfeel<sup>&reg;</sup> Low: ";
coolweather_lang['en']['windspeed'] = "Wind Speed: ";
coolweather_lang['en']['windforce'] = "Wind Force: ";
coolweather_lang['en']['scale'] = "scale";
coolweather_lang['en']['winddirection'] = "Wind Direction: ";
coolweather_lang['en']['today'] = "Today: ";
coolweather_lang['en']['tomorrow'] = "Tomorrow: ";
coolweather_lang['en']['daytime'] = "daytime";
coolweather_lang['en']['nighttime'] = "nighttime";
coolweather_lang['en']['loading'] = "Loading...";
coolweather_lang['en']['city'] = "City: (Example: New York)";
coolweather_lang['en']['firstseehint'] = "Maybe you use this browser to see me for the first time, so you need set your city first which you want to see the weather report.";
coolweather_lang['en']['location'] = "Location: ";
coolweather_lang['en']['nocitymatched'] = "There is no city matched your input!";
coolweather_lang['en']['morecitymatched'] = "There are more than one city matched your input, select which you want.";
coolweather_lang['en']['back'] = "back";
coolweather_lang['en']['choosecity'] = 'choose your city';
coolweather_lang['en']['unit'] = 'Unit of Measure: ';
coolweather_lang['en']['unita'] = 'American';
coolweather_lang['en']['unitm'] = 'Metric';
coolweather_lang['en']['N'] = 'N';
coolweather_lang['en']['S'] = 'S';
coolweather_lang['en']['W'] = 'W';
coolweather_lang['en']['E'] = 'E';
coolweather_lang['en']['NE'] = 'NE';
coolweather_lang['en']['SE'] = 'SE';
coolweather_lang['en']['NW'] = 'NW';
coolweather_lang['en']['SW'] = 'SW';
coolweather_lang['en']['ENE'] = 'ENE';
coolweather_lang['en']['ESE'] = 'ESE';
coolweather_lang['en']['WNW'] = 'WNW';
coolweather_lang['en']['WSW'] = 'WSW';
coolweather_lang['en']['NNE'] = 'NNE';
coolweather_lang['en']['NNW'] = 'NNW';
coolweather_lang['en']['SSE'] = 'SSE';
coolweather_lang['en']['SSW'] = 'SSW';

coolweather_unit = [];
coolweather_unit[0] = [];
coolweather_unit[0]['temp'] = '&deg;F';
coolweather_unit[0]['speed'] = ' mph';
coolweather_unit[1] = [];
coolweather_unit[1]['temp'] = '&deg;C';
coolweather_unit[1]['speed'] = ' m/s';

function get_cookie(name) {
    function get_cookie_val(offset) {
        var endstr = document.cookie.indexOf(";", offset);
        if (endstr == -1) endstr = document.cookie.length;
        return unescape(document.cookie.substring(offset, endstr));
    }
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen) {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg) return get_cookie_val(j);
        i = document.cookie.indexOf(" ", i) + 1;
        if (i == 0) break;
    }
    return null;
}

function set_cookie(name, value, expires) {
    var exp = new Date();
    if (expires) {
        exp.setTime(exp.getTime() + expires);
    }
    else {
        exp.setTime(exp.getTime() + 315360000000);
    }
    c = [name, "=", escape(value), "; expires=", exp.toGMTString(), ";"].join('');
    document.cookie = c;
}

function delete_cookie(name) {
    var exp = new Date();
    exp.setTime(exp.getTime() - 60000);
    document.cookie = [name, "=; expires=", exp.toGMTString(), ";"].join('');
}

function coolweather_get_windforce(windspeed) {
    var scales = [0.2, 1.5, 3.3, 5.4, 7.9, 10.7, 13.8, 17.1, 20.7, 24.4, 28.4, 32.6];
    for (var i = 0; i < scales.length; i++) {
        if (windspeed <= scales[i]) {
            return i;
        }
    }
    return 12;
}

var coolweather_rpc = new PHPRPC_Client(get_coolweather_rpc(), ['get_location', 'get_weather']);

var coolweather_report = [];
function get_coolweather_rpc()
{
	var coolweather_rpc_list=[
	'http://phprpc-weather.appspot.com/',
	'http://phprpc-weather1.appspot.com/',
	'http://phprpc-weather2.appspot.com/',
	'http://phprpc-weather3.appspot.com/',
	'http://phprpc-weather4.appspot.com/',
	'http://phprpc-weather5.appspot.com/',
	'http://phprpc-weather6.appspot.com/',
	'http://phprpc-weather7.appspot.com/',
	'http://phprpc-weather8.appspot.com/',
	'http://phprpc-weather9.appspot.com/',
	];
	var _count=coolweather_rpc_list.length;
	return coolweather_rpc_list[Math.floor(Math.random()*_count)];
}
all_set = 0;
function coolweather_set_weather(city) {
	var number = 0;
	var dar_or_night = 0;
    var weather = coolweather_report[city];
    var locid = weather['locid'];
    var metric = weather['metric'];
    var icon_div = document.getElementById(city+'_icon');
    var today_div = document.getElementById(city+'_today');
    var tomorrow_div = document.getElementById(city+'_tomorrow');
    var wind_icon = document.getElementById(city+'_wind_icon');
    var wind_speed = document.getElementById(city+'_wind_speed');
    if (number == 0) {
        
        icon_div.innerHTML = ['<img width="33" height="32" border="0" src="', coolweather_iconspath, weather[1][0]['weathericon'], '.gif" />'].join('');
        today_div.innerHTML = [weather[1][0]['lowtemperature'], '-', weather[1][0]['hightemperature'], '&deg;'].join('');
        tomorrow_div.innerHTML = [weather[2][0]['lowtemperature'], '-', weather[2][0]['hightemperature'], '&deg;'].join('');
        wind_icon.innerHTML = ['<img src="', coolweather_iconspath, weather[1][0]['winddirection'], '.gif" width="33" height="32" border="0" alt="', weather[1][0]['winddirection'],'" />'].join('');
        wind_speed.innerHTML = [weather[1][0]['windspeed'], ' м/с ', weather[1][0]['winddirection']].join('');
    }
}

coolweather_rpc.get_weather_callback = function (result, args) {
    if (result instanceof PHPRPC_Error) {
        var coolweather_hint = document.getElementById('coolweather_hint');
        coolweather_hint.innerHTML = ['<img src="', coolweather_iconspath, 'swa.gif" alt="error" align="left" width="64" height="40" /><span style="color: red">', result.toString(), '</span>'].join('');
    }
    else {
        if (result == null) {
            result = [];
        }
        result['locid'] = args[0];
        result['metric'] = args[1];
        coolweather_report[result['city']] = result;
        var weather = PHPSerializer.serialize(coolweather_report);
        coolweather_set_weather(result['city']);
    }
}

coolweather_rpc.get_location_callback = function (result) {
	var metric = 1;
    if (metric == null) metric = 1;
    var coolweather_hint = document.getElementById('coolweather_hint');
    var coolweather_input = document.getElementById('coolweather_input');
    if (result instanceof PHPRPC_Error) {
        coolweather_hint.innerHTML = ['<span style="color: red">', result.toString(), '</span>'].join('');
        coolweather_input.disabled = false;
    }
    else if (result.length == 0) {
        coolweather_hint.innerHTML = coolweather_lang[coolweather_nav_lng]['nocitymatched'];
        coolweather_input.disabled = false;
        coolweather_input.focus();
    }
    else if (result.length == 1) {
        coolweather_get_weather(result[0]['location'], metric);
    }
}

function coolweather_get_location(city) {
    coolweather_rpc.get_location(city);
}

function coolweather_get_weather(locid, metric) {
    coolweather_rpc.get_weather(locid, metric);
}

cache_timer = 0;

function cache_weather_data() {
	ready = true;
	for (city in cities) {
		if (!coolweather_report[city] || !coolweather_report[city]['city']) {
			ready = false;
			break;
		}
	}
	if (ready) {
		self.clearInterval(cache_timer);
		for (city in cities) {
			var weather_data = [];
			var weather = coolweather_report[city];
			weather_data[1] = [];
			weather_data[1][0] = weather[1][0];
			weather_data[2] = [];
			weather_data[2][0] = weather[2][0];
			weather_data['locid'] = weather['locid'];
			weather_data['metric'] = weather['metric'];
			set_cookie('cached_weather_'+city, PHPSerializer.serialize(weather_data), 900000);
		}
	}
}

$(document).ready(function(){
	var city_div = document.getElementById('weather_cities');
	var icon_div = document.getElementById('weather_icons');
	var today_div = document.getElementById('weather_today');
	var tomorrow_div = document.getElementById('weather_tomorrow');
	var wind_city = document.getElementById('wind_cities');
	var wind_icon = document.getElementById('wind_icons');
	var wind_speed = document.getElementById('wind_speed');
	
	for (city in cities) {
		city_div.innerHTML += '<p class="weather" id="'+city+'_city">'+cities[city]+'</p>';
		icon_div.innerHTML += '<p id="'+city+'_icon"></p>';
		today_div.innerHTML += '<p class="weather" id="'+city+'_today"></p>';
		tomorrow_div.innerHTML += '<p class="weather" id="'+city+'_tomorrow"></p>';
		wind_city.innerHTML += '<p class="weather" id="'+city+'_wind_city">'+cities[city]+'</p>';
		wind_icon.innerHTML += '<p id="'+city+'_wind_icon"></p>';
		wind_speed.innerHTML += '<p class="weather" id="'+city+'_wind_speed"></p>';
		weather_data = get_cookie('cached_weather_'+city);
		if (weather_data) {
			weather_data = PHPSerializer.unserialize(weather_data);
			coolweather_report[city] = weather_data;
			coolweather_set_weather(city);
		} else {
			coolweather_get_location(city+',Bulgaria');
		}
	}
	
	cache_timer = self.setInterval('cache_weather_data()', 1000);
 });

