var today=new Date()
var thd=today.getDate();
var thm=today.getMonth()+1;
var thy=today.getFullYear();
var todaycode=eN(thy,thm,thd);
var curDate=todaycode;

var arMon=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
var arDays=["Saturdays","Sundays","Mondays","Tuesdays","Wednesdays","Thursdays","Fridays"];
var arDaysInMon=[31,0,31,30,31,30,31,31,30,31,30,31];
arDaysInMon[1]=(((thy%100!=0)&&(thy%4==0))||(thy%400==0))?29:28;

var stR=todaycode,stQ="",iDay=(today.getDay()+1)%7,stV="";

var arID=[],arRange=[],arInd=[],alltags=[];

var arTags=["music","exhibition","comedy","theatre","culture","kids"];
var arTagged=[];

var baseURL="http://www.cadmin.pwp.blueyonder.co.uk/id/";
//var baseURL="";

var qv="";

var ppx=0,timeriD;


function ge(objID) {return document.getElementById(objID);}

function preload(images) {
     imageObj = new Image();
     for(var i in images){imageObj.src=images[i]}
	} 

function popFeedback() { // how was it for you
	window.open("http://app.formassembly.com/forms/view/19043","","resizable,width=810,height=550");
	}

function popSuggest() { // suggest
	window.open("http://app.formassembly.com/forms/view/19038","","resizable,width=810,height=550");
	}
	
function popGig() { // gigs
	window.open("http://app.formassembly.com/forms/view/44284","","resizable,width=810,height=550");
	}
	
function popEat(pl) { // eating out
	window.open("http://app.formassembly.com/forms/view/8255?tfa_Restaurantname="+pl,"","resizable,width=810,height=550");
	}
function popGo(pl) { // going out
	window.open("http://app.formassembly.com/forms/view/8267?tfa_Place="+pl,"","resizable,width=810,height=550");
	}

function popMap() {
	window.open("http://go.indundee.co.uk/maps.htm","","resizable,width=810,height=550");
	}

function cleanup(clv){
	return clv.replace(/(<([^>]+)>)/ig,"");
	}

function cleanupshort(clv){
	if (clv.length>50) {clv=clv.substring(0,49)+"...";}
	return cleanup(clv);
	}

function rquotes(clv){
	return clv.replace(/&rsquo;/ig,"");
	}

function sortByDate(a,b){
	var x=parseInt(a[1],10), y=parseInt(b[1],10);
	return ((x<y)?-1:(x>y)?1:0);
	}
	
function DeDupArray(a) {
	a.sort();
	for (var i = 1; i < a.length; i++) {
		if (a[i-1] == a[i]) {a.splice(i, 1);i--;}
		}
	return a;
	}

function arGot(arIn,val,idx){ // check if an array contains the value...
//alert("arGot("+arIn+","+val+","+idx+")");
	val=val.toString().toLowerCase();
	var arGG=[];
	if (idx>-1) {for (tp in arIn) {
		if (idx==1){if ((arIn[tp][idx].toString().length>8)&&(arIn[tp][idx].substring(0,7)<val)&&(arIn[tp][idx].substring(9)>val)) arGG.push(tp);}
		if ((val.length>8)&&(val.substring(0,7)<arIn[tp][idx].toString())&&(val.substring(9)>arIn[tp][idx].toString())) arGG.push(tp);
		if (arIn[tp][idx].toString().toLowerCase().indexOf(val)!=-1) arGG.push(tp);}
		}
	else {for (tp in arIn) {if (arIn[tp].toString().toLowerCase().indexOf(val)!=-1) arGG.push(tp);}}
	return DeDupArray(arGG);
	}
	
function tBox(g) { // toggle On/Off by ID
	var tg=(isNaN(g))?"tog"+g:eval("'tog"+g+"'");
	if (!ge(tg)) return;
	var style2 = ge(tg).style;
	style2.display = style2.display? "":"block";
}

function showStats(ee){
	var eve=eval(ee);
	ge("stats").innerHTML=eve.length+" "+ee+", updated "+prettyDate(eval(ee+"date"),0);
	}
function checkFill() {
	newWin=window.open("","","width=420px,height=350px,resizable");
	newWin.document.write("<textarea onclick='this.select()'>"+ge("ediv").innerHTML+"</textarea>");
	}
	
