 /**
 *	@description How have I not jquery-ed this already? Sorry, I am good honest!
 *	@description Don't look at this, try http://www.clarkeology.com/js/twfeed.js or something instead!
 *	@author Paul Clarke <paulypopex+php@gmail.com>
 */

var aUser = 1;
/**
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 */
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') {
        options = options || {};
        if (value === null) {
            value = '';
            options = $.extend({}, options);
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString();
        }
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else {
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};
;
/*
 * jQuery Autocomplete plugin 1.1
 *
 * Copyright (c) 2009 Jörn Zaefferer
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $
 */
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}(';(3($){$.2e.1u({19:3(b,d){5 c=W b=="1B";d=$.1u({},$.M.1T,{Y:c?b:P,y:c?P:b,1J:c?$.M.1T.1J:10,X:d&&!d.1D?10:48},d);d.1y=d.1y||3(a){6 a};d.1v=d.1v||d.1R;6 A.I(3(){1M $.M(A,d)})},L:3(a){6 A.11("L",a)},1k:3(a){6 A.14("1k",[a])},2b:3(){6 A.14("2b")},28:3(a){6 A.14("28",[a])},24:3(){6 A.14("24")}});$.M=3(o,r){5 t={2Y:38,2S:40,2N:46,2I:9,2E:13,2B:27,2x:3I,2v:33,2p:34,2n:8};5 u=$(o).3r("19","3o").Q(r.2Q);5 p;5 m="";5 n=$.M.3c(r);5 s=0;5 k;5 h={1F:C};5 l=$.M.32(r,o,1Z,h);5 j;$.1Y.2X&&$(o.2U).11("45.19",3(){4(j){j=C;6 C}});u.11(($.1Y.2X?"43":"42")+".19",3(a){s=1;k=a.2M;3V(a.2M){O t.2Y:a.1d();4(l.N()){l.30()}w{12(0,D)}R;O t.2S:a.1d();4(l.N()){l.2D()}w{12(0,D)}R;O t.2v:a.1d();4(l.N()){l.2C()}w{12(0,D)}R;O t.2p:a.1d();4(l.N()){l.2A()}w{12(0,D)}R;O r.17&&$.1c(r.S)==","&&t.2x:O t.2I:O t.2E:4(1Z()){a.1d();j=D;6 C}R;O t.2B:l.Z();R;3J:1P(p);p=1O(12,r.1J);R}}).2t(3(){s++}).3E(3(){s=0;4(!h.1F){2r()}}).2q(3(){4(s++>1&&!l.N()){12(0,D)}}).11("1k",3(){5 c=(1r.7>1)?1r[1]:P;3 1N(q,a){5 b;4(a&&a.7){16(5 i=0;i<a.7;i++){4(a[i].L.J()==q.J()){b=a[i];R}}}4(W c=="3")c(b);w u.14("L",b&&[b.y,b.F])}$.I(15(u.K()),3(i,a){21(a,1N,1N)})}).11("2b",3(){n.1o()}).11("28",3(){$.1u(r,1r[1]);4("y"2h 1r[1])n.1e()}).11("24",3(){l.1p();u.1p();$(o.2U).1p(".19")});3 1Z(){5 e=l.2g();4(!e)6 C;5 v=e.L;m=v;4(r.17){5 b=15(u.K());4(b.7>1){5 f=r.S.7;5 c=$(o).18().1I;5 d,1H=0;$.I(b,3(i,a){1H+=a.7;4(c<=1H){d=i;6 C}1H+=f});b[d]=v;v=b.3f(r.S)}v+=r.S}u.K(v);1l();u.14("L",[e.y,e.F]);6 D}3 12(b,c){4(k==t.2N){l.Z();6}5 a=u.K();4(!c&&a==m)6;m=a;a=1m(a);4(a.7>=r.29){u.Q(r.26);4(!r.1s)a=a.J();21(a,3a,1l)}w{1q();l.Z()}};3 15(b){4(!b)6[""];4(!r.17)6[$.1c(b)];6 $.4h(b.23(r.S),3(a){6 $.1c(b).7?$.1c(a):P})}3 1m(a){4(!r.17)6 a;5 c=15(a);4(c.7==1)6 c[0];5 b=$(o).18().1I;4(b==a.7){c=15(a)}w{c=15(a.22(a.37(b),""))}6 c[c.7-1]}3 1G(q,a){4(r.1G&&(1m(u.K()).J()==q.J())&&k!=t.2n){u.K(u.K()+a.37(1m(m).7));$(o).18(m.7,m.7+a.7)}};3 2r(){1P(p);p=1O(1l,4g)};3 1l(){5 c=l.N();l.Z();1P(p);1q();4(r.36){u.1k(3(a){4(!a){4(r.17){5 b=15(u.K()).1n(0,-1);u.K(b.3f(r.S)+(b.7?r.S:""))}w{u.K("");u.14("L",P)}}})}};3 3a(q,a){4(a&&a.7&&s){1q();l.35(a,q);1G(q,a[0].F);l.20()}w{1l()}};3 21(f,d,g){4(!r.1s)f=f.J();5 e=n.31(f);4(e&&e.7){d(f,e)}w 4((W r.Y=="1B")&&(r.Y.7>0)){5 c={4f:+1M 4e()};$.I(r.2Z,3(a,b){c[a]=W b=="3"?b():b});$.4d({4c:"4b",4a:"19"+o.49,2V:r.2V,Y:r.Y,y:$.1u({q:1m(f),47:r.X},c),44:3(a){5 b=r.1A&&r.1A(a)||1A(a);n.1i(f,b);d(f,b)}})}w{l.2T();g(f)}};3 1A(c){5 d=[];5 b=c.23("\\n");16(5 i=0;i<b.7;i++){5 a=$.1c(b[i]);4(a){a=a.23("|");d[d.7]={y:a,F:a[0],L:r.1z&&r.1z(a,a[0])||a[0]}}}6 d};3 1q(){u.1h(r.26)}};$.M.1T={2Q:"41",2P:"3Z",26:"3Y",29:1,1J:3W,1s:C,1f:D,1w:C,1g:10,X:3U,36:C,2Z:{},1X:D,1R:3(a){6 a[0]},1v:P,1G:C,E:0,17:C,S:", ",1y:3(b,a){6 b.22(1M 3T("(?![^&;]+;)(?!<[^<>]*)("+a.22(/([\\^\\$\\(\\)\\[\\]\\{\\}\\*\\.\\+\\?\\|\\\\])/2K,"\\\\$1")+")(?![^<>]*>)(?![^&;]+;)","2K"),"<2J>$1</2J>")},1D:D,1E:3S};$.M.3c=3(g){5 h={};5 j=0;3 1f(s,a){4(!g.1s)s=s.J();5 i=s.2H(a);4(g.1w=="3R"){i=s.J().1k("\\\\b"+a.J())}4(i==-1)6 C;6 i==0||g.1w};3 1i(q,a){4(j>g.1g){1o()}4(!h[q]){j++}h[q]=a}3 1e(){4(!g.y)6 C;5 f={},2G=0;4(!g.Y)g.1g=1;f[""]=[];16(5 i=0,2F=g.y.7;i<2F;i++){5 c=g.y[i];c=(W c=="1B")?[c]:c;5 d=g.1v(c,i+1,g.y.7);4(d===C)1V;5 e=d.3Q(0).J();4(!f[e])f[e]=[];5 b={F:d,y:c,L:g.1z&&g.1z(c)||d};f[e].1U(b);4(2G++<g.X){f[""].1U(b)}};$.I(f,3(i,a){g.1g++;1i(i,a)})}1O(1e,25);3 1o(){h={};j=0}6{1o:1o,1i:1i,1e:1e,31:3(q){4(!g.1g||!j)6 P;4(!g.Y&&g.1w){5 a=[];16(5 k 2h h){4(k.7>0){5 c=h[k];$.I(c,3(i,x){4(1f(x.F,q)){a.1U(x)}})}}6 a}w 4(h[q]){6 h[q]}w 4(g.1f){16(5 i=q.7-1;i>=g.29;i--){5 c=h[q.3O(0,i)];4(c){5 a=[];$.I(c,3(i,x){4(1f(x.F,q)){a[a.7]=x}});6 a}}}6 P}}};$.M.32=3(e,g,f,k){5 h={H:"3N"};5 j,z=-1,y,1t="",1S=D,G,B;3 2y(){4(!1S)6;G=$("<3M/>").Z().Q(e.2P).T("3L","3K").1Q(1K.2w);B=$("<3H/>").1Q(G).3G(3(a){4(U(a).2u&&U(a).2u.3F()==\'2s\'){z=$("1L",B).1h(h.H).3D(U(a));$(U(a)).Q(h.H)}}).2q(3(a){$(U(a)).Q(h.H);f();g.2t();6 C}).3C(3(){k.1F=D}).3B(3(){k.1F=C});4(e.E>0)G.T("E",e.E);1S=C}3 U(a){5 b=a.U;3A(b&&b.3z!="2s")b=b.3y;4(!b)6[];6 b}3 V(b){j.1n(z,z+1).1h(h.H);2o(b);5 a=j.1n(z,z+1).Q(h.H);4(e.1D){5 c=0;j.1n(0,z).I(3(){c+=A.1a});4((c+a[0].1a-B.1b())>B[0].3x){B.1b(c+a[0].1a-B.3w())}w 4(c<B.1b()){B.1b(c)}}};3 2o(a){z+=a;4(z<0){z=j.1j()-1}w 4(z>=j.1j()){z=0}}3 2m(a){6 e.X&&e.X<a?e.X:a}3 2l(){B.2z();5 b=2m(y.7);16(5 i=0;i<b;i++){4(!y[i])1V;5 a=e.1R(y[i].y,i+1,b,y[i].F,1t);4(a===C)1V;5 c=$("<1L/>").3v(e.1y(a,1t)).Q(i%2==0?"3u":"3P").1Q(B)[0];$.y(c,"2k",y[i])}j=B.3t("1L");4(e.1X){j.1n(0,1).Q(h.H);z=0}4($.2e.2W)B.2W()}6{35:3(d,q){2y();y=d;1t=q;2l()},2D:3(){V(1)},30:3(){V(-1)},2C:3(){4(z!=0&&z-8<0){V(-z)}w{V(-8)}},2A:3(){4(z!=j.1j()-1&&z+8>j.1j()){V(j.1j()-1-z)}w{V(8)}},Z:3(){G&&G.Z();j&&j.1h(h.H);z=-1},N:3(){6 G&&G.3s(":N")},3q:3(){6 A.N()&&(j.2j("."+h.H)[0]||e.1X&&j[0])},20:3(){5 a=$(g).3p();G.T({E:W e.E=="1B"||e.E>0?e.E:$(g).E(),2i:a.2i+g.1a,1W:a.1W}).20();4(e.1D){B.1b(0);B.T({2L:e.1E,3n:\'3X\'});4($.1Y.3m&&W 1K.2w.3l.2L==="1x"){5 c=0;j.I(3(){c+=A.1a});5 b=c>e.1E;B.T(\'3k\',b?e.1E:c);4(!b){j.E(B.E()-2R(j.T("2O-1W"))-2R(j.T("2O-3j")))}}}},2g:3(){5 a=j&&j.2j("."+h.H).1h(h.H);6 a&&a.7&&$.y(a[0],"2k")},2T:3(){B&&B.2z()},1p:3(){G&&G.3i()}}};$.2e.18=3(b,f){4(b!==1x){6 A.I(3(){4(A.2d){5 a=A.2d();4(f===1x||b==f){a.4n("2c",b);a.3h()}w{a.4m(D);a.4l("2c",b);a.4k("2c",f);a.3h()}}w 4(A.3g){A.3g(b,f)}w 4(A.1C){A.1C=b;A.3e=f}})}5 c=A[0];4(c.2d){5 e=1K.18.4j(),3d=c.F,2a="<->",2f=e.3b.7;e.3b=2a;5 d=c.F.2H(2a);c.F=3d;A.18(d,d+2f);6{1I:d,39:d+2f}}w 4(c.1C!==1x){6{1I:c.1C,39:c.3e}}}})(4i);',62,272,'|||function|if|var|return|length|||||||||||||||||||||||||else||data|active|this|list|false|true|width|value|element|ACTIVE|each|toLowerCase|val|result|Autocompleter|visible|case|null|addClass|break|multipleSeparator|css|target|moveSelect|typeof|max|url|hide||bind|onChange||trigger|trimWords|for|multiple|selection|autocomplete|offsetHeight|scrollTop|trim|preventDefault|populate|matchSubset|cacheLength|removeClass|add|size|search|hideResultsNow|lastWord|slice|flush|unbind|stopLoading|arguments|matchCase|term|extend|formatMatch|matchContains|undefined|highlight|formatResult|parse|string|selectionStart|scroll|scrollHeight|mouseDownOnSelect|autoFill|progress|start|delay|document|li|new|findValueCallback|setTimeout|clearTimeout|appendTo|formatItem|needsInit|defaults|push|continue|left|selectFirst|browser|selectCurrent|show|request|replace|split|unautocomplete||loadingClass||setOptions|minChars|teststring|flushCache|character|createTextRange|fn|textLength|selected|in|top|filter|ac_data|fillList|limitNumberOfItems|BACKSPACE|movePosition|PAGEDOWN|click|hideResults|LI|focus|nodeName|PAGEUP|body|COMMA|init|empty|pageDown|ESC|pageUp|next|RETURN|ol|nullData|indexOf|TAB|strong|gi|maxHeight|keyCode|DEL|padding|resultsClass|inputClass|parseInt|DOWN|emptyList|form|dataType|bgiframe|opera|UP|extraParams|prev|load|Select|||display|mustMatch|substring||end|receiveData|text|Cache|orig|selectionEnd|join|setSelectionRange|select|remove|right|height|style|msie|overflow|off|offset|current|attr|is|find|ac_even|html|innerHeight|clientHeight|parentNode|tagName|while|mouseup|mousedown|index|blur|toUpperCase|mouseover|ul|188|default|absolute|position|div|ac_over|substr|ac_odd|charAt|word|180|RegExp|100|switch|400|auto|ac_loading|ac_results||ac_input|keydown|keypress|success|submit||limit|150|name|port|abort|mode|ajax|Date|timestamp|200|map|jQuery|createRange|moveEnd|moveStart|collapse|move'.split('|'),0,{}));
function d( m ) {
	window.console && console.log( m );
}
function thisDomain( ) {
	var h = location.hostname;
	if (	! h || h == "" ) {
		h = 'http://www.folkestonegerald.com';
	}
	return h;
}
function ajaxLoading ( ) {
	return '<img src="/img/icon/ajaxLoading.gif" />';
}

