var PS = "<!-- page-separator -->";
var fadeTime = 0.8;
var pageTurnerFadeTime = 0.4;
var PAGE_TURNER_BOTTOM = "30px";

function getElementsByClass(name) {  
   var found = 0;  
   var elems = new Array();  
   var alltags = document.getElementsByTagName("*");  
   if (alltags) {  
     for (i=0; i < alltags.length; i++) {  
         if (alltags[i].className==name) {  
           elems[found++]=alltags[i];  
         }  
     }  
   }  
   return(elems);  
}  


// special Etalon menu
var Content = Class.create();
Content.prototype = {

	initialize: function(content, containerDivId) {
		this.content = content;
		this.containerDivId = containerDivId;
		this.currentPageName = "";
		this.textPageNumber = 0;
	},
	
	getPage: function(pageNameParam) {
		var pageName = pageNameParam;
		if (pageName.indexOf("#") == 0) 
			pageName = pageName.substr(1);
		
		for (i=0;i<this.content.length;i++) {
			if (this.content[i].name == pageName)
				return this.content[i];
		}
	},
	
	getTextPage: function(text, pageNumber) {
		return(text.split(PS)[pageNumber]);
		
	},
	
	getImageHTML: function(illustration) {
		var image = new Image(illustration.width, illustration.height); 
		image.src = illustration.src;
		var html = new Array();
		
		if ((version >= 5.5) && (version < 7) && (document.body.filters)) {
			html.push("<span class=\"png\" title=\"\" style=\"width: "); 
			html.push(image.width);
			html.push("px; height:");
			html.push(image.height );
			html.push("px; display:inline-block; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'");
			html.push(image.src);
			html.push("\', sizingMethod='scale');\"></span>");			
		   
		} else {
			html.push("<img src=\"");
			html.push(image.src);
			html.push("\" width=\"");
			html.push(image.width);
			html.push("\" height=\"");
			html.push(image.height);
			html.push("\"/>");			
		}
	
		return html.join("");
	},
	
	loadPage: function(pageName) {
		this.textPageNumber = 0;
		var page = this.currentPage;	
		if (page.template == "introduction-template") {
			var textElement = document.getElementById("text");
			if (textElement != null) {
				textElement.innerHTML = page.text[0];
				/*
				var pngElements = getElementsByClass("png-image");
				
				for (var i=0;i<pngElements.length;i++) {
					//fixPNG(pngElements[i], page.nestedImages[i]);
				}				
				*/
			}
			
			var illustrationElement = document.getElementById("illustration");
			if (illustrationElement != null) {
				illustrationElement.innerHTML = this.getImageHTML(page.illustration);
				illustrationElement.style.right = page.illustration.right + "px";
				illustrationElement.style.bottom = page.illustration.bottom + "px";
			}
			
			var titleImageElement = document.getElementById("title");
			if (page.titleImage != "") {
				if (titleImageElement != null) {
					titleImageElement.innerHTML = this.getImageHTML(page.titleImage);
				}
			} else 
				titleImageElement.innerHTML = "";
			
		} else 	if (page.template == "ts-template") {
			var textElement = document.getElementById("text");
			if (textElement != null) {
				textElement.innerHTML = page.text[0];
			}
			
		} else if (page.template == "contacts-template") {
			var textElement = document.getElementById("text");
			if (textElement != null) {
				textElement.innerHTML = page.text[0];
			}
			var illustrationElement = document.getElementById("illustration");
			if (illustrationElement != null) {
				illustrationElement.innerHTML = this.getImageHTML(page.illustration);
				illustrationElement.style.right = page.illustration.right + "px";
				illustrationElement.style.bottom = page.illustration.bottom + "px";
			}
			
		}

		
	},
	
	nextTextPage: function() {
		var page = this.getPage(this.currentPageName);
		var oldTextPage = this.textPageNumber;
		if (page.text.length-1>this.textPageNumber)
			this.textPageNumber++;		
			
		if (oldTextPage != this.textPageNumber)
			this.startChangeTextPage();
		
	},
	
	previousTextPage: function() {
		var page = this.getPage(this.currentPageName);
		var oldTextPage = this.textPageNumber;
		if (this.textPageNumber>0)
			this.textPageNumber--;		
			
		if (oldTextPage != this.textPageNumber)
			this.startChangeTextPage();
	},
	
	
	
	startChangeTextPage: function() {		
	
		new Effect.Fade('text', { duration: fadeTime, queue: {position: 'end', scope: 'textscope'}, afterFinish: this.endChangeTextPage });
		
			
		if (document.getElementById("pageturner-next").style.display == "none") {
			if (this.textPageNumber < this.currentPage.text.length-1)
				new Effect.Appear("pageturner-next", { duration: pageTurnerFadeTime, queue: {position: 'end', scope: 'textscope'}  });
		} else {
			if (this.textPageNumber == this.currentPage.text.length-1)
				new Effect.Fade("pageturner-next", { duration: pageTurnerFadeTime, queue: {position: 'end', scope: 'textscope'}  });
		}
		
		if (document.getElementById("pageturner-previous").style.display == "none") {
			if (this.textPageNumber > 0)
				new Effect.Appear("pageturner-previous", { duration: pageTurnerFadeTime, queue: {position: 'end', scope: 'textscope'}  });			
		} else {
			if (this.textPageNumber == 0)
				new Effect.Fade("pageturner-previous", { duration: pageTurnerFadeTime, queue: {position: 'end', scope: 'textscope'}  });
		}
		
			
					

	},
	
	endChangeTextPage: function() {
		var textElement = document.getElementById("text");
		textElement.innerHTML = content.currentPage.text[content.textPageNumber];		
		new Effect.Appear('text', { duration: fadeTime, queue: {position: 'front', scope: 'textscope'} });		
	},
	
	clearEffectQueue: function(scopeName) {
		var queue = Effect.Queues.get(scopeName);
		queue.each(function(e) { e.cancel() });		
	},
	
	
	changePage: function(pageName) {
		if (pageName == this.currentPageName)
			return;
		
		if (this.currentPageName != null)
			this.oldPage = this.getPage(this.currentPageName);
			
		this.currentPageName = pageName;		
		this.currentPage = this.getPage(pageName);
		
		var template = this.currentPage.template;
		if (this.oldPage != null && this.oldPage.template == "ts-template" && this.oldPage.name.indexOf(this.currentPage.name) == 0)
			template = "ts-template";
			
		
		
		
		if (template == "introduction-template") {		
			this.clearEffectQueue('illustrationScope');
			this.clearEffectQueue('textScope');
			this.clearEffectQueue('titleScope');
			var textElement = document.getElementById('text');		
			if (textElement.style.display != 'none') {
				new Effect.Fade('text', { duration: fadeTime, queue: {position: 'front', scope: 'textScope'} });
				// TODO: hack
				var helpedElement = document.getElementById("help");
				if (helpedElement != null && helpedElement.style.display != 'none')
					new Effect.Fade('help', { duration: fadeTime });
				
				var titleImageElement = document.getElementById("title");
				if (titleImageElement != null && titleImageElement.style.display != 'none')
					new Effect.Fade('title', { duration: fadeTime, queue: {scope: 'titleScope', position: 'end'} });			
	
				var illustrationElement = document.getElementById("illustration");
				if (illustrationElement != null && illustrationElement.style.display != 'none')
					new Effect.Fade('illustration', { duration: fadeTime, queue: {scope: 'illustrationScope', position: 'end'}, afterFinish: this.myCallBackOnFinish });			
				
				var pageTurnerElement = document.getElementById("pageturner-previous");
				if (pageTurnerElement.style.display != 'none')
					new Effect.Fade("pageturner-previous", { duration: pageTurnerFadeTime });
					
				var pageTurnerElement = document.getElementById("pageturner-next");
				if (pageTurnerElement.style.display != 'none')
					new Effect.Fade("pageturner-next", { duration: pageTurnerFadeTime });
				
				return;
			}
			
		} else if (template == "ts-template") {
			this.clearEffectQueue('textScope');
			var textElement = document.getElementById('text');		
			if (textElement.style.display != 'none') {
				new Effect.Fade('text', { duration: fadeTime, queue: {position: 'front', scope: 'textScope'}, afterFinish: this.myCallBackOnFinish });

				var pageTurnerElement = document.getElementById("pageturner-previous");
				if (pageTurnerElement.style.display != 'none')
					new Effect.Fade("pageturner-previous", { duration: pageTurnerFadeTime });
					
				var pageTurnerElement = document.getElementById("pageturner-next");
				if (pageTurnerElement.style.display != 'none')
					new Effect.Fade("pageturner-next", { duration: pageTurnerFadeTime });
				
				return;
			}
			
		} else if (template == "contacts-template") {			
			this.clearEffectQueue('illustrationScope');
			this.clearEffectQueue('textScope');
			this.clearEffectQueue('titleScope');
			
			new Effect.Fade('text', { duration: fadeTime, queue: {position: 'front', scope: 'textScope'}, afterFinish: this.myCallBackOnFinish });
			
			if (this.oldPage.template != "contacts-template") {
				var helpedElement = document.getElementById("help");
				if (helpedElement != null && helpedElement.style.display != 'none')
					new Effect.Fade('help', { duration: fadeTime });
				
				var titleImageElement = document.getElementById("title");
				if (titleImageElement != null && titleImageElement.style.display != 'none')
					new Effect.Fade('title', { duration: fadeTime, queue: {scope: 'titleScope', position: 'end'} });			
	
				var illustrationElement = document.getElementById("illustration");
				if (illustrationElement != null && illustrationElement.style.display != 'none') {
					new Effect.Fade('illustration', { duration: fadeTime, queue: {scope: 'illustrationScope', position: 'end'}});			
				}
				
				var pageTurnerElement = document.getElementById("pageturner-previous");
				if (pageTurnerElement.style.display != 'none')
					new Effect.Fade("pageturner-previous", { duration: pageTurnerFadeTime });
					
				var pageTurnerElement = document.getElementById("pageturner-next");
				if (pageTurnerElement.style.display != 'none')
					new Effect.Fade("pageturner-next", { duration: pageTurnerFadeTime });
			}
			
			
			return;
		}
		
		this.myCallBackOnFinish(null);
	},
	
	
	myCallBackOnFinish: function(obj) {
		content.loadPage(content.currentPageName);

		new Effect.Appear('text', { duration: fadeTime, queue: {position: 'end', scope: 'textScope'} });	

		var page = content.currentPage;	
		var template = page.template;
		
		var template = content.currentPage.template;
		if (content.oldPage != null && content.oldPage.template == "ts-template" && content.oldPage.name.indexOf(content.currentPage.name) == 0)
			template = "ts-template";

		if (template == "introduction-template") {

			if (document.getElementById("help") != null)
				new Effect.Appear('help', { duration: fadeTime });	
				
			new Effect.Appear('illustration', { duration: fadeTime*3, queue: {scope: 'illustrationScope', position: 'end'}});
			new Effect.Appear('title', { duration: fadeTime, queue: {scope: 'titleScope', position: 'end'} });
			
			if (content.currentPage.text.length > 1) {
				
				var titleElement = document.getElementById("title");
				var pageTurnerElement = document.getElementById("pageturner");					
				if (titleElement != null && titleElement.innerHTML != "") {
					pageTurnerElement.style.bottom = "80px";
					
				} else {
					pageTurnerElement.style.bottom = PAGE_TURNER_BOTTOM;
				}
				
				new Effect.Appear('pageturner-next', { duration: fadeTime, queue: {position: 'end', scope: 'textScope'} });
			}
			
		} else if (template == "ts-template") {
			
			if (content.currentPage.text.length > 1) {
				
				var titleElement = document.getElementById("title");
				var pageTurnerElement = document.getElementById("pageturner");					
				if (titleElement != null && titleElement.innerHTML != "") {
					pageTurnerElement.style.bottom = "80px";
					
				} else {
					pageTurnerElement.style.bottom = PAGE_TURNER_BOTTOM;
				}
				
				new Effect.Appear('pageturner-next', { duration: fadeTime, queue: {position: 'end', scope: 'textScope'} });
			}
			
		} else if (template == "contacts-template") {
			if (content.oldPage.template != "contacts-template")
				new Effect.Appear('illustration', { duration: fadeTime*3, queue: {scope: 'illustrationScope', position: 'end'}});
			
		}
	}
	
	
	
}
