(function(){

	function addEvent(obj, type, handler){
		if(!!obj["addEventListener"]){
			obj.addEventListener(type, handler, false);
		}else if(!!obj["attachEvent"]){
			obj.attachEvent("on"+type, handler);
		}		
	}



	function scriptAssest(src, onload){
		var script = document.createElement("script");
		script.type = "text/javascript";
		if(src){ script.src = src };
		if(onload){
			addEvent(script, "load", onload);
			addEvent(script, "readystatechange", function(){ if(script.readyState=='complete'){ onload(); } });
		}
		return script;
		
	}

	// Language specific highlighter
	var sources = {
		"php": "/wp-content/plugins/SyntaxHighlighter/shBrushPhp.js",
		"javascript": "/wp-content/plugins/SyntaxHighlighter/shBrushJScript.js",
		"cpp": "/wp-content/plugins/SyntaxHighlighter/shBrushCpp.js",
		"csharp": "/wp-content/plugins/SyntaxHighlighter/shBrushCSharp.js",
		"java": "/wp-content/plugins/SyntaxHighlighter/shBrushJava.js",
		"vb": "/wp-content/plugins/SyntaxHighlighter/shBrushVb.js",
		"sql": "/wp-content/plugins/SyntaxHighlighter/shBrushSql.js",
		"xml": "/wp-content/plugins/SyntaxHighlighter/shBrushXml.js",
		"delphi": "/wp-content/plugins/SyntaxHighlighter/shBrushDelphi.js",
		"python": "/wp-content/plugins/SyntaxHighlighter/shBrushPython.js",
		"ruby": "/wp-content/plugins/SyntaxHighlighter/shBrushRuby.js",
		"css": "/wp-content/plugins/SyntaxHighlighter/shBrushCss.js"
	}

	addEvent(window, "load", function(){

		var s = document.body.innerHTML;
		var regex = /\<pre .*?c\lass\=\"(\w+)\"/g;
		var langs = s.match(regex); // Search for code block in the page source.
		var	counter = 0,
			onloadFnc = function(){ 
				if(++counter==langs.length){ 
					dp.SyntaxHighlighter.ClipboardSwf = '/wp-content/plugins/SyntaxHighlighter/clipboard.swf';
					dp.SyntaxHighlighter.HighlightAll('code');
				}
			};

		if(langs.length>0){
			var head = document.getElementsByTagName("head")[0];
			head.appendChild( scriptAssest( "/wp-content/plugins/SyntaxHighlighter/shCore.js" ) );
			for(var i=0,len=langs.length,lang;i<len;i++){
				lang = langs[i].replace(regex, "$1"); // Get the language of the code block
				if(sources[lang]){
					head.appendChild( scriptAssest(sources[lang], onloadFnc) );
				}
			}
		}

	});

})();

