// Standard functions. 

// on récupère les script chargés
var Kujjuk_Scripts = document.getElementsByTagName( "script" );

// on récupère le tout dernier script chargé, qui n'est personne
// d'autre que celui sur lequel on est
var Kujjuk_std_Adress  = Kujjuk_Scripts[Kujjuk_Scripts.length - 1].src;
var Kujjuk_base_Adress = Kujjuk_std_Adress.substring(Kujjuk_std_Adress.length-9, Kujjuk_std_Adress);
// class pour la visionneuse
var Kujjuk_reticule_Adress = Kujjuk_base_Adress+"images/reticule.png";
var kujjukZoomVisible = false;

var idZoomHolder ="kujjukImageHolder";
var idZoomImage ="kujjukZoom";
var idSelecteurImage ="kujjukSelecteur";
//------------------------------------------------------------------------------
//-----------------------------getDocument--------------------------------------
//------------------------------------------------------------------------------

// Use to get the main document, add the check for IE
function getDocument(){
	return document;
}

//------------------------------------------------------------------------------
//----------------Add Missing items in IE7--------------------------------------
//------------------------------------------------------------------------------
/*if(!Array.prototype.indexOf){
	    Array.indexOf = function(obj){
	        for(var i=0; i<this.length; i++){
	            if(this[i]==obj){
	                return i;
	            }
	        }
	        return -1;
	    }
	}*/
	
function kujjukIndexOf(myArray, object ){

	if (!Array.prototype.indexOf) {
	
		for (var i =  0; i < myArray.length; i++) {
		  if (myArray[i] == object) {
			return i;
		  }
		}
		return -1;
	  }
	  else
	  return myArray.indexOf(object);
}
//------------------------------------------------------------------------------
//-----------------------------setAlternativePath-------------------------------
//------------------------------------------------------------------------------
var kujjuk_alternativePath;
var kujjuk_pictureName;
// utilisé si le path des images n'est pas inclut dans la balise img
function kujjukSetAlternativePath(newPath, pictureName){
	kujjuk_pictureName = pictureName
	kujjuk_alternativePath = newPath;
}


//------------------------------------------------------------------------------
//-----------------------------init360------------------------------------------
//------------------------------------------------------------------------------

// trouve les images ou il y à un 360 à mettre et initialise les visionneuses en creant les objets Kujjuk360 associés.


// nbFrame 						nombre total d'images pour le 360°
// startWithAnimation = true;		Annimation au début du chargement
// speedStart							vitesse de la première rotation si startWithAnimation=true, 10(très rapide) < speedStart < 100 (lent mais encore fluide)

// imageId = 'none';		id de l'image dans la balise img, exemple : <img id="votreImageId" src="...">, si l'id varie en fonction de l'image, indiquez : imageId = 'none' puis utilisez la variable imageClass
// imageClass = 'CatPhoto';		exemple : <img class="votreImageClass" src="...">

// nombre de visionneuses à traiter
var numberKujjukVisio =0
var kujjukTimerStarted = false;
var listKujjukVisio = new Array
var zoomKujjukOn = false;

// zoom items
var kujjukZoomItem;
var kujjukImageHolder;
var kujjukSelecteur;
var kujjukSpeed = 10;

