Ext.tree.myFilesTree = Ext.extend(Ext.tree.TreePanel, {
    lines:false,
    borderWidth: Ext.isBorderBox ? 0 : 2, // the combined left/right border for each cell
    cls:'x-column-tree',
    
    onRender : function(){
        Ext.tree.myFilesTree.superclass.onRender.apply(this, arguments);
        this.headers = this.body.createChild(
            {cls:'x-tree-headers-myfiles'},this.innerCt.dom);

        var cols = this.columns, c;
        var totalWidth = 0;

        for(var i = 0, len = cols.length; i < len; i++){
             c = cols[i];
             totalWidth += c.width;
             this.headers.createChild({
                 cls:'x-tree-hd-myfiles ' + (c.cls?c.cls+'-hd':''),
                 cn: {
                     cls:'x-tree-hd-text',
                     html: c.header
                 },
                 style:'width:'+(c.width-this.borderWidth)+'px;'
             });
        }
        this.headers.createChild({cls:'x-clear'});
        // prevent floats from wrapping when clipped
        this.headers.setWidth(totalWidth);
        this.innerCt.setWidth(totalWidth);
    }
});
 

Ext.tree.myFilesNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {
    focus: Ext.emptyFn, // prevent odd scrolling behavior

    renderElements : function(n, a, targetNode, bulkRender){
        this.indentMarkup = n.parentNode ? n.parentNode.ui.getChildIndent() : '';

		//alert(n.thumbnail + ' ' + n.attributes.thumbnail);

        var t = n.getOwnerTree();
        var cols = t.columns;
        var bw = t.borderWidth;
        var c = cols[0];

//border-bottom:#CCCCCC solid 1px;
        var buf = [
             '<li class="x-tree-node"><div ext:tree-node-id="',n.id,'" class="x-tree-node-el x-tree-node-leaf ', a.cls,'" style="height:25px;">',
                '<div class="x-tree-col-myfiles" style="width:',c.width-bw,'px; border-bottom:#CCCCCC solid 1px;">',
                    '<span class="x-tree-node-indent" style="border-bottom:#FFFFFF solid 1px;">',this.indentMarkup,"</span>",
                    '<img src="', this.emptyIcon, '" class="x-tree-ec-icon x-tree-elbow" style="border-bottom:#FFFFFF solid 1px;">',
                    '<img style="border-bottom:#FFFFFF solid 1px;" src="', a.icon || this.emptyIcon, '" class="x-tree-node-icon',(a.icon ? " x-tree-node-inline-icon" : ""),(a.iconCls ? " "+a.iconCls : ""),'" unselectable="on" >',
					
					'<a hidefocus="on" class="x-tree-node-anchor" href="',a.href ? a.href : "#",'" tabIndex="1" ',
                    a.hrefTarget ? ' target="'+a.hrefTarget+'"' : "", '>',
                    '<span unselectable="on">']
		
			if(n.attributes.mt_name != 'FOLDER'){
				buf.push('<input type="checkbox" name="fileselect" value="" />');
			}
				
		
			buf.push(n.text || (c.renderer ? c.renderer(a[c.dataIndex], n, a) : a[c.dataIndex]),"</span></a>",
                "</div>");
		
		
		
		
         for(var i = 1, len = cols.length; i < len; i++){
             c = cols[i];

             buf.push('<div class="x-tree-col-myfiles ',(c.cls?c.cls:''),'" style="width:',c.width-bw,'px; border-bottom:#CCCCCC solid 1px;">',
													 
                        '<div class="x-tree-col-text">',(c.renderer ? c.renderer(a[c.dataIndex], n, a) : a[c.dataIndex]),"</div>",
                      "</div>");
         }
         buf.push(
            '<div class="x-clear"></div></div>',
            '<ul class="x-tree-node-ct" style="display:none;"></ul>',
            "</li>");

        if(bulkRender !== true && n.nextSibling && n.nextSibling.ui.getEl()){
            this.wrap = Ext.DomHelper.insertHtml("beforeBegin",
                                n.nextSibling.ui.getEl(), buf.join(""));
        }else{
            this.wrap = Ext.DomHelper.insertHtml("beforeEnd", targetNode, buf.join(""));
        }

        this.elNode = this.wrap.childNodes[0];
        this.ctNode = this.wrap.childNodes[1];
        var cs = this.elNode.firstChild.childNodes;
        this.indentNode = cs[0];
        this.ecNode = cs[1];
        this.iconNode = cs[2];
        this.anchor = cs[3];
        this.textNode = cs[3].firstChild;
    }
});


function handleActionFailure(msg){
	var msg = '<div align="center">' + msg + '</div>';
	Ext.Msg.show({
			title: 'Failure!'
			,msg: msg
			,minWidth:300
			,buttons: Ext.MessageBox.OK
	});
}


function create_myFilesTree(search_term){
	search_term = (search_term == undefined || search_term.toString() == '' ? '' : search_term);
	
    	editFilesTree =  myFilesTree = new Ext.tree.TreePanel({
		id:'editFilesTree',
		applyTo:'foldersList',
        	el:'editFilesWindow',
		listeners:{contextmenu:handleTreeRightClick,beforenodedrop:handleTreeDrop,click:handleTreeNodeClick},
//		autoWidth : true,
		width:foldersList.getInnerWidth(),
		animate:true,
		enableDD:true,
		ddGroup:'myfilesDD',
		display_id:'',
		search_term:search_term,
		tbar:new Ext.Toolbar({
				autoWidth : true,
				items:[new Ext.app.myRSNASearchField({
						width:150
						,id: 'mf_search'
						,name:'mf_search'
						,hideTrigger1:true})
					]
			}),

		containerScroll:true,		
        	rootVisible:false,
		trackMouseOver:true,
//		autoHeight:true,
		height:foldersList.getInnerHeight(),
		autoScroll:true
		,selModel: new Ext.tree.DefaultSelectionModel({
					id:'editFilesTree_selModel'
					,listeners:{'selectionchange':handleFileClick}
					})
		
        	,loader: new Ext.tree.TreeLoader({
					dataUrl: myRSNApath + 'myrsna/myfiles.json.debug.cfm'
					,baseParams:{search_term:search_term}
					,search_term:search_term
					,listeners:{'load':function() {myFilesLoad.hide();}
							,'beforeload':function(treeloader,node){
//											debugger;
											this.baseParams.search_term = treeloader.search_term;
										}
							}
        })
		
		,root: new Ext.tree.AsyncTreeNode({
							text:'tree root'
							,id:'tree_root'
							,expanded:true
							,draggable:false
							,allowDrop:false
						})
    });
}



function handleFileMove(the_tree,the_node,old_parent,new_parent,new_index) {
		
		//since folders & files are ordered in different trees, we need to remove the leading folders from the new index.
		var i=0;
		var childcount = new_parent.childNodes.length;
		while(new_parent.childNodes[i].attributes.mt_name == 'FOLDER' && i<childcount){
			i++;	
		}
		var no = new_index-i+1;
		
		
		var key = the_node.attributes.mm_key;
		var nf = new_parent.attributes.cfolder_id;

		
		//alert(the_node.attributes.mm_key + ' p: ' + old_parent.attributes.cfolder_id + ' np: ' + new_parent.attributes.cfolder_id + ' norder: ' + new_index);
		
		var url = myRSNApath + "myrsna/update_customer_file.cfm?action=MOVE&key=" +key + "&no=" + no + '&nf=' + nf;
/*		new Ajax.Request(url, {
			method: 'get',
			asynchronous: false,
			evalJS: 'force',
			onSuccess: function(transport) {
				//alert('reordered');
			}
		});*/

		Ext.Ajax.request({
				url:'/myrsna/update_customer_file.cfm'
				,method:'POST'
				,params:{action:'MOVE',key:key,no:no,nf:nf}
				,success:function(responseObj,optionsObj){
						var selNode = editFilesTree.selModel.getSelectedNode();
						if(selNode != null && selNode.attributes.mt_name == 'FOLDER'){
							handleFileClick('',selNode);	
						}
					}
/*				,failure:function(responseObj,optionsObj){
						var x=2;

					}*/
			});
}

function handleFolderMove(the_tree,the_node,old_parent,new_parent,new_index) {
		
		var no = new_index + 1;
		var nf = new_parent.attributes.cfolder_id;
		var cf = the_node.attributes.cfolder_id;

		
		//alert(the_node.attributes.mm_key + ' p: ' + old_parent.attributes.cfolder_id + ' np: ' + new_parent.attributes.cfolder_id + ' norder: ' + new_index);
		
		var url = myRSNApath + "myrsna/update_customer_file.cfm?action=MOVEFOLDER&cf=" +cf + "&no=" + no + '&nf=' + nf;
		new Ajax.Request(url, {
			method: 'get',
			asynchronous: false,
			evalJS: 'force',
			onSuccess: function(transport) {
				//alert('reordered');
			}
		});
		

}



function findChildRecursively(tree,attribute, value) {
    var cs = tree.childNodes;
    for(var i = 0, len = cs.length; i < len; i++) {
        if(cs[i].attributes[attribute] == value){
            return cs[i];
        }
        else {
            // Find it in this tree
            if(found = findChildRecursively(cs[i], attribute, value)) {
                return found;
            }
        }
    }
    return null;
}  	


function handleAddFileFolder(theitem,theevent){
	
	var tree_rendered = false;

	var temp_cfolder_id = 0;
	var temp_folder_name = 'Select a Parent Folder';
	if(theitem.attributes.cfolder_id != undefined){
		temp_cfolder_id = theitem.attributes.cfolder_id;
		temp_folder_name = theitem.attributes.mm_clientfile;
	}
	
	
	var txtFolderName = new Ext.form.TextField({
			id:'cfolder_name'
			,fieldLabel:'Name'
			,disabled:false								
			,labelStyle: 'font-size:12px; font-weight:bold; width:75px;'
			,name:'cfolder_name'			
			,value:'New Folder'
			,allowBlank:false
			,blankText:'Please enter a folder name...'
			,width:250
		});
	
	
       	var afcombox = new Ext.form.ComboBox({
			id:'afcombox',
			store:new Ext.data.SimpleStore({fields:[],data:[[]]}),
			fieldLabel: 'Location',
			labelStyle: 'font-size:12px; font-weight:bold; width:75px;',
			editable:false,
			emptyText:temp_folder_name,
			forceSelection:true,
			mode: 'local',
			triggerAction:'all',
			width:250,
			maxHeight: 200,
			tpl: '<tpl for="."><div style="height:200px"><div id="aftree"></div></div></tpl>',
			selectedClass:'',
			onSelect:Ext.emptyFn
		})
	
	aftree = new Ext.tree.TreePanel({
			border:false,
			rootVisible:false,
			trackMouseOver:true,
			root: new Ext.tree.AsyncTreeNode({
				id: 'isroot'
				,text: 'Folders'
				,draggable:false
				,lines:true
				,expanded:true
			})	
			,loader: new Ext.tree.TreeLoader({
						dataUrl: '/myrsna/myfiles.json.folders.cfm?id='+editFilesTree.getRootNode().firstChild.attributes.cfolder_id
						,listeners:{'load':handleAddFolderTreeLoad}
			})		
			
		});	
	
	
	afcombox.on('expand',function(){
			if(! tree_rendered){				
			aftree.render('aftree');
			}
		});		
	
	
	aftree.on('click',function(node){
		afform.findById('cfolder_id').setValue(node.attributes.cfolder_id);
		
		afcombox.setValue(node.text);
		afcombox.collapse();
	});	
	
	
var findRecursively = function(node, id) {
			if (node.id == id) {
				return node;
			}
			for (var i = 0; i < node.childNodes.length; i++) {
				var found = findRecursively(node.childNodes[i], id);
				if (found) {
					return found;
				}
			}
			return null;
		}

		var afform = new Ext.FormPanel({
						formId:'afform',
						labelWidth: 75, // label settings here cascade unless overridden
						frame:true,
						autoWidth:true,
				
						items:[	
							   new Ext.form.Hidden({
								id:'cfolder_id',
								name:'cfolder_id',
								value:temp_cfolder_id}),
							    afcombox,
							   txtFolderName
							  ]// end items for form
						
						,
						buttons: [{
						text: 'Add'
						,handler:function()
							{ 
							 	
								var allow_submit = true;
								//make sure a folder is selected
								if(afform.findById('cfolder_id').getValue() == 0){
									allow_submit = false;
//									Ext.Msg.alert('Folder Needed', 'Please Select a Parent Folder');
									Ext.Msg.show({
											title: 'Folder Needed'
											,msg:'<div align="center">Please Select a Parent Folder</div>'
											,minWidth:250
											,buttons: Ext.MessageBox.OK
									});
									
								} 
								
								if(allow_submit && afform.findById('cfolder_name').getValue() == ''){
									allow_submit = false;
//									Ext.Msg.alert('Folder Name', 'Please enter a Folder name');
									Ext.Msg.show({
											title: 'Folder Name'
											,msg:'<div align="center">Please enter a Folder name</div>'
											,minWidth:200
											,buttons: Ext.MessageBox.OK
									});
								}
								
								if(allow_submit){
									Ext.WindowMgr.get('afw').hide();
									Ext.getBody().mask('Adding folder...','ext-el-mask-msg x-mask-loading');									
									
									afform.getForm().submit({ 
								
									method:'POST' 
									,url:'/myrsna/update_customer_file.cfm?ACTION=ADDFOLDER'
									,success:function(theform,theaction){ 
										Ext.getBody().unmask();
									
//										Ext.Msg.alert('Success','Folder Added Successfully');
										Ext.Msg.show({
												title: 'Success'
												,msg:'<div align="center">Folder Added Successfully</div>'
												,minWidth:200
												,buttons: Ext.MessageBox.OK
										});
										

										var nodeid = 'f' + afform.findById('cfolder_id').getValue();
//										var pNode = findRecursively(editFilesTree.getRootNode(),nodeid );
										var pNode = editFilesTree.getNodeById(nodeid);
										pNode.expand();
//										var nNode = editFilesTree.getLoader().createNode(theaction.result);
										var json = theaction.result;
										var nNode = new Ext.tree.TreeNode({
														id:json.id
														,text:json.text
														,mm_clientfile:json.mm_clientfile
														,mm_filesize:json.mm_filesize
														,mt_name:json.mt_name
														,cfolder_id:json.cfolder_id
														,iconCls:json.iconCls
														,leaf:json.leaf
														,listeners:json.listeners
														,expanded:true
														,allowDrag:true
														,thumbview:true
													});
										
										pNode.appendChild(nNode);
										
										Ext.WindowMgr.get('afw').destroy();
									} //end success
									
									,failure:function(form, action){ 
											Ext.getBody().unmask();
											handleActionFailure('Sorry, we were unable to create your folder.');
										} // end failure
									}); // end submit
								}// end allow_submit
							}// end handler
						}
						,{text:'Cancel'
							,handler:function(){
								Ext.WindowMgr.get('afw').destroy();
							}
						}
						]// end buttons
					});
				  
				  
				  
				  
	var afw = new Ext.Window(
		{
			id:'afw',
			title:'Add a Folder',
			closable:false,
			width:375,
			autoHeight:true,
			autoScroll:true,
			iconCls:'iconAddFolder',
			shadow:false
			,items:[afform		
			]  // bm_form_window.items
		}
	).show();	

}

