//    "",   ,  .
//   1.2
//   2001  ,       - Promarket.
//
//   film = new Film("film") 						-   ""
//   film.setPeriodBeforeLine(period)			-     ,   
//   film.setGlobalPeriodBetweenLines(period) -    	
//   film.setGlobalPeriodBetweenImages(period)	-        
//   film.addLine("1.gif", "2.gif", "3.gif")			-      
//   film.addCurrentLine()						-          
//   film.setImages("im1", "im2", "im3")		-  ,     
//   film.setFilter(12, 2)						-    
//   film.playFilm()							-  

function Film(name){
	if( ! name) { alert("   ."); return false }
	// properties
	this.objname = name;		//  
	this.images = new Array(); 	//   
	this.order_type	= new Array();	//     : default, random, select
	this.order	= new Array();	//       select
	this.default_order_type = 'default';
	this.IE = (navigator.appName.charAt(0)=='M' && navigator.appVersion.charAt(0) > 3) ? true : false;	// IE   ?
	this.imagenames = new Array();	//   ,    
	this.transition = 12;
	this.duration = 1.35;
	this.playing_line = 0;		// ,       playFilm()
	this.repeatFilmsPeriod = 0;	//     
	this.debug = 0;			//  =1    
	this.prefix = '';
	this.sufix = '';

	this.period_before_line = new Array();
	this.global_period_between_images = 0;
	this.global_period_between_lines = 0;

	// methods
	this.addLine = addLine;
	this.addCurrentLine = addCurrentLine;
	this.lineComplete = lineComplete;
	this.playFilm = playFilm;
	this.setImages = setImages;
	this.setFilter = setFilter;
	this.setPeriodBeforeLine = setPeriodBeforeLine;
	this.setGlobalPeriodBetweenImages = setGlobalPeriodBetweenImages;
	this.setGlobalPeriodBetweenLines = setGlobalPeriodBetweenLines;
	this.setOrderType = setOrderType;
	this.setDefaultOrderType = setDefaultOrderType;
	this.selectOrder = selectOrder;
	return this;
}

function selectOrder(){
	var line = this.images.length;
	if( this.imagenames.length != selectOrder.arguments.length ){
		alert('selectOrder:   ,      .');
		return false;
	}
	this.order[line] = new Array();
	for(var i=0; i<selectOrder.arguments.length; i++){
		this.order[line][i] = selectOrder.arguments[i];
	}
	return true;
}

function setDefaultOrderType(type){
	this.default_order_type = type;
	return true;
}

function setOrderType(type){
	type = (!type) ? this.default_order_type : type;
	if( type != 'default' && type != 'random' && type != 'select' ){
		alert("setOrder:     : "+type);
	}
	this.order_type[this.images.length] = type;
	return true;
}

function setPeriodBeforeLine(period){
	this.period_before_line[this.images.length] = period;
	return true;
}

function setGlobalPeriodBetweenImages(period){
	this.global_period_between_images = period;
	return true;
}

function setGlobalPeriodBetweenLines(period){
	this.global_period_between_lines = period;
	return true;
}

function setFilter(transition, duration){
	this.transition = transition;
	this.duration = duration;
	return true;
}

function setImages(){
	for(var i=0; i<setImages.arguments.length; i++){
		this.imagenames[i] = setImages.arguments[i];
	}
	return true;
}

function addLine(){ //     
	if( addLine.arguments.length != this.imagenames.length ){
		alert("addLine:       !");
		return false;
	}
	var line = this.images.length;
	if( ! this.order_type[line] ){
		this.setOrderType();
	}
	this.images[line] = new Array();
	for(var i=0; i < addLine.arguments.length ; i++){
		this.images[line][i] = new Image();
		this.images[line][i].src = this.prefix+addLine.arguments[i]+this.sufix;
	}

	return true;
}

function addCurrentLine(){ //      
	var line = this.images.length;
	if( ! this.order_type[line] ){
		this.setOrderType();
	}
	this.images[line] = new Array();
	for(var i=0; i < this.imagenames.length ; i++){
		this.images[line][i] = new Image();
		this.images[line][i].src = eval("document."+this.imagenames[i]+".src");
	}

	return true;
}

function lineComplete(line){
	if( line >= this.images.length ){ alert("lineComplete:    "+line+"  ."); return false }
	for(var i=0; i < this.images[line].length; i++){
		if( ! this.images[line][i].complete ){
			if( this.debug ){
				window.status = "  : "+this.images[line][i].src;
			}
			return false;
		}
	}
	return true;
}

function playFilm(){
	if( playFilm.arguments.length >0 ) { alert(" playFilm()   "); return false }
	var theperiod = 500;	//      ,     ,    .
	if( this.lineComplete(this.playing_line) ){
		var num;	//    
		var tmp_arr = new Array(this.imagenames.length); //  ,     ,   
		for(var i=0; i < this.imagenames.length; i++){
			switch ( this.order_type[this.playing_line] ) { 
				case 'default':
					num = i;
					break;
				case 'random': 
					do{
						num = rnd(0,this.imagenames.length-1);
					} while( tmp_arr[num] );
					tmp_arr[num] = true;
					break;
				case 'select':
					num = this.order[this.playing_line][i];
					break;
				default:
					alert("playFilm:     : "+this.order_type[this.playing_line]);
				return false;
			}
			setTimeout('playFilter('+this.IE+',document.'+this.imagenames[i]+', "'+this.images[this.playing_line][i].src+'", '+this.duration+', '+this.transition+')', num*this.global_period_between_images);
		}
		if(this.playing_line >= this.images.length-1){
			this.playing_line = 0;
			theperiod = this.repeatFilmsPeriod;
		} else {
			this.playing_line++;	
			theperiod = 0;
		}
		theperiod += (this.period_before_line[this.playing_line] > 0) ? this.period_before_line[this.playing_line] : this.global_period_between_lines;
		theperiod += this.imagenames.length*this.global_period_between_images;
	}
	setTimeout(this.objname+".playFilm()",  theperiod);
	return true;
}

function playFilter(IE, img, src, duration, transition){
	if(  IE ){
		if( img.filters.item(0).status == 2 ){
			return false;
		}
		img.filters.item(0).Duration = duration;
		img.filters.item(0).Transition = transition;
		img.filters.item(0).Apply();
	}
	img.src = src;
	if( IE ){ 
		img.filters.item(0).Play();
	}
	return true;
}
function rnd(c, x){var therange = x-c+1;	return (Math.floor(Math.random() * Math.pow(10,("" + therange).length)) % therange) + parseInt(c);}

