// rainfall observations /watl/rainfall/observations/index.shtml 

var rainObs = {
	//methods = initTablesForm, doTable, loadTable, hideTables, processHTML, doPath, cleanNestedDocument, doCatchments, doTimes, addOption
	
	initTablesForm: function(){
	   document.getElementById('insertTable').style.display='none';
	   var rt = document.forms.rainfallTables;
	   rt.region.selectedIndex=0;
	   rt.region[0].value="null";
	   rt.catchment.disabled= true;
	   rt.catchment.length=0; 
	   rainObs.addOption(rt.catchment,'Catchment area','null' );
	   rt.period.disabled= true;   
	   rt.period.length=0; 
	   rainObs.addOption(rt.period,'Latest','null' );
	},

	doTable: function(){
		//reinit insertTable 
		var rt = document.forms.rainfallTables;
		document.getElementById('insertTable').innerHTML='';
		if(rt.region.selectedIndex === 0){ 
			alert('Please select a State or Territory, then an Area and Period');
		}
		if(rt.region && rt.catchment && rt.period){
		var url='';
		url= rainObs.doPath()+ '_tab.html';
		//do xhr
		if(url!==''){rainObs.loadTable(url);}
		} 
		else {return;}
	},

	loadTable: function(thisurl){
		if (window.ActiveXObject){
			var xhr = new ActiveXObject("Microsoft.XMLHTTP");
		}
		else if (window.XMLHttpRequest){
			xhr = new XMLHttpRequest();
		}
		else{
			alert("Your web browser does not support this. It may need updating.");
		}
		//prepare the xmlhttprequest object
		var url=thisurl; 
		//append date
		var d = new Date();
		var time = d.getTime();
		url= url + '?prevent_cache='+ time;
		xhr.open("GET",url,true);
		xhr.setRequestHeader("Cache-Control", "no-cache");
		xhr.setRequestHeader("Pragma", "no-cache");
		xhr.onreadystatechange = function() {
			if (xhr.readyState == 4){
				if (xhr.status == 200){
					if (xhr.responseText !== null){
						var xml = rainObs.processHTML(xhr.responseText);
					}
					else{
						alert('Currently unavailable');
						return false;
					}
				}
				else{
					alert('Currently unavailable');
				}
			}
		};
		xhr.send(null);
	},
	//for hide button
	hideTables: function(){
		document.getElementById('insertTable').style.display='none';
	},

	processHTML:function (rawDoc){
		var text, el, heading, table, button, map, mapPath, maplink;
		var rt = document.forms.rainfallTables;
		
		text= rainObs.cleanNestedDocument(rawDoc);  
		//convert to dom and glean h1 and table only
		el= document.createElement("div");
		el.innerHTML = text;
		heading = el.getElementsByTagName('h1')[0];
		table = el.getElementsByTagName('table')[0];
		maplink = document.createElement('p');
		maplink.setAttribute('class', 'maplink');
		maplink.innerHTML = "<a href=\"#map\" class=\"map\">View map</a>\n";
		//make button
		button = document.createElement('div');
		button.setAttribute('id', 'statusBanner');
		button.innerHTML = '<a href="#" onclick="rainObs.hideTables(); return false;" id="close"><img src="/weather-services/images/symbols/close.gif" alt="close" title="close" /></a>\n';
		//do map link
		map = document.createElement('p');
		mapPath= rainObs.doPath()  + ".gif";
		map.innerHTML = "<a id=\"map\" name=\"map\"></a><img src=" + mapPath + " alt=\"\" /><img src=\"/web01/ncc/www/brs/rain/points/totals/" + rt.region[rt.region.selectedIndex].value + "/" + rt.period[rt.period.selectedIndex].value + "/lg.gif\" alt=\"Rainfall legend\" />\n";
		//assemble output
		document.getElementById('insertTable').appendChild(button);
		document.getElementById('insertTable').appendChild(heading);
		document.getElementById('insertTable').appendChild(maplink);
		document.getElementById('insertTable').appendChild(table);
		document.getElementById('insertTable').appendChild(map);
		document.getElementById('insertTable').style.display="block";
		fdTableSort.initEvt();
	},

	doPath: function(){
		var rt = document.forms.rainfallTables;
		if(rt.region && rt.catchment && rt.period){
			var rregion= rt.region[rt.region.selectedIndex].value; 
			var rcatchment=rt.catchment[rt.catchment.selectedIndex].value ; 
			var rperiod=rt.period[rt.period.selectedIndex].value ; 
		var path = "/web01/ncc/www/brs/rain/points/totals/" + rregion + "/" + rperiod + "/" + rcatchment ; 
		return path;
		}
	},
	/**
	 * Use when embedding a document with its own DOCTYPE, or other unwanted head //from /scripts/core_ajax.js
	 * tags.
	 */
	cleanNestedDocument: function(docText) {
		var docTemp = docText;
		docTemp     = docTemp.replace(/<(body|BODY)[\s\n\r\w="]+>/, '<body>');
		docTemp     = docTemp.replace(/<\/(body|BODY)[\s\n\r\w="]+>/, '</body>');
		var indexBody      = docTemp.indexOf('<body>') + 6;
		var indexBodyClose = docTemp.indexOf('</body>');
		var cleanText      = docTemp.substring(indexBody, indexBodyClose);
	
		return cleanText;
	},

	doCatchments: function(){
		var cText, cVal;
		var rt=document.forms.rainfallTables;
		var region= rt.region[rt.region.selectedIndex].value;
		if(region==="null"){rainObs.initTablesForm();}
		else{
			//refactor to global constants
			var rArray= rainObs.optionRefs[region];
			//temp init options
			rt.catchment.length=0; 
			rt.period.length=0;
			//addOption(rt.catchment, 'Select area', 0);
			for(var i=0;i<rArray.length;i++){
				cText= rArray[i][1];
				cVal= rArray[i][0]; 
				rainObs.addOption(rt.catchment, cText, cVal);
				rt.catchment.disabled=false;
			}
				rainObs.doTimes();
		}
	},

	doTimes: function(){
		//this catchment value
		var pText, pVal;
		var rt=document.forms.rainfallTables;
		var region = rt.region[rt.region.selectedIndex].value;
		var rArray = rainObs.optionRefs[region];
		var thiscatchment = rt.catchment[rt.catchment.selectedIndex].value;
		//temp init options
		rt.period.length=0; 
		//for this catchment
		for(var i=0;i< rArray.length;i++){
		   if(rArray[i][0] === thiscatchment){
			  //just climate tables
			   var startp =3, endp = 14;
			   for(var j= startp; j< endp;j++){
				   pVal = rainObs.optionRefs.period[j][0];
				   pText = rainObs.optionRefs.period[j][1];
				   rainObs.addOption(rt.period, pText, pVal);
			   }
		   }//end catchment match
		} //region loop
			rt.period.disabled=false;
	},       

	addOption: function(selectbox,text,value ) {
		var optn = document.createElement("option");
		optn.text = text;
		optn.value = value;
		selectbox.options.add(optn);
	},

   optionRefs: {
		//constants
		period:[['hour1','1 hour'],['hour3','3 hour'],['hour24','24 hour'],['daily','1 day'],['week','1 week'],['cmonth','Month to date'],['1month','1 month'],['3month','3 months'],['6month','6 months'],['9month','9 months'],['12month','12 months'],['18month','18 months'],['24month','24 months'],['36month','36 months']],
		
		nt:[
			['alice', 'Alice Springs'],
			['roper' , 'Arnhem Land'],
			['central' ,'Central Australian'],
			['gulf' ,'Gulf Area'],
			['daly','North West'],
			['victoria' ,'Victoria River']
		],
		nsw:[
			['centralcoast','Central Coast'],
			['centralwest','Central West'],
			['sydney','Greater Sydney'],
			['midnorth','Mid North Coast'],
			['northwest','North West'],
			['northcoast','Northern Coast'],
			['outerwest' ,'Outer West'],
			['southcoast' ,'South Coast'],
			['southwest' ,'South West']
		],
		qld:[
			['border' , 'Border Rivers'],
			['centralq' , 'Central Coast'],
			['gulfq' , 'Gulf and Peninsula'],
			['north' , 'North Tropical Coast'],
			['seast' , 'South East'],
			['west' , 'South West'],
			['widebay' , 'Wide Bay and Burnett']
		],
		sa:[
			['adelaide' , 'Adelaide'],
			['ntheast' , 'North East'],
			['nthwest' , 'North West'],
			['stheast' , 'South East']
		],
		tas:[
			['northwestern','North Western'],
			['northern', 'Northern'],
			['southern','Southern']
		],
		wa:[
			['gascoyne' ,'Gascoyne'],
			['goldfields' , 'Goldfields'],
			['kimberley' ,'Kimberley'],
			['midwest' ,'Mid-West'],
			['pilbara' ,'Pilbara'],
			['sandydesert','Sandy Desert'],
			['swest' ,'South West'],
			['southerncoast' , 'South Coast'],
			['wheatbelt' , 'Wheatbelt']
		],
		vic:[
			['corangamite', 'Corangamite'],
			['eastgippsland','East Gippsland'],
			['glenelghopkins', 'Glenelg Hopkins'],
			['goulburnbroken', 'Goulburn Broken'],
			['northcentral', 'North Central'],
			['northeast', 'North East'],
			['portphillip', 'Port Phillip'],
			['westgippsland', 'West Gippsland'],
			['wimmeramallee', 'Wimmera Mallee']
		]
		}//catchmentRefs
	
};
function addEvent(obj,evt,fn){
    if(obj.addEventListener){
        obj.addEventListener(evt, fn, false);
	}
    else if(obj.attachEvent) {
        obj.attachEvent('on' + evt,fn);
	}
}
window.onLoad=addEvent(window, 'load', rainObs.initTablesForm );