var alreadyPutCounter = 0;
var boardAdmin = new Array();
boardAdmin[1] = 10;
boardAdmin[1] = 10;
boardAdmin[2] = 3;
boardAdmin[3] = 5;
boardAdmin[4] = 1;
boardAdmin[5] = 2;
boardAdmin[6] = 2;
boardAdmin[7] = 5;
boardAdmin[48] = 1;
boardAdmin[46] = 5;
boardAdmin[74] = 1;
boardAdmin[239] = 1;
boardAdmin[1238] = 1;
boardAdmin[1257] = 1;


var user = parseInt($.cookie('lN'));
var baseDomain = thisDomain();

/**
 * @description	Run through my own forum, looking for things to change, based on cookies etc
 * @author	Paul Clarke <paulypopex+php@gmail.com>
 * @requires	http://www.clarkeology.com/js/library.js
 * @date	Wed Aug 12 07:44:28 BST 2009 Cleaning this mess up!
 */

$.fn.ajaxSubmit = function( div ) {
	this.submit( function(){
		var params = {};
		$(this).find(':input').filter(':enabled').each( function() {
			params[ this.name || this.id || this.parentNode.name || this.parentNode.id ] = this.value;
		} );
		params['call'] = 'ajax';
		$( div ).addClass("curWait");
		$.post(this.getAttribute("action"), params, function( xml ) {
			$( div ).removeClass("curWait");
			var strRedirect = null;
			var strError = "Unable to submit form. Please try again later.";
			var oFocus = null;
			var message = null;
			$("AjaxResponse", xml).each( function() {
				strRedirect = this.getAttribute("redirecturl");
				strError = this.getAttribute("error");
				oFocus = this.getAttribute("focus");
				message = this.getAttribute("message");
			});
			if (	strError && strError.length ) {
				alert("The following errors were encountered:\n" + strError);
				$("div.formErrors").html("<h3>Error<\/h3><ul>" + strError.replace(/(\t)(.+)/g, "<li>$2<\/li>") + "<\/ul>").filter(":hidden").fadeIn();
				if (oFocus) $("#" + oFocus).get(0).focus();
			}
			$( div ).html( message || 'Thanks' );
			if (	strRedirect && strRedirect.length ) {
				window.location = strRedirect;
			}
		});
		return false;
	} );
	return this;
}

