/* $Id: Uploader.js 5310 2007-11-14 21:19:17Z sibrand $ */
var Uploader = { 

	showCompleteMessage : false,

	channel : 0,

    fileMap : [],

    onStart : function(fileObj) {
    	$('uploadStatus').innerHTML += '<div class="queuedUploadItem" id="uploadFile' + (this.fileMap.length) + '"><div class="progress"><img class="progressBar" src="/static/2/images/blank.gif" width="0px"  height="20px" /></div><div class="filename">' + fileObj.name + '</div><div class="percHolder"><span class="percCount">0</span>%</div></div>'; 

    	this.fileMap[this.fileMap.length] = fileObj;
    	
    },

    fetchFileElem : function(fileObj) {
    	
    	for(i=0;i<this.fileMap.length;i++) {

    		if (this.fileMap[i].name == fileObj.name) {
    		
    			return $('uploadFile'+i); 

    		}
    	}
    },

    updateProgressBar : function (elem, percent){
    	if(percent < 1){
    		elem.getElementsByTagName('img')[0].setAttribute('width', 0);
    	} else {
    		elem.getElementsByTagName('img')[0].setAttribute('width' , (3.0 * Math.round(percent))) ;
    	}	
    },

    onProgress : function(fileObj,bytesLoaded) {
    	elem = this.fetchFileElem(fileObj);
    	var perc = bytesLoaded / fileObj.size * 100;
    	elem.getElementsByTagName('span')[0].innerHTML = Math.round(perc,2);
    	Uploader.updateProgressBar(elem, perc);
    },

    onComplete : function(fileObj) {
    	elem = this.fetchFileElem(fileObj);
    	elem.getElementsByTagName('span')[0].innerHTML = '100';
    	elem.getElementsByTagName('img')[0].addClassName('complete');
    	Uploader.updateProgressBar(elem, 100);
    	
    	//new Effect.SlideUp(elem,{duration: 0.3, delay: 1.0});
    		
    	new Effect.SlideDown($('uploadSuccess'),{duration: 0.3, delay: 1.0});


    },


    onCancel : function(fileObj) {
    	/*
    	var m = '';
    	for ( x in fileObj )
    		m += x + ':\t' + fileObj [ x ];

    	alert( m );
    	*/
    	Messenger.message(1,'Upload was cancelled');

    },

    onError : function(errcode,file,msg) {

    	switch(errcode) {

    		case -10 : Messenger.message(2,'HTTP error'); break;
    		case -30 : Messenger.message(2,'I/O error'); break;
    		case -40 : Messenger.message(2,'Securty violation error'); break;
    		case -50 : Messenger.message(2,'File is too big'); break;

    		default : Messenger.message(2,'Unknown error');
    	}
    	$('uploadStatus').innerHTML+='';
    	this.fileMap.length = [];

    },


    onQueueComplete : null,


    selectFiles : function() {
		try {
			$('uploader').selectFiles();
    	} catch(err) { alert(err); } 
		return false;
    },

	setChannel : function ( channelId ) {
		this.channel = channelId;
	},

    startUpload : function() {


/*
    	if($('title').value == ''){
    		new Effect.Highlight('title');
    		$('title').value = "please supply a title";
    		return false;
    	}

    	if($('description').value == ''){
    		new Effect.Highlight('description');
    		$('description').value = "please supply a description";
    		return false;
    	}

*/

    	var params = {
    		'SABRE_ID' 	: Cookies.getCookie(sessionCookieName),
    		'vid' 		: selectedVHost,
    		'title' 	: $('title').value,
    		'message' 	: $('description').value,
    		'tags' 		: $('tags').value,
			'channel' 	: this.channel
    	};
    	//var paramQueryString = '/services/upload2?SABRE_ID=' + Cookies.getCookie(sessionCookieName) + '&vid=' + escape(selectedVHost) + '&title=' + escape($('title').value) + '&message=' + escape($('description').value) + '&tags=' + escape($('tags').value);

		var paramQueryString = '/services/upload2?' + $H(params).toQueryString();

    	$('uploader').setEndPoint(paramQueryString);

    	$('uploader').startUpload();
    	
    	

    	return false;

    },
    
    addFileField : function () {
    	
    	var inputs = $('htmlUpload').getElementsByTagName('li');
    	for (var i=0; i<inputs.length; i++){
    		var newInputNo = inputs.length + i;
    	}

    	var fileLI = document.createElement('li');
    	fileLI.id = "file_" + newInputNo; 

    	var fileField = document.createElement('input');
    	fileField.setAttribute('type','file');
    	fileField.setAttribute('name','file_'+newInputNo);
    	fileField.setAttribute('class','file');	
    	fileField.className = "file";
    
    	var removeFileBtn = document.createElement('button');
    	removeFileBtn.className = "removeFileField";
    	removeFileBtn.onclick =	function () {
    		Uploader.removeFileField('file_'+newInputNo);
    	}

    	var addFileBtn = document.createElement('button');
    	addFileBtn.className = "addFileField";
    	addFileBtn.onclick = Uploader.addFileField;

    	fileLI.appendChild(addFileBtn);
    	fileLI.appendChild(fileField);
    	fileLI.appendChild(removeFileBtn);
    	
    
    	$('htmlUpload').appendChild(fileLI);

    	return false;

    },

    removeFileField : function (id) {
    	var targetElem = $(id);
    	var parentElem = $('htmlUpload');
    	parentElem.removeChild(targetElem);
    }

}
