app.videomanager = { 
	
	dateConfig : { 
		startYear : new Date().getFullYear() - 1,
		startOnDate : 1
	},
	
	addExtras : function(){ 
		var kdval = $('#kdval');
		var ldval = $('#ldval');
		
		this.ldate = $('#ldate');	
		this.killby = $('#killby');	
		this.bling = $('#notice');
		this.bar = $('#ebar');
		
		if(this.killby && this.ldate && kdval && ldval){ 	
		
			//lecture date
			this.dateConfig.labelText = 'Lecture Date';
				
			var d = new Date();
			
			if(ldval.value !== ''){	
				d.setTime(ldval.value.toNumber());					
			}			
			this.dateConfig.date = d;
			this.ldate = new tc.forms.date(this.ldate, this.dateConfig);			
			
			
			
			//kill by
			this.dateConfig.labelText = 'Kill Date';					
			if(kdval.value !== ''){ 								
				d.setTime(kdval.value.toNumber());		
				this.dateConfig.date = d;
			}else{				
				d.setDate(d.getDate() + 90);	
				this.dateConfig.date = d;
			}
			
			this.killby = new tc.forms.date(this.killby, this.dateConfig);
		}
		
		if(this.bling && this.bar){
			this.bling = new sb.forms.textarea.textBling(this.bar, this.bling);
			this.bling.buttonColor = 0;
			this.bling.buttonSize = 0;
			this.bling.custom([
				"head, Adds a heading"]);	
			this.bling.basic();
		}		
	},
	
	catalog : function(e){ 
		sb.events.stopAndPrevent(e);
		var frm = this.form;		
		

		if(app.videomanager.catalogReady.call(frm)){ 
						
			
			frm.notice.value = encodeURIComponent(frm.notice.value);
			
			new sb.ajax({ 
				data : sb.forms.serialize(frm),
				format : 'json',
				handler : function(data){ 		
					
								
						var node;		
					
						
						//reset display
						app.details.innerHTML = 'Select a video to view its details and options.';
						app.options.innerHTML = '';
						
						//add new data
						for(var i in data){
							if(node = $('#'+i)){
								node.innerHTML = data[i];
							}
						}
						
						//update complex controls				
						//app.videomanager.unlisted.update({page : 1, selector : 'ALL'});	
						//app.videomanager.unlisted.turnToPage(1, 1);
						//alert('running panel updates');				
						app.videomanager.unlisted.update({page : 1, selector : 'ALL'});	
						app.videomanager.cataloged.flip(data.lid);	
						app.videomanager.makePlayer();									
					}
				}
			).fetch();
			
			app.videomanager.bling.clearStorage();
		}
	},
	
	catalogReady : function(){
		var ret = 1;
		var sMes = '';
		var that = app.videomanager;
		
			
			//name
			if(this.name.value.trim() == ''){
				ret = 0; sMes += " Catalog Name is required.  Please fill.\n\n";
			}
			
			
			//lecture date
			if(that.ldate.empty() !== 0){
				ret = 0; sMes += " Lecture Date is required.  Please fill.\n\n";			
			}
			
			//Speakers Name
			if(this.sname.value.trim() == ''){
				ret = 0; sMes += " Speakers Last Name is required.  Please fill.\n\n";				
			}
			
			
			if(this.notice.value.trim() == ''){
				ret = 0; sMes += " User Notification Policy is required.  Please fill.\n\n";			
			}		
		
		//kill date
		if(that.killby.empty() === -1){
			ret = 0; sMes += " Kill date is incomplete.  Please fill all parts or no parts.\n\n";			
		}
		
		
		
		if(!ret){app.warn("\n" + sMes);	}
			
		return ret;		
	},
	
	clickLecture : function (e){ 
		var targ = sb.events.target(e);				
		
		
		//LIL KLUGY		
		if(targ.nodeName == 'SPAN' && targ.className != 'unprocessed'){
			targ = (targ.nodeName == 'A')?targ:targ.parentNode;
		}
		
		switch(targ.nodeName){ 
			case 'A':
				app.videomanager.setSelected(targ);	
				app.videomanager.getDetails(targ.href.match(/\d*$/));		
				if((app.videomanager.bling) && (typeof(app.videomanager.bling.clearStorage) == 'function')){ 
					 app.videomanager.bling.clearStorage();
				}
			break;
					
			case 'SPAN':
				app.videomanager.deleteLecture(targ.innerHTML, targ.id);
			break;
			
		}
	},
	
	deleteLecture : function(name, id){
		var pmsg = "Please type 'DELETE' in all capital letters to delete '" + name.trim() + "' ";
		
		if(prompt(pmsg, '') == 'DELETE'){ 
									
				app.ajax = new sb.ajax({  
					data : "c=delete_lecture&lid=" + id,
					format : 'json',
					handler : function(data){ 
						
						if(data.error != 1){
							app.videomanager[data.from].turnToPage(1,1);
							app.details.innerHTML = 'Select a video to view its details and options.';
							app.options.innerHTML = '';
						}else{
							app.warn('An error occured \n\n Message: ' + data.mes);
						}
						
						
					}
				}).fetch();
			}else{
				app.warn("Deletetion aborted for '" + name + "'");
			}
		
	},
	
	
	getDetails : function(lid, edit){ 
		edit = edit | 0;
		
		//start here
		this.videoplayer.setVideoId(lid);
				
		new sb.ajax({ 
			data : 'c=lecture_details&lid=' + lid + '&edit=' + edit,
			handler : function(data){ 
				app.details.innerHTML = data.details;
				app.videomanager.addExtras();
				app.options.innerHTML = data.options;						
				
				if((data.cataloged == 0) || (edit == 1)){ 		
					//KINDA KLUDGY
					if(app.videomanager.formevent){sb.events.remove(app.videomanager.formevent);}
					app.detailsubmit = $('#detailsubmit');
					app.detailsubmit.event('click', app.videomanager.catalog);
				}
			}, 
			format : 'json'
		}).fetch();
		
	},
	
	init : function(){ 

			//grrr
			sb.flashGateDebug = 0;
			
			//adding events
			this.cataloged = new tc.widget.pageControl(app.cataloged_shell, this.clickLecture);
			this.unlisted = new tc.widget.pageControl(app.unlisted_shell, this.clickLecture);	
			
			
			
			this.unlisted.addElement({ 
				suffix : 'button',
				events : {click : this.uploadVideoDialog}
			});
			
			this.unlisted.addElement({ 
				suffix : 'refresh',
				events : {click : this.checkUnlisted}
			});

			this.makePlayer();
			
			app.vidoptions.event('click', function(e){ 
				app.videomanager.optionClick(e);
			});	
			
			this.initUploadButton();
		 
	},
		
	logForm : function(e){ 
		sb.events.stopAndPrevent(e);
		
		new sb.ajax({ 
			data : 'c=catalog&' + sb.forms.seralize(this),
			handler : app.videomanager.updatePostLog
		}).fetch();	
	},
	
	
	makePlayer : function(){ 
		
		this.swf = new sb.swf({
			src : '../media/' + app.swfname,
			bgColor : '#000000',
			wmode : 'transparent',
			allowFullScreen : 'true',
			width : 320,
			height : 300,
			version : 9,
			id : 'swify',
			
			alt : '<div>You need at least flashplayer 8 to play the swf</div>'
		});
		
		this.swf.embed('#videoplayer');
		
		this.videoplayer = this.swf.getInterface();
		
	},

	optionClick : function(e){
		var targ = sb.events.target(e);
		var id;
		
		switch(targ.nodeName){
			case 'A':	
				sb.events.stopAndPrevent(e);
				id = targ.href.match(/\d*$/);				
				switch(targ.innerHTML){
					case 'Publish':
					case 'Unpublish':
						this.publishLectureToggle(id, targ.innerHTML);	
					break;
					
					case 'Edit':
						this.getDetails(id, 1);
					break;
					
					case 'Cancel':
						this.getDetails(id);
					break;
					
					case 'Destroy':
						this.deleteLecture($("#videotitle").innerHTML, id);
					break;
				}				
			break;	
		}
	},
	
	publishLectureToggle : function(id, sel){ 	
		var action =  (sel == 'Publish')?1:0;		
		sel = sel.trim();
		var mess = "Type '" + sel.toUpperCase() + "' in all capitals letters to " + sel.toLowerCase() + " \"" + $('#videotitle').innerHTML.trim() + "\"";
		
		
		if(prompt(mess, '') == sel.toUpperCase()){
			new sb.ajax({ 
				data : 'c=publish_video_toggle&lid=' + id + '&action=' + action,
				format : 'json',
				handler : function(data){ 
				var node;
					for(var i in data){
						if(node = $('#'+i)){ 						
							node.innerHTML = data[i];
						}
					}
					app.videomanager.cataloged.flip(id);
				}
			}).fetch();
		}else{
			app.warn('Update aborted');
		}
		
	},
	
	checkUnlisted : function(){
		app.videomanager.unlisted.turnToPage(1, 1);
	},
	
	turnPage : function(dir){
		var parts = dir.href.replace(/.*#/, '').split('_')		
		var page = parts[1];
				
		new sb.ajax({ 
			data  : 'c=refreshlist&pane=' + parts[0] + '&page=' + page,
			handler : function(gutz){ 
				$('#'+parts[0]).innerHTML = gutz;
			}
		}).fetch();
		
	},
		
	uploader : {},
		
	uploadVideoDialog : function(){	
	
		sb.upload({
			acceptedFileTypes: '*.flv',
			serverSideScript : '../data/upload.php?s='+sb.cookies.get('PHPSESSID'),
			maxFiles : 1,
			maxFileSizeK : 2048000 //250MB
		});
		
	},
	
	initUploadButton : function(){
		this.uploader = new sb.uploadButton({
			debug : true,
			maxFiles : 1,
			maxFileSizeK : 2048000, //250MB
			acceptedFileTypes : '*.flv',
			url :  '../data/upload.php',
			data : {
				PHPSESSID : sb.cookies.get('PHPSESSID')
			},
			styles : {
				backgroundColor : '#E6E6E6',
				backgroundColorRoll : '#FD7357',
				color : '#336699',
				cornerRadius : '0',
				borderColor : '#336699',
				borderThickness : '2',
				fontSize : 15,
				font : 'Arial',
				width : '200'
			},
			onBeforeBrowse : function(){
				return true;
			},
			onSelect : function(files){
				return true;
			},
			
			onOpen : function(file){
					
					new sb.ajax({
						async : 1,
						data : 'c=check_name&name=' + file.name,
						handler : function(good){
							if(good == -1){		
								app.videomanager.uploader.cancel();		
								app.warn("The file " + file.name + 
								" has already been loaded to our system. Please rename the file or choose a diffrent file");							}
							}
					}).fetch();
			},
			
			onCancelFile : function(file){
				$("#unlisted_progress").innerHTML = '';
			},
			
			onProgress : function(file){
				var prog = (file.percent < 100)?'uploaded: ' + file.percent + '%':'Finished';		
				$("#unlisted_progress").innerHTML = prog;
			},
			
			onExceedsMaxFiles : function(){
				
				//example code
				//alert('You may only upload '+this.maxFiles+' files at a time');
				
				app.warn("You have chosen " + this.chosen + " files.  Please select only 1 file");
				this.cancel();
			},
			
			onExceedsMaxFileSizeK : function(file){
				app.warn("Hey! " + file.name + " is too big. The file size limit is: " + this.limit);	
				this.cancel();
						
			},
			
			onAllProgress : function(files){
				
			},
			
			onComplete : function(file){
				$("#unlisted_progress").innerHTML = '';
				app.videomanager.unlisted.flip();
			},
			
			onAllComplete : function(){
			},
			
			onReturnData : function(file){
				eval('var prog = ' + file.data);		
				app.videomanager.unlisted.flip(prog.id, 1);
				
				//debug	
				//alert("return data");	
			
			},
			onError : function(err){
				sb.objects.alert(err);
			}
		});	
		
		//embed the button
		this.uploader.embed('#unlisted_button');
		
	},
	
	refreshUnlisted : function(file){ 		
		
		var qstring = 'c=refresh_unlisted';
		qstring += (file)?'&flipto=' + file.id:'';
		
		new sb.ajax({ 
			data : qstring,
			handler : function(data){
				app.allunlistedpageings.innerHTML = data;
				app.videomanger.unlisted.innerHTML = data;
			}
		}).fetch();
		app.videomanger.unlisted.flip(file.id);
	},
	
	refreshCataloged: function(obj){ 
		var page = (obj.page)?'&page=' + obj.page:'';
		var flipto = (obj.flipto)?'&flipto=' + obj.flip:'';
		var qstring = 'c=refresh_listed' + page + flipto;
		
		new sb.ajax({ 
			data : qstring,
			handler : function(data){
				app.alllisted.innerHTML = data;
				//START HERE: Fill the insides of the Video Catalog
			}
		}).fetch();
	},
	
	
	selected : null, 
	
	setSelected : function(oList){ 
		this.selected = oList;
		var list = this.cataloged.list.$('a').nodes.concat(this.unlisted.list.$('a').nodes);
		
		list.forEach(function(v){ 
			v.className = v.className.replace(/selected/i, '');			
		});
		
		this.selected.className += ' selected';
		this.selected.blur();	
	}
	
}