var blogSearch;
var months=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
var days=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
var mapsEnabled,map,mapIcon,pagePoints,mapText;
var maxZIndex=1000;

function init(){
 initSearch();
 
 initArchiveLinks();
 
 initMenuAndPageOption();
 
 // Init Map
 window.setTimeout(initMap,100);
}


function initSearch(){
 var q=$('q');
 q.observe('focus',checkSearch);
 q.observe('blur',checkSearch);
      
 blogSearch=new google.search.BlogSearch()
 blogSearch.setSiteRestriction("http://www.foodmayhem.com/");
 blogSearch.setResultSetSize(GSearch.LARGE_RESULTSET);
 blogSearch.setNoHtmlGeneration();
 blogSearch.setSearchCompleteCallback(this,searchDone);
 
 $('search-form').observe('submit',doSearch);
 
 new Insertion.After('banner','<div id="searchResults" style="display:none;"><div id="search-close"><a href="#" id="search-close-link">close</a></div><div id="searchResult-items"></div><div class="gsc-branding">powered by <a href="http://www.google.com/"><img class="gsc-branding-img" src="http://www.google.com/uds/css/small-logo.png"></a></div></div>');
 $('search-close-link').observe('click',closeSearch);
}

function initMenuAndPageOption(){
 //$('menu-about').observe('click',openAbout);
 $('menu-contact').observe('click',openContact);
 var hashP=getHashVal('p');
 if(hashP&&(p=='index'||p=='about'||p=='mayhem'||p=='images'||p=='contact'||p=='search'))p=hashP;
 /*if(p=='about'){p=null;openAbout();}
 else*/ if(p=='contact'){p=null;openContact();}
 //else if(p=='mayhem'){p=null;openMayhem();}
} 

function closeSearch(callBack){
 if(p==null)return;
 p=null;
 if(callBack && ('function'==typeof callBack)){
	new Effect.SlideUp('searchResults', {afterFinish: callBack});
 }else
	new Effect.SlideUp('searchResults');
}
function checkSearch(e){
 var s=$('q');
 if(e.type=='focus'){
	if(s.value=='Type search here...')s.value='';
	s.removeClassName('inactive');
	s.addClassName('active');
 }else{
	s.removeClassName('active');
	s.addClassName('inactive');
	if(s.value==null||s.value=='')s.value='Type search here...';
 }
}
function doSearch(e){
 blogSearch.execute($('q').value);
 Event.stop(e);
}
function searchDone(){
 if(p=='search'){
	closeSearch(searchDone);
	return;
 }
 p='search';
 var sr=$('searchResult-items');
 sr.innerHTML='';
 var r=blogSearch.results;
 if(r.length>0){
	for(var i=0;i<r.length;i++)
		sr.innerHTML+='<div class="result"><div class="result-title"><a href="/'+
			r[i].postUrl.substring(26)+'">'+r[i].title+'</a> <span class="result-date">('+formatSearchDate(r[i].publishedDate)+')</span></div><div class="result-content">'+
			r[i].content+'</div></div>';
 }else{
	sr.innerHTML='<div class="search-no-results">No Results</div>';
	window.setTimeout(closeSearch,3000);
 }
 new Effect.SlideDown('searchResults', {scaleContent: false, scaleFrom:0, scaleTo:100, duration: .5});
}
function formatSearchDate(d){
 var n=new Date();
 n.setTime(Date.parse(d));
 return days[n.getDay()]+', '+months[n.getMonth()]+' '+n.getDate()+', '+n.getFullYear();
}

function closeOpen(){
 if(p=='about')closeAbout();
 else if(p=='contact')closeContact();
 else if(p=='error')closeError();
 //else if(p=='mayhem')closeMayhem();
 else if(p=='search')closeSearch();
}

/*function openAbout(e){
 if(p!='about'&&p!='error'){
	var opt={
	method: 'post',
		onSuccess: function(t){showAbout(t.responseText);},
		on404: function(t){showError(t.statusText);},
		onFailure: function(t){showError(t.status+': '+t.statusText);}
	};
	new Ajax.Request('/_about.php',opt);
 }
 if(e)Event.stop(e);
 return false;
}*/