function handleAddFolderTreeLoad(thetree){
	var targetnode = aftree.getNodeById(editFilesTree.getSelectionModel().getSelectedNode().id);	
	targetnode.ensureVisible();
	targetnode.select();
}
		
function handleAddFolderExpand(theitem,theevent){
 
 tNode = editFilesTree.getNodeById('f' + theitem.id);
 tNode.expand();
}


function handleGridRightClick(grid,rowindex,cellindex,theevent){
	theevent.stopEvent();
	handleTreeRightClick(editFilesTree.getSelectionModel().getSelectedNode(),theevent,'gridpanelRightClick');
}

function handleDataViewRightClick(DV,index,node,theevent){
	theevent.stopEvent();
	handleTreeRightClick(editFilesTree.getSelectionModel().getSelectedNode(),theevent,'dataviewRightClick');
}


function handleTreeRightClick(theitem,theevent,thebutton,selTreeNode){
	selTreeNode = (selTreeNode == undefined || selTreeNode == null ? true : selTreeNode);

	if(selTreeNode && theitem.attributes.mt_name == 'FOLDER'){
	 	theitem.select();
	}
	
	var event_pos = theevent.getXY();

	if(theitem.attributes.mt_name != 'FOLDER'){
		menuFile = new Ext.menu.Menu({
						id: 'menuFile',
						items: [
/*							   {
									text: 'Download File'
									,iconCls:'iconDownload'
									,handler: function(){
										document.location.href=mediapath + 'myfiles_download.cfm?q=' + theitem.attributes.mm_key;
									}
								},
								
								'-',*/
								{
									text: 'Bookmark File'
									,iconCls:'bm-add-url'
									,handler: function(){
											var selNode = editFilesTree.getSelectionModel().getSelectedNode();
											bookmark_popup(theitem.attributes.mt_name,'My Files',theitem.attributes.mm_clientfile,mediapath+'myfiledisplay.cfm?q='+theitem.attributes.mm_key,theitem.attributes.mm_height,theitem.attributes.mm_width,theitem.attributes.mm_key);

										}									
								},								
								
								
								'-',
								{
									text: 'Delete File'
									,iconCls:'iconDeleteFile'
									,handler: function(){
											var selNodes = new Array();
											selNodes[0] = theitem;										
											handleDeleteFile(selNodes);
										}
									
								}	
								
								,'-',{text:'Cancel',iconCls:'menu-CANCEL',handler: function(){this.destroy();}}
								
								]
						});
		if(thebutton != undefined){
			event_pos[0] = event_pos[0]-110;
			event_pos[1] = event_pos[1]+9;
		}
	 	menuFile.showAt(event_pos);
		
	//Menu folder when accessed from the OPTIONS button		
	}else if(thebutton != undefined){
		menuFile = new Ext.menu.Menu({
						id: 'menuFile',
						items: [{
										text: 'New Folder'
										,iconCls:'iconAddFolder'
										,handler: function(){handleAddFileFolder(theitem);}
									},
/*								'-',
							   
							   {
									text: 'Download File(s)'
									,iconCls:'iconDownload'
									,handler: function(){
										var selNodes = (editFilesTree.getSelectionModel().getSelectedNode().attributes.thumbview ? fDataView.getSelectedRecords() : fDataGrid.getSelections());
//										var selNodes = fDataView.getSelectedRecords();
										if(selNodes.length == 0){
											Ext.Msg.show({
												title: 'My Files Options',
												msg: '<div align="center">You have not selected any items</div>',
												minWidth:250,
												buttons: Ext.MessageBox.OK											
											});
										}else if(selNodes.length == 1){
											document.location.href=mediapath + 'myfiles_download.cfm?q=' + selNodes[0].data.mm_key;
										}else{
//											Ext.getBody().mask('Creating zip file...');
											var encoded_mm_list = ''
											for(var i=0; i<selNodes.length; i++){
												if(i>0){encoded_mm_list = encoded_mm_list + ',';}
												encoded_mm_list = encoded_mm_list + selNodes[i].data.mm_key;
											}

											Ext.getBody().mask('Creating zip file...','ext-el-mask-msg x-mask-loading');
											
											Ext.Ajax.request({
													url:'/myrsna/update_customer_file.cfm'
													,method:'POST'
													,params:{action:'DOWNLOADZIP',encoded_mm_id:encoded_mm_list}
													,success:function(responseObj,optionsObj){
															Ext.getBody().unmask();
															var responseJSON = eval(responseObj.responseText);
															document.location.href=mediapath + 'myfiles_download.cfm?ACTION=ZIP&zip_id=' + responseJSON[0].zip_id;
														}
													,failure:function(responseObj,optionsObj){
															Ext.getBody().unmask();
															handleActionFailure('Sorry, we were unable to zip these files.');
														}
												});											
										}										
									} // end "Download File(s)" handler
								},
*/								
								'-',
								{
									text: 'Delete File(s)'
									,iconCls:'iconDeleteFile'
									,handler: function(){
											var selNodes = new Array();
											if(editFilesTree.getSelectionModel().getSelectedNode().attributes.thumbview){
												var dViewNodes = fDataView.getSelectedRecords();
											}else{
												var dViewNodes = fDataGrid.getSelections();
											}
											
											for(var i=0; i<dViewNodes.length; i++){
//												selNodes[i] = editFilesTree.getNodeById(dViewNodes[i].data.mm_key);
												selNodes.push(editFilesTree.getNodeById(dViewNodes[i].data.mm_key));
											}
											handleDeleteFile(selNodes);
										}
									
								}
								
								,'-',{text:'Cancel',iconCls:'menu-CANCEL',handler: function(){this.destroy();}}
								]
						});
		
		event_pos[0] = event_pos[0]-110;
		event_pos[1] = event_pos[1]+9;
	 	menuFile.showAt(event_pos);				
	}else{
		var optionsdisabled = false;
		if(theitem.attributes.root){
			optionsdisabled = true;
		}
	
		//We want to prevent the user from renaming or deleting the "root" folder.
		if(editFilesTree.getRootNode().childNodes[0].id == theitem.id){
			menuFolder = new Ext.menu.Menu({
							id: 'menuFolder',
							items: [{
										text: 'New Folder'
										,iconCls:'iconAddFolder'
										,handler: function(){handleAddFileFolder(theitem);}
									},								
									
									'-',
									{
										text:'Upload Files to Folder'
										,iconCls:'iconUpload'
										,handler: function(){handleBtnUpload(theitem);}
									}
									
									,'-',{text:'Cancel',iconCls:'menu-CANCEL',handler: function(){this.destroy();}}
									]   
							});
		}else{ 
			menuFolder = new Ext.menu.Menu({
							id: 'menuFolder',
							items: [{
										text: 'Rename Folder'
										,iconCls:'iconEditFolder'
										,disabled:optionsdisabled
										,handler: function(){
											handleRenameFolder(theitem)	;
										}
									},
									
									{
										text: 'Delete Folder'
										,iconCls:'iconDeleteFolder'
										,disabled:optionsdisabled
										,handler: function(){handleDeleteFolder(theitem);}
										
									},
									
									{
										text: 'New Folder'
										,iconCls:'iconAddFolder'
										,handler: function(){handleAddFileFolder(theitem);}
										
									},								
									
									'-',
									{
										text:'Upload Files to Folder'
										,iconCls:'iconUpload'
										,handler: function(){handleBtnUpload(theitem);}
									}
									
									,'-',{text:'Cancel',iconCls:'menu-CANCEL',handler: function(){this.destroy();}}
									]   
							});		
		}
//		if(thebutton != undefined){
//			event_pos[0] = event_pos[0]-145;
//			event_pos[1] = event_pos[1]+9;
//		}		
		
		menuFolder.showAt(event_pos);
 	}// end if FOLDER

}// end handletree right click



	function handleBtnUpload(theitem,theevent){

		//alert(theitem.attributes.cfolder_id);

		var uploadWindow = new Ext.Window(
			{
				id:'uploadWindow',
				title:'Upload Files',
				width:615,
				height:232,
				iconCls:'iconUpload',
				modal:true,
				autoScroll:true,
				autoLoad:{url:'/myrsna/uploadFiles.cfm?cf=' + theitem.attributes.cfolder_id, text:'loading', scripts:true}
			}
		).show();
	}



function handleFolderColapse(node){
		var url = myRSNApath + "myrsna/update_customer_file.cfm?ACTION=COLAPSEFOLDER&cf=" +node.attributes.cfolder_id;
		new Ajax.Request(url, {
			method: 'get',
			asynchronous: false,
			evalJS: 'force',
			onSuccess: function(transport) {
				//alert('reordered');
			}
		});	

}

function handleFolderExpand(node){		
		if(!node.attributes.expanded){
			var url = myRSNApath + "myrsna/update_customer_file.cfm?ACTION=EXPANDFOLDER&cf=" +node.attributes.cfolder_id;
			new Ajax.Request(url, {
				method: 'get',
				asynchronous: false,
				evalJS: 'force',
				onSuccess: function(transport) {
					//alert('reordered');
				}
			});	
		}// end make sure node not expanded
}