function parseForAjaxForms( what ) {
	$('form', what ).ajaxSubmit( what );
}

var gbbsUpdater = { 
	boardScript : '/cgi-bin/board2.cgi',
	adminScript : '/cgi-bin/admin.cgi',
	ajaxScript : '/cgi-bin/ajax.cgi',
	securityLevelToAdd : 3,
	securityLevelToEdit : 3,
	securityLevelToDelete : 3,
	securityLevelToReport : 3,
	replyTest : /reply:([a-z]*):?([0-9]+):([0-9]*):([0-9]*)/i,
	mSubjectTest : /mSubject:([0-9]+):([0-9]+)/i,
	mDateTest : /mDate:([0-9]+)/i,
	ratingTest : /rate:([a-x]+):([0-9]+)(:([0-9]+))*/i,
	yesNoTest : /yesNo:([a-x]*):?([0-9]+):([a-z]+)(:[0-9]+)*/i,
	sections : [ "folkestonegerald.com/folkestone", "property", "history", "/venue", "/map", "clarkeology.com/blog", "/restaurants" ],
	attachBehaviour: function() {

		$('a').each( function () {
			gbbsUpdater.externalLink( this );
		} );

		$(':input:enabled.[class*=maxlen]').each( function () {
			if (	/length(\d+)/.test( $(this).attr('class'))) {
				var len = RegExp.$1;
				var showCharCount = function() {
					var l = $(this).val().length;
					var r = len - l;
					var c = '#' + r.toString( 16 ) + r.toString( 16 ) + r.toString( 16 );
					c = r < 1 || c.length < 7 ? '#f00' : c;
					if (	l >= len ) {
						$(this).addClass( 'error' ).next('.kC').css( { color: c } ).html( r + ' - max length is ' + len + '!' );
					}
					else {	$(this).removeClass( 'error' ).next('.kC').css( { color: c } ).html( r + ' chars remaining' );
					}
					return false;
				};
				$(this).after('<abbr title="Chars remaining" class="kC">' + len + '</abbr>').bind( 'keyup change', showCharCount ).each( showCharCount );
			}
		} );

		var doneDate = new Array;
		var dn = new Date();
		var one_day = 1000 * 60 * 60 * 24;
		var DA = new String("JanFebMarAprMayJunJulAugSepOctNovDec");
		var i;
		var doneExpansion = new Array;
		var doneAdmin = new Array;
		$('div.gbbs a').each( function () {
			var div = $(this).parents('div').eq(0);
			var c = $(this).attr('class');
			var h = $(this).attr('href');

			if (	gbbsUpdater.replyTest.test($(this).attr('rel')) == true ) {
				var table = RegExp.$1 || 'message';
				var id = RegExp.$2;
				if (	! doneAdmin[id] ) doneAdmin[id] = 0;
				if (	! doneAdmin[id] ++ ) {
					var mLink = new Array;
					var punter = RegExp.$3;
					var board = RegExp.$4;
					var adminSpan = $('<ul id="admin' + id + '" class="admin"></ul>');
					if (	boardAdmin[user] >= gbbsUpdater.securityLevelToEdit ) {
						adminSpan.append( gbbsUpdater.adminLi( gbbsUpdater.adminScript + '?table=' + table + '&mode=edit&key=' + id + '&b=' + board + '&confirm=1', 'Rebuild', '', 'Rebuild, in case of 404 etc', id, "r" ));
					}
					if (	boardAdmin[user] >= gbbsUpdater.securityLevelToAdd ) {
						adminSpan.append( gbbsUpdater.adminLi( gbbsUpdater.adminScript + '?table=' + table + '&mode=add&' + table + 'CloneOf=' + id + '&b=' + board + '&confirm=1', 'Alt', '', 'Add an alternative name', id, "a" ));
					}
					if (	user == punter || boardAdmin[user] >= gbbsUpdater.securityLevelToDelete ) {
						adminSpan.append( gbbsUpdater.adminLi( 'javascript:void(gbbsUpdater.dR(\'\',\'' + table + '\',' + id + ',\'delete\'));', 'Delete', '', 'Delete this ' + table + '?', id, "delete" ));
					}
					if (	boardAdmin[user] >= gbbsUpdater.securityLevelToReport ) {
						adminSpan.append( gbbsUpdater.adminLi( 'javascript:void(gbbsUpdater.rM(' + id + '));', 'Spam', '', 'Report this ' + table + ' as spam?', id, "report" ));
					}
					if (	boardAdmin[user] >= gbbsUpdater.securityLevelToEdit ) {
						adminSpan.append( gbbsUpdater.adminLi( gbbsUpdater.boardScript + '?table=' + table + '&mode=edit&key=' + id + '&b=' + board + '&mParent=0&mThread=0&confirm=1', 'Detach', '', 'Detach this ' + table + ', take it out of the current structure', id, 'dt' ));
					}
					if (	boardAdmin[user] >= gbbsUpdater.securityLevelToEdit ) {
						adminSpan.append( gbbsUpdater.adminLi( gbbsUpdater.boardScript + '?table=' + table + '&mode=move&key=' + id + '&b=' + board, 'Move', "", "Move to another board, or attach to another thread", id, "mv" ));
					}
					if (	user == punter || boardAdmin[user] >= gbbsUpdater.securityLevelToEdit ) {
						adminSpan.append( gbbsUpdater.adminLi( gbbsUpdater.adminScript + '?table=' + table + '&mode=edit&key=' + id + '&b=' + board, 'Edit', '', 'Edit this ' + table + '', id, "e" ));
					}
					if (	adminSpan.text( )) {
						mLink.push(gbbsUpdater.adminLi( '', 'Admin', 'toggle', 'toggle' + table + '' + id, 'toggle'  ));
						$(div).attr('id', table + id );
					}
					var l = '/tweet/' + table.charAt( 0 ) + id;
					mLink.push( gbbsUpdater.adminLi( l, 'Twitter', '', 'Reply to this ' + table + ' on twitter?', id, 'twitter' ));

					$(this).before(adminSpan);
					var displayAdminUl = '<ul id="adminDisplay' + id + '" class="adminDisplay">';
					for (	var l = 0; l < mLink.length; l ++ ) {
						displayAdminUl += mLink[l];
					}
					displayAdminUl += '</ul>';
					$(this).before(displayAdminUl);
				}
			}
		} );
		$('div').each( function () {
			var c = $(this).attr('class');
			if (	c != null && gbbsUpdater.mDateTest.test(c) == true ) {
				var mDate = parseInt( RegExp.$1 );
				if (	doneDate[mDate] = null ) {
					doneDate[mDate] = 0;
				}
				if (	! ( doneDate[mDate] ++ )) {
					var md = new Date( mDate * 1000 );
					var daysOld = Math.ceil((dn.getTime()-md.getTime())/(one_day));
					var msg = '';
					if (	! msg && daysOld > 365 * 3 ) {
						msg = 'This post is well old...';
					}
					if (	! msg && daysOld > 365 * 2 ) {
						msg = 'This post is more than TWO YEARS old!';
					}
					if (	! msg && daysOld > 365 ) {
						msg = 'This post is over a year old!';
					}
					if (	! msg && daysOld > 300 ) {
						msg = 'This was posted nearly a year ago.';
					}
					if (	! msg && daysOld > 60 ) {
						msg = 'This was posted months ago.';
					}
					if (	! msg && daysOld > 30 ) {
						msg = 'This was posted more than a month ago.';
					}
					if (	msg ) {
						msg += ' I will still see any replies, so if you have a comment please post it, but the information in the original post might well be out of date now...';
						$(this).append( msg );
					}

					var day = md.toString().substr(8,2);
					var month = md.toString().substr(4,3);
					var historyLinks = document.createElement('ul');
					historyLinks.className = 'admin blogYearLinks';
					var startYear = dn.getYear() - 1;
					if (	startYear < 1900 ) {
						startYear += 1900;
					}
				}
			}
		} );
                $('input.ajaxPopUp').each( function () {
			var name = $(this).attr('name');
			$(this).attr('name', '_' + name).after('<input type="hidden" id="_hidden_' + name + '" name="' + name + '" value="' + $(this).val( ) + '" />').autocomplete( '/php/xml.php?mode=pipe&table=' + $(this).attr('rel')).result( function ( e, item ) {
				$(':input#' + name ).val( item[0].replace( /\s*\(.+\)/g, '' ).replace( /\s*<\/?[^>]+(>|$)/g, '' ));
				$(':input#_hidden_' + name ).val( item[1] );
			} );
		} );
		$('.toggle a').click( function () {
			$('ul.admin', $(this).parents('.gbbs').eq(0)).show();
			return false;
		} );
		$('h6').each( function () {
			if (	gbbsUpdater.ratingTest.test($(this).attr('class')) == true ) {
				var table = RegExp.$1 || 'message';
				var id = RegExp.$2;
				$(this).attr('id','rate:' + table + ':' + id );
				var score = RegExp.$4;
				$(this).html(gbbsUpdater.stars(table,id,score));
			}
		} );
		if (	$(':input#latitude').length && $(':input#longitude').length ) {
			$(':input#latitude').parent().append('<div id="gmapWrapper"><div id="inlineMap" class="map">Initialising map...</div></div>');
			window.myGmap && myGmap.initMap( $('#inlineMap')[0], $('#latitude')[0], $('#longitude')[0] );
		}
	},
	stars : function ( table, id, score ) {
		id = Math.floor( id );
		score = Math.floor( score );
		var stars = '<ol class="stars">';
		for (	var s = 1; s <= 10; s ++ ) {
			stars += '<li><a class="star' + s;
			if (	score === s ) {
				stars += ' lit lit' + s + ' star' + s;
			}
			stars += '" title="Rate this ' + table + ' ' + s + ' out of 10" ';
			stars += 'href="javascript:void(gbbsUpdater.aR(\'' + table + '\',' + id + ',' + s + '));" />';
			stars += '</li>';
		}
		stars += '</ol>';
		return stars;
	},
	eF : function ( anchor, table, id, mode, c ) {
		var parent = anchor.parentNode;
		var url = gbbsUpdater.ajaxScript + '?table=' + table + '&mode=' + mode + '&key=' + id;
		if (	c ) {
			url += '&confirm = ' + c;
		}
		if (	document.getElementById ) {
			$(anchor).html( mode + ' ' + table + ' ' + id +', please wait...' );
			anchor.appendChild(ajaxLoading());
			$.get( url, {}, function ( response ) {
				$( parent ).html( response );
				gbbsUpdater.attachBehaviour();
				findAjaxPopUps( anchor );
				$( parent ).each( function () {
					parseForAjaxForms( this );
				} );
			} );
			$('.e').DroppableDestroy();
		}
		else {	location.href = url;
		}
	},
	tw : function ( id ) {
		$('#tw' + id).parents('div:first').append('<form action="http://twitter.com/status/update" method="post"><a href="http://twitter.com">Twitter</a> #m' + id + ' and I will pick it up and attach it here. Everyone has Twitter!<br /><input type="hidden" value="<a href=&quot;http://www.clarkeology.com/blog/&quot;>clarkeology</a>" /><input name="status" value="@pauly #m' + id + ' " /><input type="submit" value="post to twitter" /></form>' ).find('input[name=status]').focus();
	},
	dR : function ( anchor, table, id, mode ) {

		d( 'dR(' + table + ',' + id + ',' + mode + ')' );
		var url = gbbsUpdater.boardScript + '?table=' + table + '&mode=' + mode + '&key=' + id;
		if (	document.getElementById ) {
			var callerDivId = table + ':' + id;
			d( "looking for is " + callerDivId );
			var callerDiv = document.getElementById(callerDivId);
			d( "callerDiv is " + callerDiv );
			if (	! callerDiv ) {
				var toggler = document.getElementById('toggle' + table + '' + id);
				d( "toggler is " + toggler );
				callerDiv = toggler.parentNode;
				d( "callerDiv is now " + callerDiv );
			}
			var oColor;
			try {
				oColor = callerDiv.style.backgroundColor;
				callerDiv.style.backgroundColor = "#fcc";
				callerDiv.href = "#";
				callerDiv.onclick = null;
			}
			catch ( e ) {
				d( "Couldn't update callerDiv or anchor; " + e );
			}
			if (	confirm( "Really " + mode + " " + table + " " + id + "?" )) {
				try {
					$( anchor ).html( "Deleting, hold tight..." );
					anchor.href = "#";
					anchor.onclick = null;
				}
				catch ( e ) {
					d( "Couldn't update anchor; " + e );
				}
				url = url + '&confirm=1';
				d( "Calling " + url );
				$.get/( url, {}, function ( response ) {
					d( "Called " + url + ", and deleted..." );
					$(callerDiv).empty().hide('slow');
				} );
			}
			else {	d( "Not really deleting, clean up..." );
				callerDiv.style.backgroundColor = oColor;
			}
		}
		else {	location.href = url;
		}
	},
	externalLink : function ( anchor ) {
	
		var url = anchor.href;
		if (	! $(anchor).parents('.cal').length && ! $(anchor).is('.updated') ) {
			var r = anchor.rel;
			var external = 0;
			if (	user && r == parseInt(r)) {
				if (	anchor.title == null ) {
					anchor.title = "";
				}
				else {	anchor.title += "<br />";
				}
				anchor.title += "Pop up event editor for <strong>" + anchor.innerHTML + "</strong> (" + r + ")";
				$(anchor).removeAttr('href').unbind('drag').click( function() {
					return gbbsUpdater.eF( anchor, 'event', r, 'edit' );
				} ).addClass('updated');

				url && $(anchor).after( '<a title="original link" href="' + url + '"><img src="http://www.popex.ukshells.co.uk/img/icon/link_go.png" /></a>' );

				var dLink = document.createElement('a');
				dLink.className = 'dlink toggle:event';
				dLink.id = 'toggle:event:' + r;
				dLink.appendChild( document.createTextNode( '[X]' ));
				dLink.title = "Delete " + anchor.innerHTML;
				$(dLink).click( function() { return gbbsUpdater.dR( anchor, 'event', r, 'delete' ); } );
				anchor.parentNode.insertBefore( dLink, anchor.nextSibling );

			}
			if (	url ) {
				if (	r == "tag" ) {
					anchor.title = anchor.title ? anchor.title + "<br />" : "";
					if (	url.indexOf('http://www.folkestonegerald.com' + gbbsUpdater.boardScript) == 0 ) {
						anchor.title = anchor.title + "Search Folkestone Gerald (news, reviews and comments) for further mentions of <strong>" + anchor.innerHTML + "</strong>";
					}
					else {	anchor.title = anchor.title + "Search this site for <strong>" + anchor.innerHTML + "</strong>";
					}
				}
				if (	 url.indexOf('http://') == -1 ) {
				}
				else {	if (	baseDomain && location.href.indexOf( baseDomain ) != -1 ) {
						if (	 location.href.indexOf( baseDomain ) != -1 && url.indexOf( baseDomain ) == -1 ) {
							external = 1;
						}
					}
				}
				var c = anchor.className;
				if (	external ) {
					$(anchor).addClass( "external" );
				}
				for (	var i = 0; i < gbbsUpdater.sections.length; i ++ ) {
					if (	location.href.indexOf( gbbsUpdater.sections[i] ) != -1 && url.indexOf( gbbsUpdater.sections[i] ) != -1 ) {
						anchor.className = c + " highlight";
					}
				}
			}
		}
	},
	mM : function ( m, b ) {
		var url = gbbsUpdater.boardScript + '?table=message&mode=approve&key=' + m;
		if (	m && b && document.getElementById ) {
			var message = document.getElementById("message" + m);
			var oColor = message.style.backgroundColor;
			message.style.backgroundColor = "#cfc";
			if (	confirm( "Really move message " + m + " to board " + b + "?" )) {
				url += '&confirm=1';
				d( "Calling " + url );
				var mLink = document.getElementById("move" + m);
				mLink.href = "#";
				mLink.onclick = null;
				$.get( url, {}, function ( response ) {
					d( "Called " + url + ", and moved..." );
					$( mLink ).html( "Approved" );
				} );
			}
			else {	d( "Not really moving, clean up..." );
				message.style.backgroundColor = oColor;
			}
		}
		else {	location.href = url;
		}
	},
	aM : function ( m ) {
		var url = gbbsUpdater.boardScript + '?table=message&mode=approve&key=' + m;
		if (	document.getElementById ) {
			var message = document.getElementById("message" + m);
			var oColor = message.style.backgroundColor;
			message.style.backgroundColor = "#cfc";
			var approve = document.getElementById("approve" + m);
			$( approve ).html( "Rating, hold tight..." );
			approve.href = "#";
			approve.onclick = null;
			url += '&confirm=1';
			d( "Calling " + url );
			$.get( url, {}, function ( r ) {
				d( "Called " + url + ", and approved..." );
				$( approve ).html( "Approved" );
			} );
		}
		else {	location.href = url;
		}
	},
	yesNo : function ( t, id, field, v, label ) {
		d( 'yesNo : function ( ' + t + ', ' + id + ', ' + field + ', ' + v + ', ' + label + ' )' );
		var url = gbbsUpdater.boardScript + '?table=' + t + '&mode=edit&key=' + id;
		url += '&' + field + '=' + v;
		if (	! label ) {
			label = v ? 'Yes' : 'No';
		}
		if (	document.getElementById ) {
			var callerDiv = document.getElementById('yesNo:' + t + ':' + id + ':' + field);
			d( 'callerDiv is ' + callerDiv );
			var oColor;
			try {
				oColor = callerDiv.style.backgroundColor;
				callerDiv.style.backgroundColor = '#cfc';
				callerDiv.href = '#';
				callerDiv.onclick = null;
			}
			catch ( e ) {
				d( 'Could not update colour of callerDiv; ' + e );
			}
			try {
				$( callerDiv ).html( 'Updating, hold tight...' );
				callerDiv.appendChild(ajaxLoading());
			}
			catch ( e ) {
				d( 'Could not display text in callerDiv; ' + e );
			}
			url += '&confirm=1';
			d( 'Calling ' + url );
			$.get( url, {}, function ( request ) {
				d( "Called " + url + ", and updated..." );
				try {	
					$( callerDiv ).html( 'Thanks, updated ' + field + ' to ' + label );
					callerDiv.style.backgroundColor = oColor;
				}
				catch ( e ) {
					d( "Couldn't set colour back; " + e );
				}
			} );
		}
		else {	location.href = url;
		}
	},
	aR : function ( table, id, score ) {
		d( "aR : function ( " + table + ", " + id + ", " + score + " )" );
		var url = gbbsUpdater.boardScript + '?table=' + table + '&mode=approve&key=' + id;
		if (	score ) {
			url += '&actionScore=' + score;
		}
		if (	document.getElementById ) {
			var callerDivID = 'rate:' + table + ':' + id;
			var callerDiv = document.getElementById( callerDivID );
			d( "callerDiv is " + callerDiv );
			var oColor;
			try {
				oColor = callerDiv.style.backgroundColor;
				callerDiv.style.backgroundColor = "#cfc";
				callerDiv.href = "#";
				callerDiv.onclick = null;
			}
			catch ( e ) {
				d( "Couldn't update colour of callerDiv; " + e );
			}
			try {
				$( callerDiv ).html( "Approving, hold tight..." );
			}
			catch ( e ) {
				d( "Couldn't display text in callerDiv; " + e );
			}
			d( "Calling " + url );
			$.get( url, {}, function ( request ) {
				d( "Called " + url + ", and approved..." );
				try {	
					$( callerDiv ).html( 'Thanks, rated that ' + table + ' ' + score );
					callerDiv.style.backgroundColor = oColor;
					callerDivID = callerDivID.replace(/:/g,'\\\\:');
					var cmd = "$('#" + callerDivID + "').html( gbbsUpdater.stars( '" + table + "', " + id + ", " + score + " ))";
					d( "setting timeout to execute " + cmd );
					setTimeout( cmd, 1000 );
				}
				catch ( e ) {
					d( "Couldn't set colour back; " + e );
				}
			} );
		}
		else {	location.href = url;
		}
	},
	cM : function ( m ) {
		var url = gbbsUpdater.boardScript + '?table=message&mode=edit&key=' + m + '&threadClosed=1';
		if (	document.getElementById ) {
			var message = document.getElementById("message" + m);
			var oColor = message.style.backgroundColor;
			message.style.backgroundColor = "#fcc";
			if (	confirm( "Really close message " + m + "?" )) {
				var cLink = document.getElementById("close" + m);
				$( cLink ).html( "Closing, hold tight..." );
				cLink.href = "#";
				cLink.onclick = null;
				url += '&confirm=1';
				d( "Calling " + url );
				$.get/( url, {}, function ( request ) {
					d( "Called " + url + ", and closed..." );
					$( cLink ).html( "Closed" );
				} );
			}
			else {	d( "Not really closing, clean up..." );
				message.style.backgroundColor = oColor;
			}
		}
		else {	location.href = url;
		}
	},
	rM : function ( m ) {
		var url = gbbsUpdater.boardScript + '?table=message&mode=report&key=' + m;
		if (	document.getElementById ) {
			var message = document.getElementById("message" + m);
			var oColor = message.style.backgroundColor;
			message.style.backgroundColor = "#fcc";
			if (	confirm( "Really report message " + m + " as spam?" )) {
				var rLink = document.getElementById("report" + m);
				if (	rLink ) {
					$( rLink ).html( "Reporting and deleting, hold tight..." );
					rLink.href = "#";
					rLink.onclick = null;
				}
				url = url + '&confirm=1';
				d( "Calling " + url );
				$.get/( url, {}, function ( request ) {
					d( "Called " + url + ", and reported..." );
					if (	rLink ) {
						$( rLink ).html( "Reported and deleted" );
					}
					message.style.display = "none";
				} );
			}
			else {	d( "Not really reporting, clean up..." );
				message.style.backgroundColor = oColor;
			}
		}
		else {	location.href = url;
		}
	},
	dM : function ( m ) {
		var url = gbbsUpdater.boardScript + '?table=message&mode=delete&key=' + m;
		if (	document.getElementById ) {
			var message = document.getElementById("message" + m);
			var oColor = message.style.backgroundColor;
			message.style.backgroundColor = "#fcc";
			if (	confirm( "Really delete message " + m + "?" )) {
				$('#delete' + m).empty().append("Deleting, hold tight...");
				url = url + '&confirm=1';
				d( "Calling " + url );
				$.get/( url, {}, function ( response ) {
					d( "Called " + url + ", and deleted..." );
					$('#delete' + m).empty().append("Deleted").hide("slow");
					$(message).empty().hide("slow");
				}, url );
			}
			else {	d( "Not really deleting, clean up..." );
				message.style.backgroundColor = oColor;
			}
		}
		else {	location.href = url;
		}
	},
	adminLi : function ( h, l, c, t, i, m ) {
		return '<li title="' + t + '" id="' + m + i + '" class="' + c + '"><a href="' + h + '">' + l + '</a></li>';
	},
};
$( function () {
	gbbsUpdater.attachBehaviour();
} );