function openContact(e){
 if(p!='contact'&&p!='error'){
	var opt={
	method: 'post',
		onSuccess: function(t){showContact(t.responseText);},
		on404: function(t){showError(t.statusText);},
		onFailure: function(t){showError(t.status+': '+t.statusText);}
	};
	new Ajax.Request('/_contact.php',opt);
 }
 if(e)Event.stop(e);
 return false;
}

/*function openMayhem(e){
 if(p!='mayhem'&&p!='error'){
	var opt={
	method: 'post',
		onSuccess: function(t){showMayhem(t.responseText);},
		on404: function(t){showError(t.statusText);},
		onFailure: function(t){showError(t.status+': '+t.statusText);}
	};
	new Ajax.Request('/_mayhem.php',opt);
 }
 if(e)Event.stop(e);
 return false;
}*/

function showError(s){
 new Insertion.After('banner','<div id="error" style="display:none;"><div id="error-close" class="close-button">X</div><div><p>'+s+'</p></div></div>');
 Event.observe('error-close','click',closeError);
 p='error';
 new Effect.SlideDown('error', {scaleContent: false, scaleFrom:0, scaleTo:100, duration: .5});
}
function closeError(){
 new Effect.SlideUp('error', {afterFinish: function(){Element.remove('error');p=null;}});
}

/*function showAbout(s){
 closeOpen();
 new Insertion.After('banner','<div id="about-page" style="display:none;"><div id="about-close" class="close-button">close</div><div><p>'+s+'</p></div></div>');
 Event.observe('about-close','click',closeAbout);
 new Effect.SlideDown('about-page', {scaleContent: false, scaleFrom:0, scaleTo:100, duration: .5});
 Element.addClassName('menu-about','menu-current');
 updateHash('p',p='about');
}
function closeAbout(){
 new Effect.SlideUp('about-page', {afterFinish: function(){Element.remove('about-page');}});
 updateHash('p',p=null);
 Element.removeClassName('menu-about','menu-current');
}*/

function showContact(s){
 closeOpen();
 new Insertion.After('banner','<div id="contact-page" style="display:none;"><div id="contact-close" class="close-button">close</div><div><p>'+s+'</p></div></div>');
 Event.observe('contact-close','click',closeContact);
 new Effect.SlideDown('contact-page', {scaleContent: false, scaleFrom:0, scaleTo:100, duration: .5});
 Element.addClassName('menu-contact','menu-current');
 updateHash('p',p='contact');
}
function closeContact(){
 new Effect.SlideUp('contact-page', {afterFinish: function(){Element.remove('contact-page');}});
 updateHash('p',p=null);
 Element.removeClassName('menu-contact','menu-current');
}

/*function showMayhem(s){
 closeOpen();
 new Insertion.After('banner','<div id="mayhem-page" style="display:none;"><div id="mayhem-close" class="close-button">close</div><div><p>'+s+'</p></div></div>');
 Event.observe('mayhem-close','click',closeMayhem);
 new Effect.SlideDown('mayhem-page', {scaleContent: false, scaleFrom:0, scaleTo:100, duration: .5});
 Element.addClassName('menu-mayhem','menu-current');
 updateHash('p',p='mayhem');
}
function closeMayhem(){
 new Effect.SlideUp('mayhem-page', {afterFinish: function(){Element.remove('mayhem-page');}});
 updateHash('p',p=null);
 Element.removeClassName('menu-mayhem','menu-current');
}*/




