Upload = Class.create({
	initialize: function(element) {
		this.initializeElement(element);
	},

	initializeElement: function(element) {
		this.element = $(element);
		if (this.element) {
			this.validator = new Validator(element);
			this.resultDisplayer = $('uploadResultDisplayer');
			$("uploadSaveButton").observe("click", this.saveListener.bindAsEventListener(this));
			
			var listener = this.sourceListener.bindAsEventListener(this);
			$("uploadSourceFile").observe("click", listener);
			$("uploadSourceYouTube").observe("click", listener);
			
			var expanders = this.element.getElementsByClassName('treeExpander');
			var listener = this.expanderListener.bindAsEventListener(this);
			for(i = 0, cnt = expanders.length; i< cnt; i++) {
				expander = expanders[i];
				expander.observe("click", listener);
			}
		}
	},
	
	expanderListener: function(e) {
		expander = e.target;
		expander.adjacent('ul')[0].toggle();
		
		if(expander.innerHTML == '+') {
			expander.update('-');
		}
		else {
			expander.update('+');
		}
	},
	
	saveListener: function() {
		if(this.validator.checkAllFields()) {
			this.element.target="uploadTarget";
			$('uploadTarget').onload = this.uploadCompleted.bind(this);
			
			this.element.submit();
			
			this.resultDisplayer.update("Saving your video. Please wait...");					
		}
		else {
			this.resultDisplayer.update("Please fill the marked fields correctly!");		
		}		
	},
	
	uploadCompleted: function() {
		var returnText = frames['uploadTarget'].document.getElementsByTagName("body")[0].innerHTML;
		var response = returnText.evalJSON();
		
		if(response.status && response.status == 'success') 
		{
			this.resultDisplayer.innerHTML = "Your video was saved succesfully and waiting for approval.";
		}
		else
		{
			this.resultDisplayer.innerHTML = response.message;		
		} 
	},
	
	sourceListener: function() {
		var source = this.element.getInputs('radio','uploadSource').find(function(radio) { return radio.checked; }).value;
		if(source == 'file') {
			$('uploadThumbnail').enable();
			$('uploadVideo').enable();
			$('uploadURL').disable();
		}
		else {
			$('uploadThumbnail').disable();
			$('uploadVideo').disable();
			$('uploadURL').enable();
		}
		
		this.validator.checkAllFields();
	}
});

function windowLoadedUpload()
{
	new Upload("uploadForm");
}

(function() {
	Event.observe(window, "load", windowLoadedUpload);
})();