function wRite(ar){
	var i_class=5,i_blurb=6,i_pic=1,i_www=2,i_cred=7,i_map=3,i_tel=4;
	if(ar=="eat"){i_class=6;i_blurb=7;i_rat=8,i_cred=9;}
	if((ar=="music")||(ar=="music_archive")){i_class=5;i_blurb=9;}
	var ary=eval(ar);
	var we=[],c=0;
	for (w in ary) {
		c++;
		we.push("<div class='bloc ");
		we.push(ary[w][0]+" ");
		we.push(ary[w][i_class]);
		we.push("'>");
		if (ary[w][i_pic]!="") {
			if (ary[w][i_www]!="") we.push("<a target='_top' href='"+ary[w][i_www]+"' title='Website...'>");
			we.push("<img ");
			if ((ar=="music")||(ar=="music_archive")) we.push("width=50 height=50 ");
			we.push("src='../photos/"+ary[w][i_pic]+".jpg' title='"+ary[w][0]+" [pic: "+ary[w][i_cred]+"]' class='shadow nomatte'>");
			if (ary[w][i_www]!="") we.push("</a>");
			}

		we.push("<h3>"+ary[w][0]+"</h3>");
		if (ary[w][i_tel]!="") we.push(ary[w][i_tel]+"<br>");

		if (ary[w][i_pic]!="") {
			if (ary[w][i_www]!="") we.push("<a class=lnx target='_top' href='"+ary[w][i_www]+"' title='Website...'>");
			if (ary[w][i_www]!="") we.push("www</a>");
			}

		var aG=arGot(whatson,cleanup(ary[w][0]),5);
		var as=(aG.length==1)?"":"s";
		if(aG.length>0) we.push(" <a target='_top' class='lnx hot' href='http://whatson.indundee.co.uk/?v="+ary[w][0]+"' title='Events...'><nobr>"+aG.length+" event"+as+"</nobr></a>");
		aG.length=0;
		aG=arGot(gigs,cleanup(ary[w][0]),5);
		as=(aG.length==1)?"":"s";
		if(aG.length>0) we.push(" <a target='_top' class='lnx hot' href='http://gigs.indundee.co.uk/?v="+ary[w][0]+"' title='Events...'><nobr>"+aG.length+" gig"+as+"</nobr></a>");
		if (ary[w][i_map]!="") we.push(" <a target='_blank' class=lnx href='http://maps.google.co.uk/maps?f=q&hl=en&q="+ary[w][0]+", "+ary[w][i_map]+"' title='Map...'><nobr>"+ary[w][i_map]+" - map</nobr></a>");
		we.push("<br>"+ary[w][i_blurb]);
		if (ar=='eat') {we.push("<br clear=left><br><a href='javascript:popEat(\""+rquotes(ary[w][0])+"\")'>Leave your own comments</a>");}
		if (ar=='go') {we.push("<br clear=left><br><a href='javascript:popGo(\""+rquotes(ary[w][0])+"\")'>Leave your own comments</a>");}
		if ((ar=='eat')&&(ary[w][i_rat]!="")) {
			we.push("<span style='font-size:0.8em;float:left;margin-top:2em;color:#666;'>relative cost: <span>"); 
			for (ix=0;ix<ary[w][i_rat];ix++)we.push("&pound;&nbsp;"); 
			we.push("</span></span>");
			}
		we.push("<br clear=all></div>\n");

		}
	ge("ediv").innerHTML=we.join("");
	if (ge("ediv_total")) ge("ediv_total").innerHTML=c;
	}
		
function prettyDate(datelist,inclyr,incltd) {
//alert("prettyDate("+datelist+")");
	noyr=(inclyr)?inclyr:1;
	notd=(incltd)?incltd:1;
	datelist+="";
	if (datelist<8) {
		return arDays[datelist];
		}
	if (datelist.indexOf("200")==-1) return datelist;
	if ((datelist==todaycode)&&(incltd==1)) return "<b><i>Today</i></b>";
	dc=datelist.split(",");
	var sz="", curyr=0, curmt=0, arDN=[];
	for (t=0;t<dc.length;t++) {
	var dz="", mz="", yz="", dz2="", mz2="", yz2="", started=false, past=false;
		arDN=dN(dc[t]);
		curyr=(arDN[0]==0)?curyr:arDN[0];
		curmt=(arDN[1]==0)?curmt:arDN[1];
		arDN[0]=curyr;
		arDN[1]=curmt;
		yz=" "+curyr;
		mz=" "+arMon[(curmt-1)];
		dz=""+arDN[2];
//		dz=""+arDN[2]+daySuffix(arDN[2]);
		if ((eN(arDN[0],arDN[1],arDN[2])<todaycode)&&(inclyr!=0)) started=true;
		if (arDN.length>3) {
			arDN[3]=(arDN[3]==0)?curyr:arDN[3];
			arDN[4]=(arDN[4]==0)?curmt:arDN[4];
			yz2=" "+arDN[3];
			yz=(yz==yz2)?"":yz;
			mz2=" "+arMon[(arDN[4]-1)];
			mz=(mz==mz2)?"":mz;
			dz2=""+arDN[5]+daySuffix(arDN[5]);
			}
		if (t<dc.length-1) {
			dndc=dN(dc[t+1]);
			if (yz!="") {
				if ((dndc[0]==0)||(dndc[0]==arDN[0])) {yz="";mz+=", ";}
				else yz+=", ";
				}
			if (yz2!="") {
				if ((dndc[0]==0)||(dndc[0]==arDN[3])) {yz2="";mz2+=", ";}
				else yz2+=", ";
				}
			if ((dndc[1]==0)||(dndc[1]==arDN[1])) {mz="";dz+="+";}
			}
		if (inclyr==0) {yz="";yz2="";};
		sz+=dz+mz+yz;
		sz+=(dz2=="")?"":"-"+dz2+mz2+yz2;
		}
	return sz;
	}

