var MyRiding = function() {
	var $U = CBC.UTIL;
	var $ = $U.getElementsById;
	var _cookiename = '';
	var _root = '';
	var _display = $('myr-display');
	var _form = $('myr-form');
	var _statusdisplay = $('myr-status');
	var _statusmsg = $('myr-msg');
	var _change = $('myr-change');
	var _changebtn = $('myr-change-btn');
	var _backbtn = $('myr-backbtn');
	var _dropdown = $('myr-dropdown');
	var _status = '';
	var _rid = '';
	var _refreshtimeout = '';
	return {
		init: function(o) {
			_cookiename = o.cookiename;
			_root = o.electionroot;
			_status = o.electionstatus;
			_changebtn.onclick = function(){CBC.APP.MyRiding.changeRiding();return false;}; 
			_backbtn.onclick = function(){CBC.APP.MyRiding.init();return false;};
			_dropdown.onchange = function(){CBC.APP.MyRiding.fetchRiding(_dropdown.value);return false;};
			_statusdisplay.style.display='none';
			var mycookie = this.readCookie(_cookiename);
			//read cookie
			if(mycookie){
				//show riding info and disable dropdown
				_change.style.display='block';
				_display.style.display='block';
				_form.style.display='none';
				//$U.debug('init found cookie');
				this.fetchRiding(mycookie);
			}
			else{
				_change.style.display='none';
				_display.style.display='none';
				_form.style.display='block';
				//$U.debug('init found no cookie');
			}
		},
		changeRiding : function(){
			//erase cookie
			this.eraseCookie(_cookiename);
			_rid='';
			if (_status == 'electionnight') clearInterval(_refreshtimeout);
			//enable dropdown
			_change.style.display='none';
			_display.style.display='none';
			_form.style.display='block';
			//$U.debug('user wants to change their riding');
		},
		ajaxRequest : function(url,func,obj) {
			if (window.XMLHttpRequest) {var req = new XMLHttpRequest();}
			else if (window.ActiveXObject) {try {req = new ActiveXObject("Msxml2.XMLHTTP");}catch(e) {req = new ActiveXObject("Microsoft.XMLHTTP");}}
			if (func) {req.onreadystatechange = function() {func(req,obj);};}
			req.open('GET',url,true);
			req.setRequestHeader('X-Requested-With','XMLHttpRequest');
			req.setRequestHeader('If-Modified-Since','Wed, 15 Nov 1995 00:00:00 GMT');
			if (req.overrideMimeType) {req.overrideMimeType("text/html");}
			req.send(null);
			return false;
		},
		fetchRiding : function(rid){
			this.createCookie(_cookiename,rid, 7);
			_rid = rid;
			//$U.debug(rid);
			url = _root + "myriding/ridings/" + rid + ".html";
			//console.log("URL to Fetch: " + url);
			_display.style.display = "none";
			_form.style.display = "none";
			this.showMessage("getriding","status");
			ajaxRequest(url,this.displayRiding,this);
		},
		displayRiding: function(req, obj) {
			if (req.readyState == 4){if (req.status == 200){
				_statusdisplay.style.display = "none";
				_display.innerHTML = req.responseText; 
				_display.className = "";
				_display.style.display = "block";
				_change.style.display = "block";
				if(_status == "electionnight"){
					clearInterval(_refreshtimeout);
					_refreshtimeout = setInterval("CBC.APP.MyRiding.autoRefresh()",30000);
					//console.log("Got Riding Info " + req.responseText);
				}
			} else {
				this.showMessage("noriding","error");
				//console.log("There was a problem retrieving data: " + req.status);
			}}
		},
		autoRefresh: function(){
			//console.log("Auto Refreshing");
			_display.className = "auto";
			url = _root + "myriding/ridings/" + _rid + ".html";
			ajaxRequest(url,this.displayRiding,this);
		},
		showMessage: function(a, b){
			var msgs = {
				"noriding":"Riding information currently unavailable",
				"deriding":"Determining Riding",
				"getriding":"Getting Riding Info"
			};
			//console.log(msgs[a]);
			_statusmsg.innerHTML = msgs[a];
			_statusmsg.className = b;
			_statusdisplay.style.display = "block";
		},
		createCookie : function(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=/";
		},
		readCookie : function(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;
		},
		eraseCookie : function(name) {
			this.createCookie(name,"",-1);
		}
	}
}