function initMap(){
 if(window.location.href.indexOf('www.foodmayhem.com')==-1)return;
 if(!(mapsEnabled=GBrowserIsCompatible()))return;
 var postLocs=$('content').select('.goomappr-adr');
 var d=new Array();
 for(var i=0;i<postLocs.length;i++){
 	var articleUrl=postLocs[i].up(2).select('.article-title a')[0].readAttribute('href'),
 		orgName=postLocs[i].select('a')[0].innerHTML,
		st=postLocs[i].select('.goomappr-adr-street')[0].innerHTML,
		loc=postLocs[i].select('.goomappr-adr-locality')[0].innerHTML,
		reg=postLocs[i].select('.goomappr-adr-region')[0].innerHTML,
		pcode=postLocs[i].select('.goomappr-adr-pcode')[0].innerHTML,
		orgAdr=st+', '+pcode,
		txtAlt='Show Map for '+orgName+' at '+st+', '+loc+', '+reg+' '+pcode;
	
	d.push(new Array(orgName,orgAdr,articleUrl));
	
	var mapIconSpan=new Element('span');
	postLocs[i].appendChild(mapIconSpan);
	var mapIcon=new Element('img',
		{'src':'/img/mapIcon.png',
		'alt':txtAlt,
		'title':txtAlt});
	mapIconSpan.addClassName('goomappr-mapicon');
	mapIconSpan.appendChild(mapIcon);
	mapIconSpan.innerHTML='('+mapIconSpan.innerHTML+')';
	

	//postLocs[i].toggleClassName('post-location-on');
	postLocs[i].addClassName('goomappr-on');
	Event.observe(postLocs[i],"click",openMap);
 }
 if(d.length>0){
	//init globals
	mapIcon=new GIcon(G_DEFAULT_ICON,'/img/fmMarker.png');
	pagePoints=new Array();
	//init locals
	mapText='<ul>';
	var gc=new GClientGeocoder();
	for(var i=0;i<d.length;i++){
		var text='<a href="'+d[i][2]+'" title="Click for article about '+d[i][0]+'">'+d[i][0]+'</a><br/>'+cleanAddress(d[i][1]);
		mapText+='<li>'+text+'</li>';
		pushPagePoint(d[i][1],text,gc);
	}
	mapText+='</ul>';
 }
}
function pushPagePoint(address,text,geocoder){
 var gc=geocoder?geocoder:new GClientGeocoder();
 gc.getLatLng(address,
	function(point){
		if(point){
			point.fmInfo='<div class="map-info-window">'+text+'</div>';
			pagePoints.push(point);
		}
	}
 );
}

function initMapPane(){
 new Insertion.Before('sidebar','<div id="map-wrapper"><div id="map-hider"><div id="map-pane"><div id="map-slide-rail"><h1><div id="map-close" class="close-button" title="Close">&raquo;</div>Location Mayhem</h1><div id="map"></div><div id="map-pane-content" style="height: '+(window.innerHeight-463)+'px;">&nbsp;</div></div></div></div></div>');
 $('map-close').observe('click',closeMap);
 map=new GMap2(document.getElementById("map"));
 map.addControl(new GSmallMapControl());
 refreshMap(pagePoints);
 $('map-pane-content').innerHTML=mapText;
 $('map-hider').hide();
}
function cleanAddress(a){
 if(!a)return;
 return a.gsub(',','<br/>');
}
function slideMap(){
 var deltaY=window.pageYOffset||document.documentElement.scrollTop
	||document.body.scrollTop||0;
 if(deltaY<173)deltaY=0;else deltaY-=150;
 return new Effect.Move('map-slide-rail',{y:deltaY, mode:'absolute'});
}
function closeMap(){
 new Effect.SlideUp('map-hider', {scaleX:true, scaleY:false, scaleContent:false});
}
function openMap(){
 if(mapsEnabled===false)return;
 if(!map)initMapPane();
 new Effect.SlideDown('map-hider', {scaleX:true, scaleY:true, scaleFrom:0, scaleTo:100.0, scaleContent:true});
 Event.observe(window, 'scroll', slideMap);
 slideMap();
}
function refreshMap(points){
 var west,east,north,south;
 map.clearOverlays();
 for(var i=0;i<points.length;i++){
	var lat=points[i].lat();
	var lng=points[i].lng();
	if(west==null||lng<west)west=lng;
	if(east==null||lng>east)east=lng;
	if(south==null||lat<south)south=lat;
	if(north==null||lat>north)north=lat;
 }
 var center=new GLatLng((south+north)/2,(west+east)/2);
 var zoom=map.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(south,west),new GLatLng(north,east)));
 map.setCenter(center,zoom);
 for(var i=0;i<points.length;i++){
	var m=new GMarker(points[i],mapIcon);
	var ciw=new CustomInfoWindow('ciw'+i,m,points[i].fmInfo);
	m.ciwId='ciw'+i;
	map.addOverlay(m);
	map.addOverlay(ciw);
	GEvent.addListener(m,'click',function(){$(this.ciwId).show();map.panTo(this.getPoint());});
 }
}



/**
 * Updates the hash pair n to value v.  If v is null, pair is removed.
 */