// Thanks to Brian @ frequency-decoder.com for this one:
function daySuffix(d) {
    d = ""+d;
    return d.substr(-(Math.min(d.length, 2))) > 3 && d.substr(-(Math.min(d.length, 2))) < 21 ? "th" : ["th", "st", "nd", "rd", "th"][Math.min(Number(d)%10, 4)];
}



function dN(dcc){ // split datecode into parts... using modulus + remainders
	var n=0, idy=0, imn=0, iyr=0, arO=[], arN=dcc.toString().split("-");
	for (nx in arN) {
		n=parseInt(arN[nx],10);
		idy=n%100;
		iyr=n-n%10000;
		imn=n-iyr-idy;
		arO.push(iyr/10000,imn/100,idy)
		}
	return arO;
	}

function eN(iyr,imn,idy){ // join datecode parts into single number... using modulus + remainders
	return (iyr*10000+imn*100+idy);
	}

function inDate(ar1,xxx) {
//alert("inDate("+ar1+","+xxx+")");
	var ary1=eval(ar1);
	var arEv=[];
	var dChk=expandDate(xxx);
 	for(y in ary1) {
		if(xxx=="") {arEv.push(y)}
		else {
			var arD=ary1[y][1].split(",");
			for (z in arD) {
				dRng=expandDate(arD[z]);
				if ((dChk[0]>=dRng[0]&&dChk[1]<=dRng[1])||(dChk[0]<=dRng[0]&&dChk[1]>=dRng[1])) {arEv.push(y)}
				}
			}
		}
	return arEv;
}

function expandDate(xDt) { // takes code, returns array
	xDt+="";
	if(xDt.indexOf("-")==-1) return [xDt,xDt];
	var dRng=xDt.split("-");
	ddd0=dN(dRng[0]);
	if (dRng[1]<100) dRng[1]=parseInt(dRng[1],10)+ddd0[1]*100;
	if (dRng[1]<10000) dRng[1]=parseInt(dRng[1],10)+ddd0[0]*10000;
	if(dRng.length==1)dRng[1]=dRng[0];
	return dRng;
	}

function addAnchors() {
	var gm,xm,mxm,mxm2;
	for (gm in gigs) {
		gigs[gm][9]+=",music,gigs";
		for (xm in music) {
			mxm=music[xm][0];
			mxi=music[xm][1];
			mxm2="<a onclick='fnPopBox(this.innerHTML)'>"+mxm+"</a>";
			gigs[gm][0]=gigs[gm][0].replace(mxm, mxm2);
			gigs[gm][6]=gigs[gm][6].replace(mxm, mxm2);
			if((gigs[gm][3].indexOf(mxi)==-1)&&((gigs[gm][0].indexOf(mxm)!=-1)||(gigs[gm][6].indexOf(mxm)!=-1))) gigs[gm][3]+=","+mxi;
			}
			if(gigs[gm][3].substring(0,1)==",")gigs[gm][3]=gigs[gm][3].substr(1);
		}
	}

function addGigStuff() {
	var gm,xm,mxm,mxm2;
	for (gm in gigs) {
		gigs[gm][9]+=",music,gigs";
		for (xm in music) {
			mxm=music[xm][0];
			mxi=music[xm][1];
			if((gigs[gm][3].indexOf(mxi)==-1)&&((gigs[gm][0].indexOf(mxm)!=-1)||(gigs[gm][6].indexOf(mxm)!=-1))) gigs[gm][3]+=","+mxi;
			}
			if(gigs[gm][3].substring(0,1)==",")gigs[gm][3]=gigs[gm][3].substr(1);
		}
	}

