/* –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
 * 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(),
    XH : null,
    queue : new Array(),
    queueRunning : false,
    queueWaiting : false,
    
    sD : function(objName,objDisplay) { obj = document.getElementById(objName); if (obj) { 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; return false;} else { this.obj.style.display = mode1; return true;} } },
    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; } } },
    cPO : function(name,w,h,fade) { 
    	var marker = document.getElementsByTagName('body').item(0);
    	if (marker) {
			if (fade != false) {
				div = document.createElement('div');
				div = marker.appendChild(div);
				div.innerHTML = ' ';
				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 = 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);
    		if (typeof ref == 'object') {
    			var refObj = ref;
    		} else {
    			var refObj = document.getElementById(ref);
    		}
        	o = this.findOffset(refObj, 300); //FIXME Can do this better 
        	if (marker) {
    			div = marker.appendChild(document.createElement('div'));
    			div.parentNode.normalize();
    			div.style.display = 'block';
    			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';
    			}
    			div.setAttribute('id', name + 'BO');
    			
    			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;
    },
    cLN : function(name) { 
    	var element = document.getElementById(name);
    	if (element) {
    		if (document.createElementNS) {
    			div = document.createElementNS("http://www.w3.org/1999/xhtml",'div');
    		} else {
    			div = document.createElement('div');
    		}
			div.setAttribute('id',name + 'LN');
			element.appendChild(div);
			//element.innerHTML = element.innerHTML + ' ';
			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;
    },
    
    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; } },

    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;
    },
    getForm : function(fName) {
    	if (document.forms) {
    		var formObj = document.forms[fName];
    	} else {
    		var forms = document.getElementsByTagName('form');
    		if (forms.length > 0) {
    			for (var i=0;i<forms.length;i++) {
    				if (forms[i].name == fName) {
    					var formObj = forms[i];
    				}
    			}
    		}
    	}
    	return formObj;
    },
    
    ftq : function(fName) { var query = ""; var value = ""; var formObj = this.getForm(fName);  
    if (!formObj) { return ''; } for (var i=0;i<formObj.elements.length;i++) { this.elem = formObj.elements[i]; 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; },
	XI : function() {
		if (window.XMLHttpRequest) {
			this.XH = new XMLHttpRequest(); this.log.push('XI: XMLHttpRequest');
		} else {
		    try { this.XH = new ActiveXObject("Msxml2.XMLHTTP.6.0"); this.log.push('XI: Msxml2.XMLHTTP.6.0'); } catch (e1) {}
		    try { this.XH = new ActiveXObject("Msxml2.XMLHTTP.3.0"); this.log.push('XI: Msxml2.XMLHTTP.3.0'); } catch (e2) {}
		    try { this.XH = new ActiveXObject("Msxml2.XMLHTTP"); this.log.push('XI: Msxml2.XMLHTTP');} catch (e3) {}
		}
    		
		this.XH.onreadystatechange = function() { tdxC.XR(); };
		if (!document.ELEMENT_NODE) {
			  document.ELEMENT_NODE = 1;
			  document.ATTRIBUTE_NODE = 2;
			  document.TEXT_NODE = 3;
			  document.CDATA_SECTION_NODE = 4;
			  document.ENTITY_REFERENCE_NODE = 5;
			  document.ENTITY_NODE = 6;
			  document.PROCESSING_INSTRUCTION_NODE = 7;
			  document.COMMENT_NODE = 8;
			  document.DOCUMENT_NODE = 9;
			  document.DOCUMENT_TYPE_NODE = 10;
			  document.DOCUMENT_FRAGMENT_NODE = 11;
			  document.NOTATION_NODE = 12;
			}
		
	},
        
	XQ : function() {
		this.log.push('XQ: queueLength='+this.queue.length);

		if (!this.queueRunning) {
			if (this.queue.length > 0) {
				this.queueRunning = true;
				qe = this.queue.pop();
				this.XH.open('GET',qe,true);
				this.XH.send(null);
			}
		}
	},
	EG : function(elementId,uri,query) {
		this.log.push('EG: '+elementId+' uri('+uri+')');
    	qs = '?xElement='+elementId+'&xURI=' + encodeURIComponent(uri);
    	if (query) { for (var i in query) { qs = qs +  i + '=' + query[i]; } }
    	this.queue.push('/X' + qs);
    	if (!this.queueRunning) { this.XQ(); }
	},
    XG : function(uri,query) { //XHR
		this.log.push('XG: uri('+uri+')');
    	qs = '?xURI=' + encodeURIComponent(uri);
    	if (query) { for (var i in query) { qs = qs +  i + '=' + query[i]; } }
    	this.queue.push('/X' + qs);
    	if (!this.queueRunning) { this.XQ(); }
    },
    _I : function(parent, node, deep) {
    	switch (node.nodeType) {
    		case document.ELEMENT_NODE:
				var newNode = document.createElement(node.nodeName);
				parent.appendChild(newNode);
				if (node.attributes.length > 0) {
					for (var il = 0; il < node.attributes.length;il++) { 
						newNode.setAttribute(node.attributes[il].nodeName, node.getAttribute(node.attributes[il].nodeName));
					}
				}
				if (deep && node.childNodes && node.childNodes.length > 0) {
					for (var il = 0; il < node.childNodes.length; il++) {
						this._I(newNode,node.childNodes[il], deep);
					}
				}
				return newNode;
				break;
    		case document.TEXT_NODE:
    	    case document.CDATA_SECTION_NODE:
    	    	parent.appendChild(document.createTextNode(node.nodeValue));
    	    	break;
    	    case document.COMMENT_NODE:
    	    	parent.appendChild(document.createComment(node.nodeValue));
    	    	break;
    	}
	},
    _INS : function(parent, node, deep) {
    	switch (node.nodeType) {
    		case document.ELEMENT_NODE:
				var newNode = document.createElementNS('http://www.w3.org/1999/xhtml',node.nodeName);
				parent.appendChild(newNode);
				if (node.attributes.length > 0) {
					for (var il = 0; il < node.attributes.length;il++) { 
						newNode.setAttribute(node.attributes[il].nodeName, node.getAttribute(node.attributes[il].nodeName));
					}
				}
				if (deep && node.childNodes && node.childNodes.length > 0) {
					for (var il = 0; il < node.childNodes.length; il++) {
						this._I(newNode,node.childNodes[il], deep);
					}
				}
				return newNode;
				break;
    		case document.TEXT_NODE:
    	    case document.CDATA_SECTION_NODE:
    	    	parent.appendChild(document.createTextNode(node.nodeValue));
    	    	break;
    	    case document.COMMENT_NODE:
    	    	parent.appendChild(document.createComment(node.nodeValue));
    	    	break;
    	}
	},
	
    XR : function() { //XMLHttp Return
		var st;
		st = 'XR: state=';
		st = st + this.XH.readyState;
		if (this.XH.readyState > 1) {
			st = st + ' status='; 
			st = st + this.XH.status;
		}
		this.log.push(st);
    	if (this.XH.readyState == 4) {
    		if (this.XH.status == 200) {
    			var length = this.XH.responseXML.documentElement.childNodes.length;
    			for (i=0;i<length;i++) {
    				n = this.XH.responseXML.documentElement.childNodes[i];
    				if (n.nodeName == 'push') {
    					nid = n.getAttribute('id');
    					if ((n.getAttribute('append') == 'true')) { nap = true; } else { nap = false; }
    					obj = document.getElementById(nid);
						if (obj) {
	    					if (!nap) { 
	    						while (obj.childNodes.length > 0) { 
	    							obj.removeChild(obj.lastChild); 
	    						} 
	    					}
	    					for (o=0;o<n.childNodes.length;o++) { this._I(obj,n.childNodes[o],true); }  // Custom Import
	    					//for (o=0;o<n.childNodes.length;o++) { iNode = document.importNode(n.childNodes[o],true); obj.appendChild(iNode); }
	    					obj.innerHTML = obj.innerHTML;
    					} else {
    						this.log.push('XR:PUSH id='+nid+' append='+nap+' Error: Not Found');
    					}
    				}
    				if (n.nodeName == 'js') {
    					//alert(n.textContent);
    					this.log.push('XR: js('+n.textContent.slice(0,20)+'...)');
    					eval(n.textContent);
    				}
    			}
    		}
        	tdxC.queueRunning = false; 
    		tdxC.XQ();
    	}
    },
    
    
    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 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(); 
tdxC.XI();

