﻿Object.extend(String.prototype, {
	htmlEncode: function() {
		return this.escapeHTML().replace(/\n/g, "<br />");
	}
});

var File		= Class.create();
File.prototype	= {
	initialize: function(node) {
	
		// declare event listener
		this.onClick	= this._onClick.bindAsEventListener(this);
		
		// set attributes
		this.node		= node;
		this.id			= node.attributes.getNamedItem("id").value;
		this._id		= "file_" + this.id;
		this.featured	= node.attributes.getNamedItem("featured").value == "true";
		this.display	= node.attributes.getNamedItem("display").value  == "true";
		this.extension	= this.selectSingleNode("Extension");
		this.title		= this.selectSingleNode("Title");
		this.text		= this.selectSingleNode("Text");
		
		this.url		= {
			 icon:		this.selectSingleNode("UrlIcon")
			,image:		this.selectSingleNode("UrlImage")
		}
	}, // end function: initialize
	
	selectSingleNode: function(value) {
		value	= this.node.getElementsByTagName(value)[0];
		value	= value && value.firstChild && !value.firstChild.nodeValue.empty() ? value.firstChild.nodeValue : "";
		return value;
	},
	
	toString: function() {
		var value = "";
		for (var i in this) {
			if (typeof(this[i]) != "function") {
				value += i + ": " + this[i] + "\n";
			}
		}
		return value;
	}, // end function: toString
	
	_onClick: function() {
	
		Files.index		= this.index;
	
		new Ajax.Request("/webservice/ajax/event_file.asmx/FilePath", {
			parameters:	{ "path" : this.url.image },
			onSuccess: function(transport) {
				var response = new Ajax.Response(transport);
				if (!response.empty) {
					// set image source
					Files.target.featured.hide();
					Files.target.featured.src = response.xml.firstChild.nodeValue;
					new Effect.Appear(Files.target.featured);
				}
			}
		});
		
		// set file details
		document.getElementsByClassName("featured")[0].getElementsByTagName("h3")[0].innerHTML = this.title.htmlEncode();
		if (!this.text.empty()) {
			$('file_description').update(this.text.htmlEncode());
			//$('file_description').show();
		} else if (Files.count != 0) {
			$('file_description').update('no description');
			//$('file_description').hide();
		}
		
		try {
			// set file form details
			Files.target.form.id.value			= this.id;
			Files.target.form.extension.value	= this.extension;
			Files.target.form.title.value		= this.title;
			Files.target.form.text.value		= this.text;
			Files.target.form.featured.checked	= this.featured;
			
			document.getElementsByClassName("create")[0].show();
			document.getElementsByClassName("delete")[0].show();
			$A(document.getElementsByClassName("file_upload")).each(Element.hide);
		} catch (e) { }
		
		// set featured in listing
		var files = Files.target.list.getElementsByTagName("a");
		for (var i = 0; i < files.length; i++) {
			$(files[i]).className = ((files[i].id == this._id) ? "featured" : "");
		}
	}
}

var Files		= {
	array:		[],
	index:		0,
	target:		{
		featured:	"file_photo",
		list:		"file_list",
		form : {
			id : "",
			extension: "",
			title: "",
			text: "",
			featured: ""
		}
	}, 
	
	initialize: function() {
	
		// set targets
		Files.target.featured	= $(Files.target.featured);
		Files.target.list		= $(Files.target.list);
		
		// initialize ajax request
		new Ajax.Request("/webservice/ajax/event_file.asmx/FileList", {
			method:		'get',
			parameters:	{ "event_id" : Files.event_id, "member_id" : Files.member_id },
			onSuccess: function(transport) {
				Files.onSuccess(new Ajax.Response(transport));
			} // end function: onSuccess
		}); // end object: Ajax.Request
	},
	next: function(event) {
		if (Files.array.length > 0) {
			Files.index++;
			if (Files.index > Files.count - 1) {
				Files.index = 0;
			}
			Files.array[Files.index].onClick();
		}
	},
	previous: function(event) {
		if (Files.array.length > 0) {
			Files.index--;
			if (Files.index < 0) {
				Files.index = Files.count - 1;
			}
			Files.array[Files.index].onClick();
		}
	},
	onSuccess: function(response) {
		
		if (!response.empty) {
			Files.array	= [];
			Files.count = $A(response.xml.getElementsByTagName('File')).each(function(node, index) {
				var file	= new File(node);
				file.index	= index; Files.array.push(file);
				
				Files.target.list.appendChild(
					Builder.node('a', { id: file._id, href: '#' + file._id }, [
						$(Builder.node('img', { src: file.url.icon })).observe('click', file.onClick)
					])
				);
				
				// set featured
				if (Files.file_id > 0) {
					if (Files.file_id == file.id) {
						file.onClick();
					}
				} else if (file.featured) {
					Files.file_id = file.id;
					file.onClick();
				}
			}).size();
		} else { 
			
			$('file_navigation').hide();
			$(Files.target.featured.parentNode).hide();
			$(document.getElementsByClassName('gallery')[0]).hide();
			Files.onCreate();
			
			//$('file_description').show();
			$('file_description').update('no photos have been uploaded');
			
			document.getElementsByClassName("featured")[0].getElementsByTagName("h3")[0].innerHTML = "No Photos";
		}
	}, // end function: onSuccess
	
	onCreate: function() {
	
		try {
			// set file form details
			Files.target.form.id.value			= "";
			Files.target.form.extension.value	= "";
			Files.target.form.title.value		= "";
			Files.target.form.text.value		= "";
			Files.target.form.featured.checked	= false
			
			document.getElementsByClassName("create")[0].hide();
			document.getElementsByClassName("delete")[0].hide();
			
			document.getElementsByClassName("file_upload").each(Element.show);
		} catch(e) { }
	}
}