function fnPopBox(codename){
	var arT="", ary=[], psp="", xm=0, w=-1, aryspl=[];
	for (xm in music) {if (music[xm][0]==codename) {arT="music";w=xm;}}
	for (xm in go) {if (go[xm][0]==codename) {arT="go";w=xm;}}

	var i_class=5,i_blurb=6,i_pic=1,i_www=2,i_cred=7,i_map=3,i_tel=4,i_lnx=9;
	if(arT=="music"){i_class=6;i_typ=5;i_blurb=8;}

	ary=eval(arT);
	if (w!=-1) {
	var aG=arGot(gigs,cleanup(ary[w][0]),0);// check for gigs
	if(aG.length==0) aG=arGot(gigs,cleanup(ary[w][0]),5);
	var as=(aG.length==1)?"":"s";

	var wt=[];
	wt.push("<p class='big'>");
		if (ary[w][1]!="") {
			if (ary[w][2]!="") wt.push("<a target='_blank' href='"+ary[w][2]+"' title='Website...'>");
			wt.push("<img class='shadow' style='float:left;margin-right:10px;' width=50 height=50 src='../photos/"+ary[w][1]+".jpg'>");
			wt.push(""+ary[w][0]+"</a>");
			}

		if(aG.length>0){
			wt.push(" <a target='_top' class='lnx' href='http://gigs.indundee.co.uk/?q="+ary[w][0]+"' title='Gigs...'><small><nobr>&raquo; "+aG.length+" gig"+as+" inDundee &laquo;</nobr></small></a>");
			}
	wt.push("</p>");

		if (ary[w][i_map]!="") wt.push("<br><a target='_blank' href='http://maps.google.co.uk/maps?f=q&hl=en&q="+ary[w][0]+", "+ary[w][i_map]+"' title='Map...'><nobr>"+ary[w][i_map]+" - map</nobr></a>");
		if (ary[w][i_tel]!="") wt.push("<br>Tel: "+ary[w][i_tel]+"");
		if(ary[w][i_blurb]!="")wt.push("<br>Blurb: &lsquo;"+ary[w][i_blurb]+"&rsquo;");
		wt.push("<br><span class=lnx>Links: <a target='_blank' href='"+ary[w][2]+"' title='Website...'>Website</a> ");
		if (ary[w][i_lnx]!="") wt.push(ary[w][i_lnx]);
		wt.push("</span>");// Links

		wt.push("<br><small>Pigeonholes: ");
			aryspl=ary[w][i_class].split(" ");
			for (var ic in aryspl){
				if (ar=="music") wt.push("<a onclick='srchEmM(\""+aryspl[ic]+"\")'>");
				if (ar=="gigs") wt.push("<a target=_top href='http://"+arT+".indundee.co.uk/?q="+aryspl[ic]+"'>");
				wt.push(aryspl[ic]+" ");
				if ((ar=="music")||(ar=="gigs")) wt.push("</a>");
				}
			wt.push("</small><br>");// Tags

	jQuery.facebox(wt.join(""));
	}
}
function fbem() {
	window.open('http://www.feedburner.com/fb/a/emailverifySubmit?feedId=515775', 'popupwindow', 'scrollbars=yes,width=550,height=520');
	}
	