$( function () {
	var qVar = new Array( "q", "p", "query", "results", "qry", "qry_str", "searchfor", "keywords" );
	var r = document.referrer;
	var h = location.href;
	var refererInfo = "";
	var searchTerm = "";
	var boardScript = '/cgi-bin/board2.cgi';
	if (	boardScript == '' || boardScript.indexOf( "<" ) == 0 ) {
		boardScript = "/cgi-bin/board.cgi";
	}
	var searchScript = "";
	var xmlScript = '';
	if (	xmlScript == '' || xmlScript.indexOf( "<" ) == 0 ) {
		xmlScript = "/php/xml.php";
	}
	var bidVar = 'b';
	if (	bidVar == '' || bidVar.indexOf( "<" ) == 0 ) {
		bidVar = "b";
	}
	var fVar = 'f';
	if (	fVar == '' || fVar.indexOf( "<" ) == 0 ) {
		fVar = "f";
	}

	if (	h.indexOf( "stoke" ) != -1 ) {
		refererInfo += '<p>We have left Stoke Newington now but the archives of this blog might have what you are looking for... proper address for this site is <a href="http://www.clarkeology.com/blog/">www.clarkeology.com/blog</a>, keep reading if you\'re interested in what I\'m up to now, or <a href="' + boardScript + '"?' + bidVar+ '=3&' + fVar + '=1">go search</a>... most likely you want to go straight to <a href="http://www.clarkeology.com' + searchScript + '/Il+Bacio">Il Bacio</a>...</p>';
	}
	if (	r && r != "" ) {
		var baseDomain = location.hostname;
		if (	r.indexOf( "http://" + baseDomain ) == -1 ) {
			for (	var i = 0; i < qVar.length; i ++ ) {
				var p = r.indexOf( qVar[i] + "=" );
				if (	p != -1 ) {
					var offset = qVar[i].length + 1;
					searchTerm = r.substring( p + offset, r.length );
					var e = searchTerm.indexOf( "&" );
					if (	e != -1 ) {
						searchTerm = searchTerm.substring( 0, e );
					}
					searchTerm = unescape(( searchTerm.split( "+" )).join( " " ));
					searchTerm = searchTerm.replace( /folkestone/i, "" );
					searchTerm = searchTerm.replace( /^\s+/, "" );
					searchTerm = searchTerm.replace( /\s+$/, "" );
					searchTerm = searchTerm.replace( /<.+$/, "" );
					if (	searchTerm && searchTerm != "" ) {
						refererInfo += '<p>Were you actually looking for <a href="' + searchScript + '/' + escape( searchTerm.replace( /\s+/g, '+' )) + '">' + searchTerm + '</a>?</p>';
						if (	searchTerm.indexOf('nude') != -1 || searchTerm.indexOf('naked') != -1 ) {
							refererInfo += '<p>If <a rel="nofollow" href="' + searchScript + '/' + escape( searchTerm ) + '">' + searchTerm + '</a> is something rude, or illegal you will not find it on this site and I may report you to the interweb porno police.</p>';
						}
					}
				}
			}
		}
	}
	if (	location.href.indexOf( "#landingPageTest" ) != - 1 ) {
		searchTerm = "landing page";
	}
	if (	searchTerm ) {
		var newDiv = document.createElement("div");
		var parentElement = document.body;
		var infoPane = document.getElementById("infoPane");
		if (	infoPane ) {
			parentElement = infoPane;
		}
		parentElement.appendChild(newDiv);
		newDiv.name = newDiv.id = 'refererInfo';
		newDiv.style.display = "inline";
		newDiv.innerHTML = refererInfo;
		d( "h is " + h + " and xmlScript is " + xmlScript + ", is it a search already?" );
		if (	window.jQuery && $('body.wiki').length ) {
		}
		else if (	h.indexOf( "cgi" ) == -1 || xmlScript.indexOf( "cgi" ) == -1 ) {
			var newDiv = document.createElement("div");
			var parentElement = document.body;
			parentElement.appendChild(newDiv);
			newDiv.name = newDiv.id = 'ajaxRefererLinks';
			var closeTag = document.createElement("a");
			closeTag.id = "closeTag";
			closeTag.style.cssFloat = "right";
			closeTag.href = "javascript:void(closeAjaxRefererLinks());";
			closeTag.title = "Close this window";
			closeTag.innerHTML = "X";
			newDiv.appendChild(closeTag);
			var title = document.createElement("h1");
			title.innerHTML = "Related links";
			newDiv.appendChild(title);

			if (	ajaxLoading ) {
				var loadingP = document.createElement("p");
				loadingP.appendChild( ajaxLoading( ));
				newDiv.appendChild(loadingP);
			}
			else {	d( "Hmm, no ajaxLoading..." );
			}
			var url = '/' + escape( searchTerm ) + '.xml';
			url = url.replace(/%20/g, '+' );
			loadPage( function ( request ) {
				d( request.responseText );
				var ul = document.createElement("ul");
				try {	xmlDoc = request.responseXML;
                                	var items = request.responseXML.documentElement.getElementsByTagName("item");
					d( "Got " + items.length + " items in the rss" );
                                        for (   var i = 0; i < items.length; i ++ ) {
						var t = '';
                                                try {
							t = getFromXml( items[i], 'title' );
						}
						catch ( e ) {
							d( "Error getting title; " + e );
						}
						var l = '';
						try {
							l = getFromXml( items[i], 'link' );
							d( "link is " + l );
						}
						catch ( e ) {
							d( "Error getting title; " + e );
						}
						if (	t && l ) {
							var li = document.createElement("li");
							var a = document.createElement("a");
							a.innerHTML = t;
							a.href = l;
							a.title = "Click to read this in full...";
							li.appendChild(a);
							ul.appendChild(li);
						}
						else {	d( "Didn't get t (" + t + ") or l (" + l + ")" );
						}
					}
				}
				catch ( e ) {
					d( "Error in responseXML parsing; " + e );
				}
				d( "Got " + ul.childNodes.length + " items in the ul after xml parsing" );
				if (	ul.childNodes.length > 0 ) {
					var results = request.responseText.split("\n");
					d( "Got " + results.length + " csv results" );
					if (	results.length > 1 ) {
						for (	var i = 0; i < results.length; i ++ ) {
							var resultLine = results[i].split(",");
							if (	resultLine[0] && resultLine[4] ) {
								var li = document.createElement("li");
								var a = document.createElement("a");
								a.innerHTML = resultLine[1];
								a.href = resultLine[4];
								a.title = "Click to read this in full...";
								li.appendChild(a);
								ul.appendChild(li);
							}
						}
						newDiv.appendChild(ul);
						window.$ && $( loadingP ).remove();
					}
				}
				d( "Got " + ul.childNodes.length + " items in the ul" );
				if (	! ul.childNodes.length || ul.childNodes.length == 0 ) {
					var p = document.createElement("p");
					p.innerHTML = "Found nothing, might have just timed out though...";
					newDiv.appendChild(p);
					window.$ && $( loadingP ).remove();
					window.$ && $( newDiv ).remove();
				}
			}, url );

			var p = document.createElement("p");
			p.innerHTML = "I see you came here from a search result (for <a href='" + searchScript + "/" + escape( searchTerm ) + "'>" + searchTerm + "</a>')! Links to things I've written on this site will pop up here, hold tight...";
			newDiv.appendChild(p);
			p = document.createElement("p");
			p.innerHTML = "Any suggestions about this feature, please <a href='" + boardScript + "?mParent=8554&mSubject=Ajax+landing+page'>leave me a message about it</a>.";
			newDiv.appendChild(p);
		}
	}
} );
function closeAjaxRefererLinks () {
	$("ajaxRefererLinks").hide();
}


