Array.prototype.toString =function() {
	var retStr = "";
	for(var x in this) {
		if (isNaN(x)) {
			val = (typeof(this[x]) == 'string') ? "'"+this[x]+"'" : this[x];
			retStr+= x+"=>" + val + ",<br> ";
		} else {
			val = (typeof(this[x]) == 'string') ? "'"+this[x]+"'" : this[x];
			retStr+= x+"=>" + val + ",<br>";
		}
	}
	return retStr.substring(0,retStr.length-2) + "";
}


function ajax(url,data,func,oID){ // local X
	
	var xmlhttp =null
	if(window.XMLHttpRequest){//ff
		xmlhttp=new XMLHttpRequest();
		//xmlhttp.overrideMimeType('text/xml');//ie7 error
	}else if(window.ActiveXObject){//ie
		try { xmlhttp = new ActiveXObject("MSXML2.XMLHTTP"); }
		catch(e) { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
	}else{
		window.status="Error initializing XMLHttpRequest!";
		return false;
	}
	
	var fileContents;
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4) {
			if (xmlhttp.status == 200) {
				//fileContents = xmlhttp.responseText;  // only UTF-8??
				fileContents = xmlhttp.responseXML;
				func(oID,fileContents);
				return;
			}
			else if (xmlhttp.status == 404) window.status="Request URL does not exist";
			else window.status="Error: status code is " + xmlhttp.status;
		}
	}
	xmlhttp.open('GET', url, true);
	xmlhttp.send(null);
}

function getWeather(oid, xmldata){
	var msg=''
	var wArr=new Array();

	if(!xmldata.getElementsByTagName('weather')) return false;
	var root = xmldata.getElementsByTagName('weather')[0];

	var cc=root.getElementsByTagName('loc')[0];
	var N=cc.childNodes.length
	wArr['loc']=new Array();
	for (var i = 0; i <N; i++) {
		if(cc.childNodes[i].nodeType!=1) continue;
		wArr['loc'][cc.childNodes[i].tagName]=cc.childNodes[i].firstChild.nodeValue;
	}

	
	var cc=root.getElementsByTagName('cc')[0];
	var N=cc.childNodes.length
	wArr['cc']=new Array();
	for (var i = 0; i <N; i++) {
		if(cc.childNodes[i].nodeType!=1) continue;
		wArr['cc'][cc.childNodes[i].tagName]=cc.childNodes[i].firstChild.nodeValue;
	}

	wArr['day']=new Array();
	if(isNaN(fdays)) fdays=3;
 	for (var i = 0; i < fdays; i++) {
		var days=root.getElementsByTagName('dayf')[0];
		var cc=days.getElementsByTagName('day')[i]
		var d=cc.attributes[0].nodeValue
		wArr['day'][d]=new Array();
		wArr['day'][d]['part']=new Array();

		wArr['day'][d]['wdate']=cc.attributes[1].nodeValue+' ('+cc.attributes[2].nodeValue+")"

		var N=cc.childNodes.length
		for (var j = 0; j <N; j++) {
			if(cc.childNodes[j].nodeType!=1) continue;
			
			if(cc.childNodes[j].tagName=='part'){
				var part=cc.childNodes[j]
				var dn=part.attributes[0].nodeValue
				wArr['day'][d]['part'][dn]=new Array()
				var NN=part.childNodes.length
				for (var k = 0; k <NN; k++) {
					if(part.childNodes[k].nodeType!=1) continue;
					wArr['day'][d]['part'][dn][part.childNodes[k].tagName]=part.childNodes[k].firstChild.nodeValue
				}
			}
			else wArr['day'][d][cc.childNodes[j].tagName]=cc.childNodes[j].firstChild.nodeValue
		}
	} 
	printWeather(oid, wArr);
}