function handleDeleteFolder(node){

	var formDeleteFolder = new Ext.FormPanel({
						formId:'formDeleteFolder',
						labelWidth: 75, // label settings here cascade unless overridden
						frame:true,
						autoWidth:true,
						html: 'Are you sure you want to DELETE this folder? Any sub folders or files will be deleted.',
						items:[	
							   new Ext.form.Hidden({
								id:'cfolder_id',
								name:'cfolder_id',
								value:node.attributes.cfolder_id})
							  ]// end items for form
						
						,
						buttons: [{
						text: 'Delete'
						,handler:function()
							{
								var allow_submit = true;
								
						
						
							if(allow_submit){
								Ext.WindowMgr.get('deletefolderw').hide();
								Ext.getBody().mask('Deleting folder...','ext-el-mask-msg x-mask-loading');
									
								formDeleteFolder.getForm().submit({ 
								
									method:'POST' 
									,url:'/myrsna/update_customer_file.cfm?ACTION=DELETEFOLDER'
//									,params:{'cfolder_id':node.attributes.cfolder_id}
									,success:function(theform,theaction){ 
										Ext.getBody().unmask();
//										Ext.Msg.alert('Success','Folder Deleted Successfully');
										Ext.Msg.show({
												title: 'Success'
												,msg:'<div align="center">Folder Deleted Successfully</div>'
												,minWidth:200
												,buttons: Ext.MessageBox.OK
										});

										node.parentNode.select();
										node.remove();
										//node.setText(formRenameFolder.findById('cfolder_name').getValue());
																
										Ext.WindowMgr.get('deletefolderw').destroy();
										
									} //end success
									
									,failure:function(form, action){ 
											Ext.getBody().unmask();
											handleActionFailure('Sorry, we were unable to delete your folder.');
										} // end failure
									}); // end submit
									
								}// end allow_submit							
						
							}// end button handler
								  
								  
								  },
								  {text:'Cancel'
								  ,handler:function(){Ext.WindowMgr.get('deletefolderw').destroy();}
								  
								  }]// end buttons
											 });
	
	var deletefolderw = new Ext.Window(
		{
			id:'deletefolderw',
			title:'Delete Folder',
			width:375,
			autoHeight:true,
			autoScroll:true,
			iconCls:'iconDeleteFolder',
			shadow:false
			,items:[formDeleteFolder		
			]  // bm_form_window.items
		}
	).show();		
}



function handleRenameFolder(node){
	//alert(node.attributes.cfolder_id);
	
	
	var txtcfolderName = new Ext.form.TextField({
			id:'cfolder_name'
			,fieldLabel:'Name'
			,disabled:false								
			,labelStyle: 'font-size:12px; font-weight:bold; width:75px;'
			,name:'cfolder_name'			
			,value:node.attributes.mm_clientfile
			,allowBlank:false
			,blankText:'Please enter a folder name...'
			,width:250
		});	
	
	
	var formRenameFolder = new Ext.FormPanel({
						formId:'formRenameFolder',
						labelWidth: 75, // label settings here cascade unless overridden
						frame:true,
						autoWidth:true,
				
						items:[	
							   new Ext.form.Hidden({
								id:'cfolder_id',
								name:'cfolder_id',
								value:node.attributes.cfolder_id}),
							   	txtcfolderName
							  ]// end items for form
						
						,
						buttons: [{
						text: 'Rename'
						,handler:function()
							{
								var allow_submit = true;
								
								if(allow_submit && formRenameFolder.findById('cfolder_name').getValue() == ''){
									allow_submit = false;
//									Ext.Msg.alert('Folder Name', 'Please enter a Folder name');
									Ext.Msg.show({
											title: 'Folder Name'
											,msg:'<div align="center">Please enter a Folder name</div>'
											,minWidth:250
											,buttons: Ext.MessageBox.OK
									});

								}
						
						
							if(allow_submit){
									Ext.WindowMgr.get('renamefolderw').hide();
									Ext.getBody().mask('Renaming folder...','ext-el-mask-msg x-mask-loading');
									
									formRenameFolder.getForm().submit({ 
								
									method:'POST' 
									,url:'/myrsna/update_customer_file.cfm?ACTION=RENAMEFOLDER'
									,success:function(theform,theaction){ 
										Ext.getBody().unmask();
									
//										Ext.Msg.alert('Success','Folder Renamed Successfully');
										Ext.Msg.show({
												title: 'Success'
												,msg:'<div align="center">Folder Renamed Successfully</div>'
												,minWidth:250
												,buttons: Ext.MessageBox.OK
										});

										node.attributes.mm_clientfile = formRenameFolder.findById('cfolder_name').getValue();
										node.setText(formRenameFolder.findById('cfolder_name').getValue());
										var selNode = editFilesTree.getSelectionModel().selNode;
										if(node.id = selNode.id){
											handleFileClick('',selNode, false);		
										}
										Ext.WindowMgr.get('renamefolderw').destroy();
										
									} //end success
									
									,failure:function(form, action){ 
											Ext.getBody().unmask();
											handleActionFailure('Sorry, we were unable to rename your folder.');
										} // end failure
									}); // end submit
									
								}// end allow_submit							
						
							}// end button handler
								  
								  
								  }]// end buttons
											 });
	
	var renamefolderw = new Ext.Window(
		{
			id:'renamefolderw',
			title:'Rename Folder',
			width:375,
			autoHeight:true,
			autoScroll:true,
			iconCls:'iconEditFolder',
			shadow:false
			,items:[formRenameFolder		
			]  // bm_form_window.items
		}
	).show();		
	
	
}


function handleFilesUploaded(){
	
	
	Ext.Msg.alert('Success','FILES UPLOADED');
	
	var node = editFilesTree.getSelectionModel().getSelectedNode();
	
	var totalfiles = 0;
	for (var i = 0; i < node.childNodes.length; i++) {
		if(node.childNodes[i].attributes.mt_name != 'FOLDER'){
			totalfiles = totalfiles + 1;
		}
	}

	//now we need to get the new files and append to the node.
	var url = myRSNApath + "myrsna/myfiles.json.files.cfm?cf=" + editFilesTree.getSelectionModel().getSelectedNode().attributes.cfolder_id + '&cc=' + totalfiles;
	new Ajax.Request(url, {
		method: 'get',
		asynchronous: false,
		evalJS: 'force',
		onSuccess: function(transport) {
			//alert('reordered');
/*				var selNode = editFilesTree.getSelectionModel().getSelectedNode();
			selNode.expand();
			//handleFileClick('',selNode,true);
			setTimeout("handleFileClick('',editFilesTree.getSelectionModel().getSelectedNode(),true)",2000);*/
//			handleFileClick('',editFilesTree.getSelectionModel().getSelectedNode(),true)
		}
	});		
}


function checkConvertingNodes(){
/***********************************************************************************************
Yes, this is a bit of a mess... the whole point is to check if there are any nodes that have been
recently uploaded and see if the thumbnail has been created so we can reload the DataView
(this is, reload the DataView if a folder is selected in the tree that has one of these converting
 nodes and the user is viewing the folder in "Thumbnail" view).

To do all this, we cycle through an array of nodes in the convertingNodes var and send a list
of mm_key values in an Ajax call.  The response will be a JSON object with all the data for
the mm_key values we sent.  We'll cycle through all the JSON response objects checking if the 
file is done converting and the thumbnail has been created.  If a node does not meet both criteria,
we put it back in the convertingNodes array and reset the time to run this function again in 5 
seconds.

If a node is done converting and we're currently viewing it's parent folder in the Thumbnail view, 
we'll refresh the right panel which will then show the new thumbnail image.
***********************************************************************************************/
	try{clearTimeout(convertTimer);}catch(e){}
	
	var encoded_mm_id = '';
	for(var i=0; i<convertingNodes.length; i++){
		if(i>0){encoded_mm_id=encoded_mm_id+',';}
		encoded_mm_id = encoded_mm_id + convertingNodes[i].data.mm_key;
	}	

	var url = myRSNApath + "myrsna/myfiles.json.filesbykey.cfm";
	new Ajax.Request(url, {
		method: 'post',
		parameters: 'encoded_mm_id=' + encoded_mm_id,
		asynchronous: false,
		evalJS: 'force',
		onSuccess: function(response) {

			var selNode = editFilesTree.getSelectionModel().getSelectedNode();
			var resetTimer = false;
			var resetDataView = false;
			convertingNodes = new Array();
			for(var i=0; i<response.responseJSON.length; i++){
				var newrecord = new Ext.data.Record({
					mm_clientfile:response.responseJSON[i].mm_clientfile
					,mm_filesize:response.responseJSON[i].mm_filesize
					,mt_name:response.responseJSON[i].mt_name
					,mm_key:response.responseJSON[i].mm_key
					,mm_height:response.responseJSON[i].mm_height
					,mm_width:response.responseJSON[i].mm_width
					,mm_duration:response.responseJSON[i].mm_duration
					,thumbnail:response.responseJSON[i].thumbnail
					});	
				
				if(response.responseJSON[i].cq_converting == 'Y' || response.responseJSON[i].mm_thumbnail != 'Y'){			
					resetTimer = true;
					convertingNodes.push(newrecord);
				}else{
					if(selNode.attributes.mt_name == 'FOLDER' && selNode.attributes.thumbview){
						var dvIndex = fDataView.store.find('mm_key',response.responseJSON[i].mm_key);
						if(dvIndex >= 0){resetDataView = true;}
					}
					var treenode = editFilesTree.getNodeById(response.responseJSON[i].mm_key);
					if(treenode != undefined && treenode != null){
						treenode.attributes.mm_height = response.responseJSON[i].mm_height;
						treenode.attributes.mm_width = response.responseJSON[i].mm_width;
						treenode.attributes.mm_duration = response.responseJSON[i].mm_duration;
					}
				} //response.responseJSON[i].cq_converting == 'Y'
			} //for loop
			
			if(resetDataView){handleFileClick('',selNode);}
			if(resetTimer){convertTimer = window.setTimeout('checkConvertingNodes()',5000);}
			
		} //End onSuccess function
	});  //End AJAX call
}

function handleTreeNodeClick(node,e){
	if(!node.isExpanded() && !node.isRoot && node.attributes.node_type == 'FOLDER'){
		node.expand();	
	}
}