function updateHash(n,v){
 var query=window.location.hash.substring(1);
 var newHash='';
 if(query){
	var vars=query.split("&");
	for(var i=0;i<vars.length;i++){
		var pair=vars[i].split("=");
		if(pair[0]==n){
			if(v!=null)newHash+=(i>0?'&':'')+pair[0]+'='+v;
		}else
			newHash+=(i>0?'&':'')+vp[0]+'='+vp[1];
	}
  }else
	if(v!=null)newHash=n+'='+v;
  if(newHash=='')newHash='#';
  window.location.hash=newHash;
}
function getHashVal(n) {
 var query=window.location.hash.substring(1);
 if(query){
	var vars=query.split("&");
	for(var i=0;i<vars.length;i++){
		var pair=vars[i].split("=");
		if(pair[0]==n)
			return pair[1];
	}
  }
  return false;
}


function initArchiveLinks(){
 var archives=$('archives-2');
 if(!archives)return;
 var origMos=$$('#archives-2 li');
 var re=/href=['|"](.*)['|"]\stitle(?:.*)['|"]>([A-Za-z]+)\s(\d{4}).*nbsp\;\((\d+)\)/i;
 var reParts;
 var curYear=null;
 var ul,li;
 for(var i=0;i<origMos.length;++i){
 	reParts=re.exec(origMos[i].innerHTML);
 	
 	if(reParts[3]!=curYear){
 		// Start new year
 		curYear=reParts[3];
 		archives.appendChild(new Element('h3').update(curYear));
 		ul=new Element('ul', {'class':'archive-list'});
		ul.observe('mouseout',closeArchiveList);
 		archives.appendChild(ul);
 		li=new Element('li', {'class':'archive-select-item'}).update('Select a month...');
		li.observe('mouseover',openArchiveList);
 		ul.appendChild(li);
 	}
 
 	li=new Element('li');
 	li.appendChild(new Element('a', {'href':reParts[1]}).update(reParts[2]+' '+curYear+' <span class="archive-post-count">('+reParts[4]+(reParts[4]==1?' post':' posts')+')</span>'));
 	ul.appendChild(li);
 	li.hide();

 	origMos[i].hide();
 }
}

function openArchiveList(ev){
 var aList=Event.element(ev);
 if(!aList)return;
 if(!aList.hasClassName('.archive-list'))
	aList=aList.up('.archive-list');
 if(!aList)return;
 aList.setStyle({zIndex: ++maxZIndex});
 aList.down('.archive-select-item').addClassName('archive-select-item-on');
 var aItems=aList.select('li');
 for(var i=0;i<aItems.length;++i){
	if(!aItems[i].hasClassName('archive-select-item')){
		aItems[i].show();
		aItems[i].addClassName('archive-month-item-on');
	}
 }
}

function closeArchiveList(ev){
 var aList=Event.element(ev);
 if(!aList)return;
 if(!aList.hasClassName('.archive-list'))
	aList=aList.up('.archive-list');
 if(!aList)return;
 var aItems=aList.select('li');
 // check if over
 var over=false,
	x=Event.pointerX(ev),
	y=Event.pointerY(ev);
 if (!(over=Position.within(aList,x,y))){
	 for(var i=0;i<aItems.length;++i){
		if(over=Position.within(aItems[i],x,y))break;
	 }
 }
 
 if (!over){
	aList.down('.archive-select-item').removeClassName('archive-select-item-on');
	for(var i=0;i<aItems.length;++i){
		if(!aItems[i].hasClassName('archive-select-item')){
			aItems[i].hide();
			aItems[i].removeClassName('archive-month-item-on');
		}
	 }
 }
}


function hideIngredientIndex(){
 // Hide the index
 hideAllIngredientLetters();
 
 $('ingredient-index').addClassName('ingredient-index-box');
 
 // attach a listener to each of the index letters
 items=$$('#ingredient-letter-bookmarks a');
 if(!items)return;
 for(var i=0;i<items.length;++i){
 	items[i].observe('click',showIngredientLetter);
 }
}
function hideAllIngredientLetters(){
 var items=$$('#ingredient-index div');
 if(!items)return;
 for(var i=0;i<items.length;++i){
 	items[i].hide();
 }
}
function showIngredientLetter(e){
 e=e.element().innerHTML;
 hideAllIngredientLetters();
 var indexSection="ingredient-list-"+e;
 new Effect.SlideDown(indexSection, {scaleContent: false, scaleFrom:0, scaleTo:100, duration: .5});
}


document.observe("dom:loaded", init);
//Event.observe(window,'load',init);
