function saveAndClose() {
	document.domain = 'cbc.ca'; self.opener.location.reload();self.opener.focus();window.close();
}

locationHandler = function(){
	$locObj			= null;
	$searchTimer 	= 0;
	$currentSection	= 'weather';
	$cacheLoc		= [];
	document.domain = 'cbc.ca';
	
	$r = "";
	$n = "";
	$w = "";
	
	return {
		init : function(_locObj){
			$T_lh = this;
			$E.addListener(window,'load',$T_lh.gotoLocationSection,{locType:window.location.href});			
			$E.addListener('inputEntry','keyup',$T_lh.setSearchTimer);
			$E.addListener('inputEntry','keydown',$T_lh.resetTimer);
			$locObj = _locObj;
			
			var date = new Date();
			date.setTime(date.getTime()+(-1*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
			
			$r   = $T_lh.readCookie("radioCenter", ";");
			$n   = $T_lh.readCookie("newsCenter", ";");
			$w 	= $T_lh.readCookie("weatherCenter", ";");	

			$T_lh.createCookie("weatherCenter",$w,365,"cbc.ca");
			$T_lh.createCookie("newsCenter",$n,365,"cbc.ca");
			$T_lh.createCookie("radioCenter",$r,365,"cbc.ca");

			$T_lh.deleteCookie("radioCenter");
			$T_lh.deleteCookie("newsCenter");
			$T_lh.deleteCookie("weatherCenter");			
		},
		gotoLocationSection : function(e,_o){
			if(_o.locType.indexOf('#weather') > 0){
				var section = 'weather';
			}else if(_o.locType.indexOf('#radio') > 0){
				var section = 'radio';
			}else if(_o.locType.indexOf('#news') > 0){
				var section = 'news';
			}else{
				var section = 'weather';
			}
			$T_lh.setSection(section);
		},
		setSection : function(_section){

			$($currentSection+'Selector').style.display 	= 'none';
			$(_section+'Selector').style.display 			= 'block';
			$currentSection = _section;
			
			var anim = new YAHOO.util.Motion('arrow', { points: { to: [$D.getX('sec_'+_section)+20,$D.getY('arrow')] } },1, YAHOO.util.Easing.easeOut);
			var showSetting = function(){
				$('currentSetting').style.display	= 'block';
			}
			anim.onComplete.subscribe(showSetting);
			anim.animate();
						
			if($cacheLoc[_section]){
				var loc = $cacheLoc[_section];
			}else if($T_lh.readCookie(_section+'Center')){
				loc = null;
				switch(_section){
					case 'weather':
						for(i=0;i<$locObj.length;i++){
							if($locObj[i].stn == $w){
								var loc = $locObj[i].loc;
							}
						}
					break;
					case 'news':
						for(i=0;i<$('newsRegion').options.length;i++){
							if($('newsRegion').options[i].value == $n){
								var loc = $('newsRegion').options[i].text;
								$('newsRegion').selectedIndex = i;
							}
						}
					break;
					case 'radio':
						for(i=0;i<$('radioRegion').options.length;i++){
							if($('radioRegion').options[i].value == $r){
								var loc = $('radioRegion').options[i].text;
								$('radioRegion').selectedIndex = i;
							}
						}
					break;
				}
			}
			if(loc != null){ $('currentSetting').innerHTML = 'Your current '+_section+' setting is: <span>'+loc+'</span>	<button onclick="saveAndClose();">Save &amp; Close</button>	';}else{
				$('currentSetting').innerHTML = '';}

		},
		locationSearch : function(){
			var searchQuery = $('inputEntryField').value.replace(/[^a-zA-Z0-9_\-'éà\. ]/ig,'').toLowerCase();
			if(searchQuery =='Enter city name...' || searchQuery == ''){ 
				$T_lh.renderLocations(' ');				
				return;
			}else{
				searchQuery 	=  searchQuery.toLowerCase();				
				searchVal = new RegExp(searchQuery,"i");
			}
			var loc 		= '';
			var locCount 	= 0;
			for(i=0;i<$locObj.length;i++){
				try{ 
					searchStr 	= $locObj[i].loc.toLowerCase();
					m 			= searchStr.split(searchQuery);
					searchStrNoAccents = searchStr.replace(/[àâä]/gi,"a");
					searchStrNoAccents = searchStrNoAccents.replace(/[èéêë]/gi,"e");
					searchStrNoAccents = searchStrNoAccents.replace(/[îï]/gi,"i");
					searchStrNoAccents = searchStrNoAccents.replace(/[ô]/gi,"o");
					searchStrNoAccents = searchStrNoAccents.replace(/[ùûü]/gi,"u");
					searchStrNoAccents = searchStrNoAccents.replace(/[ÿ]/gi,"y");
					mNoAccents = searchStrNoAccents.split(searchQuery);
					
					if((m.length > 1 || mNoAccents.length > 1) && locCount < 10){
						_l = locObj[i].loc.replace("'","&apos;");
						loc += '<li><a href="#" onclick="'+nspace_str+'.locH.setLocation({locType:\'weather\',loc:\''+escape(_l)+'\',dataSet:\''+locObj[i].stn+'\'});return false;">'+$locObj[i].loc+'</a></li>';
						locCount++;
					}
					m.length = null;
				}catch(err){ 
					//error
				}	
			}
			if(locCount > 0) {$T_lh.renderLocations(loc);}else{	$('inputEntryField').className 	= '';$('inputResults').innerHTML 	= '';$('inputResults').style.display	= 'none';}
		},
		renderLocations : function(_loc){
			$('currentSetting').style.display	= 'none';			
			$('inputResults').innerHTML 	= '';
			$('inputResults').innerHTML 	= '<ul>'+_loc+'</ul>';
			$('inputEntryField').className 	= '';
			$('inputResults').style.display	= 'block';			
		},
		resetTimer : function(){
			clearTimeout($searchTimer);
		},		
		setSearchTimer : function(){
			$searchTimer = setTimeout("$T_lh.locationSearch()",1000);
			$('inputEntryField').className 	= 'searching';
		},
		setLocation : function(_o){
			switch(_o.locType){
				case 'weather':
					$T_lh.renderLocations(' ');
					$T_lh.createCookie('weatherCenter',_o.dataSet,735,"cbc.ca");
					loc = _o.loc
					$cacheLoc['weather'] = unescape(loc);
					$('currentSetting').style.display	= 'block';
					$('currentSetting').innerHTML = 'Your current weather setting is: <span>'+unescape(loc)+'</span><button onclick="saveAndClose();">Save &amp; Close</button>';
					$('inputResults').style.display	= 'none';					
				break;
				
				case 'news':
					$T_lh.createCookie('newsCenter',_o.dataSet,735,"cbc.ca");
					loc = _o.loc
					$cacheLoc['news'] = unescape(loc);
					$('currentSetting').innerHTML = 'Your current news setting is: <span>'+unescape(loc)+'</span>	<button onclick="saveAndClose();">Save &amp; Close</button>	';
				break;
				
				case 'radio':
					$T_lh.createCookie('radioCenter',_o.dataSet,735,"cbc.ca");
					loc = _o.loc
					$cacheLoc['radio'] = unescape(loc);
					$('currentSetting').innerHTML = 'Your current radio setting is: <span>'+unescape(loc)+'</span>	<button onclick="saveAndClose();">Save &amp; Close</button>	';
				break;
			}
		},
		createCookie : function(name,value,days,domain) {
			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+";domain="+domain+"; path=/";
		},
		readCookie : function(cname) {
			var ca = document.cookie.split(";");
			var nameEQ = cname + "=";
			var cookie;
			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) cookie = c.substring(nameEQ.length,c.length);
	  			}
	  		if (cookie) return cookie;
		},
		deleteCookie : function(name){
			value = "";

			var date = new Date();
			date.setTime(date.getTime()+(-1*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();

			document.cookie = name+"="+value+expires+"; path=/";
		}
	};
}();