function handleFileClick(selModel,node,load_panel,new_window){
/***********************************************************************************************
This is the main function used to display a file and its properties.  
PARAMS:
selModel is just there because this function is used with the 'onclick' event in each treenode, 
		so selModel can be sent as a blank (''). 
node: needs to be an AsyncTreeNode with the attributes filled out (mm_clientfile, mm_filesize, ect)
load_panel: defaults to true.  if set to false, then just the toolbar will be redone.
new_window: defaults to false. if true, then the file info will open in an Ext.Window
***********************************************************************************************/
	load_panel = (load_panel == undefined || load_panel.toString() == '' ? true : load_panel);
	new_window = (new_window == undefined || new_window.toString() == '' ? false : new_window);
	prefix = (prefix == undefined || prefix.toString() == '' ? '' : prefix + '_');
	var prefix = (myrsnatabs.getActiveTab().title == 'My Files' ? '' : 'mb_');
	
	var tbar_title = '';
	var URL;
	var container = Ext.getCmp(prefix+'viewfilespanel_container');
	var tree = getActiveFileTree();
		
	if(node != null && node != undefined){
		if(!new_window){
			tree.display_id = node.id;
		}
		
		if(node.attributes.mt_name == 'FOLDER' || node.attributes.node_type == 'FOLDER'){

			if(prefix == ''){
				URL = '/myrsna/viewFolder.cfm?cf=' + node.attributes.cfolder_id;
			}else{
				URL = 'myrsna/plugins/my_bookmarks_dev/viewFolder.cfm?cf=';
				URL = URL + (node.id == 'isroot' ? '' : node.attributes.id);
			}
			
			tbar_title = new Ext.Toolbar.TextItem({id:prefix+'viewfilespanel_tbar_title', text:'<b>'+ node.attributes.text + '</b>'});

			if(node.attributes.thumbview == false){
				URL = URL + '&viewtype=DETAIL';
			}
			
			var buttons = new Array();
			buttons.push(new Ext.Toolbar.Button({iconCls:'tree-' + node.attributes.mt_name,handleMouseEvents:false})
						,tbar_title
						,'->'
			);
			
			if(tree.id == 'editFilesTree'){
				buttons.push(new Ext.Toolbar.Button({
						id:prefix+'viewfilespanel_tbar_upload',
						text: 'Upload Files to Folder',
						hidden:false,
						listeners:{'click':function(button,e){handleBtnUpload(node);}},
//									listeners:{'click':handleFolderView,'arrowclick':handleFolderView},
						iconCls:'iconUpload'
						})	
					,'-');
			}
			
			buttons.push(new Ext.Toolbar.MenuButton({
						id:prefix+'viewfilespanel_tbar_view',
						text: 'Folder View',
						hidden:false,
						listeners:{'click':handleFolderView,'arrowclick':handleFolderView},
						iconCls:'tree-VIEW'
						})	
					,'-'
					,new Ext.Toolbar.MenuButton({
						id:prefix+'viewfilespanel_tbar_options',
						text: 'Options',
						hidden:false,
						listeners:{'click':handleFileOption,'arrowclick':handleFileOption},
						iconCls:'tree-OPTIONS'
						})	
					,'&nbsp;&nbsp;');

			var new_tbar = new Ext.Toolbar({
							id:prefix+'viewfilespanel_tbar',
							autoWidth : true,
							cls:'x-panel-header',
							items:buttons								
							});
			
			container.remove(prefix+'viewfilespanel_tbar');
			container.insert(0,new_tbar);
			
			if(load_panel){
				container.remove(container.findById(prefix+'viewfilespanel'),true)	

				viewfilespanel =  new Ext.Panel({
								id:prefix+'viewfilespanel',
								collapsible: false,
								autoScroll:false,
								height:myrsnatabs.getInnerHeight()-20,
								header:false
								,border:false
								,autoLoad:{url:URL+'&width='+(container.getInnerWidth()-2), text:'loading', scripts:true}
							});
				container.add(viewfilespanel);
			}
			
			container.doLayout();	

		}else{

			var randomnumber=Math.floor(Math.random()*10001)
			var winid = 'win' + randomnumber;
			URL = '/myrsna/FileEdit.cfm?q=' + node.attributes.mm_key + '&winid=' + winid;
			
			displaynode = new Ext.tree.AsyncTreeNode({
							mm_clientfile:node.attributes.mm_clientfile 
							,mm_filesize:node.attributes.mm_filesize 
							,mt_name:node.attributes.mt_name 
							,mm_height:node.attributes.mm_height
							,mm_width:node.attributes.mm_width 
							,mm_duration:node.attributes.mm_duration
							,mm_key:node.attributes.mm_key 
						});				



			if(new_window){
			
				var browser_h = getHeight();	
				var browser_w = getWidth();	

				launchwin = new Ext.Window(
					{
						id:winid,
						autoDestroy:true,
						iconCls:'tree-'+node.attributes.mt_name,
						title:node.attributes.mm_clientfile,
						width:browser_w-50,
						height:browser_h-50,
						randnum:randomnumber
						,mm_key:node.attributes.mm_key
						
						,items:[
								new Ext.Panel({
											id:prefix+'viewfilespanel'+winid,
											collapsible: false,
											autoScroll:true,
//											height:myrsnatabs.getInnerHeight()-55,
//											height:browser_h-45,
											height:browser_h-80,
											border:false,
											
//											autoLoad:{url:URL, scripts:true, text:'loading...'},
											header:false	
										})							
								]
						,listeners:{'resize':handleViewerWindowResize}
					}
				).show();			

				var imageviewerpanel = Ext.WindowMgr.get(winid).findById(prefix+'viewfilespanel'+winid);
				load_imageviewer(imageviewerpanel,node,winid,new_window);
		
			}else{
				
				var current_viewer = Ext.getCmp(prefix+'fileviewpanel');
				var zoom_text = ((current_viewer == undefined || current_viewer.zoom == undefined || current_viewer.zoom == 100) ? '' : ' (' + current_viewer.zoom + '%)');

				var tbar_title = new Ext.Toolbar.TextItem({id:prefix+'viewfilespanel_tbar_title',
							text:'<b>Name:</b>&nbsp;&nbsp;' + node.attributes.mm_clientfile + zoom_text});

				var new_tbar = new Ext.Toolbar({
								id:prefix+'viewfilespanel_tbar',
								autoWidth : true,
								cls:'x-panel-header',
								items:[				
									new Ext.Toolbar.Button({iconCls:'tree-' + node.attributes.mt_name,handleMouseEvents:false})
									,tbar_title
									,'->'
									,new Ext.Toolbar.MenuButton({
										id:prefix+'viewfilespanel_tbar_options',
										text: 'Options',
										hidden:false,
										listeners:{'arrowclick':handleFileOption,'click':handleFileOption},
										iconCls:'tree-OPTIONS'
										})	
									,'&nbsp;&nbsp;'
									]								
								});					
				
				container.remove(prefix+'viewfilespanel_tbar');
				container.insert(0,new_tbar);
				container.doLayout();	
	
				if(load_panel){
					container.remove(container.findById(prefix+'viewfilespanel'),true)	
					
					viewfilespanel =  new Ext.Panel({
									id:prefix+'viewfilespanel',
									collapsible: false,
									autoScroll:false,
									height:container.getInnerHeight()-34,
									header:false,
									border:false
								});
					container.add(viewfilespanel);
					container.doLayout();
					
//					autoLoad:{url:'presentation.cfm',scripts:true,params:{pm_id:#pm_id#,ps_id:editPresentationPanel#randomdiv#.ps_id,fullscreen:true}}
					load_imageviewer(viewfilespanel,node,winid,new_window);
				}
			} //if(new_window)
		} //node.attributes.mt_name == 'FOLDER'
	} //node != null && node != undefined
}


function load_imageviewer(imageviewerpanel,node,winid,new_window){
	var editFileContainer_items = new Array();
	if(winid == undefined){winid = '';}
		
	if(new_window == undefined || new_window == false){
//		var winid = '';
		var detail_row = imageviewer_detailrow(node);
		var tree = getActiveFileTree();

		if(tree.id == 'editFilesTree'){
			var prop_form = imageviewer_propform(imageviewerpanel,node,detail_row,winid);	
		}else{
			var prop_form = bookmark_propform(imageviewerpanel,node,detail_row,winid);			
		}

		var expand_button = new Ext.Toolbar.Button({
								iconCls:'viewer-EXPAND'
								,tooltip:'Expand this file to fullscreen'
								,listeners:{'click':function(){handleFileClick('',displaynode,'',true);}}
							});

		editFileContainer_items.push(new Ext.Panel({
//									region:'south',
									collapsible: true,
									collapsed:false,
									id:'fileProperties'+winid,
									header:false,
									split:true,
									margins:'0 0 5 5',
									cmargins:'0 0 0 0',								
//									height: 255,
									height: (Ext.isIE ? 60 : 25),
									autoScroll:false
									,items:[
									
										new Ext.ux.InlineToolbarTabPanel({
												 toolbar: {items:[ 
													  new Ext.BoxComponent({
															autoEl: {tag: 'div', cls: 'x-tool x-tool-up', id:'filePropertiesToggle'+winid},
															 
														listeners: {render:function(f){
															f.el.on('click', function(button, e) {
																var minimize = (button.target.className == 'x-tool x-tool-down-over');
																
																toggle_properties_panel(minimize,winid);
															})
															,f.el.on('mouseover',function(button,e){
																this.dom.className = (button.target.className.substr(0,18) == 'x-tool x-tool-down' ? 'x-tool x-tool-down-over' : 'x-tool x-tool-up-over');})
															,f.el.on('mouseout',function(button,e){
																this.dom.className = (button.target.className.substr(0,18) == 'x-tool x-tool-down' ? 'x-tool x-tool-down' : 'x-tool x-tool-up');})
																	}
															 }
														  }) 
													  ,'&nbsp;'
												]},
											
//											new Ext.TabPanel({
											id:'file_properties_tabpanel'+winid,
										   border:false,
//										   activeTab:0,
										   height:195,
										   layoutOnTabChange:true,
										   winid:winid,
										   collapsible:true,
										   collapsed: true,
										   items:[{	id:'fileProperties_form'+winid
													,title:'Properties'
													,items:[prop_form]
													,listeners: {activate: function(tabpanel){
																		tabpanel.setHeight(200);
																		if(tabpanel.ownerCt.collapsed){
																			toggle_properties_panel(false,winid);
																		}
																	}
																}
												}
												,{	id:'fileProperties_terms'+winid
													,title:'Tags'
													,listeners: {activate: handleTermTab}
													,autoScroll:false}
												,{	id:'fileProperties_radlex'+winid
													,title:'Add Tags'
													,listeners: {activate: handleRadlexTab}
													,autoScroll:false}													
										   ]									   
										   
									    })]
										
									})
							    );
		
		//This is where we get any additional data about the selected node that isn't stored in the tree-node
		Ext.Ajax.request({
				url:'/myrsna/update_customer_file.cfm'
				,method:'POST'
				,params:{action:'GETDETAILS',encoded_mm_id:node.attributes.mm_key,media_id:node.id}
				,success:function(responseObj,optionsObj){
						//If we eval a carriage return it'll kill the json object - temporarily replace it and add it back in after the eval
						var responseJSON = eval(responseObj.responseText.replace(/\n/g,'&13&'));
						
						prop_form.findById('file_descr'+winid).setValue(responseJSON[0].file_descr.replace(/&13&/g,'\n'));
					}
			});	
		
	}else{
		var expand_button = '';
	}


	if(node.attributes.mt_name == 'DPS2008_PRESENTATION' || node.attributes.mt_name == 'DPS2008_SLIDE' || new_window){
		var myfilesViewerToolbar = '';
	}else{
		var myfilesViewerToolbar = new Ext.Toolbar(
			{
				autoWidth : true,
				id: 'myfilesViewerToolbar'+winid,
				items:[
	
					new Ext.Toolbar.Button({id:'zoom_in',winid:winid,encoded_mm_id:node.attributes.mm_key,iconCls:'viewer-ZOOM-IN',tooltip:'Zoom In',listeners:{'click':handleImageViewerButton}})
					,'&nbsp;'
					,new Ext.Toolbar.Button({id:'zoom_out',winid:winid,encoded_mm_id:node.attributes.mm_key,iconCls:'viewer-ZOOM-OUT',tooltip:'Zoom Out',listeners:{'click':handleImageViewerButton}})
					,'-'
					,new Ext.Toolbar.Button({id:'rotate_clock',winid:winid,encoded_mm_id:node.attributes.mm_key,iconCls:'viewer-ROTATE-CLOCKWISE',tooltip:'Rotate Clockwise',listeners:{'click':handleImageViewerButton}})
					,'&nbsp;'
					,new Ext.Toolbar.Button({id:'rotate_counter',winid:winid,encoded_mm_id:node.attributes.mm_key,iconCls:'viewer-ROTATE-COUNTERCLOCKWISE',tooltip:'Rotate Counterclockwise',listeners:{'click':handleImageViewerButton}})
					,'-'
					,new Ext.Toolbar.Button({id:'print_image',winid:winid,encoded_mm_id:node.attributes.mm_key,iconCls:'viewer-PRINT',tooltip:'Print this image',listeners:{'click':handleImageViewerButton}})
					,'&nbsp;'
					,expand_button
				]
			}
		 );	
	}
	
	var panel_height = (new_window ? imageviewerpanel.getInnerHeight() : imageviewerpanel.getInnerHeight()-25);

	if(node.attributes.bm_web == 'Y' && (node.attributes.mm_key != '' || node.attributes.mt_name == 'DPS2008_PRESENTATION' || node.attributes.mt_name == 'DPS2008_SLIDE' || node.attributes.mt_name == 'DPS2008_VIDEO')){
		//We're using an iframepanel here instead of a normal panel so we can print the contents easily.
		editFileContainer_items.unshift({
									id:'fileviewpanel'+winid
//									,region: 'center'
									,collapsible: false
									,autoScroll:true
									,height:panel_height
									,bbar:myfilesViewerToolbar
									,zoom:100
									,rotate:0
									,xtype:(node.attributes.mm_key != '' ? 'iframepanel' : 'panel')
//									,xtype:'iframepanel'
									}
								);
	}else{

		if(node.attributes.bm_web != 'Y'){
			Ext.Msg.alert('Notice', 'This bookmark is not available online.');
			var temppanel = new Ext.Panel({id:'fileviewpanel'+winid
//									,region: 'center'
									,height:panel_height
									,collapsible: false
									,autoScroll: true
									,html:'<b>This bookmark is not available online</b>'
									});
		}else if(node.attributes.bm_url.search('lakeside2007') >= 0){
			var temppanel = new Ext.Panel({id:'fileviewpanel'+winid
//									,region: 'center'
									,height:panel_height
									,collapsible: false
									,autoScroll: true
									,html:'<br><br><p align="center" style="vertical-align:middle; font-weight:bold;">This bookmark has been opened in a new window.</p>'
									});
			window.open(node.attributes.bm_url,"lakeside2007","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=1024,height=768,left=0,top=0");
		}else{

			if(node.attributes.bm_url.search('rsnajnls') >= 0 && node.attributes.bm_url.search('jpeg') < 0 && node.attributes.bm_url.search('/myrsna/viewURL.cfm') < 0){
				var URL = myRSNApath + 'myrsna/viewURL.cfm?link='+escape(node.attributes.bm_url); 
				//alert(node.attributes.bm_url.search('jpeg'));
			}else{
				
				var URL = node.attributes.bm_url;
			}

			var temppanel = new Ext.ux.ManagedIframePanel({
										id:'fileviewpanel'+winid
//										,region: 'center'
										,height:panel_height
										,cls:'x-window-body'
										,width:'100%'
										,height:'100%'
										,defaultSrc:URL
										,loadMask:'Loading...'
										});
		}
		editFileContainer_items.unshift(temppanel);
	}

	
	var editFileContainer = new Ext.Container(
			{
				id:'editFileContainer'+winid,
//                        	applyTo:'layoutfileedit',
				applyTo:imageviewerpanel.id,
				height:imageviewerpanel.getInnerHeight(),
//					width:imageviewerpanel.getInnerWidth() -10,
				border:false,
				autoWidth:true,
				autoscroll:false,
				node_id: node.attributes.mm_key,
//				layout:'border',
					
				items:editFileContainer_items
			}
		 );

	if(node.attributes.bm_web == 'Y' && (node.attributes.mm_key != '' || node.attributes.mt_name == 'DPS2008_PRESENTATION' || node.attributes.mt_name == 'DPS2008_SLIDE' || node.attributes.mt_name == 'DPS2008_VIDEO')){
		var fileviewpanel = editFileContainer.findById('fileviewpanel'+ winid);
		
		if(node.attributes.mt_name != 'DPS2008_PRESENTATION' && node.attributes.mt_name != 'DPS2008_SLIDE' && !new_window){
			editFileContainer_items[0].bbar.getEl().child("table").wrap({tag:'center'});
			var bbar = myfilesViewerToolbar.items;
			for(var i=0; i<myfilesViewerToolbar.items.length; i++){
				if(node.attributes.mt_name != 'IMAGE' && (bbar.items[i].id == 'zoom_in' || bbar.items[i].id == 'zoom_out' 
												|| bbar.items[i].id == 'rotate_clock' || bbar.items[i].id == 'rotate_counter')){
					bbar.items[i].disable();
				}
				
				if((node.attributes.mt_name == 'AUDIO' || node.attributes.mt_name == 'FLASH' || node.attributes.mt_name == 'VIDEO' || node.attributes.mt_name == 'DPS2008_VIDEO') && bbar.items[i].id == 'print_image'){
					bbar.items[i].disable();	
				}
			}
		}
		
//		if(node.attributes.mt_name == 'PRESENTATION'){
///*			fileviewpanel.load({url:'presentation.cfm',scripts:true,text:'Loading'
//							,params:{pm_id:node.attributes.pm_id,bookmarkview:true,displayheight:fileviewpanel.getInnerHeight()-5}
//				});*/
//			fileviewpanel.load({url:'presentation.cfm?pm_id='+node.attributes.pm_id+'&bookmarkview=true&displayheight='+(fileviewpanel.getInnerHeight()-5)
//							,scripts:true,text:'Loading'
//				});
//		}else if(node.attributes.mt_name == 'SLIDE'){
//			fileviewpanel.load({url:'presentation.cfm',scripts:true,text:'Loading'
//							,params:{pm_id:node.attributes.pm_id,ps_id:node.attributes.ps_id,bookmarkview:true,displayheight:fileviewpanel.getInnerHeight()-5}
//				});
//		}else{
//			fileviewpanel.load({url:'/myrsna/viewFile.cfm',scripts:true,text:'Loading'
//							,params:{q:node.attributes.mm_key
//							,t:'WEB'
//							,h:fileviewpanel.getInnerHeight()-30
//							,w:fileviewpanel.getInnerWidth()-10}
//				});
//		}

		load_imageviewer_panel(node,fileviewpanel);
	}
}


