/* –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
 * Copyright © 2009 by Chris Holland <topher@topherdigital.com> All Rights Reserved
 * –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
 * 
 * TDX XHTML Dynamic Library System
 * ---------------------------------------------------------------------------------
 * tdxKernel
 *
 * 
 */

var tdxC = {
    bC : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
    bTimer : 0,
    scriptNum : 0,
    elem : null,
    log : new Array(),
    
    sD : function(objName,objDisplay) { obj = document.getElementById(objName); if (obj) { obj.style.display = objDisplay; } },
    sDG : function(objID,tagName,objDisplay) { obj = document.getElementById(objID); objGroup = document.getElementsByTagName(tagName); if (objGroup) { for (i=0;i<objGroup.length;i++) { obj = objGroup.item(i); if (obj.id.substr(0,objID.length) == objID) { obj.style.display = objDisplay; } } } },
    tD : function(objID,mode1,mode2) { this.obj = document.getElementById(objID); if (this.obj) { objDisplay = this.obj.style.display; if (objDisplay == mode1) { this.obj.style.display = mode2; } else { this.obj.style.display = mode1; } } },
    tS : function(objID,mode1,mode2) { 
    	this.obj = document.getElementById(objID); 
    	if (this.obj) { 
    		regex = new RegExp('/[^/]+$','i');
    		objSrc = regex.exec(this.obj.src);
    		mode1Src = regex.exec(mode1);
    		mode2Src = regex.exec(mode2);
    		if (objSrc[0] == mode1Src) { 
    			this.obj.src = mode2; 
    		} else { 
    			this.obj.src = mode1;
    		} 
    	} 
    },
    
    tDG : function(objID,tagName,mode1,mode2) { objGroup = document.getElementsByTagName(tagName); masterSet = "_"; if (objGroup) { for (var i=0;i<objGroup.length;i++) { obj = objGroup.item(i); if (obj.id.substr(0,objID.length) == objID) { if (masterSet != '_') { obj.style.display = masterSet; } if (obj.style.display == mode1) { obj.style.display = mode2; } else { obj.style.display = mode1; } } } } },
    
    // Load Animation
    lA : function(placeId,objId,count,imgSrc) { 
    	obj = document.getElementById(objId); 
    	if (obj) { 
    		offset = this.findOffset(obj,count); 
    		div = document.createElement('div'); 
    		div.style.backgroundImage = "url('/img/fade.png')"; 
    		div.style.position = 'absolute'; 
    		div.style.top = (offset.dy - 4) + 'px'; 
    		div.style.left = offset.dx + 'px'; 
    		div.style.width = obj.clientWidth + 'px'; 
    		div.style.height = obj.clientHeight + 'px'; 
    		div.id = 'loading_' + obj.id; 
    		div.innerHTML = '<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=' + obj.clientWidth + ' HEIGHT=' + obj.clientHeight + '><TR><TD ALIGN=CENTER VALIGN=MIDDLE><IMG SRC="' + imgSrc + '"></TD></TR></TABLE>'; 
    		div = document.getElementById(placeId).appendChild(div); 
    	} 
    },
    
    cLN : function(name) { 
    	var element = document.getElementById(name);
    	if (element) {
			div = document.createElement('div');
			div.id = name + 'LN';
			element.appendChild(div);
			div.style.position = 'absolute'; 
			div.style.top = '0px'; 
			div.style.left = '0px';
			div.style.backgroundColor = '#0063B4';
			div.style.color = 'white';
			div.style.fontWeight = 'bold';
			div.style.padding = '1px 8px 1px 8px';
			div.style.opacity = '0.6'; 
			div.innerHTML = 'Loading...';
			return div;
    	}
    	return null;
    },
    cPO : function(name,w,h,fade) { 
    	var marker = document.getElementsByTagName('body').item(0);
    	if (marker) {
			if (fade != false) {div = document.createElement('div');div.setAttribute('id', name + 'FO');div.style.backgroundImage = "url('"+ fade +"')";div.style.position = 'fixed';div.style.top = '0px';div.style.left = '0px';div.style.width = '100%';div.style.height = '100%';marker.appendChild(div);marker = div;}
			div = document.createElement('div');
			div.setAttribute('id', name + 'PO');
			div.style.position = 'fixed';
			div.style.top = '50%';
			div.style.left = '50%';
			div.style.width = w + 'px'; 
			div.style.height = h + 'px';
			div.style.marginLeft = '-' + w / 2 + 'px';
			div.style.marginTop = '-' + h / 2 + 'px';
			marker.appendChild(div);
			return div;
    	}
    	return null;
    },
    cBO : function(name,w,h,ox,oy,ref) {
    	if (ref != false) {
    		var marker = document.getElementsByTagName('body').item(0);
    		var refObj = document.getElementById(ref);
        	o = this.findOffset(refObj, 300); //FIXME Can do this better 
        	if (marker) {
    			div = document.createElement('div');
    			div.setAttribute('id', name + 'BO');
    			div.style.position = 'absolute'; 
    			div.style.top = (o.dy + oy) + 'px'; 
    			div.style.left = (o.dx + ox) + 'px'; 
    			div.style.width = w + 'px'; 
    			if (h > 0) {
    				div.style.height = h + 'px';
    			}
    			marker.appendChild(div);
    			return div;
        	}
    	} else {
    		var marker = document.getElementsByTagName('body').item(0);
        	if (marker) {
    			div = document.createElement('div');
    			div.setAttribute('id', name + 'BO');
    			div.style.position = 'fixed'; 
    			div.style.top = '50%'; 
    			div.style.left = '50%'; 
    			div.style.width = (w + ox) + 'px'; 
    			div.style.height = (h + oy) + 'px';
    			marker.appendChild(div);
    			return div;
        	}
    	}
    	return null;
    },
    
    cPM : function(element,name,mclass,mstyle,mcontent) {obj = document.getElementById(name);if (obj) { this.dPM(name); return false; } else if (element) { div = document.createElement('div');div.setAttribute('id', name);if (mclass != null) { div.setAttribute('class', mclass); }if (mstyle != null) { div.setAttribute('style', mstyle); }if (mcontent != null) { div.innerHTML = mcontent; }element.appendChild(div);return div; }return null;},
    dPM : function(name) {var element = document.getElementById(name);if (element) { element.parentNode.removeChild(element); }},
    dD : function(objId) { oldScript = document.getElementById(objId); if (oldScript) { oldParent = oldScript.parentNode; oldScript = oldParent.removeChild(oldScript); oldScript = null; } },
    setCenteredDimensions : function(objName,w,h) { obj = document.getElementById(objName); if (obj) { marginH = Math.round(w / 2); marginV = Math.round(h / 2); obj.style.width = w + "px"; obj.style.height = h + "px"; obj.style.marginLeft = "-" + marginH + "px"; obj.style.marginTop = "-" + marginV + "px"; } },

    getLayout : function(objID) {
    	// Get absolute left, top, width, and height of object
    },
    
    findOffset : function(obj,count) {
    	var offset = { dx : 0, dy : 0, dt : '' };
    	count--;
        offset.dx += obj.offsetLeft;
        offset.dy += obj.offsetTop;
        offset.dt += "[" + obj.nodeName + "] : " + obj.offsetLeft + "x" + obj.offsetTop + "  " + obj.offsetWidth + "w " + obj.offsetHeight + "h  \n";
        //alert('1:' + obj.id + '  2:' + stopId);
        if (count > 0) {
	        if (obj.offsetParent) {
	            parentOffset = this.findOffset(obj.offsetParent,count);
	            offset.dx += parentOffset.dx;
	            offset.dy += parentOffset.dy;
	            offset.dt += parentOffset.dt;
	        }
        } 
        return offset;
    },
    poS : function() { this.sD('tdxFO','block'); }, 
    poH : function() { this.sD('tdxFO','none'); }, 
    
    //ftq : function(fName) { var query = ''; formObj = document.forms[fName]; if (!formObj) { return ''; } for (var i=0;i<formObj.elements.length;i++) { query += formObj.elements[i].name + "=" + encodeURIComponent(formObj.elements[i].value) + "&"; }return query; },
    ftq : function(fName) { 
    	var query = ""; 
    	var value = "";
    	var formObj = document.forms[fName]; 
    	if (!formObj) { return ''; } 
    	for (var i=0;i<formObj.elements.length;i++) { 
    		this.elem = formObj.elements[i]; 
    		if (formObj.elements[i].type == 'radio') { 
    			if (formObj.elements[i].checked) { 
    				query += formObj.elements[i].name + "=" + encodeURIComponent(formObj.elements[i].value) + "&"; 
    			} 
    		} else if (formObj.elements[i].type == 'checkbox') { 
    			if (formObj.elements[i].checked) { 
    				query += formObj.elements[i].name + "=" + encodeURIComponent(formObj.elements[i].value) + "&"; 
    			} 
    		} else {
    			if (this.elem.multiple) {
				value = "";
				for (var o=0;o<this.elem.options.length;o++) {
					if (this.elem.options[o].selected) {
							value = value.concat(",",this.elem.options[o].value);
						}
					}
				query += this.elem.name + "=" + encodeURIComponent(value.substr(1)) + "&";
				} else {
					query += this.elem.name + "=" + encodeURIComponent(this.elem.value) + "&";
				}
    		}
    	}
    	return query; 
    	},
    	
         
    P : function(action,formName,additional) {
    	this.scriptNum++;
        script = document.createElement('script');
        postData = this.ftq(formName) + additional;
        script.setAttribute('src','/tdx.php?tdxCa=' + action + '&tdxCp=' + encodeURIComponent(this.b64E(postData)) );
        script.setAttribute('id','tdxC_'+this.scriptNum);
        script.setAttribute('language','Javascript');
        script.setAttribute('type','text/javascript');
        pageHead = document.getElementsByTagName('head').item(0);
        pageHead.appendChild(script);
        setTimeout("tdxC.dD('tdxC_"+this.scriptNum+"')",60000);
    },

    O : function(objID,uri) {
    	this.log.push(uri);
    	this.scriptNum++;
        script = document.createElement('script');
        script.setAttribute('src','/tdx.php?tdxCn=' + objID + '&tdxCu=' + encodeURIComponent(this.b64E(uri)) );
        script.setAttribute('id','tdxC_'+this.scriptNum);
        script.setAttribute('language','Javascript');
        script.setAttribute('type','text/javascript');
        pageHead = document.getElementsByTagName('head').item(0);
        pageHead.appendChild(script);
        setTimeout("tdxC.dD('tdxC_"+this.scriptNum+"')",60000);
    },
    
    dO : function(objID, uri, delay) { queryCode = "tdxC.O('" + objID + "','" + uri + "')"; setTimeout(queryCode,delay); },
    tcv : function(cookie,filter) { 
    	var mc = new String(document.cookie); 
    	var mca = mc.split('; '); fc = false; 
    	for (var i=0;i<mca.length;i++) { 
    		c = mca[i]; kv = c.split('='); 
    		if (kv[0] == 'TPSSTAT') { 
    			v = decodeURIComponent(kv[1]); 
    			d = v.split('|'); 
    			z = new Array(); 
    			z.push(d[0]); 
    			var catPresent = false; 
    			for (var j=1;j<d.length;j++) { 
    				if (d[j].length != 0) { 
    					if (d[j] == filter) { 
    						catPresent = true; 
    					} else { 
    						z.push(d[j]); 
    					} 
    				} 
    			} 
    			if (!catPresent) { 
    				z.push(filter); 
    			} 
    			var nc = z.join('|'); 
    			var date = new Date(); 
    			date.setTime(date.getTime()+(30*60*60*1000)); 
    			var expires = "; expires="+date.toGMTString(); 
    			document.cookie = cookie + '=' + nc + expires + '; path=/';
    			fc = true;
    		}
    	}
    	if (!fc) {
    		document.cookie = cookie + '=||' + expires + '; path=/';
    	}
    },
    scv : function(cookie,filter) { 
    	var mc = new String(document.cookie); 
    	var mca = mc.split('; '); fc = false; 
    	for (var i=0;i<mca.length;i++) { 
    		c = mca[i]; kv = c.split('='); 
    		if (kv[0] == 'TPSSTAT') { 
    			v = decodeURIComponent(kv[1]); 
    			d = v.split('|'); 
    			z = new Array(); 
    			z.push(d[0]); 
    			var catPresent = false; 
    			for (var j=1;j<d.length;j++) { 
    				if (d[j].length != 0) { 
    					if (d[j] == filter) { 
    						catPresent = true; 
    						z.push(d[j]); 
    					} else { 
    						z.push(d[j]); 
    					} 
    				} 
    			} 
    			if (!catPresent) { 
    				z.push(filter); 
    			} 
    			var nc = z.join('|'); 
    			var date = new Date(); 
    			date.setTime(date.getTime()+(30*60*60*1000)); 
    			var expires = "; expires="+date.toGMTString(); 
    			document.cookie = cookie + '=' + nc + expires + '; path=/';
    			fc = true;
    		}
    	}
    	if (!fc) {
    		document.cookie = cookie + '=||' + expires + '; path=/';
    	}
    },
    ccv : function(cookie,filter) { 
    	var mc = new String(document.cookie); 
    	var mca = mc.split('; '); fc = false; 
    	for (var i=0;i<mca.length;i++) { 
    		c = mca[i]; kv = c.split('='); 
    		if (kv[0] == 'TPSSTAT') { 
    			v = decodeURIComponent(kv[1]); 
    			d = v.split('|'); 
    			z = new Array(); 
    			z.push(d[0]); 
    			var catPresent = false; 
    			for (var j=1;j<d.length;j++) { 
    				if (d[j].length != 0) { 
    					if (d[j] == filter) { 
    						catPresent = true; 
    					} else { 
    						z.push(d[j]); 
    					} 
    				} 
    			} 
    			var nc = z.join('|'); 
    			var date = new Date(); 
    			date.setTime(date.getTime()+(30*60*60*1000)); 
    			var expires = "; expires="+date.toGMTString(); 
    			document.cookie = cookie + '=' + nc + expires + '; path=/';
    			fc = true;
    		}
    	}
    	if (!fc) {
    		document.cookie = cookie + '=||' + expires + '; path=/';
    	}
    },
    tcs : function(cookie,filter) { 
    	var mc = new String(document.cookie); 
    	var mca = mc.split('; '); fc = false; 
    	for (var i=0;i<mca.length;i++) { 
    		c = mca[i]; kv = c.split('='); 
    		if (kv[0] == 'TPSSTAT') { 
    			v = decodeURIComponent(kv[1]); 
    			d = v.split('|'); 
    			for (var j=1;j<d.length;j++) { 
    				if (d[j].length != 0) { 
    					if (d[j] == filter) { 
    						return true; 
    					}
    				}
    			}
    		}
    	}
    	return false;
    },
    
    b64E : function(rawdata) { var res = ''; var c1,c2,c3,b1,b2,b3,b4; var i = 0; while(i<rawdata.length){c1=rawdata.charCodeAt(i++);c2=rawdata.charCodeAt(i++);c3=rawdata.charCodeAt(i++);b1=c1>>2;b2=((c1&3)<<4)|(c2>>4);b3=((c2&15)<<2)|(c3>>6);b4=c3&63;if(isNaN(c2)){b3=b4=64;}else if(isNaN(c3)){b4=64;}res=res+this.bC.charAt(b1)+this.bC.charAt(b2)+this.bC.charAt(b3)+this.bC.charAt(b4);} return res; },
    b64D : function(b64data) { var res = ''; var c1,c2,c3,b1,b2,b3,b4; var i = 0; b64data = b64data.replace(/[^A-Za-z0-9\+\/\=]/g, ""); while (i < b64data.length) { b1=this.bC.indexOf(b64data.charAt(i++)); b2=this.bC.indexOf(b64data.charAt(i++)); b3=this.bC.indexOf(b64data.charAt(i++)); b4=this.bC.indexOf(b64data.charAt(i++)); c1 = (b1<<2)|(b2>>4); c2 = ((b2&15)<<4)|(b3>>2); c3 = ((b3&3)<<6)|b4; res = res + String.fromCharCode(c1); if (b3 != 64) { res = res + String.fromCharCode(c2); } if (b4 != 64) { res = res + String.fromCharCode(c3); } } return res; }
};

