//*** This code is copyright 2003 by Gavin Kistner, !@phrogz.net
//*** It is covered under the license viewable at http://phrogz.net/JS/_ReuseLicense.txt
//*** Reuse or modification is free provided you abide by the terms of that license.
//*** (Including the first two lines above in your source code mostly satisfies the conditions.)

AttachEvent(window,'load',function(){
	var codes = document.getElementsByTagName('div');
	for (var i=0,len=codes.length;i<len;i++){
		var code = codes[i];
		if (code.className!='code' || !code.firstChild) continue;
		//alert(code.textContent);
		code.innerHTML=SyntaxColored(code.innerHTML.replace(/<br>/g,"\n").replace(/<BR>/g,"\n")).replace(/\n/,"<br>");    
	}

	function SyntaxColored(js){
		//alert(js);
		if (!js || !js.replace) return "";
		js=js.replace(/\r/g,'\n');
		js=js.replace(/</g,'&lt;').replace(/>/g,'&gt;');

		var parens = /([\]\[(){}]+)/g;
		var comments = /(--.+|-\*(.|\n)+?\*-)/g;		
		var keywords = /\b(function|if|then|end|Game|for|do|local|global|table|getn|math|sin|cos|tan|abs|Game|return|true|false|nil)\b/g;
		var xm_keywords = /\b(Tick|Message|StartTimer|StopTimer|SetTimerDelay|KillPlayer|OnEnter|OnLeave|OnTouch|WinPlayer|SetPlayerPosition|GetPlayerPosition|GetEntityPos|SetEntityPos|PlaySound|PlayMusic|TouchBy|OnEnterBy)\b/g;
		var strings = /((["'])(?:.*?(?:[^\\](?:\\\\)*|[^\\]))?\2)/g;
		var numbers = /\b(-?(?:\d+|\d*\.\d+)\b)/g;

		js=js.replace(strings,'<span class="string">$1<\/span>');
		js=js.replace(parens,'<span class="paren">$1<\/span>');
		js=js.replace(numbers,'<span class="number">$1<\/span>');
		js=js.replace(keywords,'<span class="keyword">$1<\/span>');
		js=js.replace(xm_keywords,'<span class="xm_keyword">$1<\/span>');
		js=js.replace(comments,'<span class="comment">$1<\/span>');
		if (document.all) js=js.replace(/\n/g,"<br>").replace(/  /g," &nbsp;").replace(/\t/g," &nbsp; &nbsp;"); //IE-specific hack
		js=js.replace(/<\/span>\n/g,"<\/span>&nbsp;\n");
		return js;
	}
},false);


function AttachEvent(obj,evt,fnc,useCapture){
	if (!useCapture) useCapture=false;
	if (obj.addEventListener){
		obj.addEventListener(evt,fnc,useCapture);
		return true;
	} else if (obj.attachEvent) return obj.attachEvent("on"+evt,fnc);
	else{
		MyAttachEvent(obj,evt,fnc);
		obj['on'+evt]=function(){ MyFireEvent(obj,evt) };
	}
} 
function MyAttachEvent(obj,evt,fnc){
	if (!obj.myEvents) obj.myEvents={};
	if (!obj.myEvents[evt]) obj.myEvents[evt]=[];
	var evts = obj.myEvents[evt];
	evts[evts.length]=fnc;
}
function MyFireEvent(obj,evt){
	if (!obj || !obj.myEvents || !obj.myEvents[evt]) return;
	var evts = obj.myEvents[evt];
	for (var i=0,len=evts.length;i<len;i++) evts[i]();
}