function toggle_properties_panel(minimize,winid){
	var view_panel = Ext.getCmp('fileviewpanel'+winid);
	var treenode = getActiveFileTree().getSelectionModel().getSelectedNode();
	
	var toggle_button = document.getElementById('filePropertiesToggle'+winid);
	toggle_button.className = (minimize ? 'x-tool x-tool-up' : 'x-tool x-tool-down');

	view_panel.setHeight(view_panel.height-(minimize ? 0 : 175));
	
	if(treenode.attributes.mm_key != ''){
		getActiveFileTree().winid = winid;
		createTreeNode(treenode.attributes.mm_key,'reloadMediaPanel',treenode.attributes.node_type);
	}else{
		var display_node = createBookmarkNode(treenode);
		load_imageviewer_panel(display_node,view_panel);
	}
	Ext.getCmp('fileProperties'+winid).setHeight((minimize ? (Ext.isIE ? 60 : 25) : 230));
		
	var tabpanel = Ext.getCmp('file_properties_tabpanel'+winid);
	if(minimize){tabpanel.collapse(false);}
	else{tabpanel.expand(false);}

	if(tabpanel.getActiveTab() == null){
		tabpanel.setActiveTab('fileProperties_form'+winid);	
	}
}


function load_imageviewer_panel(node,fileviewpanel){
	if(node.attributes.mt_name == 'DPS2008_PRESENTATION'){
			fileviewpanel.load({url:'presentation.cfm',scripts:true,text:'Loading'
						,params:{pm_id:node.attributes.pm_id,bookmarkview:true,displayheight:fileviewpanel.getInnerHeight()-5}
			});
	}else if(node.attributes.mt_name == 'DPS2008_SLIDE'){
		fileviewpanel.load({url:'presentation.cfm',scripts:true,text:'Loading'
						,params:{pm_id:node.attributes.pm_id,ps_id:node.attributes.ps_id,bookmarkview:true,displayheight:fileviewpanel.getInnerHeight()-5}
			});
	}else{
		fileviewpanel.load({url:'/myrsna/viewFile.cfm',scripts:true,text:'Loading'
						,params:{q:node.attributes.mm_key
						,t:'WEB'
						,h:fileviewpanel.getInnerHeight()-30
						,w:fileviewpanel.getInnerWidth()-10}
			});
	}
}


function imageviewer_detailrow(node){
		if(node.attributes.mm_duration != '' && node.attributes.mm_duration != null){
			var detail_row = ({layout:'column',
		  				border:false,
						autoWidth:true,
            				items:[{
		  					border:false,
							columnWidth:.5,
							layout: 'form',
							items: [
									new Ext.form.MiscField({
									fieldLabel: 'Size'
									,name: 'file_size'
									,value: node.attributes.mm_filesize
									,labelStyle: 'font-size:12px; font-weight:bold; width:75px;'
								})							
							]
            				}
						,{
		  					border:false,
							columnWidth:.5,
							layout: 'form',
							items: [new Ext.form.MiscField({
									fieldLabel: 'Duration'
									,name: 'file_duration'
									,value: node.attributes.mm_duration
									,labelStyle: 'font-size:12px; font-weight:bold; width:75px;'
									})
							]
            				}]				
					});	
		
		}else if(node.attributes.mm_height != '' && node.attributes.mm_width != ''){
			var detail_row = ({layout:'column',
		  				border:false,
						autoWidth:true,
            				items:[{
		  					border:false,
							columnWidth:.33,
							layout: 'form',
							items: [new Ext.form.MiscField({
									fieldLabel: 'Size'
									,name: 'file_size'
									,value: node.attributes.mm_filesize
									,labelStyle: 'font-size:12px; font-weight:bold; width:75px;'
									})
								]
            				}
						,{
		  					border:false,
							columnWidth:.33,
							layout: 'form',
							items: [new Ext.form.MiscField({
									fieldLabel: 'Height'
									,name: 'file_height'
									,value: node.attributes.mm_height + ' px'
									,labelStyle: 'font-size:12px; font-weight:bold;vertical-align:top;'
									,overCls:'font-weight:bold;'
									})
								]
            				}
						,{
		  					border:false,
							columnWidth:.33,
							layout: 'form',
							items: [new Ext.form.MiscField({
									fieldLabel: 'Width'
									,name: 'file_width'
									,value: node.attributes.mm_width + ' px'
									,labelStyle: 'font-size:12px; font-weight:bold; width:75px;'
									})
								]
            				}						
						]				
					});			
		}else{
			var detail_row = new Ext.form.MiscField({
							fieldLabel: 'Size'
							,name: 'file_size'
							,value: node.attributes.mm_filesize
							,labelStyle: 'font-size:12px; font-weight:bold; width:75px;'
						});			
		}
		
		return detail_row;
}

function imageviewer_propform(imageviewerpanel,node,detail_row,winid){
	
		var prop_form = new Ext.FormPanel({
			id:'file_properties'+winid,
			labelWidth: 100, // label settings here cascade unless overridden
			bodyBorder:false,

			bodyStyle:'padding:5px 5px 0',
			formId:'file_properties_form'+winid,
			height:172,
//			autoWidth:true,
//			defaultType: 'textfield',			
			defaults: {labelStyle: 'font-size:12px; font-weight:bold; width:75px;',width:imageviewerpanel.getInnerWidth() -160}
							
			,items: [new Ext.form.Hidden({
						id:'q',
						name:'q',
						value:node.attributes.mm_key})  
						
					,new Ext.form.Hidden({
						id:'media_type',
						name:'media_type',
						value:'CF'})	
					
					,new Ext.form.Hidden({
						id:'action',
						name:'action',
						value:'SAVEDESCR'})	
				
					,new Ext.form.MiscField({
						fieldLabel: 'Name'
						,name: 'file_name'
						,value: node.attributes.mm_clientfile
					})
					
					,detail_row		
					
					,new Ext.form.TextField({
						fieldLabel:'Link'
						,name:'link'
						,id:'link'
						,value:mediapath+'myfiledisplay.cfm?q=' + node.attributes.mm_key
						,readOnly:true
						,selectOnFocus:true
					})
				
					,new Ext.form.TextArea({
						id:'file_descr'+winid
						,fieldLabel:'Description'
						,name:'file_descr'
//						,height:25
						,height:50
					})				
				]
			
				,buttons: [{
					text: 'Save Description'
					,handler:function()
						{
								prop_form.getForm().submit({ 
							
									method:'POST' 
									,url:'/myrsna/update_customer_file.cfm'
									,success:function(theform,theaction){ 
											Ext.Msg.alert('Success','The description has been successfully saved.');
															
//												Ext.WindowMgr.get('deletefilew').close();
										} //end success
								
									,failure:function(form, action){ 
											handleActionFailure('Failure!','Sorry, we were unable to save the description.');
										} // end failure
								}); // end submit							
						}// end button handler
				}]	
		});	
		
		return prop_form;
}

function handleImageViewerButton(button,theevent){
	var tree = getActiveFileTree();
	var fileviewpanel =  Ext.getCmp('fileviewpanel'+button.winid);	
	var h = fileviewpanel.getInnerHeight();
	var w = fileviewpanel.getInnerWidth();
	var zoom = false;
	var bbar = fileviewpanel.getBottomToolbar();
	for(var i=0; i<bbar.items.length; i++){
		if(bbar.items.items[i].id == 'zoom_in') { var zoom_in_button = bbar.items.items[i]; }	
		else if(bbar.items.items[i].id == 'zoom_out') { var zoom_out_button = bbar.items.items[i]; }	
	}	

	if(button.id == 'rotate_clock'){
		fileviewpanel.rotate = fileviewpanel.rotate + 90;
		fileviewpanel.getEl().mask('Rotating image...','ext-el-mask-msg x-mask-loading');
	}else if(button.id == 'rotate_counter'){
		fileviewpanel.rotate = fileviewpanel.rotate - 90;
		fileviewpanel.getEl().mask('Rotating image...','ext-el-mask-msg x-mask-loading');
	}else if(button.id == 'zoom_in'){
		zoom = true;
		fileviewpanel.getEl().mask('Resizing image...','ext-el-mask-msg x-mask-loading');
		
		if(fileviewpanel.zoom < 25) 		{ fileviewpanel.zoom = 25; }
		else if(fileviewpanel.zoom < 50) 	{ fileviewpanel.zoom = 50; }
		else if(fileviewpanel.zoom < 100) 	{ fileviewpanel.zoom = 100; }
		else if(fileviewpanel.zoom < 200) 	{ fileviewpanel.zoom = 200; }
		else 						{ fileviewpanel.zoom = 300; }
		
	}else if(button.id == 'zoom_out'){
		zoom = true;
		fileviewpanel.getEl().mask('Resizing image...','ext-el-mask-msg x-mask-loading');
		
		if(fileviewpanel.zoom > 300) 		{ fileviewpanel.zoom = 300; }
		else if(fileviewpanel.zoom > 200) 	{ fileviewpanel.zoom = 200; }
		else if(fileviewpanel.zoom > 100) 	{ fileviewpanel.zoom = 100; }
		else if(fileviewpanel.zoom > 50) 	{ fileviewpanel.zoom = 50; }
		else							{ fileviewpanel.zoom = 25; }
		
	}else if(button.id == 'print_image'){
		fileviewpanel.iframe.print();
	}
//debugger;	
	if(zoom){
		if(fileviewpanel.zoom == 300) { zoom_in_button.disable(); }
		else if(fileviewpanel.zoom == 25) { zoom_out_button.disable(); }
		else { 	zoom_in_button.enable();
				zoom_out_button.enable();
			}

		if(button.winid != ''){
			var thewindow = Ext.WindowMgr.get(button.winid);
			var temp_title = thewindow.initialConfig.title + (fileviewpanel.zoom == 100 ? '' : ' (' + fileviewpanel.zoom + '%)');
			thewindow.setTitle(temp_title);
		}else{
			handleFileClick('',tree.getSelectionModel().getSelectedNode(),false,false);
		}
	}
	
	fileviewpanel.load({
			url:'/myrsna/viewFile.cfm'
			,params:{	q:button.encoded_mm_id
					,t:'WEB'
					,h:h
					,w:w
					,rotate:fileviewpanel.rotate
					,zoom:fileviewpanel.zoom}
			,callback: handleResizeRotateMask
			,scripts:true
//			,text:'Loading'
		});			
}