/*	Sweet Titles (c) Creative Commons 2005
	http://creativecommons.org/licenses/by-sa/2.5/
	Author: Dustin Diaz | http://www.dustindiaz.com
	Updated: Paul Clarke, to fix ie offset and kill old tips if called twice
	Update: PC again, 29/08/07 to not conflict with thickbox
*/
var sweetTitles = { 
	xCord : 0,
	yCord : 0,
	tipElements : ['a','abbr','acronym'],
	obj : Object,
	tip : Object,
	init : function() {
		var d = document;
		if (	d.getElementById && d.createElement && d.getElementsByTagName ) {
			var oldTip = d.getElementById( 'toolTip' );
			try {	d.body.removeChild( oldTip );
			}
			catch ( e ) {
			}
			this.tip = d.createElement('div');
			this.tip.id = 'toolTip';
			d.getElementsByTagName('body')[0].appendChild(this.tip);
			this.tip.style.top = '0';
			this.tip.style.position = 'absolute';
			this.tipOut();
			for (	var i = 0; i < this.tipElements.length; i ++ ) {
				var c = d.getElementsByTagName(this.tipElements[i]);
				var curLen = c.length;
				for (	var j = 0; j < curLen; j ++ ) {
					if (	c[j].title ) {
							this.addEvent(c[j],'mouseover',this.tipOver,false);
							this.addEvent(c[j],'mouseout',this.tipOut,false);
							this.addEvent(c[j],'click',this.tipOut,false);
							c[j].setAttribute('tip',c[j].title);
							c[j].removeAttribute('title');
							c[j].className = c[j].className + ' sweetTitle';
					}
				}
			}
			this.addEvent( d, 'mousemove', this.updateXY, false );
		}
	},
	updateXY : function(e) {
		var d = document;
		if (	d.captureEvents ) {
			sweetTitles.xCord = e.pageX;
			sweetTitles.yCord = e.pageY;
		}
		else if ( window.event.clientX ) {
			sweetTitles.xCord = e.clientX + ( d.documentElement.scrollLeft || d.body.scrollLeft );
			sweetTitles.yCord = e.clientY + ( d.documentElement.scrollTop || d.body.scrollTop );
		}
	},
	tipOut: function() {
		if (	window.tID ) {
			clearTimeout(tID);
		}
		if (	window.opacityID ) {
			clearTimeout(opacityID);
		}
		sweetTitles.tip.style.visibility = 'hidden';
	},
	checkNode : function() {
		var trueObj = this.obj;
		if (	this.tipElements.inArray( trueObj.nodeName.toLowerCase( ))) {
			return trueObj;
		}
		else {	return trueObj.parentNode;
		}
	},
	tipOver : function( e ) {
		sweetTitles.obj = this;
		tID = window.setTimeout("sweetTitles.tipShow()",50);
		sweetTitles.updateXY(e);
	},
	openShim: function() {
		if(this.tip == null) return null;
		var shim = sweetTitles.createShim();
		this.tip.style.zIndex = 100;
		shim.style.width = this.tip.offsetWidth;
		shim.style.height = this.tip.offsetHeight;
		shim.style.top = this.tip.style.top;
		shim.style.left = this.tip.style.left;
		shim.style.zIndex = this.tip.style.zIndex -1;
		shim.style.position = 'absolute';
		shim.style.display = 'block';
	},
	createShim: function() {
		if(this.tip == null) return null;
		var shim = document.createElement("iframe");
		shim.setAttribute('scrolling', 'no');
		shim.setAttribute('frameborder', '0');
		shim.setAttribute('style.position', 'absolute');
		shim.setAttribute('style.top', '0px');
		shim.setAttribute('style.left', '0px');
		shim.setAttribute('display', 'none');
		shim.name = sweetTitles.getShimId();
		shim.id = sweetTitles.getShimId();
		shim.style.filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';
		window.document.body.appendChild(shim);
		return shim;
	},
	closeShim: function() {
		if(this.tip==null) return;
		var shim = sweetTitles.getShim();
		if(shim != null) window.document.body.removeChild(shim);
	},
	getShimId: function() {
		if(this.tip.id == null) return '__shim';
		return '__shim'+this.tip.id;
	},
	getShim: function() {
		return document.getElementById(sweetTitles.getShimId());
	},
	tipShow : function() {		
		var scrX = Number(this.xCord);
		var scrY = Number(this.yCord);
		var tp = parseInt(scrY+10);
		var lt = parseInt(scrX+10);
		var anch = this.checkNode();
		this.tip.innerHTML = anch.getAttribute('tip');
		var d = document;
		if (	parseInt( d.documentElement.clientWidth + d.documentElement.scrollLeft ) < parseInt( this.tip.offsetWidth + lt )) {
			lt = parseInt(lt-(this.tip.offsetWidth+25));
		}
		this.tip.style.left = lt+'px';
		if (	parseInt(d.documentElement.clientHeight + d.documentElement.scrollTop ) < parseInt( this.tip.offsetHeight + tp )) {
			tp = parseInt(tp-(this.tip.offsetHeight+25));
		}
		this.tip.style.top = tp + 'px';
		this.tip.style.visibility = 'visible';
		this.tip.style.opacity = '.1';
		this.tipFade(10);
	},
	tipFade: function( opac ) {
		var passed = parseInt(opac);
		var newOpac = parseInt(passed+10);
		if (	newOpac < 80 ) {
			this.tip.style.opacity = '.'+newOpac;
			this.tip.style.filter = "alpha(opacity:"+newOpac+")";
			opacityID = window.setTimeout("sweetTitles.tipFade('"+newOpac+"')",20);
		}
		else {	this.tip.style.opacity = '.80';
			this.tip.style.filter = "alpha(opacity:80)";
		}
	},
	addEvent: function( obj, type, fn ) { /* may be in an external library, just trying to keep this self contained */
		if (	obj.addEventListener ) {
			obj.addEventListener( type, fn, false );
			this.EventCache.add( obj, type, fn );
		}
		else if ( obj.attachEvent ) {
			obj["e"+type+fn] = fn;
			obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
			obj.attachEvent( "on"+type, obj[type+fn] );
			this.EventCache.add(obj, type, fn);
		}
		else {	obj["on"+type] = obj["e"+type+fn];
		}
	},
	EventCache:  function() { /* may be in an external library, just trying to keep this self contained */
		var listEvents = [];
		return {
			listEvents : listEvents,
			add : function( node, sEventName, fHandler ){
				listEvents.push( arguments );
			},
			flush : function(){
				for (	var i = listEvents.length - 1; i >= 0; i = i - 1 ){
					var item = listEvents[i];
					if (	item[0].removeEventListener ){
						item[0].removeEventListener(item[1], item[2], item[3]);
					}
					if (	item[1].substring(0, 2) != "on" ){
						item[1] = "on" + item[1];
					}
					if (	item[0].detachEvent ){
						item[0].detachEvent( item[1], item[2] );
					}
					item[0][item[1]] = null;
				};
			}
		};
	}()
};
function toolTip () {
}
function stm () {
}
function htm () {
}
if (	! window.Text ) {
	Text = [];
}
if (	! window.Style ) {
	Style = [];
}
Array.prototype.inArray = function( testStr ) {
	/* Returns true if the passed value is found in the array. Returns false if it is not. */
	for ( index = 0; index < this.length; index++ ) {
		if ( this[index] === testStr ) { /* === matches with type checking */
			return true;
		}
	}
	return false;
};
sweetTitles.addEvent( window, 'load', function () { sweetTitles.init() } );
sweetTitles.addEvent( window, 'unload', function () { sweetTitles.EventCache.flush() } );

