﻿ // ------------------------------------------------------------------------------------------------------------
 // FUNCTIONS FOR THESSALONIKI WEATHER COMPONENT
 // 
 // COPYRIGHT 2008 Apostolos Evangelopoulos
 // ------------------------------------------------------------------------------------------------------------

var firstUse=true;
var timeoutVar;
var url;
var http = getXMLHTTPRequest();

// creates XMLHTTPRequest object
function getXMLHTTPRequest() {
	try {
		req = new XMLHttpRequest(); 
	}
	catch(e) {
		try {
			req=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e) {
			try	{
				req=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e){
				req=false;
			}
		}
	}
	return req
}

// main AJAX function
function getRSS(){	  
	if(firstUse){
    url="bypass.php?feed=";	    
	}
	var feed="http://weather.yahooapis.com/forecastrss?p=GRXX0019&u=c";
	myRand=parseInt(Math.random()*999999999999999);
	var modurl= url+escape(feed)+"&rand="+myRand;	
	http.open("GET",modurl,true);
	http.onreadystatechange=function () { 
                                    useHttpResponse();
                                   }	
	http.send(null);
}

function resolveCode(code){  
  switch(code){  
    case "0" :
    case "1" :
    case "2" :return "images/tornado.gif";    
    case "3" :
    case "4" :
    case "37":
    case "38":
    case "39":
    case "45":
    case "47":return "images/thunderstorms.gif";
    case "5" :
    case "6" :
    case "7" :
    case "18":return "images/snow_sleet.gif";  
    case "8" :
    case "9" :return "images/drizzle.gif";  
    case "10":
    case "11":
    case "12":
    case "40":return "images/showers.gif";      
    case "13":
    case "14":
    case "15": 
    case "16":   
    case "41":
    case "42":
    case "43":
    case "46":return "images/snow.gif"; 
    case "17":
    case "35":return "images/hail.gif";   
    case "19":
    case "20":
    case "21":
    case "22":return "images/fog.gif";      
    case "23":
    case "24":return "images/wind.gif";
    case "25":return "images/cold.gif"; 
    case "26":
    case "27":
    case "28":return "images/cloudy.gif"; 
    case "29":
    case "30":
    case "44":return "images/partly_cloudy.gif";
    case "31":
    case "33":return "images/clear.gif";
    case "32":
    case "34":return "images/sunny.gif";           
    case "36":return "images/hot.gif";  
    case "3200":return "images/blank.gif";
  }
}

function getGreekDay(day) {
   switch(day){  
    case "Sun":return "Κυριακή";
    case "Mon":return "Δευτέρα";
    case "Tue":return "Τρίτη";
    case "Wed":return "Τετάρτη";    
    case "Thu":return "Πέμπτη";
    case "Fri":return "Παρασκευή";
    case "Sat":return "Σάββατο";
  }  
}  

