var json_weather_data = null;

var xmlhttp = null;

//get element by ID shortcut
function $(theId) {
	return document.getElementById(theId);
}

if( !window.XMLHttpRequest ) XMLHttpRequest = function()
{
  try{ return new ActiveXObject("Msxml2.XMLHTTP.6.0") }catch(e){}
  try{ return new ActiveXObject("Msxml2.XMLHTTP.3.0") }catch(e){}
  try{ return new ActiveXObject("Msxml2.XMLHTTP") }catch(e){}
  try{ return new ActiveXObject("Microsoft.XMLHTTP") }catch(e){}
  throw new Error("Could not find an XMLHttpRequest alternative.")
};

function ajax(url, vars, callbackFunction)
{
  var request = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");
  request.open("GET", url, true);
  // request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
  request.setRequestHeader("Content-Type", "text/plain"); 
  
  request.onreadystatechange = function()
  {
    if (request.readyState == 4 && request.status == 200)
    {
      if (request.responseText)
      {
          json_weather_data = eval(request.responseText);
          setupWeather();
      }
    }
  };
  request.send(vars);
}

function setupWeather() {
	
	weatherTown = readCookie('weatherTown');
	
	if(weatherTown == null) {
		weatherTown = 'London';
	}
	
	$('weather').innerHTML = '<div class="weather_row" style="padding-bottom:8px;"><h1 class="widgettitles">Weather Widget</h1></div>';
	$('weather').innerHTML += '<div class="weather_row" id="weather_town" style="padding-left:18px;padding-bottom:3px;color:#7d3213;"></div>';
	
	$('weather').innerHTML += '<div class="weather_row weather_5_days" id="weather_5_days"></div>';
	
	$('weather').innerHTML += '<div class="weather_row" style="padding-left:18px;padding-top:8px;" id="weather_form"><select id="weather_select" name="weather_town" onchange="updateWeather(this)"></select></div>';

//	$('weather').innerHTML += '<div class="weather_row" style="padding-left:13px;"><form id="weather_form"><select id="weather_select" name="weather_town" onchange="updateWeather(this)"></select></form></div>';

	// loop over the towns
	for(i = 0; i < json_weather_data.length; i++) {
		$('weather_select')[i] = new Option(json_weather_data[i].Town);
	}

	sortlist();
	
	weatherTownIndex = 0;
	for(i = 0; i < $('weather_select').length; i++) {
		if($('weather_select')[i].text == weatherTown) {
			weatherTownIndex = i;
		}
	}

	$('weather_select').selectedIndex = weatherTownIndex;
	
	updateWeather($('weather_select'));
	
}

function updateWeather(form_select_obj) {
	
	townName = form_select_obj[form_select_obj.selectedIndex].text;
		
	createCookie('weatherTown', townName, 14);

	// loop over the towns
	for(i = 0; i < json_weather_data.length; i++) {
		if(json_weather_data[i].Town == townName) {
			// we've got the data
			// now update the html
			updateWeatherHtml(i);
		}
	}
	
}

function updateWeatherHtml(i) {
var current_day=new Date()

var day_name=new Array(11);
day_name[0]="Sun";
day_name[1]="Mon";
day_name[2]="Tue";
day_name[3]="Wed";
day_name[4]="Thu";
day_name[5]="Fri";
day_name[6]="Sat";
day_name[7]="Sun";
day_name[8]="Mon";
day_name[9]="Tue";
day_name[10]="Wed";

	days_weather = '';
	day1 = json_weather_data[i].Day1.Max + '&deg;C';
	
	days_weather += '<div class="weather_day weather_wicons weather_' + getCSS(json_weather_data[i].Day1.WeatherCode, true) + '">' + day1 + '<br>' + day_name[current_day.getDay()] + '</div>';

	day2 = json_weather_data[i].Day2.Max + '&deg;C';
	days_weather += '<div class="weather_day weather_wicons weather_' + getCSS(json_weather_data[i].Day2.WeatherCode, false) + '">' + day2 + '<br>' + day_name[current_day.getDay()+1]+ '</div>';

	day3 = json_weather_data[i].Day3.Max + '&deg;C';
	days_weather += '<div class="weather_day weather_wicons weather_' + getCSS(json_weather_data[i].Day3.WeatherCode, false) + '">' + day3 + '<br>' + day_name[current_day.getDay()+2]+ '</div>';

	day4 = json_weather_data[i].Day4.Max + '&deg;C';
	days_weather += '<div class="weather_day weather_wicons weather_' + getCSS(json_weather_data[i].Day4.WeatherCode, false) + '">' + day4 + '<br>' + day_name[current_day.getDay()+3]+ '</div>';

	day5 = json_weather_data[i].Day5.Max + '&deg;C';	
	days_weather += '<div class="weather_day weather_wicons weather_' + getCSS(json_weather_data[i].Day5.WeatherCode, false) + '">' + day5 + '<br>' + day_name[current_day.getDay()+4]+ '</div>';

	// insert weather
	$('weather_5_days').innerHTML = days_weather;
	
	// insert heading
	$('weather_town').innerHTML = '<strong>' + json_weather_data[i].Town + '</strong> (5 Day Forecast)';

}

function getCSS(wc, on) {
	// wc = weather code
	// weathercode: 10,11,12,14,15 (9,13) = rain
	if(wc == 9 || wc == 10 || wc == 11 || wc == 12 || wc == 13 || wc == 14 || wc == 15) {
		if(on) {
			return 'wicons_rain_on';
		} else {
			return 'wicons_rain';
		}
	// weathercode: 4,5,6,7,8 (-99) = cloud
	} else if (wc == 4 || wc == 5 || wc == 6 || wc == 7 || wc == 8 || wc == -99) {
		if(on) {
			return 'wicons_cloud_on';
		} else {
			return 'wicons_cloud';
		}
	// weathercode: 29,30,31 (28) = thunder
	} else if (wc == 28 || wc == 29 || wc == 30 || wc == 31) {
		if(on) {
			return 'wicons_thunder_on';
		} else {
			return 'wicons_thunder';
		}
	// weathercode: 3 (2) = sun_cloud
	} else if (wc == 2 || wc == 3) {
		if(on) {
			return 'wicons_suncloud_on';
		} else {
			return 'wicons_suncloud';
		}
	// weathercode: 1 (0) = sun
	} else if (wc == 1 || wc == 0) {
		if(on) {
			return 'wicons_sun_on';
		} else {
			return 'wicons_sun';
		}
	// weathercode: 23,24,26,27 (22,25) = snow
	} else if (wc == 22 || wc == 23 || wc == 24 || wc == 25 || wc == 26 || wc == 27) {
		if(on) {
			return 'wicons_snow_on';
		} else {
			return 'wicons_snow';
		}
	// weathercode: 17,18,20,21 (16,19) = sleet
	} else if (wc == 16 || wc == 17 || wc == 18 || wc == 19 || wc == 20 || wc == 21) {
		if(on) {
			return 'wicons_sleet_on';
		} else {
			return 'wicons_sleet';
		}
	}
}

function sortlist() {
	var lb = $('weather_select');
	arrTexts = new Array();
	
	for(i=0; i<lb.length; i++)  {
	  arrTexts[i] = lb.options[i].text;
	}
	
	arrTexts.sort();
	
	for(i=0; i<lb.length; i++)  {
	  lb.options[i].text = arrTexts[i];
	  lb.options[i].value = arrTexts[i];
	}
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}