function init360(nbFrames,imageId,imageClass,nbTurn,speedStart, itemMinimumSpeed,inertie, decelerationFunction){
	// /kujjuk-activite-nom marque-nomProduit-idP-idMax.jpg
	var bFrame = false;
	var kujjukImg;
	if(imageId=='none'){
		if(imageClass=='none'){
			alert("Vous avez mal configuré vos varibales, ouvrez le fichier kujjuk.js pour plus d'informations");
		}else{
			kujjukImg = getDocument().getElementsByClassName(imageClass);
		}
	}else{
		kujjukImg = new Array();
		kujjukImg.push( getDocument().getElementById(imageId));
	}
	
	var returnArray = new Array
		for (var indexVisionneuse=0; indexVisionneuse<kujjukImg.length;indexVisionneuse++)
	{
		//console.log(kujjukImg[indexVisionneuse]);
		if(kujjukImg[indexVisionneuse]==null){
			if(imageId != "none")
				alert("ERROR "+imageId+" inaccessible");
			else
				alert("ERROR "+imageClass+" inaccessible");
			
		}else{
			var imgPath;
			var imageName;
			if(kujjuk_alternativePath == null){
			var imageSrc = kujjukImg[indexVisionneuse].src;
			imageName = "l";
			imagePath = imageSrc.substring(0,imageSrc.length-6);
			}
			else{
				imagePath = kujjuk_alternativePath
				imageName = kujjuk_pictureName;
			}
		if(bFrame == "random" || bFrame == "true"){
			startFrame = Math.round(Math.random()*nbFrames)
			//console.log(startFrame)
			}
		else{
			if( bFrame == "false")
				startFrame = 0;
			else
				startFrame = bFrame
		}
		
			kujjuk360 = new Kujjuk360(nbFrames,kujjukImg[indexVisionneuse],imagePath,imageName,nbTurn,startFrame,itemMinimumSpeed,speedStart,inertie,decelerationFunction)
			listKujjukVisio.push( kujjuk360);
			returnArray.push(kujjuk360);
			numberKujjukVisio++;
		}
	}
	
	return returnArray;
	//animateOneRotation();
	//getDocument().listVisionneuse[0] = new Kujjuk360(nbFrames,kujjukImg,imagePath,startWithAnimation,speedStart);
}

//------------------------------------------------------------------------------
//--------------Lance le chargement des obj-------------------------------------
//------------------------------------------------------------------------------

var actualLoadingItem;
function startAnnims(item){
	if(actualLoadingItem != null && kujjukIndexOf(listKujjukVisio, actualLoadingItem)<listKujjukVisio.length-1){
		actualLoadingItem = listKujjukVisio[kujjukIndexOf(listKujjukVisio,actualLoadingItem)+1]
		if(actualLoadingItem.READY)
			startAnnims(actualLoadingItem)
		actualLoadingItem.startLoading(null);
	}
	if(actualLoadingItem == null){
		actualLoadingItem = listKujjukVisio[0]
		actualLoadingItem.addCompleteListener(startAnnims);
		actualLoadingItem.startLoading(null);
		
	}
animateOneRotation();
}


//------------------------------------------------------------------------------
//--------------Zoom object creation--------------------------------------------
//------------------------------------------------------------------------------

function Kujjuk_create_zoom(){
	        var zoomTag = document.createElement("div");
          
            zoomTag.id = idZoomHolder;
            zoomTag.src = Kujjuk_reticule_Adress;
            document.body.appendChild(zoomTag);
            return zoomTag;
}
function Kujjuk_create_imageHolder(){
	kujjukImageHolder.innerHTML += "<img  id=\""+idZoomImage+"\"/>";
	return getDocument().getElementById(idZoomImage);
}
function Kujjuk_create_selecteur(){
	        var imgTag = document.createElement("img");
          
            imgTag.id = idSelecteurImage;
            imgTag.src = Kujjuk_reticule_Adress;
            document.body.appendChild(imgTag);
             return imgTag;
}
//------------------------------------------------------------------------------
//--------------Zoom on roll over-----------------------------------------------
//------------------------------------------------------------------------------

function Kujjuk_actualizeZoom(e , kujjuk360){
	if(!zoomKujjukOn || !kujjuk360.zoomActivated)
		return;
		
	e = Kujjuk_getMousePositionInEvent(e);
		
	kujjukSelecteur.actualise(e,kujjuk360);
}

function hideZoom(e){
	if(!zoomKujjukOn)
		return
	kujjukSelecteur.hide();
}
//------------------------------------------------------------------------------
//--------------Pour les premieres rotations------------------------------------
//------------------------------------------------------------------------------
// le tick du timer etant forcement sur window, on doit le sortir de l'objet...