function translateDescription(description) {
  switch(description){
    case "Tornado":return "Ανεμοστρόβιλος";
    case "Tropical Storm":return "Τροπική Καταιγίδα";
    case "Hurricane":return "Τυφώνας";
    case "Severe Thunderstorms":return "Σφοδρή καταιγίδα";
    case "Thunderstorms":return "Καταιγίδα";
    case "Mixed Rain and Snow":return "Χιονόνερο";
    case "Mixed Rain and Sleet":return "Βροχή & Χιονόνερο";
    case "Mixed Snow and Sleet":return "Χιονόνερο";
    case "Freezing Drizzle":return "Ψιλόβροχο";
    case "Drizzle":return "Ψιλόβροχο";
    case "Freezing Rain":return "Ψυχρή Βροχή";
    case "Showers":return "Βροχή";
    case "Showers Late":return "Βροχή";
    case "Snow Flurries":return "Χιονοπτώσεις";
    case "Light Snow Showers":return "Ασθενείς Χιονοπτώσεις";
    case "Blowing Snow":return "Χιονοπτώσεις";
    case "Snow":return "Χιονοπτώσεις";
    case "Hail":return "Χαλαζόπτωση";
    case "Sleet":return "Χιονόνερο";
    case "Dust":return "Κονιορτός";
    case "Fog Late":return "Ομίχλη";
    case "AM Drizzle":return "Ψιλόβροχο";
    case "Foggy":return "Ομίχλη";
    case "Haze":return "Αχλύς";
    case "Smoky":return "Καπνομίχλη";
    case "Blustery":return "Θυελλώδεις Άνεμοι";
    case "Windy":return "Ισχυροί Άνεμοι";
    case "Cold":return "Παγωνιά";
    case "Cloudy":return "Συννεφιά";
    case "Mostly Cloudy":return "Συννεφιά";
    case "Partly Cloudy":return "Μερική Νέφωση";
    case "Clear":return "Ξαστεριά";
    case "Sunny":return "Ηλιοφάνεια";
    case "Mostly Clear":return "Ξαστεριά";
    case "Mixed Rain and Hail":return "Βροχή & Χαλάζη";
    case "Hot":return "Καύσωνας";
    case "Isolated Thunderstorms":return "Καταιγίδες";
    case "Scattered Thunderstorms":return "Καταιγίδες ";
    case "Scattered Showers":return "Βροχές";
    case "Heavy Snow":return "Ισχυρές Χιονοπτώσεις";
    case "Scattered Snow Showers":return "Χιονοπτώσεις";
    case "Heavy Snow":return "Ισχυρές Χιονοπτώσεις";
    case "Thundershowers":return "Καταιγίδες";
    case "Snow Showers":return "Χιονοπτώσεις";
    case "Isolated Thundershowers":return "Τοπικές Βροχοπτώσεις";
    case "Mostly Sunny":return "Ηλιοφάνεια";
    case "Rain":return "Βροχοπτώσεις";
    case "Light Rain Late":return "Ασθενείς Βροχοπτώσεις";
    case "Not Available":return "Μη Διαθέσιμη Πρόβλεψη";  
    case "Mostly Cloudy/Wind": return "Συννεφιά & Αέρας";  
    case "Partly Cloudy/Wind": return "Μερική Νέφωση & Αέρας";  
    case "Light Rain/Wind": return "Ασθενείς Βροχοπτώσεις & Αέρας"; 
    case "Light Rain": return "Ψιλόβροχο"; 
    case "Light Rain/Fog":return "Ψιλόβροχο-Ομίχλη";
    case "PM Light Rain":return "Ψιλόβροχο";
    case "PM Rain":return "Βροχή";
    case "Showers Early":return "Βροχή";
    case "Thundershowers Early":return "Καταιγίδα";
    case "PM Thundershowers":return "Καταιγίδα";
    case "AM Showers":return "Βροχές";
    case "AM Fog/PM Sun":return "Πρωινή Ομίχλη/Αίθριος";
    case "Heavy Rain":return "Ισχυρές Βροχοπτώσεις";
    case "AM Rain":return "Βροχή";
    case "AM Clouds/PM Sun":return "Νεφώσεις ΠΜ / Ήλιος ΜΜ";
    case "Light Rain Early":return "Ασθενής Βροχόπτωση";
    case "AM Fog/PM Clouds":return "ΠΜ Ομίχλη/ΜΜ Νεφώσεις";
    case "Rain/Thunder":return "Καταιγίδα";
    case "Rain/Wind":return "Βροχή & αέρας";
    case "Rain Early":return "Βροχή";
   }
}