function fillPanels(){
	// Recent Edits
	if (ge("recentEdits")){
		var we=[],weTemp=[];
		var allon=[];
		var offset=100;
		if (whatson.length<gigs.length){allon=whatson.concat(gigs);}
		else {allon=whatson;}
		allon.sort(sortByDate);
		for (tc=todaycode;tc>todaycode-offset;tc--) {
			weTemp.length=0;
			for (q in allon) if (allon[q][11]==tc) weTemp.push("<nobr><a target=_top href='http://whatson.indundee.co.uk/?q="+cleanup(allon[q][0])+"'>"+cleanup(allon[q][0])+" ["+prettyDate(allon[q][1])+"]</a></nobr>");
			if (weTemp.length>0) {we.push(prettyDate(tc));for(r in weTemp)we.push(weTemp[r]);we.push("<br>");}
			}
		ge("recentEdits").innerHTML="<small>Recently added/edited</small><br><div id='recentEditsInt'>"+we.join("<br>")+"</div>";
	}
	if (ge("whatSay")){
		var rn=parseInt(Math.random()*quotes.length);
		var arQ=quotes[rn].split("|");
		ge("whatSay").innerHTML='<h4>what people say</h4>'+'<img style="width:14px;height:11px;" src="'+baseURL+'images/qu.png">'+arQ[0]+'<img style="width:14px;height:11px;" src="'+baseURL+'images/qu.png"><br>'+arQ[1]+'<br><a target=_top style="float:right;display:block;" href="http://www.indundee.co.uk/about/">read more...</a>';
		}
	if (ge("ranFact")){
		var rn=parseInt(Math.random()*facts.length);
		ge("ranFact").innerHTML='<h4>random fact</h4>'+facts[rn];
		}
	if (ge("righty")){
		var iH=ge("righty").innerHTML;
		var iSch='<a target="_top" href="http://www.indundee.co.uk/search/"><img style="border:0px solid #999;float:right;clear:right;margin:5px 0;" src="'+baseURL+'images/search.png"></a>';
		var iSug='<a target="_top" href="javascript:popSuggest()"><img style="border:0px solid #999;float:right;clear:right;margin:5px 0;" src="'+baseURL+'images/suggest.png"></a>';
		if(location.href.indexOf("music")!=-1){iSug="";}
		var fblk='<a target="_blank" href="http://feeds.feedburner.com/~r/inDundee/~6/5"><img src="http://feeds.feedburner.com/inDundee.5.gif" alt="inDundee - whats happening in Dundee, Scotland, UK" style="border:0;float:right"></a><br>';
		fblk+='<form action="http://www.feedburner.com/fb/a/emailverify" method="post" target="popupwindow" onsubmit="fbem();return true" style="float:right;" ';
		fblk+='<input type="hidden" style="" value="" name="email"/><input type="hidden" value="http://feeds.feedburner.com/~e?ffid=515775" name="url"/><input type="hidden" value="inDundee - what is happening in Dundee, Scotland, UK" name="title"/><input type="hidden" name="loc" value="en_US"/><input class="frontBut" style="width:180px;float:right;" type="submit" value="inDundee blog via email" /></form><br clear=all><br>';
		ge("righty").innerHTML=fblk+iH;
		ge("righty").innerHTML+='<span style="position:fixed;left:810px;top:0px;"><a title="Change to light background - requires cookies to remember..." href="javascript:setActiveStyleSheet(\'light\')"><img src="'+baseURL+'images/screen1.png" border=0></a><a title="Change to dark background - requires cookies to remember..." href="javascript:setActiveStyleSheet(\'dark\')"><img src="'+baseURL+'images/screen2.png" border=0></a><a href="javascript:scroll(0,0)"><img src="'+baseURL+'images/top.png" border=0 style="margin:10px"></a></span>';
		}
//	if (ge("picShow")){ge("picShow").innerHTML='<embed src="http://widget-91.slide.com/widgets/slideticker.swf" type="application/x-shockwave-flash" quality="high" scale="noscale" salign="l" wmode="transparent" flashvars="site=widget-91.slide.com&channel=360287970195597713&cy=be&il=1" width="150" height="220" name="flashticker" align="middle"/>';}
	}
addOnLoad(fillPanels);

function setActiveStyleSheet(ttl) {
  var i, a, main;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
      a.disabled = true;
      if(a.getAttribute("title") == ttl) a.disabled = false;
    }
  }
}

function getActiveStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");
  }
  return null;
}

function getPreferredStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1
       && a.getAttribute("rel").indexOf("alt") == -1
       && a.getAttribute("title")
       ) return a.getAttribute("title");
  }
  return null;
}

function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(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;
}

function cookSet() {
  var cookie = readCookie("style");
  var ttl = cookie ? cookie : getPreferredStyleSheet();
  setActiveStyleSheet(ttl);
}
addOnLoad(cookSet);

function cookEnd() {
  var ttl = getActiveStyleSheet();
  createCookie("style", ttl, 365);
}
addUnLoad(cookEnd);

var cookie = readCookie("style");
var ttl = cookie ? cookie : getPreferredStyleSheet();
setActiveStyleSheet(ttl);

function addOnLoad(func) {  //from http://untruths.org/technology/javascript-windowonload/
	if (window.onload) {
		var temp = window.onload;
		if (func==fillPanels) {
			window.onload = function () {
			temp();
			func();
			}
		}
		else {
			window.onload = function () {
			func();
			temp();
			}
		}
			} else {
			window.onload = func;
		}
	}

function addUnLoad(func) {
	if (window.onunload) {
		var temp = window.onunload;
			window.onunload = function () {
			temp();
			func();
			}
		} else {
			window.onunload = func;
		}
	}

function chf(chc) {
	var val=parseInt(chc.id.substring(1));
	var taag=arTagged[val].substring(1);
	getResults(stR,taag,7,stV);
	}

function setHits(h) {
	var sd=(h==1)?h+" hit":h+" hits";
	if (ge("filter")) ge("filter").innerHTML=sd;
	}