function handleResizeRotateMask(a,b,c,d){
	a.ownerCt.el.unmask();
}


function handleViewerWindowResize(thewindow,w,h){
	var fileviewpanel = Ext.getCmp('fileviewpanel'+thewindow.id);

	if(fileviewpanel != undefined && thewindow.mm_key != ''){
		fileviewpanel.getEl().mask('Resizing image...','ext-el-mask-msg x-mask-loading');
		fileviewpanel.setSize({width:thewindow.getInnerWidth(),height:thewindow.getInnerHeight()});
		fileviewpanel.load({
				url:'/myrsna/viewFile.cfm'
				,params:{	q:thewindow.mm_key
						,t:'WEB'
						,h:thewindow.getInnerHeight()-35
						,w:thewindow.getInnerWidth()-10
						,rotate:fileviewpanel.rotate
						,zoom:fileviewpanel.zoom}
				,callback: function(){fileviewpanel.getEl().unmask();}
				,scripts:true
				,text:'Loading'
			});		
	}
}



function handleGridFileDblClick(grid, rowindex, theevent){
	var gridnode = grid.getStore().getAt(rowindex);
	displaynode = editFilesTree.getNodeById(gridnode.data.mm_key);
	
	if(displaynode == undefined){
		displaynode = new Ext.tree.AsyncTreeNode({
						mm_clientfile:gridnode.data.mm_clientfile 
						,mm_filesize:gridnode.data.mm_filesize 
						,mt_name:gridnode.data.mt_name 
						,mm_height:gridnode.data.mm_height
						,mm_width:gridnode.data.mm_width 
						,mm_duration:gridnode.data.mm_duration
						,mm_key:gridnode.data.mm_key 
					});		
	}
	
//	handleFileClick('',displaynode,'',true);
	handleBookmarkdblClick(displaynode);
}


function handleDataViewFileDblClick(div,i,node,e){
	var dataviewnode = fDataView.getRecord(node);
	displaynode = editFilesTree.getNodeById(dataviewnode.data.mm_key);
	if(displaynode == undefined){
		displaynode = new Ext.tree.AsyncTreeNode({
						mm_clientfile:dataviewnode.data.mm_clientfile 
						,mm_filesize:dataviewnode.data.mm_filesize 
						,mt_name:dataviewnode.data.mt_name 
						,mm_height:dataviewnode.data.mm_height
						,mm_width:dataviewnode.data.mm_width 
						,mm_duration:dataviewnode.data.mm_duration
						,mm_key:dataviewnode.data.mm_key 
					});				
	}
	handleFileClick('',displaynode,'',true);
}


function getActiveFileTree(){
	try{
		tree = myrsnatabs.getActiveTab().title == 'My Files' ? editFilesTree : my_bookmarks
	} catch(e) {
		tree = null	
	}
	return tree;
}

function handleFileOption(thebutton,theevent){
	var tree = getActiveFileTree();

	var selNode = tree.selModel.selNode;
	if(selNode != null && selNode != undefined){
		if (tree.id == 'editFilesTree'){
			handleTreeRightClick(tree.getSelectionModel().selNode,theevent,thebutton);
		}else{
			handleBookmarkRightClick(tree.getSelectionModel().selNode,theevent,thebutton);	
		}
	}
}

function handleFolderView(thebutton,theevent){
	var tree = getActiveFileTree();
	var node = tree.getSelectionModel().getSelectedNode();
	var node_id = (tree.id == 'editFilesTree' ? node.attributes.cfolder_id : node.attributes.id);
	var event_pos = theevent.getXY();

		menuFile = new Ext.menu.Menu({
						id: 'menuFile',
						items: [{
									text: 'Thumbnail View'
									,iconCls:'tree-THUMBVIEW'
									,handler: function(){
										if(tree.id == 'editFilesTree'){
											var url = myRSNApath + "myrsna/update_customer_file.cfm?action=CHANGEVIEW&thumbview=1&cf=" + node_id;
										}else{
											var url = myRSNApath + "plugins/my_bookmarks_dev/my_bookmarks_util.cfm?action=CHANGEVIEW&thumbview=1&media_id=" + node_id;
										}

										if(!node.isRoot){
											new Ajax.Request(url, {
												method: 'get',
												asynchronous: false,
												evalJS: 'force'
												,onSuccess: function(transport){
														node.attributes.thumbview = true;
														var selModel = tree.getSelectionModel();
														handleFileClick(selModel,node,true);
													}
											});	
										}else{
											node.attributes.thumbview = true;
											var selModel = tree.getSelectionModel();
											handleFileClick(selModel,node,true);
										}
									}//handler
								},
								
								'-',
								{
									text: 'Detailed View'
									,iconCls:'tree-DETAILVIEW'
									,handler: function(){
										if(tree.id == 'editFilesTree'){
											var url = myRSNApath + "myrsna/update_customer_file.cfm?action=CHANGEVIEW&thumbview=0&cf=" + node_id;
										}else{
											var url = myRSNApath + "plugins/my_bookmarks_dev/my_bookmarks_util.cfm?action=CHANGEVIEW&thumbview=0&media_id=" + node_id;
										}
										if(!node.isRoot){
											new Ajax.Request(url, {
												method: 'get',
												asynchronous: false,
												evalJS: 'force'
												,onSuccess: function(transport){
														node.attributes.thumbview = false;
														var selModel = tree.getSelectionModel();
														handleFileClick(selModel,node,true);
													}
											});											
										}else{
											node.attributes.thumbview = false;
											var selModel = tree.getSelectionModel();
											handleFileClick(selModel,node,true);
										}
									}//handler
								}
								]
						});
		if(thebutton != undefined){
			event_pos[0] = event_pos[0]-110;
			event_pos[1] = event_pos[1]+9;
		}
//		debugger;
		var disabled_index = (node.attributes.thumbview ? 0 : 2);
		menuFile.items.items[disabled_index].disable();
	 	menuFile.showAt(event_pos);
}




Ext.DataView.DragSelector = function(cfg){
    cfg = cfg || {};
    var view, regions, proxy, tracker;
    var rs, bodyRegion, dragRegion = new Ext.lib.Region(0,0,0,0);
    var dragSafe = cfg.dragSafe === true;

    this.init = function(dataView){
        view = dataView;
        view.on('render', onRender);
    };

    function fillRegions(){
        rs = [];
        view.all.each(function(el){
            rs[rs.length] = el.getRegion();
        });
        bodyRegion = view.el.getRegion();
    }

    function cancelClick(){
        return false;
    }

    function onBeforeStart(e){
        return !dragSafe || e.target == view.el.dom;
    }

    function onStart(e){
        view.on('containerclick', cancelClick, view, {single:true});
        if(!proxy){
            proxy = view.el.createChild({cls:'x-view-selector'});
        }else{
            proxy.setDisplayed('block');
        }
        fillRegions();
        view.clearSelections();
    }

    function onDrag(e){
        var startXY = tracker.startXY;
        var xy = tracker.getXY();

        var x = Math.min(startXY[0], xy[0]);
        var y = Math.min(startXY[1], xy[1]);
        var w = Math.abs(startXY[0] - xy[0]);
        var h = Math.abs(startXY[1] - xy[1]);

        dragRegion.left = x;
        dragRegion.top = y;
        dragRegion.right = x+w;
        dragRegion.bottom = y+h;

        dragRegion.constrainTo(bodyRegion);
        proxy.setRegion(dragRegion);

        for(var i = 0, len = rs.length; i < len; i++){
            var r = rs[i], sel = dragRegion.intersect(r);
            if(sel && !r.selected){
                r.selected = true;
                view.select(i, true);
            }else if(!sel && r.selected){
                r.selected = false;
                view.deselect(i);
            }
        }
    }

    function onEnd(e){
        if(proxy){
            proxy.setDisplayed(false);
        }
    }

    function onRender(view){
        tracker = new Ext.dd.DragTracker({
            onBeforeStart: onBeforeStart,
            onStart: onStart,
            onDrag: onDrag,
            onEnd: onEnd
        });
        tracker.initEl(view.el);
    }
};


/*function handleTreeMediaDisplay(node,theevent){
	launchExtWindow('/myrsna/viewFile.cfm?q='+node.attributes.mm_key+'&t=WEB&h=450&w=600'
					,node.attributes.mm_clientfile
					,Number(node.attributes.mm_height)+70
					,Number(node.attributes.mm_width)+40
					,'tree-'+node.attributes.mt_name
				);
}*/

function handleLanuchMedia(q){
	alert(q);	
	win = new Ext.Window(
			{
				id:q,
				ownerCt: 'myfilesContainer',
				title:'File Viewer',
				width:800,
				height:600,
				autoScroll:true,
				autoLoad:{url:'/myrsna/mediadisplay.cfm?q=' + q, scripts:true, text:'Loading'}
			}
		);
	win.show();	
	
}




Ext.DataView.DragSelector = function(cfg){
    cfg = cfg || {};
    var view, regions, proxy, tracker;
    var rs, bodyRegion, dragRegion = new Ext.lib.Region(0,0,0,0);
    var dragSafe = cfg.dragSafe === true;

    this.init = function(dataView){
        view = dataView;
        view.on('render', onRender);
    };

    function fillRegions(){
        rs = [];
        view.all.each(function(el){
            rs[rs.length] = el.getRegion();
        });
        bodyRegion = view.el.getRegion();
    }

    function cancelClick(){
        return false;
    }

    function onBeforeStart(e){
        return !dragSafe || e.target == view.el.dom;
    }

    function onStart(e){
        view.on('containerclick', cancelClick, view, {single:true});
        if(!proxy){
            proxy = view.el.createChild({cls:'x-view-selector'});
        }else{
            proxy.setDisplayed('block');
        }
        fillRegions();
        view.clearSelections();
    }

    function onDrag(e){
        var startXY = tracker.startXY;
        var xy = tracker.getXY();

        var x = Math.min(startXY[0], xy[0]);
        var y = Math.min(startXY[1], xy[1]);
        var w = Math.abs(startXY[0] - xy[0]);
        var h = Math.abs(startXY[1] - xy[1]);

        dragRegion.left = x;
        dragRegion.top = y;
        dragRegion.right = x+w;
        dragRegion.bottom = y+h;

        dragRegion.constrainTo(bodyRegion);
        proxy.setRegion(dragRegion);

        for(var i = 0, len = rs.length; i < len; i++){
            var r = rs[i], sel = dragRegion.intersect(r);
            if(sel && !r.selected){
                r.selected = true;
                view.select(i, true);
            }else if(!sel && r.selected){
                r.selected = false;
                view.deselect(i);
            }
        }
    }

    function onEnd(e){
        if(proxy){
            proxy.setDisplayed(false);
        }
    }

    function onRender(view){
        tracker = new Ext.dd.DragTracker({
            onBeforeStart: onBeforeStart,
            onStart: onStart,
            onDrag: onDrag,
            onEnd: onEnd
        });
        tracker.initEl(view.el);
    }
};


function handleLanuchMedia(q){
	alert(q);	
	win = new Ext.Window(
			{
				id:q,
				ownerCt: 'myfilesContainer',
				title:'File Viewer',
				width:800,
				height:600,
				autoScroll:true,
				autoLoad:{url:'/myrsna/mediadisplay.cfm?q=' + q, scripts:true, text:'Loading'}
			}
		);
	win.show();	
	
}


