/*
 * @ PixiTween V1.1
 * @ Ronan Drouglazet
 * @ http://wwww.my-own-world.com/
 */ 
		
		var pmTransition = function(cible,param,ext,departT,arrive,temps,quality,ease,onComplete){
			if(!window.objTween)
				window.objTween = new Object() ;
			
			var lenght = 0;
			
			for(var i in objTween){
				lenght++ ;
				if( objTween[i].cible == cible && objTween[i].param == param){
					clearTimeout(objTween[i].tempoInter);
					objTween[i].tempoInter = null ;
					doTween(lenght-1,objTween[i],cible,param,ext,departT,arrive,temps,quality,ease,onComplete);
					return ;	
				}
			}
			
			objTween['TW'+lenght] = new Object() ;
			doTween(lenght,objTween['TW'+lenght],cible,param,ext,departT,arrive,temps,quality,ease,onComplete);
		}
		
		var doTween = function(lenght,obj,cible,param,ext,departT,arrive,temps,quality,ease,onComplete){
			
			obj.easeValue = 0;
			obj.easeNumber = 0;
			obj.cible = cible;
			obj.param = param;
			obj.ext = ext;
			obj.departT = departT ;
			obj.arrive = arrive ; 
			obj.temps = temps ;
			obj.quality = quality ;
			obj.ease = ease ;
			obj.onComplete = onComplete ;
			
			//RECUPERATION DE LA VALEUR ACTUEL SI 'DEPART' NUL
			if(obj.departT == '' ){
				if(msie){
					if(obj.param == "opacity"){
						var tempStyle = $dom(obj.cible).style.getAttribute("filter");
						obj.departT = parseInt(tempStyle.substr(tempStyle.lastIndexOf('alpha(opacity=')+(obj.param.length+7)));
						obj.arrive = obj.arrive * 100 ;																			
					}else
						obj.departT = parseInt($dom(obj.cible).style.getAttribute(obj.param));
				}
				else if(!msie){
					var tempStyle = $dom(obj.cible).getAttribute('style');
					obj.departT = parseInt(tempStyle.substr(tempStyle.lastIndexOf('; '+obj.param+':')+(obj.param.length+2)));
				}
			}			
			
			//AFFECTATION DE LA VALUER ACTUEL + CALCUL DE L'INTERVAL A CREE
			obj.nowNb = obj.departT;
			obj.inter = obj.temps/obj.quality;
			
			//CALCUL DE L'INCREMENT A AJOUTER OU RETIRER LORS DE L'INTERVAL
			if(obj.arrive >= obj.departT)
				obj.increment = (obj.arrive - obj.departT) / obj.quality;
			else 
				obj.increment = (obj.departT - obj.arrive) / obj.quality;
			
			//INIT EASE S'IL EST PRESENT 
			obj.initEase = function(obj){
				if(obj.ease){
					obj.ease.strenght = obj.ease.strenght || 5 ;
					obj.easeValue = (obj.increment*obj.ease.strenght) ;
					obj.easeNumber = (obj.ease.strenght/50);
				}
			}
			
			//AFFECTATION DU PARAMETTRE A L'ATTRIBUT STYLE DE LA BALISE
			obj.setValue = function(obj){
				
				if(msie){
					if(obj.param == "opacity")
						$dom(obj.cible).style.setAttribute("filter","alpha(opacity="+(obj.nowNb)+")","false");
					else
						$dom(obj.cible).style.setAttribute(obj.param,obj.nowNb+obj.ext,"true");
				}else{
					var tempStyle = $dom(obj.cible).style;
						tempStyle[obj.param] = obj.nowNb+obj.ext;
				}
				
			}
			
			//TEST DE FIN
			obj.isFinished = function(obj){
				
				if((obj.arrive >= obj.departT && (obj.nowNb+obj.easeNumber) >= obj.arrive) || (obj.arrive <= obj.departT && (obj.nowNb-obj.easeNumber) <= obj.arrive)){
					obj.nowNb = obj.arrive;
					obj.setValue(obj);
					return true;
				}else
					return false;
			}
			
			//onComplete EXECUTER A LA FIN DE LA TWEEN, CONTIENT DES EVENEMENTS TELS QUE 'YOYO' ET 'BOUNCE'
			obj.doOnComplete = function(obj){
				obj.onComplete.delay = obj.onComplete.delay || 0 ;
				if(obj.onComplete.fct == 'yoyo'){
					obj.arrive = obj.departT ;
					obj.departT = obj.nowNb ;
					obj.onComplete.fct = '';
					obj.ease.type = (obj.ease.type == 'in') ? 'out' : 'in' ;
					obj.initEase(obj);
					obj.doTransition(obj);
				}else if(obj.onComplete.fct == 'bounce'){
					obj.distance = (obj.arrive>=obj.departT) ? (obj.arrive-obj.departT) : (obj.departT-obj.arrive) ;
					obj.arrive = obj.nowNb - ((obj.distance*20)/100) ;
					obj.departT = obj.nowNb;
					obj.temps = 500;
					obj.quality = 20;
					obj.ease.type = 'out';
					obj.onComplete.fct = 'rebond';
					obj.initEase(obj);
					obj.doTransition(obj);
				}else if(obj.onComplete.fct == 'rebond'){
					obj.arrive = obj.departT ;
					obj.departT = obj.nowNb ;
					obj.onComplete.fct = '';
					obj.ease.type = 'in' ;
					obj.temps = 500;
					obj.quality = 10;
					obj.initEase(obj);
					obj.doTransition(obj);
					
				}else
					obj.timerN = setTimeout(obj.onComplete.fct,obj.onComplete.delay);
			}
			
			//INCREMENTATION DE LA VALEUR ACTUEL EN FONCTION DE 'EASE' S'IL EXISTE
			obj.incValue = function(obj){
			
				if(obj.ease)
					switch(obj.ease.type){
						case "linear" :
						
						break;
						
						case "out" :	
							if(obj.easeValue > 0){
								obj.easeValue = obj.easeValue - (obj.easeValue*1e-1);
								obj.easeNumber = obj.easeValue;
							}
						break;
						
						case "in" :	
							if(obj.easeNumber < obj.easeValue){
								obj.easeNumber = obj.easeNumber + (obj.easeNumber*2e-1);
							}
						break;
							
					};
			
				if(obj.arrive >= obj.departT)
					obj.nowNb = (obj.easeNumber > 0) ? (obj.nowNb + obj.increment + obj.easeNumber) : (obj.nowNb + obj.increment);
				else
					obj.nowNb = (obj.easeNumber > 0) ? (obj.nowNb - obj.increment - obj.easeNumber) : (obj.nowNb - obj.increment);
				
			}
			
			//CHEF D'ORCHESTRE, FONCTION EXECUTER EN BOUCLE SAUF SI 'isFinished()' S'AVERE VRAI
			doTransition = function(s){
				var objectTW = objTween['TW'+s] ;
					objectTW.incValue(objectTW);
					objectTW.setValue(objectTW);
				
				if(!objectTW.isFinished(objectTW))
					objectTW.tempoInter = setTimeout("doTransition('"+s+"')",objectTW.inter);
				else if(objectTW.onComplete)
					objectTW.doOnComplete(objectTW);
			}
			
			obj.initEase(obj);
			doTransition(lenght);
			
		}
		

function $dom(id){
    return document.getElementById(id);
}

function getInternetExplorerVersion(){
    var rv = false; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer') {
        var ua = navigator.userAgent;
        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null) 
            rv = parseFloat(RegExp.$1);
    }
    return rv;
}

var msie = getInternetExplorerVersion();