var tdxHSV = { h: 0.0, s: 1.0, v: 1.0, r: 0,   g: 0,   b: 0,   RGB: '#FF0000',
	init: function(hpref) { this.hElem = document.getElementById(hpref+'_h'); this.hElem.style.cursor = 'crosshair'; this.sElem = document.getElementById(hpref+'_s'); this.vElem = document.getElementById(hpref+'_v'); this.hvElem = document.getElementById(hpref+'_hv'); this.svElem = document.getElementById(hpref+'_sv'); this.vvElem = document.getElementById(hpref+'_vv'); this.nElem = document.getElementById(hpref+'_n'); this.cElem = document.getElementById(hpref+'_c'); this.marker1 = document.getElementById(hpref+'_m1'); this.marker2 = document.getElementById(hpref+'_m2'); this.marker2.style.cursor = 'crosshair';			this.hElem.onclick = tdxHSV.clickH; this.sElem.onclick = tdxHSV.clickS;			this.marker2.onclick = tdxHSV.clickHP; },
	clickH: function(evt) { tdxHSV.paint((evt.layerX - evt.target.offsetLeft),tdxHSV.s*127,128-(evt.layerY - evt.target.offsetTop)); },
	clickS: function(evt) { tdxHSV.paint(tdxHSV.h*255,128-(evt.layerY - evt.target.offsetTop),tdxHSV.v*127); },
	clickHP: function(evt) { tdxHSV.paint((evt.layerX + parseInt(evt.target.style.left) - 7),tdxHSV.s*127,128-(evt.layerY + parseInt(evt.target.style.top) - 7)); },
	paint: function(h,s,v) { this.h = h/255; this.s = s/127; this.v = v/127; rgb = this.rgb(this.h,this.s,this.v); this.RGB = '#' + this.hex(rgb.r*255) + this.hex(rgb.g*255) + this.hex(rgb.b*255); this.cElem.style.backgroundColor = this.RGB; this.nElem.value = this.RGB; this.marker1.style.backgroundPosition = '-256px -' + s + 'px'; this.marker2.style.left = (h + 3) + 'px'; this.marker2.style.top = 128-(v - 4) + 'px'; this.vElem.style.opacity = 1 - (s / 127); this.sElem.style.backgroundPosition = '-' + ((2 * v)) + 'px -256px'; srgb = this.rgb(this.h,1.0,1.0); n = '#' + this.hex(srgb.r*255) + this.hex(srgb.g*255) + this.hex(srgb.b*255); this.sElem.style.backgroundColor = n; this.hvElem.value = Math.round(this.h*1000)/1000; this.svElem.value = Math.round(this.s*1000)/1000; this.vvElem.value = Math.round(this.v*1000)/1000; },
	getRGB: function() {return {r:Math.round(this.r*255),g:Math.round(this.g*255),b:Math.round(this.b*255)};},
	rgb:function(h,s,v){h*=6;hi=Math.floor(h);f=h-Math.floor(h);p=v*(1.0-s);q=v*(1.0-f*s);t=v*(1.0-(1.0-f)*s);if(hi==0){ret={r:v,g:t,b:p};}if(hi==1){ret={r:q,g:v,b:p};}if(hi==2){ret={r:p,g:v,b:t};}if(hi==3){ret={r:p,g:q,b:v};}if(hi==4){ret={r:t,g:p,b:v};}if(hi==5){ret={r:v,g:p,b:q};}return ret;},
	//rgb:function(h,s,v){h*=6;hi=Math.round(h);f=h-Math.round(h);p=v*(1.0-s);q=v*(1.0-f*s);t=v*(1.0-(1.0-f)*s);if(hi==0){ret={r:v,g:t,b:p};}if(hi==1){ret={r:q,g:v,b:p};}if(hi==2){ret={r:p,g:v,b:t};}if(hi==3){ret={r:p,g:q,b:v};}if(hi==4){ret={r:t,g:p,b:v};}if(hi==5){ret={r:v,g:p,b:q};}return ret;},
	hex:function(d) {return '0123456789ABCDEF'.charAt(Math.floor(d/16))+'0123456789ABCDEF'.charAt(d&15);}
};