function srchEm(tv) {
	var hitx=0;
	for (var i=0; (th=document.getElementsByTagName("div")[i]); i++) {
		if(th.className) {
			var thClasses = th.className.split(' ');
			if ((thClasses[0]=="bloc")||(thClasses[0]=="fl")) {
				th.style.display="none";
				if (arGot(thClasses,tv).length>0) {
					th.style.display="block";
					hitx++;
					if (arGot(thClasses,"blurb").length>0&&tv=="") th.style.display="none";
					}
				}
			}
		}
	setHits(hitx);
	}	

function showInfo(ttl,val) {
	if (val=="") return;
	return "<br><i>"+ttl+"</i>"+val;
	}

function getWW(name) {
	for (xmx in music) {if ((music[xmx][0]==name)||(music[xmx][1]==name)) return xmx}
	for (xmx in go) {if ((go[xmx][0]==name)||(go[xmx][1]==name)) return xmx}
	return -1;
	}

function show(divv,wh,aRR,ac) {
//alert("show("+divv+","+wh+","+aRR+","+ac+")");
	var i_class=9;
	if(wh=="all"){wh=[];for (k in aRR)wh[k]=k;}
	if (!ge(divv)||!wh) return;
	var l=[],ld=[];
	for (k in wh) {
		wx=parseInt(wh[k],10);
		if (aRR[wx]) {
		if ((todaycode<=aRR[wx][1].substr(0,8))||(todaycode<aRR[wx][1].substr(9))) { // only show stuff not yet happened!
				var vv=getWW(aRR[wx][5]); // get venue details
			l.push("<div class='bloc ");
			var evtags=aRR[wx][9].split(",");
			if (arGot(evtags,"suggested").length>0) l.push(" sugg");
				if (todaycode==parseInt(aRR[wx][1])) l.push(" tod ");
				l.push("'>");
			l.push("<div class='tbltop'>");
			if (location.href.indexOf('list.htm')==-1) {
				for (qa=evtags.length-1;qa>-1;qa--) {l.push("<a class='tags' title='tag: "+evtags[qa]+", click for more...' href='#' onclick='getResults(\"\",\""+evtags[qa]+"\",7,stV)'>"+evtags[qa]+"</a>");}
			}
			l.push("<b>"+aRR[wx][0]+"</b>");
				if (aRR[wx][4]!="") l.push(" <a target=_blank class=lnx href='"+aRR[wx][4]+"' title='Website...'><nobr>&rsaquo; www</nobr></a>");
			l.push("<br clear=right>");
				if (go[vv]) if (go[vv][1]!="no_photo") l.push("<a onclick='fnPopBox(\""+go[vv][0]+"\")'><img title='"+cleanup(go[vv][0])+"' class='im shadow' src='"+baseURL+"photos/"+go[vv][1]+".jpg'></a>");
				if (aRR[wx][3]!="") {
					var arpx=aRR[wx][3].split(",");
					for (px=arpx.length-1;px>-1;px--) {
						var gW=getWW(arpx[px]);
						if (gW!=-1) l.push("<a onclick='fnPopBox(\""+music[gW][0]+"\")'>");
						l.push("<img class='im shadow' src='"+baseURL+"photos/"+arpx[px]+".jpg'>");
						if (gW!=-1) l.push("</a>");
						}
					}
			l.push(showInfo("When: ",prettyDate(aRR[wx][1])));
				if (aRR[wx][2]!="") {
					if (aRR[wx][2].length>7) {l.push(showInfo("Time(s)",aRR[wx][2]));}
					else {l.push(" @ "+aRR[wx][2]);}
					}
			l.push(showInfo("Where: ","<a onclick='fnPopBox(this.innerHTML)'>"+aRR[wx][5]+"</a>"));
			l.push(showInfo("Promoter: ",aRR[wx][6]));
			l.push(showInfo("Cost: &pound;",aRR[wx][7]));
			l.push(showInfo("Tickets: ",aRR[wx][8]));
			l.push(showInfo("Blurb: ",aRR[wx][10]));
			l.push("</div><div style='clear:both;height:0;'></div></div>");
			}
		}
		}
		ge(divv).innerHTML+=l.join("");
		l.length=0;
	}

function showSumm(divv,wh,aRR) {
	if (!ge(divv)||!wh) return;
	var l=[];
	for (k in wh) {
		wx=parseInt(wh[k],10);
		if (aRR[wx]) {
			l.push("<a target='_top' href='http://whatson.indundee.co.uk/?q="+cleanup(aRR[wx][0])+"'>");
			l.push(cleanup(aRR[wx][0]));
			l.push("</a><br>");
			}
		}
	if (l=="") l=["No matches...<br>Try another word."];
	ge(divv).innerHTML=l.join("");
	}

