/*	Prompter (c) Net-Createurs - www.net-createurs.com
	Utilisation :
		var prompter1=new NC.prompter.set(obj)		// obj = object or object ID of the object to animate
		prompter1.step=xx
		...
		NC.prompter.run('prompter1')
*/

if(typeof(NC)=='undefined') NC={};
NC.prompter= {

	nb:0,							// Nb of promter running, to allocate automatic IDs when required

	// Parameters set constructor
	set:function(obj) {

		// public parameters
		this.step=1;
		this.path=0;				// 0=vertical, 1=horizontal
		this.delay=40;				// Délai en msec, permet contrôler les basses vitesses de manière plus fluide
		this.continuous=false;		// True -> mouvement continu
		this.continuousSpace=0;		// Pour un mouvement continu : espace à laisser entre la dernière news et la première rebouclée
		this.pauseClass='';			// Nom de class des élémenst sur lequels marquer une pause
		this.pauseDelay=3000;		// Durée de pause lorsque pauseClass est positionné

		// Private vars
		this.init=false;
		this.stop=false;
		this.pos=0;
		this.content_size=0;
		this.container_size=0;
		this.obj=obj;
		this.offsets=new Array();	// offset des objets provoquant une pause
		this.offset=0;				// pointeur courant dans offsets[]
	},

	/* main entry
	 * pname=name of a parameters block, obj=object or object ID to prompt
	 */ 
	
	run:function(pname) {
		var params=eval(pname);
		if(params) {
			var path=params.path, obj=params.obj;

			// Initialisaiotn éventuelle
			if(!params.init) {
				if(typeof(obj)=='string') {
					objID=obj;
					obj=document.getElementById(obj);
					params.obj=obj;
				}
				else {
					if(!obj.id) obj.id='NC-prompter-'+params.nb++;
					objID=obj.id;
				}

				// Identification des offsets des éléments déclanchant une pause
				if(params.pauseClass) params.offsets=this.getOffsets(obj,params.pauseClass);
							
				// Arrêt du défilement au mouseover, sauf sur un Pad
				var	nav=navigator.userAgent.toLowerCase();
				if(nav.indexOf('iphone;')==-1 && nav.indexOf('ipad;')==-1) {
					obj.onmouseover= function() { eval(pname).stop=true };
					obj.onmouseout= function() { eval(pname).stop=false };
				}

				if(path) obj.style['whiteSpace']='nowrap';
				params.container_size=document.getElementById(objID+'-container')[path? 'offsetWidth' : 'offsetHeight'];
				params.content_size=obj[path? 'offsetWidth' : 'offsetHeight'];
				if(params.continuous) obj.innerHTML+='<div style="'
					+ (path? 'display:inline;padding-left:' : 'padding-top:') + params.continuousSpace + 'px">'
					+ obj.innerHTML
					+ '</div>';
				params.pos=params.step;		// Permet d'analyser le démarrage comme u passage par 0
				params.init=true;
			}

			// Scroll
			var delay=params.delay;
			if(!params.stop) {
				var pos=params.pos, nextpos=pos-params.step;
				if(nextpos<0 && nextpos <= -params.content_size) nextpos= params.continuous? params.continuousSpace : params.container_size;
				// Pause ?
				var what=path ? 'left' : 'top';
				if(params.offsets.length) {
					var distance=nextpos+params.offsets[params.offset][what];
//alert('cible=' + params.offset +'\nposition cible='+params.offsets[params.offset][what]+'\npos actuelle= ' + pos+'\n'+'\ndistance=' + distance + '\nstep='+params.step)
					if(distance<=0 && params.step>-distance) {
						nextpos=-params.offsets[params.offset++][what];
						delay=params.pauseDelay;
						if(params.offset>=params.offsets.length) params.offset=0;
					}
				}
				params.obj.style[what]=nextpos+'px';
				params.pos=nextpos;
			}
			setTimeout("NC.prompter.run('" + pname + "')",delay);

		}
	},

	// Lecture des offsets des éléments dont le nom de class=cname
	getOffsets:function(obj,cname,offsets) {
		if(!offsets) var offsets=new Array();
		if(obj.nodeType!=3) {
			var child=obj.childNodes;
			if(obj.nodeType==1 && obj.className && obj.className==cname) offsets[offsets.length]={ left:obj.offsetLeft, top:obj.offsetTop};
			for(var i=0;i<child.length;i++) offsets=this.getOffsets(child[i],cname,offsets);
		}
		return offsets;
	}

}