var tdxA = { version : 0.35, benchmark : { JS : 0.0, VP : 0.0 }, queue : new Array(), iTimer : 0,
    init : function() { this.mainBody = document.getElementsByTagName("body")[0]; },
    setDisplay : function(objName,objDisplay) { obj = document.getElementById(objName); if (obj) { obj.style.display = objDisplay; } },
    setCenteredDimensions : function(objName,w,h) { obj = document.getElementById(objName); if (obj) { marginH = Math.round(w / 2); marginV = Math.round(h / 2); obj.style.width = w + "px"; obj.style.height = h + "px"; obj.style.marginLeft = "-" + marginH + "px"; obj.style.marginTop = "-" + marginV + "px"; } }, 
    getViewportOffset : function(objName,start) { obj = document.getElementById(objName); if (obj) { if (start) { getViewportOffset.ox = 0; getViewportOffset.oy = 0; getViewportOffset.ow = 0; getViewportOffset.oh = 0; } getViewportOffset.ox += obj.offsetLeft; getViewportOffset.oy += obj.offsetTop; getViewportOffset.ow += obj.offsetWidth; getViewportOffset.oh += obj.offsetHeight; if (obj.offsetParent) { findOffset(obj.offsetParent,false); } } },
    queueMoveObj : function(objId,x,y,w,h,effect,time,delay) { this.queueAnimObj(objId,"left",-1,x,effect,time,delay); this.queueAnimObj(objId,"top",-1,y,effect,time,delay); this.queueAnimObj(objId,"width",-1,w,effect,time,delay); this.queueAnimObj(objId,"height",-1,h,effect,time,delay); },
    queueAnimObj : function(objId,objProp,start,end,effect,time,delay,remove) { 
    	obj = document.getElementById(objId); 
    	if (obj) { 
    		var qObj = new Object(); 
    		qObj.aProp = new String(objProp); 
    		qObj.aStart = new String(start); 
    		qObj.aEnd = new String(end); 
    		qObj.vStart = parseInt(qObj.aStart); 
    		qObj.vEnd = parseInt(qObj.aEnd); 
    		qObj.aValue = 0; 
    		qObj.aType = "px"; 
    		qObj.aType = ""; 
    		if (qObj.aStart.indexOf("px") != -1) { qObj.aType = "px"; } if (qObj.aStart.indexOf("%")  != -1) { qObj.aType = "%"; } if (qObj.aStart.indexOf("em") != -1) { qObj.aType = "em"; } if (qObj.aStart.indexOf("pt") != -1) { qObj.aType = "pt"; } 
    		qObj.delay = delay; qObj.time = time; qObj.active = false; qObj.running = false; qObj.effect = effect; 
    		qObj.obj = obj;
    		switch(objProp) { case 'scrollLeft':  case 'scrollTop': qObj.useStyle = false; break; default: qObj.useStyle = true; break; } 
    		if (start == 'current') {
    			if (qObj.useStyle) { qObj.vStart = parseInt(qObj.obj.style[qObj.aProp]); } else { qObj.vStart = parseInt(qObj.obj[qObj.aProp]); }
    			qObj.vEnd = qObj.vStart + qObj.vEnd;   
    		}
    		qObj.aId = objId; if (remove) { qObj.remove = true; } else { qObj.remove = false; } 
    		this.queue.push(qObj); 
    	} 
    },
    processQueue : function() { 
    	var now = (new Date()).getTime(); 
    	if (this.queue.length > 0) { 
    		for (i=0;i<this.queue.length;i++) { 
    			qObj = this.queue[i]; if (qObj.active & (!qObj.running)) { 
    				if (now >= qObj.tStart) { 
    					qObj.running = true; 
    					if (parseInt(qObj.vStart) == -1) {
    						if (qObj.useStyle) {
    							qObj.vStart = parseInt(qObj.obj.style[qObj.aProp]);
    						} else {
    							qObj.vStart = parseInt(qObj.obj[qObj.aProp]);
    						}
    					} 
    				} 
    			} if (qObj.active & qObj.running) {
    				if (now >= qObj.tEnd) {
    					if (qObj.useStyle) {
    						qObj.obj.style[qObj.aProp] = qObj.vEnd + qObj.aType;
    					} else {
    						qObj.obj[qObj.aProp] = qObj.vEnd + qObj.aType;
    					}
    					this.queue.splice(i,1); 
    					if (qObj.remove) { qObj.obj.parentNode.removeChild(qObj.obj); } 
    				} else if (now >= qObj.tStart) { 
    					r = (now - qObj.tStart) / (qObj.tEnd - qObj.tStart);
    					b=0; d=0;f=0;s=1; with (Math) { 
    						if (qObj.effect == "roll") { s = 100; f = (r <= 0.5) ? (pow(s,2*r) - 1) / (s - 1) :  1 - ((pow(s,2*(1-r)) - 1) / (s - 1)) + 1 ; f = f / 2;} if (qObj.effect == "fall") { s = 100; f = (pow(s,r) - 1) / (s - 1); } if (qObj.effect == "sin") { s = 100; f = sin(r * (PI / 2)) ; } if (qObj.effect == "isin") { s = 100; f = 1 - sin((1 - r) * (PI / 2)); } if (qObj.effect == "snap") { s = 100; f = 1 - ((pow(s,1-r) - 1) / (s - 1)); } if (qObj.effect == "wobble") { s = 40; d = 1 - ((pow(s,1-r) - 1) / (s - 1)); b = (sin((r * 6 - 1) * (PI / 2)) + 1) / 2; f = (r <= 0.154) ? d : (b * (1 - r)) / 2 + d; } if (qObj.effect == "bounce") { s = 40; d = 1 - ((pow(s,1-r) - 1) / (s - 1)); b = (sin((r * 4.5 - 1) * (PI / 2)) + 1) / 2; f = (r <= 0.154) ? d : (b * (1 - r)) / 2 + d; f = (f >= 1.0) ? 2.0 -f : f; } if (qObj.effect == "none") { f = r; } 
    					} 
    					qObj.aValue = (qObj.vStart + ((qObj.vEnd - qObj.vStart) * f)); 
    					if (qObj.useStyle) { qObj.obj.style[qObj.aProp] = qObj.aValue + qObj.aType; } else { qObj.obj[qObj.aProp] = qObj.aValue + qObj.aType; } 
    				} 
    			} 
    		} 
    	} else { clearInterval(this.iTimer); this.iTimer = 0; } 
    },
    runQueue : function() { 
    	for (i=0;i<this.queue.length;i++) { 
    		qObj = this.queue[i]; 
    		if (!qObj.active) { qObj.tStart = (new Date()).getTime() + qObj.delay; qObj.tEnd = qObj.tStart + qObj.time; qObj.active = true;} 
    	} 
    	if (this.iTimer == 0) { 
    		this.iTimer = setInterval("tdxA.processQueue()",33); 
    	} 
    },
    imagePopout : function(pName,shadow,image,iw,ih,fw,fh,effect) { sObj = document.createElement('div'); sObj.setAttribute('id',pName + "_S"); sObj.style.backgroundImage = "url('" + shadow + "')"; sObj.style.position = "absolute"; sObj.style.top = "50%"; sObj.style.left = "50%"; sObj.style.width = "1%"; sObj.style.height = "1%"; sObj.onclick = function() { tdHud.imagePopoutClose(pName,effect); }; document.getElementsByTagName("body")[0].appendChild(sObj); this.queueAnimObj(pName + "_S","left","50%","0%",effect,300,0); this.queueAnimObj(pName + "_S","width","1%","100%",effect,300,0); this.queueAnimObj(pName + "_S","top","50%","0%",effect,300,300); this.queueAnimObj(pName + "_S","height","1%","100%",effect,300,300); pObj = document.createElement('div'); pObj.setAttribute('id',pName + "_P"); pObj.style.position = "fixed"; pObj.style.top = "50%"; pObj.style.left = "50%"; pObj.style.width = "1px"; pObj.style.height = "1px"; pObj.style.marginLeft = "0px"; pObj.style.marginTop = "0px"; pObj.style.backgroundColor = "white"; pObj.style.padding = "10px"; pObj.onclick = function() { tdHud.imagePopoutClose(pName,effect); }; sObj.appendChild(pObj); this.queueAnimObj(pName + "_P","marginLeft","0px",0 - fw / 2,effect,300,400); this.queueAnimObj(pName + "_P","width","1px",fw,effect,300,400); this.queueAnimObj(pName + "_P","marginTop","0px",0 - fh / 2,effect,300,700); this.queueAnimObj(pName + "_P","height","1px",fh,effect,300,700); iObj = document.createElement('img'); iObj.setAttribute('id',pName + "_I"); iObj.style.width = "1px"; iObj.style.height = "1px"; iObj.src = image; iObj.onclick = function() { tdHud.imagePopoutClose(pName,effect); }; pObj.appendChild(iObj); this.queueAnimObj(pName + "_I","width","1px",fw,effect,300,400); this.queueAnimObj(pName + "_I","height","1px",fh,effect,300,700); this.runQueue(); },
    imagePopoutClose : function(pName,effect) { this.queueAnimObj(pName + "_S","top","0%","50%",effect,300,400); this.queueAnimObj(pName + "_S","height","100%","1%",effect,300,400); this.queueAnimObj(pName + "_S","left","0%","50%",effect,300,700); this.queueAnimObj(pName + "_S","width","100%","1%",effect,300,700,true); this.queueAnimObj(pName + "_P","marginTop",-1,"0px",effect,300,0); this.queueAnimObj(pName + "_P","height",-1,"1px",effect,300,0); this.queueAnimObj(pName + "_P","marginLeft",-1,"0px",effect,300,300); this.queueAnimObj(pName + "_P","width",-1,"1px",effect,300,300,true); this.queueAnimObj(pName + "_I","height",-1,"1px",effect,300,0); this.queueAnimObj(pName + "_I","width",-1,"1px",effect,300,300,true); this.runQueue(); },
    benchmarkJS : function() { dStart = (new Date()).getTime(); for (i=1;i<100000;i++) { n = Math.sin(i/1000); if (this.stop) break; } dEnd = (new Date()).getTime(); this.benchmark.JS = dEnd - dStart; document.getElementById('tdHudLog').innerHTML = this.benchmark.JS + "\n"; },
    benchmarkViewport : function() { obj = document.createElement('div'); obj.setAttribute('id','tdHudBMVP'); obj.style.backgroundColor = "#404040"; obj.style.width = "100px"; obj.style.height = "100px"; obj.style.position = "absolute"; obj.style.top = "10px"; obj.style.left = "10px"; this.body.appendChild(obj); dStart = (new Date()).getTime(); for(i=0;i<1000;i++) { obj.style.left = (10 + i) + "px"; } dEnd = (new Date()).getTime(); document.getElementsByTagName("body")[0].removeChild(obj); document.getElementById('tdHudLog').innerHTML = this.benchmark.JS + "\n"; }
};

tdxA.init(); 

