function addEvent(elm,evType,fn,capture) {if(!capture)var capture=true;if(elm.addEventListener){elm.addEventListener(evType, fn, capture);return true;}else if(elm.attachEvent){var r = elm.attachEvent('on' + evType, fn);return r;}else{elm['on' + evType]=fn;}}
function findTarget(e){var ele;if(!e)var e=window.event;if(e.target)ele=e.target;else if(e.srcElement)ele=e.srcElement;if(ele.nodeType==3)ele=ele.parentNode;return ele;}
function getAll(e){return e.all?e.all:e.getElementsByTagName('*');}
function getElementsByCSS(selector){if(!document.getElementsByTagName) return new Array();var tks=selector.split(' '),cc=new Array(document);for(var i=0;i<tks.length;i++){tk=tks[i].replace(/^\s+/,'').replace(/\s+$/,'');if(tk.indexOf('#')>-1){var bits=tk.split('#'),tn=bits[0],id=bits[1],el=document.getElementById(id);if(tn && el.nodeName.toLowerCase()!=tn)return new Array();cc=new Array(el);continue;}if(tk.indexOf('.')>-1){var bits=tk.split('.'),tn=bits[0],className=bits[1],fnd=new Array,fc=0;if(!tn) tn='*';for(var h=0;h<cc.length;h++){var es;if(tn=='*')es=getAll(cc[h]);else es=cc[h].getElementsByTagName(tn);for(var j=0;j<es.length;j++){fnd[fc++]=es[j];}}cc=new Array;var ccIndex=0;for(var k=0;k<fnd.length;k++){if(fnd[k].className && fnd[k].className.match(new RegExp('(\\s|^)'+className+'(\\s|$)')))cc[ccIndex++]=fnd[k];}continue;}if(tk.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {var tn=RegExp.$1,an=RegExp.$2,attrOperator=RegExp.$3,av=RegExp.$4,fnd=new Array,fc=0;if(!tn) tn='*';for(var h=0;h<cc.length;h++) {var es;if(tn=='*')es=getAll(cc[h]);else es=cc[h].getElementsByTagName(tn);for(var j=0;j<es.length;j++) {fnd[fc++]=es[j];}}cc=new Array;var ccIndex=0,cf;switch(attrOperator){case '=':cf=function(e){return(e.getAttribute(an)==av);};break;case '~':cf=function(e){return(e.getAttribute(an).match(new RegExp('\\b'+av+'\\b')));};break;case '|':cf=function(e){return(e.getAttribute(an).match(new RegExp('^'+av+'-?')));};break;case '^':cf=function(e){return(e.getAttribute(an).indexOf(av)==0);};break;case '$':cf=function(e){return(e.getAttribute(an).lastIndexOf(av)==e.getAttribute(an).length-av.length);};break;case '*':cf=function(e){return(e.getAttribute(an).indexOf(av)>-1);};break;default:cf=function(e){return e.getAttribute(an);};}cc=new Array;var ccIndex=0;for(var k=0;k<fnd.length;k++)if(cf(fnd[k]))cc[ccIndex++]=fnd[k];continue;}tn=tk;var fnd=new Array,fc=0;for(var h=0;h<cc.length;h++){var es=cc[h].getElementsByTagName(tn);for(var j=0;j<es.length;j++) fnd[fc++]=es[j];}cc=fnd;}return cc;}
function getElementsByClassName(classname,tag){if(!tag)var tag="";return getElementsByCSS(tag+"."+classname);}
function $(id){return document.getElementById(id);}
function toggle(item,state){if(state)item.style.display=state;else item.style.display=(item.style.display=="block")?"none":"block";}
function stopEvent(e){e=e||window.event;e.cancelBubble=true;e.returnValue=false;if(e.stopPropagation){e.stopPropagation();e.preventDefault();}return false;}

// jx Library - http://binnyva.blogspot.com/2006/02/jx-ajax-library-in-object-notation.html (Version 1.01.A)
jx={http:false,format:'text',callback:function(data){},
getHTTPObject:function(){var http=false;
if(typeof ActiveXObject !='undefined'){
try{http=new ActiveXObject("Msxml2.XMLHTTP");}
catch(e){
try{http=new ActiveXObject("Microsoft.XMLHTTP");}
catch(E){http=false;}
}}else if(XMLHttpRequest){
try{http=new XMLHttpRequest();}
catch(e){http=false;}
}return http;},
load:function(url,callback,format,method){
this.init();
if(!this.http||!url)return;
this.callback=callback;
if(!method)var method="GET";
if(!format)var format="text";
this.format=format.toLowerCase();
method=method.toUpperCase();
var parameters=null;
var now="uid="+new Date().getTime();
url+=(url.indexOf("?")+1)?"&":"?";
url+=now;
if(method=="POST"){
var parts=url.split("\?");
url=parts[0];
parameters=parts[1];
}
this.http.open(method,url,true);
if(method=="POST"){
this.http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
this.http.setRequestHeader("Content-length",parameters.length);
this.http.setRequestHeader("Connection","close");
}
this.http.onreadystatechange=this.handler;
this.http.send(parameters);
},
handler:function(){
var http=jx.http;
if(http.readyState==4){
if(http.status==200){
var result="";
if(http.responseText)result=http.responseText;
if(jx.format.charAt(0)=="j"){
result=result.replace(/[\n\r]/g,"");
result=eval('('+result+')'); 
}if(jx.callback)jx.callback(result);
}}},
init:function(){this.http=this.getHTTPObject();}
}

//Custom Stuff
var rel = "";

function evaluate(id) {
	var code = '';
	var result = '';
	var ele = $(id);
	if(ele.tagName == "TEXTAREA") code = ele.value;
	else code = ele.innerHTML;
	
	try {
		result = eval(code);
	} catch(E) {
		alert("JavaScript Error in code : " + E);
	}
	if(result) {
		if(ele.tagName == "TEXTAREA") ele.value = result;
		else ele.innerHTML = result;
	}
}

function replyTo(id,subject) {
	$('replyto').value = id;
	toggle($('replyto-message'),'block');
	$('replyto-message').innerHTML = "Reply to "+subject+"'s comment. <a href='#comment_text' onclick='noReply()'>Don't Reply</a>";
}
function noReply() {
	toggle($('replyto-message'),'none');
	$('replyto').value = 0;
}

function siteInit() {
	var email = 'bin'+ 'nyva';
	var email_links = getElementsByClassName("email-encrypt","span");
	email += '@gma' + 'il.com';
	for(var i=0;i<email_links.length;i++) {
		email_links[i].innerHTML = '<a href="mailto:'+email+'">'+email+'</a>';
		email_links[i].className = "";
	}
	
	//Enables the evaluatetion textareas
	var evals = document.getElementsByName("test_evaluation_code");
	for(var i=0;i<evals.length;i++) {
		var ev = evals[0];
		addEvent(ev,"submit",function(e) {
			e = e ||window.event;
			var form_area = findTarget(e);
			var code = form_area.getElementsByTagName("textarea")[0].value;
			
			//Find the result area.
			var message_area = false
			if(form_area.getElementsByTagName("div")) {
				var result_areas = form_area.getElementsByTagName("div");
				for(var j=0; j<result_areas.length; j++) {
					if(result_areas[j].className.match(/result/)) {
						message_area = result_areas[j];
						break;
					}
				}
			}

			try {
				var result = eval(code)||"Code Executed successfully";
				if(message_area)
					message_area.innerHTML = "<div class='message-success'>"+result+"</div>";
				else alert(result);
			} catch (E) {
				var result = "Error : " + E;
				if(message_area)
					message_area.innerHTML = "<div class='message-error'>"+result+"</div>";
				else alert(result);
			}
			stopEvent(e);
		});
	}

	//Find relation
	var org_loc=document.location.toString();
	var sl=0,in_comp=0;
	if(!org_loc.indexOf("http://localhost/openjs")) {loc=org_loc.replace("http://localhost/openjs","");in_comp=1;}
	else if(!org_loc.indexOf("http://www.openjs.com")) loc=org_loc.replace("http://www.openjs.com","")
	else loc=org_loc;
	for(var i=0;i<loc.length;i++) {
	if(loc.charAt(i)=="/") {
	if(sl) rel=rel+"../";
	sl++;}
	}

	//Protection against Spam bots
	if($("commenter")) {
		$("commenter").checked = false;
		$("bot-protection").style.display = 'none';
	}
}
addEvent(window,'load',siteInit);