function animateOneRotation(){
	
	if(kujjukTimerStarted)
		return;
	kujjukTimerStarted = true;
	kujjukTimerTick();
}
function kujjukTimerTick(){
	for (indexKujjuk360 in listKujjukVisio)
	{			
		var itm = listKujjukVisio[indexKujjuk360]
		
			if(itm == null || itm.startLoading == null)
				continue;
				
		itm.onTimerTick()
		
	}
	setTimeout(this.kujjukTimerTick,kujjukSpeed);
}


//------------------------------------------------------------------------------
//------------------getElementsByClass------------------------------------------
//------------------------------------------------------------------------------


// renvoie els elements en fonction de la class de style css

document.getElementsByClassName = function(clsName){
    var retVal = new Array();
    var elements = getDocument().getElementsByTagName("*");
    for(var i = 0;i < elements.length;i++){
        if(kujjukIndexOf(elements[i].className," ") >= 0){
            var classes = elements[i].className.split(" ");
            for(var j = 0;j < classes.length;j++){
                if(classes[j] == clsName)
                    retVal.push(elements[i]);
            }
        }
        else if(elements[i].className == clsName)
            retVal.push(elements[i]);
    }
    return retVal;
}

//------------------------------------------------------------------------------
//------------------ExtractNumber-----------------------------------------------
//------------------------------------------------------------------------------


// use to remove the px of the Css positions...
function ExtractNumber(value)
{
    var n = parseInt(value);
	
    return n == null || isNaN(n) ? 0 : n;
}

//------------------------------------------------------------------------------
//------------------Position of the mouse in the event--------------------------
//------------------------------------------------------------------------------
// compatibility issue code
// traitement : e=Kujjuk_getMousePositionInEvent(e)
function Kujjuk_getMousePositionInEvent(e) {
	var posx = 0;
	var posy = 0;
	if (!e) {var e = window.event;
	e.target = e.srcElement;
	}
	if (e.pageX || e.pageY) 	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) 	{
		posx = e.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
	}
	e.posX = posx;
	e.posY = posy;
	
	return e;
}
//------------------------------------------------------------------------------
//------------------Test if the mouse is over this item-------------------------
//------------------------------------------------------------------------------
// ( used if it is over but something is in between
function Kujjuk_isOver(e,element) {
	var posElem = Kujjuk_getPos(element)
	e = Kujjuk_getMousePositionInEvent(e);
	if(e.posX<posElem.l || e.posY<posElem.t || e.posX>posElem.r || e.posY>posElem.b)
	return true;
	return false;
}


/** 
 * getPos() 
 * =============================================================================
 * retourne la position (dans la page) de chacun des côtés de l'élément /elem/,
 * dispatché dans un tableau associatif contenant les clés t|b|l|r
 * (la valeur retournée est donnée en pixels)
 * (tient compte des différences de fonctionnement des navigateur)
 * 
 * @from			http://www.webbricks.org/bricks/getPos/
 *
 * @param           Object          elem            l'élément inspecté
 * @return          Integer         
 * @access          public
 * 
 */
 function Kujjuk_getPos (elem) {
	if(elem == null)
	return;
    var pos={'r':0,'l':0,'t':0,'b':0,'w':0,'h':0};
    var tmp=elem;
    
    // on procède de parent en parent car IE fonctionne comme ça
    // (les autres donnent directement la position par rapport à la page)
    
    do {
       // console.log(tmp);
        pos.l += tmp.offsetLeft;
        tmp = tmp.offsetParent;
    } while( tmp != null );
    pos.r = pos.l + elem.offsetWidth;
    
    tmp=elem;
    do {
        pos.t += tmp.offsetTop;
        tmp = tmp.offsetParent;
    } while( tmp !== null );
    pos.b = pos.t + elem.offsetHeight;
    
    pos.w = pos.r -pos.l;
    pos.h=pos.b-pos.t;
    return pos;
}

