
//  Универсальный скрипт "фильм", для создания профессиональных, визуальных фильмов.
//  Версия 1.0
//  © 2001 Олег Бугримов, Данила Кольцов и Сергей Севастьянов из веб-студии Promarket.
//
//   film = new Film("film") 						- создается объект "фильм"
//   film.addLine("1.gif", "2.gif", "3.gif")			- добавляется набор картинок для очередного прохода
//   film.setImages("im1", "im2", "im3")		- определяются картинки, на которые будет проецироваться фильм
//   film.setFilter(12, 2)						- определяется фильтр для фильма
//   film.playFilm(time1, time2)				- запускается фильм, с периудом между картинками - time1 и периудом между проходами time2

function Film(name){
	if( ! name) { alert("Нужно передать имя объекта."); return false }
	// properties
	this.objname = name;		// имя объекта
	this.images = new Array(); 	// хранит объекты картинок
	this.IE = (navigator.appName.charAt(0)=='M' && navigator.appVersion.charAt(0) > 3) ? true : false; // IE это или нет?
	this.imagenames = new Array();	// массив имен картинок, на которых показывается фильм
	this.transition;
	this.duration;
	this.playing_line = 0;		// линия, с которой начинает свой показ метод playFilm()
	this.repeatFilmsPeriod = 0;
	this.debug = 0;			// если =1 то выдаются предупреждающие сообщения
	// methods
	this.addLine = addLine;
	this.lineComplete = lineComplete;
	this.playFilm = playFilm;
	this.setImages = setImages;
	this.setFilter = setFilter;
	return this;
}

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(){ // метод добавления очередного прохода картинок
	var line = this.images.length;
	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 = addLine.arguments[i];
	}
	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(time, period){
	if( playFilm.arguments.length !=2 ) { alert("Функции playFilm(time, period) нужны два параметра"); return false }
	var theperiod = 500;	// через сколько запускать этот метод снова, изменяется в зависимости от того, загружена линия или нет.
	if( this.lineComplete(this.playing_line) ){
		for(var i=0; i < this.imagenames.length; i++){
			setTimeout('playFilter('+this.IE+',document.'+this.imagenames[i]+', "'+this.images[this.playing_line][i].src+'", '+this.duration+', '+this.transition+')', i*time);
		}
		if(this.playing_line >= this.images.length-1){
			this.playing_line = 0;
			theperiod = this.imagenames.length*time+this.repeatFilmsPeriod+period;
		} else {
			this.playing_line++;
			theperiod = this.imagenames.length*time+period;
		}
	}
	setTimeout(this.objname+".playFilm("+time+","+period+")",  theperiod);
	return true;
}

function playFilter(IE, img,src, duration, transition){
	if(  IE ){
	  	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;
}
