
// see http://www.mr.ethz.ch/~majer/formula/formula.php
var Eqn;
if(!Eqn) { Eqn ={} ; }

Eqn.EXT = 'gif' // gif or png
Eqn.SIZE = 'size'
Eqn.NUM = 'num'
Eqn.INLINE = 'inline'
Eqn.CLASSNAME = 'equation'
Eqn.CSS_ERROR = 'latex-error'
// the URL to direct image rendering to
Eqn.URL="http://www.ce4csb.org/equations/scripts/latex/eqncache";
//Eqn.URL="/equations/scripts/latex/eqncache";
Eqn.Size=100; // fontsize
// note that the server has a limit so there is
// no real point upping this either
Eqn.MaxLength = 2000; 

// function definitions
Eqn.error_helper= function(self,cls) {
	// self attached to img object
	self.obj.failed=true;
	var cn = self.parentNode.className;
	if (cn && cn.indexOf(cls) >= 0 && cn.indexOf(Eqn.CSS_ERROR) < 0) {
        self.parentNode.className=Eqn.CSS_ERROR + ' ' + cn;
		self.parentNode.innerHTML=self.obj.txt;
	}
	
}
//Eqn.URL1="http://www.mr.ethz.ch/free_cgi-bin/formula.gif?expr=";
//Eqn.URL_HARVARD="http://math.harvard.edu/cgi-bin/mimetex.cgi?";
Eqn.eqn_onload = function(self) {
	
	self.obj.span.style.visibility='visible';
	
}
Eqn.inlinemath = function(tag) {
	return tag == 'span' || tag =='SPAN';
}

Eqn.eqn = function(tag,cls,config) {
	config = config?config:{size:Eqn.Size};
	var divs =document.getElementsByTagName(tag);
	var repl=[];
	var onerr= function() {
		Eqn.error_helper(this,cls);
		
	}
	var onerr2= function() {
		Eqn.error_helper(this,"eqn-img");
		
	}
	var inline = config.inline != undefined ? config.inline : Eqn.inlinemath(tag);
	var onload = function() {

		Eqn.eqn_onload(this);
		
	}
	var mxsize = Eqn.MaxLength;
	var count = 0;

	for(var i = 0; i < divs.length; i++) {
		var span = divs[i];
		//alert(d.innerHTML);
		if (span.className.indexOf(cls) >= 0) {
			var img = new Image();
			img.className=cls;
			var sz=span.getAttribute(Eqn.SIZE);
			var il=span.getAttribute(Eqn.INLINE);
			var num=span.getAttribute(Eqn.NUM);
			il = il ? (il == 'true' || false ) : inline;
			sz = sz?sz:config.size;
			var innerHTML=span.innerHTML;
			if (!il) { count++; }
			//num = count;
			var onerrfunc = onerr;
			if (num) {
				span.innerHTML = '<table class="label"><tbody><tr><td class="eqn-img"></td><td class="eqn-label"></td><tr></tbody></table>'
				var cells = span.getElementsByTagName('TD');
				span=cells[0];
				num = num.replace('$count',count);
				//if (num == '$count') { num = count; }
				cells[1].innerHTML=num; // add the label
				onerrfunc = onerr2;

			}
			img.obj={span:span,img:img,txt:innerHTML};
			img.onerror = onerrfunc;
			img.onload = onload;
			//img.setAttribute('alt',span.innerHTML);
			var t = span.getAttribute('title');
			if(t) {
				img.setAttribute('title',t);
			} else {
				//img.setAttribute('title','');// ensure IE doesn't show junk
			}
			repl.push(img);
			var txt=innerHTML;
			txt=txt.substr(0,mxsize);
			img.src =
				Eqn.URL+"?expr="+encodeURIComponent(txt)+"&size="+sz+'&inline='+il+'&ext='+Eqn.EXT;
				
		}
	}
	for(var i = 0; i < repl.length; i++) {
		var img = repl[i];
		var obj = img.obj;
		//o.span.parentNode.replaceChild(o.img,o.span);
		if(obj && obj.failed) { continue; }
		obj.span.innerHTML='';// remove all text
		obj.span.appendChild(obj.img);
	}
}


Eqn.eqnload = function(initfunc) {

	var obj = window;
	if (obj.addEventListener) {
		obj.addEventListener('load',initfunc,false);
	} else if(obj.attachEvent) {
		obj.attachEvent('onload',initfunc);
	} else {
		var oldf = window.onload;
		if(typeof oldf == 'function') {
			window.onload = function() {initfunc(); oldf(); }
		} else {
			window.onload = initfunc;
		}
	}
}

function eqnload() {
	Eqn.eqnload(function() {
		Eqn.eqn('span',Eqn.CLASSNAME,{size:Eqn.Size,inline:true}); 
		Eqn.eqn('div',Eqn.CLASSNAME,{size:Eqn.Size,inline:false}); 

	})
}