function useHttpResponse(){
	if (http.readyState==4) {				
		if(http.status==200) {												
		  // name of city (first step)
		  var title =http.responseXML.getElementsByTagName("title");			     			
			var forecasts=http.responseXML.getElementsByTagName("yweather:forecast");									
			var wcurTemp=http.responseXML.getElementsByTagName("yweather:condition");													
			// name of city (second step)
			var titleOfCity=title[0].childNodes[0].nodeValue;			
			// extract name of city
			var splitTitle=titleOfCity.split("!");			
			// Current day
			var day1=forecasts[0].getAttribute("day");						
      // greek name of current day
      day1=getGreekDay(day1);			
      // The day after
			var day2=forecasts[1].getAttribute("day");
      // greek name of the day after
      day2=getGreekDay(day2);			
			// low temp of today
			var low1=forecasts[0].getAttribute("low");
			// low temp of the day after
			var low2=forecasts[1].getAttribute("low");
			// high temp of today
			var high1=forecasts[0].getAttribute("high");
			// high temp of the day after
			var high2=forecasts[1].getAttribute("high");
			// code for today forecast
			var text1=forecasts[0].getAttribute("code");
			// code for tomorrow forecast
			var text2=forecasts[1].getAttribute("code");
			// english forecast description for today
			var description1=forecasts[0].getAttribute("text");
  		// english forecast description for tomorrow 
			var description2=forecasts[1].getAttribute("text");			
			// greek translation for today forecast description
			description1=translateDescription(description1);			
			// greek translation for tomorrow forecast description
			description2=translateDescription(description2);						
			// create text node for name of city
			titleNode=document.createTextNode(splitTitle[1]);			
			// create text node for name of current day		 
			day1Node=document.createTextNode(day1);
  		// create text node for name of the day	after	
			day2Node=document.createTextNode(day2);
			// create text node for low temp of current day		 		
			low1Node=document.createTextNode(low1);			
			// create text node for low temp of the day after	
			low2Node=document.createTextNode(low2);
			// create text node for high temp of current day		 		
			high1Node=document.createTextNode(high1);
			// create text node for high temp of the day after	
			high2Node=document.createTextNode(high2);			
			// create text node for forecast description of current day
			description1Node=document.createTextNode(description1);			
			// create text node for forecast description of the day after	
			description2Node=document.createTextNode(description2);			
			// create node for image 1
			image1Node=document.createElement("img");
			// create node for image 2
			image2Node=document.createElement("img");		
			// fill src attribute for today image
			image1Node.setAttribute("src", resolveCode(text1));
			// fill src attribute for tomorrow image
			image2Node.setAttribute("src", resolveCode(text2));
			// set width and height of images
			image1Node.setAttribute("width","37");
			image1Node.setAttribute("height","30");			
			image2Node.setAttribute("width","37");
			image2Node.setAttribute("height","30");					
			// remove all existing nodes before continuing..
			if(document.getElementById("firstDay1").hasChildNodes())	{			
			  document.getElementById("city1").removeChild(document.getElementById("city1").firstChild);
				document.getElementById("firstDay1").removeChild(document.getElementById("firstDay1").firstChild);
				document.getElementById("secondDay1").removeChild(document.getElementById("secondDay1").firstChild);				
				document.getElementById("firstLow1").removeChild(document.getElementById("firstLow1").firstChild);				
				document.getElementById("firstHigh1").removeChild(document.getElementById("firstHigh1").firstChild);				
				document.getElementById("secondLow1").removeChild(document.getElementById("secondLow1").firstChild);				
				document.getElementById("secondHigh1").removeChild(document.getElementById("secondHigh1").firstChild);				
				document.getElementById("firstIcon1").removeChild(document.getElementById("firstIcon1").firstChild);
				document.getElementById("secondIcon1").removeChild(document.getElementById("secondIcon1").firstChild);
				document.getElementById("firstDescription1").removeChild(document.getElementById("firstDescription1").firstChild);
				document.getElementById("secondDescription1").removeChild(document.getElementById("secondDescription1").firstChild);
			}
			// append today date			
			document.getElementById("firstDay1").appendChild(day1Node);					
			// append tomorrow date
			document.getElementById("secondDay1").appendChild(day2Node);						
			// create celsius symbol
			sup=document.createElement("sup");
			sup1=document.createTextNode("o");			
			sup.appendChild(sup1);			
			celsius=document.createTextNode("C");										
			// append celsius symbol
			document.getElementById("firstLow1").appendChild(low1Node);				
			document.getElementById("firstLow1").appendChild(sup);					
			document.getElementById("firstLow1").appendChild(celsius);											
			// create celsius symbol
			sup=document.createElement("sup");
			sup1=document.createTextNode("o");
			sup.appendChild(sup1);			
			celsius=document.createTextNode("C");									
			// append celsius symbol			
			document.getElementById("firstHigh1").appendChild(high1Node);			
			document.getElementById("firstHigh1").appendChild(sup);					
			document.getElementById("firstHigh1").appendChild(celsius);							
			// create celsius symbol 
			sup=document.createElement("sup");
			sup1=document.createTextNode("o");
			sup.appendChild(sup1);			
			celsius=document.createTextNode("C");					
			// append celsius symbol			
			document.getElementById("secondLow1").appendChild(low2Node);				
			document.getElementById("secondLow1").appendChild(sup);					
			document.getElementById("secondLow1").appendChild(celsius);							
			// create celsius symbol 
			sup=document.createElement("sup");
			sup1=document.createTextNode("o");
			sup.appendChild(sup1);			
			celsius=document.createTextNode("C");								
			// append celsius symbol			
			document.getElementById("secondHigh1").appendChild(high2Node);			
			document.getElementById("secondHigh1").appendChild(sup);					
			document.getElementById("secondHigh1").appendChild(celsius);					
			// append today image 
			document.getElementById("firstIcon1").appendChild(image1Node);			
			// append tomorrow image 
			document.getElementById("secondIcon1").appendChild(image2Node);			
			// append today description 
			document.getElementById("firstDescription1").appendChild(description1Node);					
			// append tomorrow description
			document.getElementById("secondDescription1").appendChild(description2Node);						
    }
  }
}