function updatecal(inc) {
	var mnow=today.getMonth()+1;
	var ynow=today.getFullYear();
	if (inc==0) {thm=mnow;thy=ynow;}
	else {
		thm+=inc;
		if (thm>12) {thm=1;thy++;}
		if (thm<1) {thm=12;thy--;}
		if ((thy*100+thm)==ynow*100+mnow) buildCal(eN(thy,thm,thd));
		else if ((thy*100+thm)>=ynow*100+mnow) buildCal(eN(thy,thm,1));
		else {thm=mnow;thy=ynow;}
		}
	}

function iDkeyup() {
	clearTimeout(timeriD);
	timeriD=setTimeout("iDsrch()",2000);
	}

function iDsrch() {
	var q=ge("srchtxt").value;
	if (ge("srchsmmry")) stR="";
	stQ=q;
	if ((q.length>0)&&(q!=qv)) {
		getResults(stR,stQ,0,stV);
		qv=q;
		}
	}

function getResults(drng,qs,tag,ven) {
//alert("getResults("+drng+","+qs+","+tag+","+ven+")");
	var ary=eval(ar);
	var sd="",comp1,comp2,gcd=[],thisdate=0,cA=0;
	drng+="";
	var arInd1=[],arInd2=[],arDrng=drng.split("-");
	arInd.length=0;
	stR=drng; stQ=qs; stV=ven;
	if (ge("srchtxt")) ge("srchtxt").value=qs;
	if (ge("venu")) {if (ven=="") {ge("venu").selectedIndex=0;}}

	var i1=arDrng[0];
	var i2=(drng=="")?0:(arDrng.length>1)?arDrng[1]:i1;
	curDate=(i1>0)?i1:todaycode;
	arRange=(i2==i1)?[i1]:getRange(i1,i2);

	if (ge("dtrange")&&(stR!="")) ge("dtrange").value=cleanup(prettyDate(stR));
	if (drng=="") {
		if (ge("dtrange")) {ge("dtrange").value='';ge("dtrange").disabled=true;}
		for (t in ary) {
			thisdate=(ary[t][1].indexOf("-")==-1)?ary[t][1]:ary[t][1].substring(ary[t][1].indexOf("-")+1);
			if (parseInt(thisdate,10)>=todaycode) arInd1[t]=t;
			}
		if (ge("togcal")) buildCal(todaycode);
		}
	else {
		if (ge("dtrange")) {
			ge("dtrange").disabled=false;
			}
		if (i1==todaycode) updatecal(0);
		if (ge("togcal")) buildCal(i1,i2);
		}
	if (i2==i1)arInd1=inDate(ar,i1);
	else {
		for (t in arRange) {
			arST=inDate(ar,arRange[t]);
			for (qx in arST) {if (arGot(arInd1,arST[qx],1).length==0) arInd1.push(arST[qx]);}
			}
		}
		for (w in ary) {
			var gplu=0,gtag=0,thisvenue=ary[w][5];
			var gven=(ven=="")?1:0;
			comp1=cleanup((ary[w][0]+ary[w][5]+ary[w][6]+ary[w][8]+ary[w][9]+ary[w][10]).toLowerCase());
			if (tag!=0) comp1=ary[w][9].toLowerCase();
			comp2=qs.toLowerCase();
			var foundit=comp1.indexOf(comp2);
			if (ge("srchsmmry")) gtag=1;
			if (foundit!=-1) {
				gplu++;
				gven+=(thisvenue==ven)?1:0;
				}
			if (gplu>0&&gven>0&&(arGot(arInd2,w).length==0)) arInd2.push(w);
			}
		for (p1 in arInd1) {
			for (p2 in arInd2) {
				if (arInd1[p1]==arInd2[p2]) arInd.push(arInd1[p1]);
				}
			}
	if(ge("res")) {
		ge("res").innerHTML="";
		show("res",arInd,ary,0);
		}
	showSumm("srchsmmry",arInd,ary);
	setHits(arInd.length);
	}

