// Javascript 
(function(){	

	var animTrans = {};
	
	animTrans.instances = new Array();
	animTrans.intCount = 0;

	//<(
	animTrans.run = function(intKey){

		// var text = '';
		// text += ' curVal ' + animTrans.instances[intKey].curVal;
		// text += ' criteria ' + animTrans.instances[intKey].criteria;
		// text += ' endVal ' + animTrans.instances[intKey].endVal;
		// alert(text);

		// var txt = document.createTextNode(text);
		// window.crlw.getNode('logger').appendChild(txt);
		// var br = document.createElement('BR');
		// window.crlw.getNode('logger').appendChild(br);
		// mesure current value
		var complete = true;
		if(animTrans.instances[intKey].criteria == 'decrease'){
			//alert('decrease');
			if(Number(animTrans.instances[intKey].curVal) >= Number(animTrans.instances[intKey].endVal)){
				complete = false;
			//	alert('not complete');
			//}else{
			//	alert('complete');
			}
		}else if(animTrans.instances[intKey].criteria == 'increase'){
			//alert('increase');
			if(Number(animTrans.instances[intKey].curVal) <= Number(animTrans.instances[intKey].endVal)){
				complete = false;
			//	alert('not complete');
			//}else{
			//	alert('complete: curVal:' + Number(animTrans.instances[intKey].curVal) + ' endVal: ' +  Number(animTrans.instances[intKey].endVal));
			}
		}
		// alter value if not met
		if(!complete){
			var newVal = null;
			if(animTrans.instances[intKey].criteria == 'decrease'){
				newVal = (Number(animTrans.instances[intKey].curVal) - Number(animTrans.instances[intKey].jumpVal));

			}else if(animTrans.instances[intKey].criteria == 'increase'){
				
				newVal = (Number(animTrans.instances[intKey].curVal) + Number(animTrans.instances[intKey].jumpVal));
			}
			switch(animTrans.instances[intKey].property.toLowerCase()){
				case 'opacity':
						window.crlw.setTransparency(animTrans.instances[intKey].nodeId,newVal)
						//alert('setting opacity of' + animTrans.instances[intKey].nodeId + ' to ' + newVal)
					break;
			}	
			animTrans.instances[intKey].curVal = newVal;
		}

		// set value and clear interval if set
		if(complete){
			window.clearInterval(animTrans.instances[intKey].theInt);
			eval(animTrans.callBack);
		}
	}
	//)>
	
	//<(
	animTrans.set = function(nodeId,property,startVal,endVal,duration,callBack){
		var proceed = true;
		var to_return = false;
		var node = null;
		if(!(node = window.crlw.getNode(nodeId))){
			proceed = false;
		}
		if(proceed){
			animTrans.intCount++;
			var intKey = animTrans.intCount;
			var newInstance = new Array();
			newInstance['node'] = node;
			newInstance['nodeId'] = nodeId;
			newInstance['curVal'] = startVal;
			newInstance['startVal'] = startVal;
			newInstance['endVal'] = endVal;
			var difference = Math.abs(startVal - endVal);
			var frames = duration * 30;
			newInstance['jumpVal'] = Math.round( difference / frames );
			newInstance['property'] = property;
			newInstance['intKey'] = intKey;
			var criteria = null;
			if(Number(startVal) > Number(endVal)){
				criteria = 'decrease';
			}else{
				criteria = 'increase';
			}

			// alert('startVal: ' + newInstance['startVal'] 
			// 	+ 'endVal: ' + newInstance['endVal'] 
			// 	+ ' jumpVal: ' + newInstance['jumpVal']
			// 	+ ' duration: ' + duration
			// 	+ ' frames: ' + frames
			// 	+ ' difference: ' + difference
			// 	+ ' criteria: ' + criteria
			//);
			newInstance['criteria'] = criteria;
			animTrans.instances[intKey] = newInstance;
			var funcString = 'window.crlw.animTrans.run(' + intKey + ')';
			animTrans.instances[intKey].theInt = window.setInterval(funcString,33);
			animTrans.callBack = callBack;
		}
		return to_return;
	}
	//)>
	
	window['crlw']['animTrans'] = animTrans;

})();	