function handleDeleteFile(selNodes){
	var alert_message = 'Are you sure you want to DELETE this file?';
	var confirm_success = 'File deleted successfully.';
	var confirm_failure = 'Sorry, we were unable to delete your file.';
	var id_list = selNodes[0].id;
	if(selNodes.length > 1){
		alert_message = 'Are you sure you want to DELETE these files?';
		confirm_success = 'Files deleted successfully.';
		confirm_failure = 'Sorry, we were unable to delete your files.';
		
		for(var i=1; i<selNodes.length; i++){
			id_list = id_list + ',' + selNodes[i].id;	
		}
	}

	var formDeleteFile = new Ext.FormPanel({
						formId:'formDeleteFile',
						labelWidth: 75, // label settings here cascade unless overridden
						frame:true,
						autoWidth:true,
						html: alert_message,
						items:[	
							   new Ext.form.Hidden({
								id:'q',
								name:'q',
								value:id_list})
							  ]// end items for form
						
						,
						buttons: [{
						text: 'Delete'
						,handler:function()
							{
								var allow_submit = true;
							
								if(allow_submit){
									Ext.WindowMgr.get('deletefilew').hide();
									Ext.getBody().mask('Deleting file...','ext-el-mask-msg x-mask-loading');
									
									formDeleteFile.getForm().submit({ 
								
										method:'POST' 
										,url:'/myrsna/update_customer_file.cfm?ACTION=DELETEFILE'
										,success:function(theform,theaction){ 
												Ext.getBody().unmask();
											
//												Ext.Msg.alert('Success',confirm_success);
												Ext.Msg.show({
														title: 'Success'
														,msg:'<div align="center">'+confirm_success+'</div>'
														,minWidth:300
														,buttons: Ext.MessageBox.OK
												});


												//alert (viewfilespanel + ' ' + viewfilespanel.findById('myfilesDetailview') + ' ' + viewfilespanel.findById('myfilesfolderview')+ ' ' + viewfilespanel.findById('file_properties_tabpanel') + ' items: ' + viewfilespanel.items);
												//fileProperties
												
												
												
												
												var tree_node = editFilesTree.getSelectionModel().selNode;
												
												var panel_type = '';
												if(viewfilespanel.items != undefined){
													var panel_type = viewfilespanel.items.keys[0];
												}
												else{
													selNodes[0].parentNode.select();	
												}
												
												if(panel_type == 'myfilesfolderview' || panel_type == 'myfilesDetailview'){
													handleFileClick('',tree_node,true);
												}else if(panel_type == 'editFileContainer'){
													if(editFileContainer.node_id == tree_node.attributes.id){
														selNodes[0].parentNode.select();
													}
												}												
												
												for(var i=0; i<selNodes.length; i++){
													selNodes[i].remove();	
												}
																
												Ext.WindowMgr.get('deletefilew').destroy();
											} //end success
									
										,failure:function(form, action){ 
												Ext.getBody().unmask();
												handleActionFailure(confirm_failure);
											} // end failure
									}); // end submit
								}// end allow_submit							
							}// end button handler
								  
						},
							{text:'Cancel'
								,handler:function(){Ext.WindowMgr.get('deletefilew').destroy();}
						}]// end buttons
					});
	
	var deletefilew = new Ext.Window(
		{
			id:'deletefilew',
			title:'Delete File',
			width:375,
			autoHeight:true,
			autoScroll:true,
			iconCls:'iconDeleteFile',
			shadow:false
			,items:[formDeleteFile		
			]  // bm_form_window.items
		}
	).show();		
}

function handleDataViewRender(component){
	var dragZone = new ImageDragZone(fDataView, {containerScroll:true,
        ddGroup: 'myfilesDD'});
}


function handleTreeDrop(dragevent){
	//We only want to take action if the node is being dropped from a grid (i.e. fDataGrid),
	//otherwise we already have a way to handle the drop (from the dataview or the tree itself).
	//The code below is mostly taken from the onNodeDrop funciton of the TreeDropZone ojb in Ext-js

	var tree = getActiveFileTree();
	var dragdata = dragevent.source.dragData;
	if(dragdata.grid != undefined){
		var point = dragevent.point;
        	var targetNode = dragevent.target;

        	var dropNodes = [];
		var selNodes = dragevent.data.grid.getSelections();
		for(var i=0; i < selNodes.length; i++){
			var node = tree.getNodeById(selNodes[i].data.mm_key);
			if(node == undefined){
				node = new Ext.tree.AsyncTreeNode({
							id:selNodes[i].data.mm_key
							,text:selNodes[i].data.mm_clientfile
							,mm_clientfile:selNodes[i].data.mm_clientfile
							,mm_filesize:selNodes[i].data.mm_filesize
							,mt_name:selNodes[i].data.mt_name
							,mm_key:selNodes[i].data.mm_key
							,mm_height:selNodes[i].data.mm_height
							,mm_width:selNodes[i].data.mm_width
							,mm_duration:selNodes[i].data.mm_duration
//							,cq_converting:json.cq_converting
//							,cq_converted:json.cq_converted
							,mm_thumbnail:selNodes[i].data.thumbnail
//							,thumbnail:json.thumbnail
							,iconCls:'tree-'+selNodes[i].data.mt_name
							,leaf:true
							,success:true
						});		
			}
			dropNodes.push(node);
		}
		
		var dropEvent = {
				tree : dragevent.tree,
				target: targetNode,
				data: dragevent.data,
				point: point,
				source: dragevent.source,
				rawEvent: dragevent.rawEvent,
				dropNode: dropNodes,
				cancel: !dropNodes,
				dropStatus: false
		};

		if(point == "append" && !targetNode.isExpanded()){
			targetNode.expand(false, null, function(){
				handleCompleteDrop(dropEvent);
			}.createDelegate(this));
		}else{
			handleCompleteDrop(dropEvent);
		}
		
		var dropNode = dropNodes[0];
	}else if(dragevent.source.view != undefined){
		var dropNode = dragevent.dropNode[0];
	}else{
		var dropNode = dragevent.dropNode;
	}


/*	var display_node = tree.getNodeById(tree.display_id);
	var dropNode = (dragevent.source.tree != undefined ? dragevent.dropNode : dragevent.dropNode[0]);

	if(display_node.attributes.mt_name == 'FOLDER' && dropNode.attributes.mt_name != 'FOLDER'){
		if((dragevent.target.attributes.mt_name == 'FOLDER' && dragevent.target.id == tree.display_id) || (dragevent.target.attributes.mt_name != 'FOLDER' && dragevent.target.parentNode.id == tree.display_id) || (dropNode.parentNode.id == tree.display_id)){
			display_node.fireEvent('click',display_node);
		}
	}*/
	
	
	var display_node = tree.getNodeById(tree.display_id);

	if((display_node.attributes.mt_name == 'FOLDER' || display_node.attributes.node_type == 'FOLDER') && dropNode.attributes.mt_name != 'FOLDER'){
		if((dragevent.target.attributes.mt_name == 'FOLDER' && dragevent.target.id == tree.display_id) || (dragevent.target.attributes.mt_name != 'FOLDER' && dragevent.target.parentNode.id == tree.display_id) || (dragevent.target.id == tree.display_id)){
			display_node.fireEvent('click',display_node);
		}
	}
	
}

function handleCompleteDrop(de){
		//Code mostly taken from the completeDrop funciton of the TreeDropZone obj in Ext-js
	
        var ns = de.dropNode, p = de.point, t = de.target;
        if(!Ext.isArray(ns)){
            ns = [ns];
        }

        var n;
        for(var i = 0, len = ns.length; i < len; i++){
            n = ns[i];
            if(p == "above"){
                t.parentNode.insertBefore(n, t);
            }else if(p == "below"){
                t.parentNode.insertBefore(n, t.nextSibling);
            }else{
                t.appendChild(n);
            }
        }
        n.ui.focus();
	   var tree = getActiveFileTree();
        if(tree.hlDrop){
            n.ui.highlight();
        }
        t.ui.endDrop();
	   tree.fireEvent("nodedrop", de);	
}


function handleTreePostDrop(e){
	var tree = getActiveFileTree();
	tree.getNodeById(tree.display_id).select();	
}

function createTreeNode(mm_key,fn,node_type){
/**********************************************************************************
This function is used to get a complete tree node that can be used in My Files.
The necessary parameters are the mm_key of the file you'd like to get the node for.
Second parameter should be the name of a function you would like to run after the
node is created (make sure it is sent as a string).  This post-completion function 
will in turn be sent one parameter, the JSON node object just created.
**********************************************************************************/
	Ext.Ajax.request({
			url:'/myrsna/update_customer_file.cfm'
			,method:'POST'
			,params:{action:'GETNODE',encoded_mm_id:mm_key}
			,success:function(responseObj,optionsObj){
					var json = eval(responseObj.responseText)[0];

					var node = new Ext.tree.AsyncTreeNode({
									id:json.id
									,text:json.text
									,bm_web:json.mm_web
									,mm_clientfile:json.mm_clientfile
									,mm_filesize:json.mm_filesize
									,mt_name:node_type
									,mm_key:json.mm_key
									,mm_height:json.mm_height
									,mm_width:json.mm_width
									,mm_duration:json.mm_duration
									,cq_converting:json.cq_converting
									,cq_converted:json.cq_converted
									,mm_thumbnail:json.mm_thumbnail
									,thumbnail:json.thumbnail
									,iconCls:json.iconCls
									,leaf:json.leaf
									,success:json.success
								});		
					eval(fn+'(node)');
				}
		});	
}


function reloadMediaPanel(node){
	var winid = getActiveFileTree().winid;	
	var view_panel = Ext.getCmp('fileviewpanel'+winid);
	load_imageviewer_panel(node,view_panel);
}