function buildCal(i1,i2){
	var d1=dN(i1);
	thy=d1[0];
	thm=d1[1];
	var xtn=eN(d1[0],d1[1],1);
	var thw="",sugwk="",dow=0,arW=[];

	var oD = new Date(d1[0],d1[1]-1,1);
	oD.od=oD.getDay()+1;

	var isitnow=(d1[0]==today.getFullYear() && d1[1]==today.getMonth()+1)? today.getDate() : 0;

	var t=[];
	t.push('<div class="mbloc"><div class="month"><a title="Previous Month" href="#-" onclick="updatecal(-1);return false;">&laquo;</a>');
	t.push(arMon[d1[1]-1]);
	t.push('<a title="Next Month" href="#+" onclick="updatecal(+1);return false;">&raquo;</a></div>');
	t.push('<div class=newline>');
	for(s=0;s<7;s++)t.push('<span class="daysofweek">'+"SMTWTFS".substr(s,1)+'</span>');
	t.push('</div><div class=newline>'); //weektitles
	for(i=1;i<=42;i++){
		var clz="days ",onc='',ttl='';
		var x=((i-oD.od>=0)&&(i-oD.od<arDaysInMon[d1[1]-1]))? i-oD.od+1 : '&nbsp;';
		var xt=(x=='&nbsp;')?0:eN(d1[0],d1[1],x);
		if (i==1&&x=='&nbsp;') {showprv=1;x='&laquo;';onc='javascript:updatecal(-1)'; ttl='Previous Month';}
		if (i==42&&x=='&nbsp;') {shownxt=1;x='&raquo;';onc='javascript:updatecal(+1)'; ttl='Next Month';}
		if (xt>=i1&&xt<=i2) clz+="clikt ";
		if (x<isitnow||x=='&nbsp;') clz+="faded ";
		else if (xt!=0) {
			if (inDate(ar,xt).length>0) {
				clz+="ev";
				onc='javascript:getResults('+xt+',stQ,0,stV)';
				ttl='Event(s)';
				}
			thw='<a href="#results" onclick="getResults(\''+xtn+'-'+xt+'\',stQ,0,stV);return false;" title="Events this week...">&nbsp;&lsaquo;&nbsp;</a>';
			}
		if (x==isitnow) {clz+=" today ";ttl='Today';}
		if (onc=="") t.push('<span title="'+ttl+'" class="'+clz+'">'+x+'</span>');
		else t.push('<a title="'+ttl+'" class="'+clz+'" href="'+onc+'">'+x+'</a>');
		xt=(xt==0)?eN(d1[0],d1[1],arDaysInMon[d1[1]-1]):xt;
		if(i%7==0&&i<36) {
			t.push(thw+'</div><div class=newline>');
			xtn=xt+1;
			}
		}
	t.push('</div>');
	t.push('</div>');


	if (ge("togcal")) ge("togcal").innerHTML=t.join("");
	if (ge("suggest")) ge("suggest").innerHTML="<a title='Today' href='#today' onclick='getResults(\""+todaycode+"\",stQ,0,stV);return false;'>Today</a> | <a title='+7 days' href='#7days' onclick='getResults(\""+curDate+"-"+(addDays(curDate,7))+"\",stQ,0,stV);return false;'>+7 days</a> | <a href='#all' onclick='getResults(\"\",\"\",0,\"\");return false;'>all events</a>";
	}

function thmtot(dc){ //return datecode of last day of month
	return (dc-dc%100)+arDaysInMon[thm-1];
	}

function nxtmon(dc){ //return first date of next month
	rm=((thm<12)?thm+1:1);
	ry=(thm==12&&rm==1)?(thy+1):thy;
	return (ry*10000)+(rm*100)+1;
	}

function addDays(dt,v){
	var d=parseInt(dt,10);
	var overshoot=(d+v)-thmtot(d)-1;
	return (d+v)>thmtot(d)?nxtmon(d)+overshoot:d+v;
	}

function getRange(datecode,dc2) {
	var arG=[],d=dN(datecode);
	arG.push(datecode);
	if (dc2<100) dc2=parseInt(dc2,10)+d[1]*100;
	if (dc2<10000) dc2=parseInt(dc2,10)+d[0]*10000;
	while (arG[arG.length-1]<dc2) {
		datecode++;
		if (datecode>thmtot(datecode)) datecode=nxtmon(datecode);
		arG.push(datecode);
		}
	return arG;
	}

// Facebook share
function fbs_click(u) {
	t=document.title;
	window.open('http://www.facebook.com/sharer.php?u='+encodeURIComponent(u)+'&t='+encodeURIComponent(t),'sharer','toolbar=0,status=0,width=626,height=436');
	return false;
}

// titlecase from http://www.ear-fung.us/2007/08/code-javascript-title-case/
String.prototype.titleCase = function () {
	var str = "";
	var wrds = this.split(" ");
	for(keyvar in wrds)
	{
	str += wrds[keyvar].substr(0,1).toUpperCase()
	 + wrds[keyvar].substr(1,wrds[keyvar].length).toLowerCase() + " ";
	}
   return str;
}