function printWeather(oid, arr){
	var imgdir=weatherRoot+'images/wicons/';
	var tgt=document.getElementById(oid)

	var msg='<table id=weathertbl><tr class=firstrow>';
	msg+='<td class=center>'
	msg+='<h3>Current<\/h3>';
	msg+='<p class=imgP style="background:url('+imgdir+arr.cc.icon+'.png) no-repeat 5px center;">'+arr.cc.t+'<\/p>'
	msg+='<p class=ctemp>'+arr.cc.tmp+"&deg;F ("+f2c(arr.cc.tmp)+')<\/p>'
	msg+='<p class=loca>'+arr.loc.dnam+'<\/p>'
	msg+='<h4 class=lsup>'+arr.cc.lsup+'<\/h4>'
	msg+='<\/td>';

	for (var k in arr.day) {// 
		msg+='<td>'+printdays(arr.day[k],imgdir)+'<\/td>'
	}
	msg+='<\/tr><tr><td colspan=4 class=provider><span id=showtime></span><\/td><\/tr>';
	msg+='<\/tr><\/table>'
	tgt.innerHTML=msg;

	setTimeInterval('showtime')//add time

}

function printdays(arr,imgdir){
	var msg='';
	msg+='<h3>'+arr.wdate+'<\/h3>'
	msg+='<p class=imgP2 style="background:url('+imgdir+arr.part.d.icon+'.png) no-repeat 5px center;">'+arr.part.d.t+'<span title="Rain &#92;  Precipitation"> ('+arr.part.d.ppcp +'%)<\/span><\/p>'
	msg+='<p class=imgP2 style="background:url('+imgdir+arr.part.n.icon+'.png) no-repeat 5px center;">'+arr.part.n.t+'<span title="Rain &#92;  Precipitation"> ('+arr.part.n.ppcp +'%)<\/span><\/p>'
	msg+='<p class=hilow title="High/Low  '+expC(arr.hi,arr.low)+'">'+expTemp(arr.hi)+' / ' + expTemp(arr.low) +'<\/p>'
	msg+='<p class=sunrise title="Sunrise/Sunset">'+arr.sunr+' / ' + arr.suns +'<\/p>'
	return msg;
}
function f2c(temp){
	if (isNaN(temp)) return '&#63;';//;
	var c=(Math.round((100/(212-32) * (temp - 32))*100))/100
	return Math.round(c)+'&deg;C'//&#8451;
}

function expTemp(temp){
	return temp+=(isNaN(temp))?'':'&deg;F';//&#8457;
}
function expC(high,low){
	return f2c(high)+'/'+f2c(low)
}

function showTime(){
	var currTime=(new Date()).getTime();
	//var diff=currTime-startTime+baseTime
	var diff=currTime+calcuTime
	var disp=new Date(diff)
	//disp.setTime(diff)
	var msg='';
	showTimeTarget.innerHTML=msg+disp.toLocaleString();
}

function convertDigital(disp){
	var hr=disp.getHours();
	var min=disp.getMinutes();
	var sec=disp.getSeconds();
	var msg=hr%12;
	msg+=(min<10)?':0':':';
	msg+=min
	msg+=(sec<10)?':0':':';
	msg+=sec;
	msg+=(hr>11)?' PM':' AM';
	return msg;
}

function setTimeInterval(oid){
	if(!document.getElementById(oid)) {
		return;
	}
	showTimeTarget=document.getElementById(oid);
	if(!isSet) isSet=setInterval("showTime()", 1000) 
}


function hashArray(arr){
	var msg='';
	for (var i in arr){
		msg+=i+"=>"+arr[i] + "<br>"
	}
	return msg;
}

function customError(message,url,line){
	var	amsg = "A JavaScript error has occurred. Please let us know about it.\n\n";
	amsg += "Error Message: " + message + "\n";
	amsg += "URL: " + url + "\n";
	amsg += "Line #: " + line;
	window.status=amsg;
	return true;
}

function addEvent(obj, evType, fn){
	if (obj.addEventListener) {//ff
		obj.addEventListener(evType, fn, true);
		return true;
	} else if (obj.attachEvent) {//ie
		return obj.attachEvent("on"+evType, fn);
	} else {return false;}
}

function weatherInit(){
	var weatherURL=weatherRoot+'get_xml.php?lid=30236&fdays='+fdays
	var loadInterval=5000;
	window.setTimeout(function(){ajax(weatherURL,'',getWeather,'weatherdiv')}, loadInterval)
}

addEvent(window,'load',weatherInit)
//window.onerror=customError
