definitions = {
	setupDefs: function(){
		var defList = document.getElementsByTagName('dfn');
		if(defList){
			for(var d = 0; d < defList.length; d++){
				var defA = document.createElement('a');
					defA.href = '/our-services/building-definitions.asp?w=' + defList[d].innerHTML;
					defA.innerHTML = defList[d].innerHTML;
					defA.className = 'defLink';

					defList[d].innerHTML = '';
					defList[d].appendChild(defA);

				if(window.ActiveXObject){
					defA.onclick = function(){ definitions.loadDef(); return false;};
				} else {
					handleEvent(defA, 'click', definitions.loadDef);
					defA.onclick = definitions.cancelClick;
				}
			}
		}
	},
	loadDef: function(e){
		
		// the target objcet (linkC) of the clicked link
		if(e && e.target){
			linkClicked = e.target;
		}
		if(window.event && window.event.srcElement){
			linkClicked = window.event.srcElement
		}
		if(!linkClicked){
			//return;
		}

		term = linkClicked.href.substr(linkClicked.href.lastIndexOf("?w=")+3);
		
		if(window.ActiveXObject){
			term = escape(term);
		}

		if(term){
			new ajax('/our-services/building-definitions-ajax.asp', {postBody: 'w='+term, onComplete: definitions.showTerm});
		} else {
			return;
		}
	},
	showTerm: function(request,e){
		var myJSON = eval("(" + request.responseText + ")")

		if(e && e.target){
			linkClicked = e.target;
		}
		if(window.event && window.event.srcElement){
			linkClicked = window.event.srcElement
		}
		if(!linkClicked){
			return;
		}


		var xPos = Position.cumulativeOffset(linkClicked)[0];
		var yPos = Position.cumulativeOffset(linkClicked)[1];

			var x,y;
			if (self.innerHeight) // all except Explorer
			{
				x = self.innerWidth;
				y = self.innerHeight;
			}
			else if (document.documentElement && document.documentElement.clientHeight)
				// Explorer 6 Strict Mode
			{
				x = document.documentElement.clientWidth;
				y = document.documentElement.clientHeight;
			}
			else if (document.body) // other Explorers
			{
				x = document.body.clientWidth;
				y = document.body.clientHeight;
			}

		if ((xPos + 290) >= x){
			xPos = xPos - ((xPos + 320 - x));
		}

		if(myJSON.state == "success"){
			if (!($('defDiv'))){
				var dD = document.createElement('div');
					dD.id = 'defDiv';
					dD.className = 'terms';
					dD.visability = 'hidden';
					dD.style.left = xPos + 'px';
					dD.style.top = yPos + 'px';
					
				var dDh5 = document.createElement('h5');
					dDh5.innerHTML = 'Definition Explanation'
					
				dD.appendChild(dDh5);
				
				var dDdl = document.createElement('dl');
				
				var dDdt = document.createElement('dt');
					dDdt.innerHTML = myJSON.dTerm;
					dDdt.id = 'dDdt';
				var dDdd = document.createElement('dd');
					dDdd.innerHTML = myJSON.dDesc;
					dDdd.id = 'dDdd';
					
					dDdl.appendChild(dDdt);
					dDdl.appendChild(dDdd);
				
				dD.appendChild(dDdl);

				var dDcl = document.createElement('a');
					dDcl.appendChild(document.createTextNode('CLOSE'));
					dDcl.innerHTML = 'CLOSE';
					dDcl.href = 'javascript: void(0);';
					dDcl.onclick = definitions.hideExplanation;

				dD.appendChild(dDcl);
				
				document.getElementsByTagName('body')[0].appendChild(dD);

				definitions.showExplanation();
			} else {
				dDdt = $('dDdt');
				dDdt.innerHTML = '';
				dDdt.innerHTML = myJSON.dTerm;

				dDdd = $('dDdd');
				dDdd.innerHTML = '';
				dDdd.innerHTML = myJSON.dDesc;
				$('defDiv').style.left = xPos + 'px';
				$('defDiv').style.top = yPos + 'px';

				definitions.showExplanation();
			}
		} else {
			//alert('ERROR ERROR');
			alert('An error has occurred. Details description could not be found');
			return;
		}
	},
	showExplanation: function(){
		if($('defDiv')){
			if(!(showEffect)){
				var showEffect = new fx.Opacity($('defDiv') , { duration: 100 });
					showEffect.hide();
			}
			showEffect.toggle();
		} else {
			//alert('no DD found! ???');
		}
	},
	hideExplanation: function(){
		if($('defDiv')){
			if(!(hideEffect)){
				var hideEffect = new fx.Opacity($('defDiv') , { opacity: 0, duration: 300 });
			}
			hideEffect.toggle();
		} else {
			//alert('no DD found! ???');
		}
	},
	cancelClick: function(){
		return false;
	}
}

handleEvent(window, "load", definitions.setupDefs);