function handleRadlexTab(tabpanel){
	var winid = tabpanel.ownerCt.winid;
	if(tabpanel.ownerCt.collapsed){toggle_properties_panel(false,winid);}
	
	var tag_store = new Ext.data.JsonStore({
						id:'custom_tag_store'+winid
						,url:'/myrsna/update_customer_file.cfm'
						,baseParams:{action:'GETMEDIATAGS',media_id:'',media_type:'',allTags:true,distinctTags:true}
						,fields:['ct_id','media_id','radlex_id','media_type','tag']
					});
	tag_store.load();
	tag_store.sort('tag');
	

/*	var radlexstore = new Ext.data.Store({
			id:'fileproperties_radlex_datastore'+winid
//			,baseParams:{start:0, limit:20, query:'image'}
			,proxy:stp = new Ext.data.ScriptTagProxy({
					timeout : 5000,
					callbackParam : 'cb',
					url:'http://lakeside2008.rsna.org/myrsna/radlexjson.cfm'
//					url :mediapath+'radlex/radlexjson.cfm'
					})
			,reader: str = new Ext.data.JsonReader({
							totalProperty: 'results',
							root:'terms',
							id:'id'+winid}
						,[{name:'id', mapping:'id'},{name:'term',mapping:'term'}]
						)

			,listeners: {loadexception: handleRadLexDataStoreLoadException, 'load':function(store,records,opts){debugger;}}
		});	
	
	//this listener is used to make sure that the "query" param is sent when paging (since a blank string returns results).
	radlexstore.on({'beforeload':{
			fn: function(store, opts){
				if(opts.params.query == undefined && store.lastOptions != null){
					opts.params.query = store.lastOptions.params.query;
				}
			}
			,scope:this
			}
		});*/
	
	
	var radlexstore = new Ext.data.JsonStore({
			id:'fileproperties_radlex_datastore'+winid
			,url:'http://lakeside2008.rsna.org/myrsna/radlexjson.cfm'
			,baseParams:{start:0, limit:20, query:'image'}
			,totalProperty: 'results'
			,root:'terms'
			,fields:[{name:'id', mapping:'id'},{name:'term',mapping:'term'}]
		});
	
	radlexstore.on({'beforeload':{
			fn: function(store, options){
				if(options.params.query == undefined && store.lastOptions != null){
					options.params.query = store.lastOptions.params.query;
				}
			}
			,scope:this
			}
		});
	
	var resultTpl = new Ext.XTemplate(
		   '<tpl for="."><div class="search-item">',
			  '<span>{term}</span>',
		   '</div></tpl>'
	    );		
	
	var radlexdatagrid = new Ext.grid.GridPanel({
			id:'fileproperties_radlex_gridpanel'+winid,
			store: radlexstore,
			columns: [{header: "Term", width: tabpanel.getInnerWidth()-25, dataIndex:'term'}],
			multiSelector:true,
			hideHeaders:true,
			stripeRows: true,
			height:119
			,listeners: {'cellclick':handleRadlexLeftClick,'cellcontextmenu':handleRadlexRightClick}
//			,listeners: {'rowdblclick':handleGridFileDblClick,'cellcontextmenu':handleGridRightClick}
//				,listeners: {'rowdblclick':handleGridFileDblClick}
		});	
	
	var radlexpanel = new Ext.Panel({
		header:false,
		id:'fileProperties_radlex_panel'+winid,
	   	height:173,
	   	autoScroll:true,

	   	items: radlexdatagrid,

	   	tbar: [
			'Search Radlex: ', ' ',
			
				new Ext.app.myRSNASearchField({
					id:'fileproperties_radlex_searchfield'+winid,
					emptyText:'Search for Radlex tags...',
					width:250
					,mode:'local'
					,store:searchterm_datastore
					,editable:true
					,typeAhead:true
					,displayField:'searchText'
					,listeners:{'focus':function(){this.store.clearFilter();}
							,'select':function(){this.onTrigger2Click();}
							}
				})

				,'->'
				
				,new Ext.Button({id:'add_tag'+winid
							 ,text:'Add This Tag:'
							 ,iconCls:'viewer-ADD-TERM'
							 ,listeners:{'click':function(button,e){
								 				var tag = Ext.getCmp('customer_tag'+winid).getValue();
												if(tag.length == 0){
													Ext.Msg.alert('Add a tag','Please enter a tag.');
												}else if(tag.length < 3){
													Ext.Msg.alert('Add a tag','All tags must be at least 3 characters.');
												}else{
													applyCustomerTag(tag,winid,Ext.getCmp('radlex_id'+winid).getValue());
													var temp_store = Ext.getCmp('custom_tag_store'+winid);
													if(temp_store != undefined){temp_store.reload();}
												}
											}
									}
						})
				
				,new Ext.form.Hidden({
					id:'radlex_id'+winid,
					name:'radlex_id'+winid,
					value:''})
				
				,new Ext.form.ComboBox({
					id:'customer_tag'+winid
					,name:'customer_tag'
					,width:200
					,editable: true
					,typeAhead: true
					,listeners:{select: function(combo,record,index){Ext.getCmp('radlex_id'+winid).setValue(record.data.radlex_id);}}
					,mode:'local'
					,store: tag_store
					,displayField:'tag'
					,emptyText:'Manually add a tag...'
				})
			]

/*	   	,bbar: new Ext.PagingToolbar({
			id:'fileproperties_radlex_pagingbar'+winid,
		  	store: radlexstore,
		  	pageSize: 10,
//		  	displayInfo: true,
//		  	displayMsg: 'Topics {0} - {1} of {2}',
		  	emptyMsg: "No topics to display"
	   	})
*/   
		,bbar:[new Ext.Button({id:'apply_terms'+winid
							 ,text:'Apply Selected Radlex Tags'
							 ,iconCls:'viewer-ADD-TERM'
							 ,disabled:true
							 ,listeners:{'click':function(button,e){
								 				applyRadlexTerms(Ext.getCmp('fileproperties_radlex_gridpanel'+winid).getSelections(),winid);
											}
									}
						})]
	});	
					
	
	tabpanel.setHeight(200);
	tabpanel.add(radlexpanel);
	tabpanel.doLayout();
	
	var bbar = Ext.getCmp('fileProperties_radlex_panel'+winid).getBottomToolbar();

	bbar.el.dom.firstChild.width = '100%';
	bbar.items.items[0].el.dom.parentNode.align = 'right';
	
//	Ext.getCmp('fileproperties_radlex_pagingbar'+winid).add('->');
//	Ext.getCmp('fileproperties_radlex_pagingbar'+winid).addButton(temp);

//	editFileContainer_items[0].bbar.getEl().child("table").wrap({tag:'center'});	
	tabpanel.removeListener('activate',handleRadlexTab);
}


function handleTermTab(tabpanel){
	var winid = tabpanel.ownerCt.winid;
	var tree = getActiveFileTree();
	var node = tree.getSelectionModel().getSelectedNode();
	if(node.attributes.mm_key != '' && node.attributes.node_type != 'DPS2008_VIDEO'){
		var media_id = node.attributes.mm_key;
		var media_type = 'CF';
	}else{
		var media_id = node.id;
		var media_type = 'BM';
	}
	
	if(tabpanel.ownerCt.collapsed){toggle_properties_panel(false,winid);}

	var term_store = new Ext.data.JsonStore({
						id:'radlex_term_store'+winid
						,url:'/myrsna/update_customer_file.cfm'
//						,baseParams:{action:'GETRADLEXTERMS',encoded_mm_id:tree.getSelectionModel().getSelectedNode().id}
						,baseParams:{action:'GETMEDIATAGS',media_id:media_id,media_type:media_type}
						,fields:['ct_id','media_id','radlex_id','media_type','tag']
					});
	term_store.load();
	term_store.sort('tag');
	
	var termdatagrid = new Ext.grid.GridPanel({
			id:'fileproperties_term_gridpanel'+winid,
			store: term_store,
			columns: [{header: "Tag/Term", width: tabpanel.getInnerWidth()-25, dataIndex:'tag'}],
			multiSelector:true,
			hideHeaders:true,
//			stripeRows: true,
			height:144
			,listeners: {'cellclick':handleTermLeftClick,'cellcontextmenu':handleTermRightClick}
			
			,viewConfig: {
				getRowClass: function(r,index) {
					if (r.get('radlex_id') != '') {
						return 'x-grid-radlex';
					}
				
				}
			}			
		});		

	var termpanel = new Ext.Panel({
		header:false,
		id:'fileProperties_term_panel'+winid,
	   	height:172,
	   	autoScroll:true

	   	,items: termdatagrid

	   	,bbar: ['->'
				,new Ext.Button({id:'remove_terms'+winid
							 ,text:'Remove Selected Tags'
							 ,iconCls:'viewer-DELETE-TERM'
							 ,disabled:true
							 ,listeners:{'click':function(button,e){
								 				removeRadlexTerms(Ext.getCmp('fileproperties_term_gridpanel'+winid).getSelections(),winid);
											}
									}
						})
			]
    });	
	
	tabpanel.setHeight(200);
	tabpanel.add(termpanel);
	tabpanel.doLayout();
	tabpanel.removeListener('activate',handleTermTab);	
}


function handleRadlexLeftClick(grid,rowIndex,columnIndex,e){
	var winid = grid.ownerCt.ownerCt.ownerCt.winid;
	Ext.getCmp('apply_terms'+winid).enable();
}

function handleRadlexRightClick(grid,rowIndex,cellIndex,e){
	e.stopEvent();
	
	var radlex_search_menu = new Ext.menu.Menu({
					id: 'radlex_search_menu',
					items: [{
								text: 'Apply Selected Terms'
								,iconCls:'viewer-ADD-TERM'
								,handler: function(){applyRadlexTerms(grid.getSelections(),grid.ownerCt.ownerCt.ownerCt.winid);}
							}
								
							,'-',{text:'Cancel',iconCls:'menu-CANCEL',handler: function(){this.destroy();}}
						]   
					});

	radlex_search_menu.showAt(e.getXY());	
}

function handleTermLeftClick(grid,rowIndex,columnIndex,e){
	if(grid.store.getAt(0).data.ct_id != 'blank_record'){
		var winid = grid.ownerCt.ownerCt.ownerCt.winid;
		Ext.getCmp('remove_terms'+winid).enable();
	}
}

function handleTermRightClick(grid,rowIndex,cellIndex,e){
	if(grid.store.getAt(0).data.ct_id != 'blank_record'){
		e.stopEvent();
		var winid = grid.ownerCt.ownerCt.ownerCt.winid;
		
		var radlex_term_menu = new Ext.menu.Menu({
						id: 'radlex_term_menu',
						items: [{
									text: 'Remove Selected Terms'
									,iconCls:'viewer-DELETE-TERM'
									,handler: function(){removeRadlexTerms(grid.getSelections(),winid);}
								}
									
								,'-',{text:'Cancel',iconCls:'menu-CANCEL',handler: function(){this.destroy();}}
							]   
						});
	
		radlex_term_menu.showAt(e.getXY());	
	}
}


function applyCustomerTag(tag,winid,radlex_id){
	var tree = getActiveFileTree();
	var node = tree.getSelectionModel().getSelectedNode();
	
	if(node.attributes.mm_key != '' && node.attributes.node_type != 'DPS2008_VIDEO'){
		var media_id = node.attributes.mm_key;
		var media_type = 'CF';
	}else{
		var media_id = node.id;
		var media_type = 'BM';
	}

	Ext.getBody().mask('Adding your tag...','ext-el-mask-msg x-mask-loading');
	
	Ext.Ajax.request({
			url:'/myrsna/update_customer_file.cfm'
			,method:'POST'
			,params:{action:'ADDCUSTOMERTAG',media_type:media_type,media_id:media_id,tag:tag,radlex_id:radlex_id}
			,success:function(responseObj,optionsObj){
					if(Ext.getCmp('fileproperties_term_gridpanel'+winid) != undefined){
						Ext.getCmp('fileproperties_term_gridpanel'+winid).getStore().load();
					}
					Ext.getBody().unmask();
					Ext.Msg.show({
							title: 'Success!'
							,msg:'<div align="center">Your tag has been successfully added.</div>'
							,minWidth:300
							,buttons: Ext.MessageBox.OK
					});
				}
				
			,failure:function(responseObj,optionsObj){
					Ext.getBody().unmask();
					handleActionFailure('Sorry, we were unable to add your tag.');
				}
		});	
}


function applyRadlexTerms(selNodes,winid){
	var radlex_list = ''
	
	var tree = getActiveFileTree();
	if(winid == undefined){winid = '';}
	
	for(var i=0; i<selNodes.length; i++){
		if(i>0){radlex_list = radlex_list + ',';}
		radlex_list = radlex_list + selNodes[i].data.id;
	}
	
	var node = tree.getSelectionModel().getSelectedNode();
	if(node.attributes.mm_key != '' && node.attributes.node_type != 'DPS2008_VIDEO'){
		var media_id = node.attributes.mm_key;
		var media_type = 'CF';
	}else{
		var media_id = node.id;
		var media_type = 'BM';
	}
	
	Ext.getBody().mask('Adding Radlex terms...','ext-el-mask-msg x-mask-loading');
	
	Ext.Ajax.request({
			url:'/myrsna/update_customer_file.cfm'
			,method:'POST'
			,params:{action:'ADDRADLEXTERMS',radlex_id:radlex_list,media_id:media_id,media_type:media_type}
			,success:function(responseObj,optionsObj){
					if(Ext.getCmp('fileproperties_term_gridpanel'+winid) != undefined){
						Ext.getCmp('fileproperties_term_gridpanel'+winid).getStore().load();
					}
					Ext.getBody().unmask();
					Ext.Msg.show({
							title: 'Success!'
							,msg:'<div align="center">The selected Radlex terms were successfully added to your bookmark.</div>'
							,minWidth:300
							,buttons: Ext.MessageBox.OK
					});
				}
				
			,failure:function(responseObj,optionsObj){
					Ext.getBody().unmask();
					handleActionFailure('Sorry, we were unable to add the selected Radlex terms.');
				}
		});	
}

function removeRadlexTerms(selNodes,winid){
	var ct_list = '';
	if(winid == undefined){winid = '';}
	
	for(var i=0; i<selNodes.length; i++){
		if(ct_list!=''){ct_list = ct_list + ',';}	
		ct_list = ct_list + selNodes[i].data.ct_id;
	}

	Ext.getBody().mask('Removing Radlex terms...','ext-el-mask-msg x-mask-loading');
	
	Ext.Ajax.request({
			url:'/myrsna/update_customer_file.cfm'
			,method:'POST'
			,params:{action:'REMOVEMEDIATAGS',ct_list:ct_list}
			,success:function(responseObj,optionsObj){
					Ext.getCmp('fileproperties_term_gridpanel'+winid).getStore().load();
					Ext.getCmp('remove_terms'+winid).disable();
					Ext.getBody().unmask();
					Ext.Msg.show({
							title: 'Success!'
							,msg:'<div align="center">The selected tags were successfully removed.</div>'
							,minWidth:300
							,buttons: Ext.MessageBox.OK
					});

				}
			,failure:function(responseObj,optionsObj){
					Ext.getBody().unmask();
					handleActionFailure('Sorry, we were unable to remove the selected tags.');
				}
		});	
}

function handleRadLexDataStoreLoadException(o, json, arg, e) {
	handleActionFailure('Sorry, we were unable to load the Radlex terms.');
}