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 iconz=["myspace","tumblr","youtube","facebook","twitter","bandcamp","soundcloud","reverbnation","amazingtunes"];

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 im=0;im<images.length;im++){imageObj.src=images[im]}
	} 

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://www.tfaforms.com/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){
    clv = clv.replace(/\'/g, "&#39;");
    clv = clv.replace(/\"/g, "&#34;");
	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);
	if (x==y) {
		var xx=parseInt(a[2],10), yy=parseInt(b[2],10);
		return ((xx<yy)?-1:(xx>yy)?1:0);}
	else 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("+val+","+idx+")");
	val=cleanup(val.toString().toLowerCase());
	var arGG=[], ch1, ch2, ev1, ev2, chk;
	if (idx>-1) {for (tp=0;tp<arIn.length;tp++) {
		if (arIn[tp][idx]!=null) {
			chk=arIn[tp][idx].toString();
				if (idx==1) {
					//add logic: identify start + stop of date range for event and for check range
					if(val.length<9){ev1=val;ev2=val;}
					else {ev1=val.substring(0,8);ev2=val.substring(9);}
					if (chk.length<9){ch1=chk;ch2=chk;}
					else {ch1=chk.substring(0,8);ch2=chk.substring(9);}
					if (((ev1<=ch2)&&(ev2>=ch1))||(chk==val)) arGG.push(tp);
					}
		else {if (cleanup(arIn[tp][idx].toString().toLowerCase()).indexOf(val)!=-1) arGG.push(tp);}
			}
		}}
	else {
		for (tp=0;tp<arIn.length;tp++) {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_coords=8,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,wmap=[];
	for (w=0;w<ary.length;w++) {
		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].split(",")[0]+"' 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='icr'>");
			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 clear=left>");

//		if (ary[w][i_pic]!="") {
//			if (ary[w][i_www]!="") we.push("<a class=lnx target='_top' href='"+ary[w][i_www].split(",")[0]+"' title='Website...'>");
//			if (ary[w][i_www]!="") we.push("www</a>");
//			}
			
// Links
	var linkz=[], icx="";
	linkz=ary[w][2].split(",");
		we.push("<br>");
		for (lx=0;lx<linkz.length;lx++) {
			if (linkz[lx]!="") {
				icx="website";
				for (var ix=0;ix<iconz.length;ix++) {
					if (linkz[lx].indexOf(iconz[ix])!=-1) {
						icx=iconz[ix];
						}
					}
				we.push("<a target='_blank' href='"+linkz[lx]+"'>");
				if(icx!="") we.push("<img src=../images/ic-"+icx+".png title='"+icx+"' class='ic'>");
				we.push("</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);
//alert(aG);
		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='Gigs...'><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]+", Dundee "+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");

	if(ar=="only") {wmap.push(placeDot(ary[w][i_coords],ary[w][0]));}

		}
	ge("ediv").innerHTML=we.join("");
	if (ge("ediv_total")) ge("ediv_total").innerHTML=c;
	if (ge("map")) ge("map").innerHTML+=wmap;
	}
		
function prettyDate(datelist,inclyr,incltd,inclday) {
//alert("prettyDate("+datelist+")");
	noyr=(inclyr)?inclyr:1;
	notd=(incltd)?incltd:1;
	noday=(inclday)?inclday:1;
	datelist+="";
	if (datelist<8) {
		return arDays[datelist];
		}
	if (datelist.indexOf("20")==-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="";};
		if (inclday==0) {dz="";dz2="";};
		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=0;nx<arN.length;nx++) {
		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=[], dRng;
	var dChk=expandDate(xxx);
 	for(y=0;y<ary1.length;y++) {
		if(xxx=="") {arEv.push(y)}
		else {
			var arD=ary1[y][1].split(",");
			for (z=0;z<arD.length;z++) {
				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 (var gm=0;gm<gigs.length;gm++) {
		gigs[gm][9]+=",music,gigs";
		for (var xm=0;xm<music.length;xm++) {
			mxm=music[xm][0];
			mxi=music[xm][1];
			mxm2="<a onclick='fPB(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][0].indexOf(mxm)!=-1)||(gigs[gm][6].indexOf(mxm)!=-1))) {
				if (gigs[gm][3].indexOf(mxi)==-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,mxi,gmg,gmgrp;
	for (gm=0;gm<gigs.length;gm++) {
		gigs[gm][9]+=",music,gigs";
		gmgrp=gigs[gm][0].split("+");
		for (gmg=0;gmg<gmgrp.length;gmg++) {
			for (var xm=0;xm<music.length;xm++) {
				mxm=music[xm][0];
				mxi=music[xm][1];
				if((gigs[gm][3].indexOf(mxi)==-1)&&((gmgrp.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 getTWT(twid,twtw) {
getTwitters(twid, { 
  id: twtw, 
  count:3, 
  enableLinks: true, 
  newwindow: true,
  ignoreReplies: true, 
  clearContents: true,
  template: '"%text%" <a href="http://twitter.com/%user_screen_name%/statuses/%id_str%/">%time%</a>'
});
}

function bringit(qa) {
	var bi='http://music.indundee.co.uk/?q='+document.getElementById('q').value.replace(/ /ig,"_");
	return (bi);
}

function fGigs(codename) {
	var aG=arGot(gigs,codename,0);// check for gigs
	if(aG.length==0) aG=arGot(gigs,codename,6);
	if(aG.length==0) aG=arGot(gigs,codename,5);
	if(aG.length!=0) {
		var as=(aG.length==1)?"":"s";

		for (xm=0;xm<music.length;xm++) {if (music[xm][0]==codename) {arT="music";w=xm;}}
		for (xm=0;xm<go.length;xm++) {if (go[xm][0]==codename) {arT="go";w=xm;}}
		var ary=eval(arT), wt=[];
	
		wt.push("<div class='gigz' style='background:#fff'>");
		wt.push("<u style='float:right' >"+aG.length+" gig"+as+"</u>");
	
		for (var gx=0;gx<aG.length;gx++) {
			wt.push("<br>"+prettyDate(gigs[aG[gx]][1]) + " : ");
			if(arT=="music") wt.push(gigs[aG[gx]][5]);
			if(arT=="go") wt.push(gigs[aG[gx]][0]);
		}
		wt.push("<br><a style='float:right' target=_blank href='http://gigs.indundee.co.uk?q="+codename.replace(/ /ig,"_")+"'>More info...</a>");
		wt.push("<br clear=all></div>");

		return wt.join("");
		}
		return "";
	}
	
function fEvents(codename) {
//	alert('fEvents('+codename+')');
	var aG=arGot(whatson,codename,0);
	if(aG.length==0) aG=arGot(whatson,cleanup(codename),6);
	if(aG.length==0) aG=arGot(whatson,cleanup(codename),5);
	if(aG.length!=0) {
		var as=(aG.length==1)?"":"s";

		for (xm=0;xm<music.length;xm++) {if (music[xm][0]==codename) {arT="music";w=xm;}}
		for (xm=0;xm<go.length;xm++) {if (go[xm][0]==codename) {arT="go";w=xm;}}
		var ary=eval(arT), wt=[];
	
		wt.push("<div class='gigz' style='background:#fff'>");
		wt.push("<u style='float:right' >"+aG.length+" event"+as+"</u>");
	
		for (var gx=0;gx<aG.length;gx++) {
			wt.push("<br>"+prettyDate(whatson[aG[gx]][1]) + " : ");
			if(arT=="music") wt.push(whatson[aG[gx]][5]);
			if(arT=="go") wt.push(whatson[aG[gx]][0]);
		}
		wt.push("<br><a style='float:right' target=_blank href='http://whatson.indundee.co.uk?q="+codename.replace(/ /ig,"_")+"'>More info...</a>");
		wt.push("<br clear=all></div>");

		if(ar!='whatson') {wt.push(fGigs(codename));}
		return wt.join("");
		}
		return fGigs(codename);
	}
	
// fPB - show music acts, info, links, twitter, etc.
function fPB(codename) {
//	alert('fPB('+codename+')');

	var w=-1, arT="", dbTag="", fbProfile="";
	for (xm=0;xm<music.length;xm++) {if (music[xm][0]==codename) {arT="music";w=xm;}}
	if(arT=="") {
		for (xm=0;xm<go.length;xm++) {if (go[xm][0]==codename) {arT="go";w=xm;}}
	}
	if(arT=="") {
		for (xm=0;xm<music_archive.length;xm++) {if (music_archive[xm][0]==codename) {arT="music_archive";w=xm;dbTag="<i>From iD Music Archive</i>";}}
	}

if(w!=-1) {
	var i_pic=1,i_www=2,i_class=6,i_typ=5,i_conn=7,i_blurb=8,i_chk=9,i_tel=-1;
	if(arT=="go"){i_map=3,i_tel=4,i_class=5,i_blurb=6,i_chk=7,i_conn=-1;}

	var ary=eval(arT), aryspl=[];

	var linkz=[], icx="", twt="";
	linkz=ary[w][2].split(",");

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

	wt.push("<br><small>"+dbTag+"</small>");

		if (ary[w][4].indexOf("01382")!=-1) wt.push("<small>"+ary[w][4]+" . . . </small> "); //Phone
		if ((ary[w][3].length>2)&&(ary[w][3].length<8)) wt.push("<small><a target='_blank' href='http://maps.google.co.uk/maps?f=q&hl=en&q="+ary[w][0]+", Dundee "+ary[w][3]+"' title='Map...'><nobr>"+ary[w][3]+"</nobr></a></small><br>");// Map
		
		wt.push("<div class='pigeon'><small>Pigeonholes<br>"); //Pigeonholes
			aryspl=ary[w][i_class].split(" ");
			for (var ic=0;ic<aryspl.length;ic++){wt.push("<a onclick='srchEmM(\""+aryspl[ic]+"\")'>"+aryspl[ic]+"</a><br>");}

		if((arT="go")&&(ary[w][8]!="0, 0")) {
			wt.push("---<br>Nearby");
			var coords=ary[w][8].split(",");
			for (var xco=0;xco<go.length;xco++) {
				coordsgo=go[xco][8].split(",");
				var xdif=Math.abs(coords[0]-coordsgo[0]);
				var ydif=Math.abs(coords[1]-coordsgo[1]);
				if((xdif<100)&&(ydif<100)&&(go[xco][0]!=ary[w][0])) wt.push("<br><a onclick='fPB(\""+cleanup(go[xco][0])+"\")'>"+go[xco][0]+"</a>");
				}
		}

		if(ary[w][i_chk]!="")wt.push("<br>---<br><small>Last checked<br>"+prettyDate(ary[w][i_chk])+"</small><br>");
		wt.push("</small></div>");

	if(ary[w][i_blurb]!="")wt.push("<br><div>&lsquo;"+ary[w][i_blurb]+"&rsquo;</div>"); //Blurb

		wt.push("<br>"); // Links
		for (lx=0;lx<linkz.length;lx++) {
			if (linkz[lx]!="") {
				icx="website";
				for (var ix=0;ix<iconz.length;ix++) {
					if (linkz[lx].indexOf(iconz[ix])!=-1) {
						icx=iconz[ix];
						}
					}
				wt.push("<a target='_blank' href='"+linkz[lx]+"'>");
				if(icx!="") wt.push("<img src=../images/ic-"+icx+".png ");
				if (icx=="website") icx=linkz[lx];
				wt.push(" title='"+icx+"'>");
				wt.push("</a> ");
				if (icx=="twitter") twt=linkz[lx].substring(linkz[lx].lastIndexOf("/")+1);
				if (icx=="facebook") {
					fbLink=linkz[lx];
					fbProfile=fbLink.substring(fbLink.lastIndexOf("/")+1);
				}
			}
		}

wt.push("<br clear=all><table class='tabSocial'><tr>");

	// Facebook profile pic
		if(fbProfile!="") {wt.push("<td><div class='fbFloat'><a target=_blank href='"+fbLink+"' ><i>"+ary[w][0]+" on Facebook</i><img src='http://graph.facebook.com/"+fbProfile+"/picture?type=large' title='Facebook'></a></div></td>");}

	// Twitter
	if(twt!="") {
		wt.push("<td><div class='twFloat'><div id='tweet'></div></div></td>");
		getTWT('tweet',twt);
	}

	wt.push("<td>" + fEvents(codename));
		

wt.push("</tr></table>");
		
// Connections
		if(i_conn>0&&ary[w][i_conn]!="") {
			wt.push("<br clear=left><br><small>Connections: ");
			aryspl=ary[w][i_conn].split("|");
			for (ic=0;ic<aryspl.length;ic++){wt.push("<a onclick='fPB(\""+aryspl[ic]+"\")'>"+aryspl[ic]+"</a> . ");}
		if(location.href.indexOf("map")==-1) wt.push("<br><a target=_blank href='http://music.indundee.co.uk/map.htm'>Our music map</a> has more  connections...<br>");
		wt.push("</small>");
		}

// Releases
var gotRel=[], grgr;
for (var rx=0;rx<releases.length;rx++) {
	if(releases[rx][1]==ary[w][0]) {gotRel.push(rx);}
}
if ((ar!="releases")&&(gotRel.length>0)) {
	wt.push("<br clear=all><br><a target=_blank href='http://music.indundee.co.uk/releases.htm'>Releases - Read more...</a>");
	for (var gr=gotRel.length-1;gr>-1;gr--) {
		grgr=gotRel[gr];
		wt.push("<br clear=left><br><b>"+releases[grgr][0]+"</b>");
		wt.push(" : "+releases[grgr][8]);
		if(releases[grgr][6]!="") {wt.push("<img src='"+releases[grgr][6] + "' style='max-width:100px;float:left;padding-right:5px' >");}
		if(releases[grgr][5]!="") {wt.push("<br>&quot;"+releases[grgr][5] + "&quot;");}
		if(releases[grgr][10]!="") {wt.push("<br clear=left><br>"+releases[grgr][10]);}
		}
	}

// Video
		if(arT=='music'&&ary[w][4]!="") {wt.push("<br><br><iframe width=420 height=345 src=http://www.youtube.com/embed/"+ary[w][4]+"?rel=0 frameborder=0 style='float:left;clear:left;'></iframe><br>");}

// Pics		
	if(ary[w][3]>0) {
		for (xw=0;xw<ary[w][3];xw++) {wt.push("<br clear=left><br><img src='http://i281.photobucket.com/albums/kk224/indundee/music/"+ary[w][1]+(xw+1)+".jpg'><br>");}
	}
	if(ary[w][3].indexOf("jpg")!=-1) {wt.push("<br clear=left><br>"+ary[w][3]);}
	wt.push("<br clear=all>&nbsp;");
	jQuery.facebox(wt.join(""));
	}
} //fPB

function fillPanels(){
	// Recent Edits
	if (ge("recentEdits")){
		var we=[],weTemp=[];
		var allon=[];
		var offset=(20100201-20100101);
		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=0;q<allon.length;q++) if (allon[q][11]==tc) weTemp.push("<nobr><a target=_top href='http://whatson.indundee.co.uk/?q="+cleanup(allon[q][0]).replace(/ /ig,"_")+"'>"+cleanup(allon[q][0])+" ["+prettyDate(allon[q][1])+"]</a></nobr>");
			if (weTemp.length>0) {we.push("Added "+prettyDate(tc));for(r=0;r<weTemp.length;r++)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];
		}
	}
addOnLoad(fillPanels);

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;
	tv=tv.replace(/_/ig," ");
	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.className.toLowerCase().indexOf(tv.toLowerCase())!=-1)) {
					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;
	var cl=(ttl=="iD since ")?"#999":"#000";
	return "<br><b style='font-weight:normal;color:"+cl+"'><i>"+ttl+"</i>"+val+"</b>";
	}

function getWW(name) {
//	alert("getWW "+name);
	for (xmx=0;xmx<music.length;xmx++) {if ((music[xmx][0]==name)||(music[xmx][1]==name)) return xmx}
	for (xmx=0;xmx<go.length;xmx++) {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=0;k<aRR.length;k++)wh[k]=k;}
	if (!ge(divv)||!wh) return;
	var l=[],ld=[];
	for (k=0;k<wh.length;k++) {
		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>");

// Links
	l.push("&nbsp;&nbsp;&nbsp;");
	var linkz=[], icx="";
	linkz=aRR[wx][4].split(",");
		for (lx=0;lx<linkz.length;lx++) {
			if (linkz[lx]!="") {
				icx="website";
				for (var ix=0;ix<iconz.length;ix++) {if (linkz[lx].indexOf(iconz[ix])!=-1) {icx=iconz[ix];}}
				l.push("<a target='_blank' href='"+linkz[lx]+"'><img class=ic src=../images/ic-"+icx+".png title='"+icx+"'></a> ");
			}
		}


	l.push("<br clear=right>");
		if (go[vv]) if (go[vv][1]!="no_photo") l.push("<a onclick='fPB(\""+go[vv][0]+"\")'><img title='"+cleanup(go[vv][0])+"' class='im' 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--) {
						if (arpx[px].indexOf("http")==-1) {
							var gW=getWW(arpx[px]);
							if (gW!=-1) l.push("<a onclick='fPB(\""+music[gW][0]+"\")'>");
							l.push("<img class='im' src='"+baseURL+"photos/"+arpx[px]+".jpg'>");
							if (gW!=-1) l.push("</a>");
							}
							else {
								l.push("<a rel='facebox' href='"+arpx[px]+"'><img class='poster' src="+arpx[px]+"></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]);}
					}

			arpx=aRR[wx][5].split(":");
			if(arpx.length==1)arpx[1]="";
			l.push(showInfo("Where: ","<a onclick='fPB(this.innerHTML)'>"+arpx[0]+"</a>"+arpx[1]));
			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(showInfo("iD since ",prettyDate(aRR[wx][11])));
			l.push("</div><br clear=all></div>");
			}
		}
		}
		ge(divv).innerHTML+=l.join("");
		l.length=0;
	}

function showSumm(divv,wh,aRR) {
	if (!ge(divv)||!wh) return;
	var l=[];
	for (k=0;k<wh.length;k++) {
		wx=parseInt(wh[k],10);
		if (aRR[wx]) {
			l.push("<a target='_top' href='http://whatson.indundee.co.uk/?q="+cleanup(aRR[wx][0]).replace(/ /ig,"_")+"'>");
			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=[],arIndU=[],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=0;t<ary.length;t++) {
			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=0;t<arRange.length;t++) {
			arST=inDate(ar,arRange[t]);
			for (qx=0;qx<arST.length;qx++) {if (arGot(arInd1,arST[qx],1).length==0) arInd1.push(arST[qx]);}
			}
		}
	arIndU=arInd1.unique();
		for (w=0;w<ary.length;w++) {
			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,1).length==0)) arInd2.push(w);
			}
		for (p1=0;p1<arIndU.length;p1++) {
			for (p2=0;p2<arInd2.length;p2++) {
				if (arIndU[p1]==arInd2[p2]) arInd.push(arIndU[p1]);
				}
			}
	if(ge("res")) {
		ge("res").innerHTML="";
		show("res",arInd,ary,0);
		}
	showSumm("srchsmmry",arInd,ary);
	setHits(arInd.length);
    jQuery(document).ready(function($) {$('a[rel*=facebox]').facebox({})})
	}

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;
}

// Twitter share
function twi_click(u) {
	window.open('http://twitter.com/home/?status='+encodeURIComponent(u)+' %23indundee','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=0;keyvar<wrds.length;keyvar++)
	{
	str += wrds[keyvar].substr(0,1).toUpperCase()
	 + wrds[keyvar].substr(1,wrds[keyvar].length).toLowerCase() + " ";
	}
   return str;
}

// array - make unique, from http://www.martienus.com/code/javascript-remove-duplicates-from-array.html
Array.prototype.unique = function () {
	var ru = new Array();
	ou:for(var iu = 0, nu = this.length; iu < nu; iu++)
	{
		for(var xu = 0, yu = ru.length; xu < yu; xu++)
		{
			if(ru[xu]==this[iu])
			{
				continue ou;
			}
		}
		ru[ru.length] = this[iu];
	}
	return ru;
}

function placeDot(xy,titl) {
	var xyz=xy.split(",");
	return ("<img src='../images/dot.png' style='position:absolute;left:"+(xyz[0]-11)+"px;top:"+(xyz[1]-11)+"px;' title='"+titl+"'>");
}
		
		
//from http://blog.firetree.net/2005/07/04/javascript-find-position/
function findX(obj)  {
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
  }

  function findY(obj)  {
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
  }