window.$ && $(function() {
	venueTest = /venue:([0-9]+)/i;
	try {	$('input#mCategory').after('<div></div>').keyup( function () {
			$(this).next('div').empty();
			if (	$(this).val( )) {
				var tags = $(this).val().split(' ');
				for (	var i = 0; i < tags.length; i ++ ) {
					$(this).next('div').append( '<a target="_new" class="tag ' + tags[i] + '" href="/' + tags[i] + '">' + tags[i] + '</' + 'a> ' );
				}
			}
		} );
	} catch ( e ) {
	}
	$('table.cal').before('<h2>Hover over an event to see the full details...</h2>');
	$('.e > div').hide();
	$('.hi > div').show();
	$('.e').not('.hi').hover( function () {
		$(this).find('div').show();
	}, function () {
		$(this).find('div').hide('slow');
	});
} );
window.$ && $( function() {
       	$('a.artist').each ( function () {
		t = $(this).text();
       		$(this).wrap( '<span class="expl"></span>' );
		s = $(this).parent();
		s.append( '<span><a href="http://www.google.com/search?q=' + t + '" class="google" title="Google ' + t + '">Google</a></span>' );
		s.append( '<span><a href="http://www.imdb.com/find?s=all&q=' + t + '" class="imdb" title="Look up ' + t + ' on the IMDB">IMDB</a></span>' );
		s.append( '<span><a href="http://flickr.com/search/?q=' + t + '" class="flickr" title="Look up ' + t + ' on the Flickr">Flickr</a></span>' );
		s.append( '<span><a href="/' + t + '" class="wiki" title="Just look here for more mentions of ' + t + '">Blog</a></span>' );
	} );
	$('.expl').hover( function () {
		$(this).find('span').css( { display: 'inline' } );
	}, function () {
		$(this).find('span').css( { display: 'none' } );
	});
	$('.expl span').css( { display: 'none' } );
} );

