function create_myFilesTree(search_term){
	search_term = Ext.value(search_term,'');
	var app_store = new Ext.data.JsonStore({
				id:'myfiles_app_store'
				,autoLoad:true
				,url:'/myfiles/update_customer_file.cfm'
				,baseParams:{action:'GETAPPDATA'}
				,fields:['am_id','amt_id','am_display_name','amt_display_name','amt_item_limit','amt_drag','amt_drop','amt_file_types']
			});
	
    	editFilesTree = myFilesTree = new Ext.tree.TreePanel({
		id:'editFilesTree',
		applyTo:'foldersList',
        	el:'editFilesWindow',
		listeners:{
				'beforenodedrop':handleTreeDrop
				,'contextmenu':handleTreeRightClick
				,'click':handleTreeNodeClick
				,'nodedrop':handleTreePostDrop
		},
//		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.SearchField({
						width:150
						,id: 'mf_search'
						,name:'mf_search'
						,hideTrigger1:true})
					  

					  
					,'->'

					,new Ext.Toolbar.MenuButton({
						id:'mf_tree_filter',
						text: 'Filter',
						hidden:false,
						listeners:{'arrowclick':handleFilterOption,'click':handleFilterOption},
						iconCls:'tree-OPTIONS'
//						,ctCls:'x-btn-over'
						})
					
					,'&nbsp;'

					  ,new Ext.BoxComponent({
							autoEl: {tag: 'div', cls: 'x-tool x-tool-refresh', id:'treepanel_refresh'}
							 
							,listeners: {render:function(f){
								f.el.on('click', function(button, e) {refreshmyFilesTree();})
								,f.el.on('mouseover',function(button,e){this.dom.className = 'x-tool x-tool-refresh-over';})
								,f.el.on('mouseout',function(button,e){this.dom.className = 'x-tool x-tool-refresh';})
								}
							}
						}) 	
					
					  ,new Ext.BoxComponent({
							autoEl: {tag: 'div', cls: 'x-tool x-tool-left', id:'bm_treepanel_toggle'}
							 
							,listeners: {render:function(f){
								f.el.on('click', function(button, e) {
									var minimize = (button.target.className == 'x-tool x-tool-down-over');
									Ext.getCmp('foldersList').collapse();
									})
								,f.el.on('mouseover',function(button,e){this.dom.className = 'x-tool x-tool-left-over';})
								,f.el.on('mouseout',function(button,e){this.dom.className = 'x-tool x-tool-left';})
								}
							}
						}) 
					  ,'&nbsp;'
					]
			}),

		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 + 'myfiles/myfiles.json.debug.cfm'
					,baseParams:{search_term:search_term}
					,search_term:search_term
					,listeners:{'load':handleMyFilesInitialLoad
							,'beforeload':function(treeloader,node){
											var tree = getActiveFileTree();
											if(node.attributes.cfolder_id != undefined)
												node.id = node.attributes.cfolder_id;
											this.baseParams.search_term = treeloader.search_term;
											var movenodelistener = tree.hasListener('movenode');
											if(treeloader.search_term != '' && movenodelistener){
												tree.un('movenode',myfilestreeMoveNodeListener);
											}else if(treeloader.search_term == '' && !movenodelistener){
												tree.addListener('movenode',myfilestreeMoveNodeListener);
											}
										}
							}
        	})
		
		,root: new Ext.tree.AsyncTreeNode({
							text:'tree root'
							,id:'tree_root'
							,expanded:true
							,draggable:false
							,allowDrop:false
						})
    });
	
	editFilesTree_editor = new Ext.tree.TreeEditor(editFilesTree);
	editFilesTree_editor.on('beforestartedit', handleTreeEditFileRights);
	editFilesTree_editor.on('startedit', handleTreeEditFileName);
	editFilesTree_editor.on('complete', handleTreeCommitFileName);
	editFilesTree.app_store = app_store;
}


function handleMyFilesInitialLoad(treeloader,node,response){
	myFilesLoad.hide();

	var tree = getActiveFileTree();
	tree.addListener('expandnode',function(node)
								{if(Ext.value(node.attributes.mt_name,'FOLDER') == 'FOLDER'){handleFolderExpand(node);}
		});
	tree.addListener('collapsenode',function(node)
								{if(Ext.value(node.attributes.mt_name,'FOLDER') == 'FOLDER'){handleFolderColapse(node);}
		});
	tree.addListener('movenode',myfilestreeMoveNodeListener);
	
	treeloader.un('load',handleMyFilesInitialLoad);
	
	if(dest_mm_key != '')
		handleFindLoadSelectNode(tree,dest_mm_key);
}


function myfilestreeMoveNodeListener(tree,node,oldParent,newParent,index){
	if(Ext.value(node.attributes.mt_name,'FOLDER') == 'FOLDER'){
		handleFolderMove(tree,node,oldParent,newParent,index);
	}else{
		handleFileMove(tree,node,oldParent,newParent,index);
	}
}


function handleFindLoadSelectNode(tree,id){
	var target_node = tree.getNodeById(id);
	if(target_node != null){
		target_node.select();	
	}else{
//		debugger;
	}
}


function refreshmyFilesTree(opt){
	Ext.getBody().mask('Refreshing myFiles...','ext-el-mask-msg x-mask-loading');
	var tree = getActiveFileTree();
	var treeloader = tree.getLoader();
	var sn = tree.selModel.getSelectedNode();
	if(sn != undefined){treeloader.lastID= sn.id;}
	
	if(Ext.type(opt) == 'object'){
		for (var i in opt){
			treeloader.baseParams[i] = opt[i];
		} 
	}
	
	treeloader.suspendEvents();
	treeloader.load(tree.root,
							function(treeloader,node){
								node.expand(false,false);

								if(treeloader.lastID != undefined && treeloader.lastID != tree.root.id){
									tree.root.suspendEvents();
									var newNode = tree.getNodeById(treeloader.lastID);
									var selModel = tree.getSelectionModel();
									if(newNode == null){
										tree.getRootNode().childNodes[0].select();
									}else if(newNode.attributes.mt_name != 'FOLDER'){
										selModel.suspendEvents();
										newNode.select();	
										selModel.resumeEvents();
									}else{
										newNode.select();
										selModel.fireEvent('selectionchange',selModel,newNode);
									}
									tree.root.resumeEvents();
								}
								checkConvertingNodes();
								
								treeloader.removeListener('load');
								Ext.getBody().unmask();
							}
						);
}

function reloadViewerPanel(){
	var tree = getActiveFileTree();
	tree.getSelectionModel().getSelectedNode().select();
	getMyRSNATab('myFiles').un('activate',reloadViewerPanel);
}


function handleTreeEditFileRights (editor,temp,value){
	var selNode = '';
	if(Ext.value(editor.tree,false)){
		selNode = editor.editNode;
	}else{
		var record = this.view.store.getAt(this.view.findItemFromChild(temp.dom.parentNode).viewIndex);
		var type = Ext.value(record.get('mt_name'),'IMAGE');
		var tree = getActiveFileTree();
		if(type == 'FOLDER'){
			// add code for folder thumbnails.	
		}else if(type == 'URL'){
			selNode = tree.getNodeById(record.get('bm_id'));
		}else{
			selNode = tree.getNodeById(record.get('mm_key'));
		}
	}

	if(Ext.value(selNode.parentNode.isRoot,false) || Ext.value(getActiveFileTree().getRootNode().childNodes[0].attributes.am_id,'') != Ext.value(selNode.attributes.am_id,''))
		return false;
	else
		return true;
}


function handleTreeEditFileName(calling_el,val){
	handleEditFileName(this.editNode,this);
}


function handleDataviewEditFileName(calling_el,val){
	if(Ext.isIE){
		var temp = this.view.store.getAt(this.view.findItemFromChild(calling_el.dom.parentNode).viewIndex);
		var attr = temp.data;
	}else{
		var attr = this.view.getSelectedRecords()[0].data;	
	}
	var type = Ext.value(attr.mt_name,'IMAGE');
	if(type == 'FOLDER'){
//		attr.id = attr.folder_id;
	}else{
		attr.id = attr.mm_key;
	}

	var node = createMyFilesNode(attr);
	handleEditFileName(node,this);
}


function handleEditFileName(node,editor){
	var type = Ext.value(node.attributes.mt_name,false)||Ext.value(node.attributes.node_type,'IMAGE');
	if(type != 'FOLDER'){
		var extension = '';
		var title_array = new Array();
		
		var title = Ext.value(node.attributes.mm_clientfile,false)||Ext.value(node.attributes.text,'');
		title_array = title.split(".");
		if(title_array.length > 1){
			extension = '.' + title_array[title_array.length-1];	
		}
		
		var file_title = '';
		if(title_array.length == 1){
			file_title = title_array[0];
		}else{
			for(var i=0; i<title_array.length-1; i++){
				if(i>0){file_title = file_title + '.';}
				file_title = file_title + title_array[i];	
			}
		}
		editor.setValue(file_title);
	}
}


function handleTreeCommitFileName(editor, cur_val, start_val){
	executeRenameMyFile(editor.editNode, cur_val, start_val);
}


function handleDataviewCommitFileName(editor_el, val){
	var record = editor_el.activeRecord;
	var type = Ext.value(record.get('mt_name'),'IMAGE');
	var node = getActiveFileTree().getNodeById(record.get('id'));
	executeRenameMyFile(node,val,editor_el.startValue);
}


function executeRenameMyFile(node, cur_val, start_val){
	var extension = '';
	var title_array = new Array();
	
	title_array = node.attributes.mm_clientfile.split(".");
	if(title_array.length > 1){
		extension = '.' + title_array[title_array.length-1];	
	}
	
	var upd_start_val = '';
	for(var i=0; i<title_array.length-1; i++){
		if(i>0){upd_start_val = upd_start_val + '.';}
		upd_start_val = upd_start_val + title_array[i];	
	}

	if(cur_val.replace(/ /g, '') == '' || cur_val == (upd_start_val+extension)){
		node.setText(start_val);	
	}else{
		if(node.attributes.mt_name == 'FOLDER'){
			Ext.Ajax.request({
				url:'/myfiles/update_customer_file.cfm'
				,method:'POST'
				,params:{action:'RENAMEFOLDER',cfolder_id:node.attributes.cfolder_id,cfolder_name:cur_val}
				,success:function(responseObj,optionsObj){
						node.attributes.text = cur_val;
						node.setText(cur_val);
						node.attributes.mm_clientfile = cur_val;
						handleUpdRenameFile(node,cur_val + extension);
					}
				,failure:function(responseObj,optionsObj){
						handleActionFailure('Sorry, we were unable to rename your folder.');	
					}
			});	
		}else{
			Ext.Ajax.request({
				url:'/myfiles/update_customer_file.cfm'
				,method:'POST'
				,params:{action:'RENAMEFILE',mm_key:node.attributes.mm_key,file_name:cur_val}
				,success:function(responseObj,optionsObj){
						node.attributes.text = cur_val + extension;
						node.setText(cur_val + extension);
						node.attributes.mm_clientfile = cur_val + extension;
						handleUpdRenameFile(node,cur_val + extension);
					}
				,failure:function(responseObj,optionsObj){
						handleActionFailure('Sorry, we were unable to rename your file.');	
					}
			});	
		}
	}
}


function handleUpdRenameFile(node,file_name){
	var right_panel = Ext.getCmp('viewfilespanel');
	if(right_panel != null){
		var thumb_panel = right_panel.findById('myfilesfolderview');
		var grid_panel = right_panel.findById('myfilesDetailview');
		if(thumb_panel != null){
			var right_panel_node = thumb_panel.store.getAt(thumb_panel.store.find('mm_key',node.attributes.mm_key));
		}else if(grid_panel != null){
			var right_panel_node = grid_panel.store.getAt(grid_panel.store.find('mm_key',node.attributes.mm_key));
		}
		
		if(right_panel_node != undefined){
			right_panel_node.set('mm_clientfile',file_name);
			right_panel_node.set('title',Ext.util.Format.ellipsis(file_name, 13));
			right_panel_node.commit();
		}
	}

	var upd_title = false;
	if(node.attributes.mt_name == 'FOLDER'){
		if(editFilesTree.display_id == node.attributes.id){ upd_title = true; }
	}else{
		if(editFilesTree.display_id == node.attributes.mm_key){ upd_title = true; }
	}

	if(upd_title){
//		var treenode = createBookmarkNode(node);
		handleFileClick('',node,false,false);
	}
	
}



function handleFileMove(tree,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 = node.attributes.mm_key;
	var nf = new_parent.attributes.cfolder_id;
	var sc = (node.attributes.d_copy ? true : false);
//	var url = myRSNApath + "myfiles/update_customer_file.cfm?action=MOVE&key=" +key + "&no=" + no + '&nf=' + nf;
	var am_id = Ext.util.Format.undef(node.attributes.am_id);
	var amt_id = Ext.util.Format.undef(node.attributes.amt_id);

	Ext.Ajax.request({
		url:'/myfiles/update_customer_file.cfm'
		,method:'POST'
		,params:{action:'MOVE',key:key,no:no,nf:nf,sc:sc,am_id:am_id,amt_id:amt_id}
		,success:function(responseObj,optionsObj){
				var json = Ext.util.JSON.decode(responseObj.responseText);
				
				/*	Check if the file has moved from it's original app location (even a subfolder).
					If moved, first handle any logic needed to remove a file from the original app, like removing
					any associated records.  Then check if anything needs to be done for the new app.			*/
				if(json.am_id != node.attributes.am_id || json.amt_id != node.attributes.amt_id){
					removeCustomerFileFromApp(json.customer,json.mm_key,node.attributes.am_id,node.attributes.amt_id);
					addCustomerFileToApp(json.customer,json.mm_key,json.am_id,json.amt_id);
				}
				
				var treenode = tree.getNodeById(node.id);
				treenode.attributes.am_id = json.am_id;
				treenode.attributes.amt_id = json.amt_id;
				treenode.attributes.cls = 'x-tree-MF-'+json.am_id;
				
				var UI = treenode.getUI();
				var node_class = treenode.getUI().elNode.classNames().toArray();
				var upd_class = '';
				for(var i=0; i<node_class.length; i++){
					if(node_class[i].substr(0,10) == 'x-tree-MF-')
						upd_class = upd_class + 'x-tree-MF-' + json.am_name + ' ';
					else
						upd_class = upd_class + node_class[i] + ' ';	
				}				
				UI.className = upd_class;

				var selNode = editFilesTree.selModel.getSelectedNode();
				if(selNode != null && selNode.attributes.mt_name == 'FOLDER'){
					handleFileClick('',selNode);	
				}
			}
		});
}


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;

	Ext.Ajax.request({
			url:'/myfiles/update_customer_file.cfm'
			,method:'POST'
			,params:{action:'MOVEFOLDER',cf:cf,no:no,nf:nf}
			,success:function(responseObj,optionsObj){
				}
		
			,failure:function(form, action){ 
//					handleActionFailure('Failure!','Sorry, we were unable to save the description.');
				}
			});
}


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: '/myfiles/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:'/myfiles/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
														,am_id:1
														,amt_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
													});
										
										nNode.loaded = true;
										pNode.appendChild(nNode);
										nNode.ensureVisible();
										nNode.select();
										
										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();
	var tree = getActiveFileTree();
	if(tree.id == 'editFilesTree'){
		var selNode = tree.getNodeById(grid.store.getAt(rowindex).data.mm_key);
	}else{
		var selNode = tree.getNodeById(grid.store.getAt(rowindex).data.bm_id);
	}
	handleTreeRightClick(selNode,theevent,'gridpanelRightClick');
}


function handleDataViewRightClick(DV,index,node,theevent){
	theevent.stopEvent();
	var attr = DV.store.getAt(index).data;
	var type = Ext.value(attr.mt_name,'IMAGE');
	if(type == 'FOLDER'){
//		attr.id = attr.folder_id;
	}else{
		attr.id = attr.mm_key;
	}
	
	var node = createMyFilesNode(attr);
	handleTreeRightClick(node,theevent,'dataviewRightClick',false);
}


function videoDownloadPopupWindow(mm_key){
	Ext.Ajax.request({
		url:'/myfiles/update_customer_file.cfm'
		,method:'POST'
		,params:{action:'VIDOPTIONS',mm_key:mm_key}
		,success:function(responseObj,optionsObj){

			var download_video_store = new Ext.data.JsonStore({
						data:	eval(responseObj.responseText),
						storeId: 'download_video_store',
						fields: ['mm_key','convert_type','icon','descr']
				});

				
			var download_video_tpl = new Ext.XTemplate(
				'<tpl for=".">',
					'<div class="thumb-wrap-1" id="DV{mm_key}" > ',
					'<table width="100%" style="cursor:pointer">',
					'<tr>',
					'<td width="25"><a href="Javascript:alert(\'test\');"><img src="/images/{icon}"></a></td>',
					'<td width="120"><b>{convert_type}</b></td>',
					'<td>{descr}</td>',
					'</tr>',
					'</table>',
					'</div>',
				'</tpl>',
				'<div class="x-clear"></div>'
 
				

			);	
				

				var download_video_dataview = new Ext.DataView({
															   
						id:'viddataview',
						style:'overflow:auto',
						singleSelect:true,
						itemSelector:'div.thumb-wrap-1',
						overClass:'x-view-over',
						loadingText: 'Loading videos.',
						emptyText: 'No videos to display.',
		
						store:download_video_store,
						tpl: download_video_tpl,
						listeners:{click:handleVideoDownloadSelection}
															   });


				var download_video_window = new Ext.Window({
						id:'dlVidWin_'+mm_key,
						mm_key:mm_key,
						title:'Download Options',
						closable:true,
						width:640,
//						height:300,
						height:480,
						autoScroll:true,
						iconCls:'iconVideoDownload',
						modal:true,
						shadow:false
						,items:[
							new Ext.Panel({
								id:'dlVidPanel_'+mm_key 
								,width:'100%'
								,height:350
								,items:[
									   	{border:false
										,html:'<table width="100%" align="center" style="padding:10px; font-size:12px;"><tr><td align="center">Please select video format you would like to download from the selection(s) below.</td></tr></table>'}
										
										,{xtype:'panel',html:'<table width="90%" align="center"><tr><td><hr></td></tr></table>',border:false}
										 ,download_video_dataview
										 
									   ]
								})
							   ]
					}
				).show();	
			}
		,failure:function(responseObj,optionsObj){
				handleActionFailure('Sorry, there was an error while retrieving your video.');	
			}
	});	
}


function handleVideoDownloadSelection(d,index,node,e){
	var mm_key = d.getRecord(node).data.mm_key;
	document.location.href=mediapath + 'myfiles_download.cfm?q=' + mm_key;
}


function handleTreeRightClick(theitem,theevent,thebutton,selTreeNode){
	var tree = getActiveFileTree();
	var event_pos = theevent.getXY();
	selTreeNode = Ext.value(selTreeNode,true);

	if(selTreeNode && theitem.attributes.mt_name == 'FOLDER'){
	 	theitem.select();
	}
	
	var event_pos = theevent.getXY();
	if(theitem.attributes.mt_name != 'FOLDER'){
		myFilesAssetOptions(theitem,event_pos,thebutton);	
	}else if(thebutton != undefined){
		var selNodes = (Ext.value(theitem.attributes.thumbview,true) ? fDataView.getSelectedRecords() : fDataGrid.getSelections());
		if(selNodes.length == 0){
			myFilesFolderOptions(theitem,event_pos);
		}else if(selNodes.length == 1){
			myFilesAssetOptions(theitem,event_pos,thebutton);	
		}else{
			myFilesMultiAssetOptions(theitem,event_pos,selNodes);	
		}
	}else{
		myFilesFolderOptions(theitem,event_pos);
	}
}


function myFilesMultiAssetOptions(sourceNode,event_pos,selNodes){
	var tree = getActiveFileTree();
	
	var menuFile = new Ext.menu.Menu({
		id: 'menuFile',
		minWidth:135,
		items: [
/*			   {
				text: 'New Folder'
				,iconCls:'iconAddFolder'
				,handler: function(){handleAddFileFolder(sourceNode);}
				}
				,'-'*/
			   
			   {text: 'Download File'+(selNodes.length > 1 ? 's' : '')
				,iconCls:'iconDownload'
				,handler: function(){handleFileDownload(selNodes);}
				}
				
				,'-'
				,{
					text: 'Delete File'+(selNodes.length > 1 ? 's' : '')
					,iconCls:'iconDeleteFile'
					,handler: function(){
							var selNodes = new Array();
							if(getSelectedFileTreeNode().attributes.thumbview){
								var dViewNodes = fDataView.getSelectedRecords();
							}else{
								var dViewNodes = fDataGrid.getSelections();
							}
							
							for(var i=0; i<dViewNodes.length; i++){
								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);				
}


function myFilesAssetOptions(theitem,event_pos,thebutton){
	var tree = getActiveFileTree();
	var menu_items = new Array();
	
	menu_items.push(
			{
				text: 'Download'
				,iconCls:'iconDownload'
				,handler: function(){
					if(theitem.attributes.mt_name != undefined && theitem.attributes.mt_name == 'VIDEO')
						videoDownloadPopupWindow(theitem.attributes.mm_key);
					else
						document.location.href = mediapath + 'myfiles_download.cfm?q=' + theitem.attributes.mm_key;
				}
			}
		);

	if(tree.id == 'editFilesTree'){
		var smf_info = getAppInfo({name:'Shared myFiles'});

		if(smf_info == undefined || Ext.util.Format.undef(theitem.attributes.am_id) != smf_info.get('am_id')){
			menu_items.push(
				'-',
				{	text: 'Rename'
					,icon:'/images/book_edit.png'
					,handler: function(a,b){
						var tree = getActiveFileTree();
						var node = tree.getNodeById(theitem.attributes.id);
						editFilesTree_editor.editNode = node;
						editFilesTree_editor.startEdit(node.ui.textNode, node.text);	
					}
					
				},
				
				'-',
				{	text: 'Share Options'
					,iconCls:'iconGroupAdd'
					,handler: function(button,e){
						var tree = getActiveFileTree();
						var node = tree.getNodeById(theitem.attributes.id);
						shareFileOption(node);
					}
					
				}
			);
		}
		
		menu_items.push(
			'-',
			{
				text: 'Delete'
				,iconCls:'iconDeleteFile'
				,handler: function(){
						var selNodes = new Array();
						selNodes[0] = theitem;										
						handleDeleteFile(selNodes);
					}
				
			}
		);
	}
	
	menu_items.push('-',{text:'Cancel',iconCls:'menu-CANCEL',handler: function(){this.destroy();}});

	var smf_info = getAppInfo({name:'Shared myFiles'});
	var smf_id = (smf_info == undefined ? 0 : smf_info.get('am_id'));				
	if(Ext.util.Format.undef(theitem.attributes.am_id) != smf_id){
		menu_items.unshift(
				{
					text: 'Bookmark'
					,iconCls:'bm-add-url'
					,handler: function(){
							bookmark_popup(theitem.attributes.mt_name,'myFiles',theitem.attributes.mm_clientfile,'',theitem.attributes.mm_key);
						}
				}
				,'-'
			);	
	}
	
	var menuFile = new Ext.menu.Menu({
					id: 'menuFile',
					minWidth:125,
					items:menu_items
					});
	
	if(theitem.attributes.d_copy){
		// Remove the "bookmark" option
		menuFile.remove(menuFile.items.items[1]);
		menuFile.remove(menuFile.items.items[1]);
		
		// Remove the "rename" option
		menuFile.remove(menuFile.items.items[1]);
		menuFile.remove(menuFile.items.items[1]);			
		
		// Remove the "" option
		menuFile.remove(menuFile.items.items[1]);
		menuFile.remove(menuFile.items.items[1]);
	}
	
	menuFile.showAt(event_pos);
}


function myFilesFolderOptions(theitem,event_pos){ 
	var tree = getActiveFileTree();
	
	var optionsdisabled = false;
	if(theitem.attributes.root){
		optionsdisabled = true;
	}

	//We want to prevent the user from renaming or deleting the "root" folder.
	if(getActiveFileTree().getRootNode().childNodes[0].id == theitem.id){
		var 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{ 
		var menu_items = new Array();  
		menu_items.push(
					{
						text:'Upload Files to Folder'
						,iconCls:'iconUpload'
						,handler: function(){handleBtnUpload(theitem);}
					},
					'-',
					 
					 {text:'Cancel',iconCls:'menu-CANCEL',handler: function(){this.destroy();}}
				);

		if(Ext.util.Format.undef(getActiveFileTree().getRootNode().childNodes[0].attributes.am_id) == Ext.util.Format.undef(theitem.attributes.am_id)){
			menu_items.unshift(
					{
						text: 'Rename Folder'
						,iconCls:'iconEditFolder'
						,disabled:optionsdisabled
						,handler: function(){
							var tree = getActiveFileTree();
							var node = tree.getNodeById(theitem.attributes.id);
							editFilesTree_editor.editNode = node;
							editFilesTree_editor.startEdit(node.ui.textNode, node.text);	
						}
					},
					
					{
						text: 'Delete Folder'
						,iconCls:'iconDeleteFolder'
						,disabled:optionsdisabled
						,handler: function(){handleDeleteFolder(theitem);}
						
					},
					
					{
						text: 'New Folder'
						,iconCls:'iconAddFolder'
						,handler: function(){handleAddFileFolder(theitem);}
						
					},								
					'-'
				);
		}
		var menuFolder = new Ext.menu.Menu({
						id: 'menuFolder',
						minWidth:165,
						items:menu_items
						});		
	}
	
	menuFolder.showAt(event_pos);
}



function handleFileDownload(selNodes){
	if(!Ext.value(selNodes,false) || selNodes.length == 0){
		Ext.Msg.show({
			title: 'myFiles 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{
		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:'/myfiles/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.');
					}
			});											
	}
}



function handleBtnUpload(theitem,theevent){
	var am_id = Ext.util.Format.undef(theitem.attributes.am_id);
	if(am_id == '')
		am_id = getActiveFileTree().am_id;
	var amt_id = Ext.util.Format.undef(theitem.attributes.amt_id);
	
	var url = 'myfiles/uploadFiles.cfm?cf=' + theitem.attributes.cfolder_id + '&am_id='+ am_id + '&amt_id=' + amt_id;
		
	var uploadWindow = new Ext.Window(
		{
			id:'uploadWindow',
			title:'Upload Files',
			width:615,
			height:232,
			iconCls:'iconUpload',
			modal:true,
			autoScroll:true,
			style:'z-index:100000;',
			autoLoad:{url:url, text:'loading', scripts:true}
		}
	).show();
}


/*function handleBtnUpload(theitem,theevent){
	var am_id = Ext.util.Format.undef(theitem.attributes.am_id);
	if(am_id == '')
		am_id = getActiveFileTree().am_id;
	var amt_id = Ext.util.Format.undef(theitem.attributes.amt_id);
	
	var upload_store = new Ext.data.SimpleStore({
		fields: [
			{name: 'filename'},
			{name: 'size'},
			{name: 'status'}
		]
	});
		
	var uploadWindow = new Ext.Window(
		{
			id:'uploadWindow',
			title:'Upload Files',
			width:615,
			height:250,
			iconCls:'iconUpload',
			modal:true,
			autoScroll:true,
//			autoLoad:{url:url, text:'loading', scripts:true}
			items:[
					new Ext.grid.GridPanel({
							id:'mF_upload_gridpanel'
							,stripeRows:true
							,autoExpandColumn:'company'
							,border:false
							,height:175
							,width:'100%'
							,header:false
							,store:upload_store
							,columns:[
									{id:'company',header: "Company", width: 160, menuDisabled:true, sortable: false, dataIndex: 'filename'}
									,{header: "Size", width: 75, menuDisabled:true, sortable: false, dataIndex: 'size'}
									,{header: "Progress", width: 150, menuDisabled:true, sortable: false, dataIndex: 'status'}
									,{header: "Remove", width: 75, menuDisabled:true, sortable: false}

								]
						})
				  
					,new Ext.form.FileUploadField({width:400,listeners:{'fileselected':function(a,b){debugger;}}})
				]
		}
	).show();
}*/


function handleFolderColapse(node){
	Ext.Ajax.request({
		url:'/myfiles/update_customer_file.cfm'
		,params:{action:'COLAPSEFOLDER',cf:node.attributes.cfolder_id}
		,method:'GET'
		,success:function(responseObj,optionsObj){
		}
		,failure:function(responseObj,optionsObj){
		}
	});

}

function handleFolderExpand(node){		
	if(!node.attributes.expanded){
		Ext.Ajax.request({
			url:'/myfiles/update_customer_file.cfm'
			,params:{action:'EXPANDFOLDER',cf:node.attributes.cfolder_id}
			,method:'GET'
			,success:function(responseObj,optionsObj){
			}
			,failure:function(responseObj,optionsObj){
			}
		});
	}// end make sure node not expanded
}


function handleDeleteFolder(node){

	var am_id = Ext.util.Format.undef(node.attributes.am_id);
	if(am_id == '')
		am_id = Ext.util.Format.undef(getActiveFileTree().am_id);

	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})
							   ,new Ext.form.Hidden({
								id:'am_id',
								name:'am_id',
								value:am_id})
							   ,new Ext.form.Hidden({
								id:'ACTION',
								name:'ACTION',
								value:'DELETEFOLDER'})
							  ]// 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:'/myfiles/update_customer_file.cfm'
//									,baseParams:{ACTION:'DELETEFILE'}
//									,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){
	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:'/myfiles/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.show({
			title: 'Success'
			,msg:'<div align="center">Your files have been uploaded</div>'
			,minWidth:250
			,buttons: Ext.MessageBox.OK
	});*/
	
	var tree = getActiveFileTree();
	var node = getSelectedFileTreeNode();
	
	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.
	Ext.Ajax.request({
		url:'/myfiles/myfiles.json.files.cfm'
		,params:{cc:totalfiles,cf:getSelectedFileTreeNode().attributes.cfolder_id}
		,method:'GET'
		,success:function(responseObj,optionsObj){
			var json = Ext.util.JSON.decode(responseObj.responseText);
		
			for(var i=0; i<json.length; i++){
				addNodeToTreeViewer(json[i]);
			}

			Ext.WindowMgr.getActive().destroy();
			Ext.Msg.show({
					title: 'Success'
					,msg:'<div align="center">Your files have been uploaded</div>'
					,minWidth:250
					,buttons: Ext.MessageBox.OK
			});
			
			//checkConvertingNodes();	
			refreshmyFilesTree()
			checkConvertingNodes();
			
		}
		,failure:function(responseObj,optionsObj){
		}
	});
}


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
(that 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){}
	
	if(convertingNodes.length > 0){
		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;
		}	
		
		Ext.Ajax.request({
			url:'/myfiles/myfiles.json.filesbykey.cfm'
			,params:{encoded_mm_id:encoded_mm_id,Sendcustomer:true}
			,method:'POST'
			,success:function(responseObj,optionsObj){
				var selNode = editFilesTree.getSelectionModel().getSelectedNode();
				var resetTimer = false;
				var resetDataView = false;
				var JSONobj = Ext.util.JSON.decode(responseObj.responseText);
				convertingNodes = new Array();
				for(var i=0; i<JSONobj.length; i++){
					var newrecord = new Ext.data.Record({
						mm_clientfile:JSONobj[i].mm_clientfile
						,mm_filesize:JSONobj[i].mm_filesize
						,mt_name:JSONobj[i].mt_name
						,mm_key:JSONobj[i].mm_key
						,mm_height:JSONobj[i].mm_height
						,mm_width:JSONobj[i].mm_width
						,mm_duration:JSONobj[i].mm_duration
						,thumbnail:JSONobj[i].thumbnail
						});	
					
					if(JSONobj[i].cq_converting == 'Y' || JSONobj[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',JSONobj[i].mm_key);
							if(dvIndex >= 0){resetDataView = true;}
						}
						var treenode = editFilesTree.getNodeById(JSONobj[i].mm_key);
						if(treenode != undefined && treenode != null){
							treenode.attributes.mm_height = JSONobj[i].mm_height;
							treenode.attributes.mm_width = JSONobj[i].mm_width;
							treenode.attributes.mm_duration = JSONobj[i].mm_duration;
						}
					} //JSONobj[i].cq_converting == 'Y'
				} //for loop
				
				if(resetDataView){handleFileClick('',selNode);}
				if(resetTimer){convertTimer = window.setTimeout('checkConvertingNodes()',5000);}
			}
			,failure:function(responseObj,optionsObj){
			}
		});	
	}
}


function addNodeToTreeViewer(json){
 	var pNode = getSelectedFileTreeNode();
	if(!pNode.isExpanded())
		pNode.expand();
		
	var node = new Ext.tree.AsyncTreeNode({
					id:json.id
					,am_id:json.am_id
					,amt_id:json.amt_id
					,text:json.text
					,mm_clientfile:json.mm_clientfile
					,mm_filesize:json.mm_filesize
					,mt_name:json.mt_name
					,mm_key:json.mm_key
					,mm_height:json.mm_height
					,mm_width:json.mm_width
					,mm_duration:json.mm_duration
					,cq_converting:Ext.util.Format.undef(json.cq_converting)
					,cq_converted:Ext.util.Format.undef(json.cq_converted)
					,mm_thumbnail:json.mm_thumbnail
					,thumbnail:json.thumbnail
					,iconCls:json.iconCls
					,leaf:json.leaf
					,success:json.success
				});	

	node.loaded = true;
	pNode.appendChild(node);
          
	var newrecord = new Ext.data.Record({
					mm_clientfile:json.mm_clientfile
					,mm_filesize:json.mm_filesize
					,mt_name:json.mt_name
					,thumbnail:json.thumbnail
					,mm_key:json.mm_key
					,mm_height:json.mm_height
					,mm_width:json.mm_width
					,mm_duration:json.mm_duration
				});
	convertingNodes.push(newrecord);
               
	if(pNode.attributes.thumbview){
		fDataView.store.add(newrecord);
	}else{
		fDataGrid.store.add(newrecord);
	} 
}



function handleTreeNodeClick(node,e){
	if(!node.isExpanded() && !node.isRoot){
		node.expand();	
	}
}


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);
}


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 handleFilterOption(button,e){
	Ext.getBody().mask();
	new Ext.data.JsonStore({
			id:'mf_file_filter_store'
			,autoLoad:true
			,url:'/myfiles/update_customer_file.cfm'
			,baseParams:{action:'GETFILEFILTERS'}
			,fields:['MT_DESCRIPTION','MT_NAME','TOTAL']
			,listeners:{'load':function(store,records,o){
							var app_checkboxes = getAppFilterCheckBoxes();
							var file_checkboxes = getFileFilterCheckBoxes(store);
						/*	app_checkboxes.unshift(new Ext.form.Checkbox({boxLabel:'All',name:'mf_app',inputValue:'ALL'
																,listeners:{'check':function(cb,check){debugger;
																		}
																}
												})
								);*/
						
							var filterwindow = new Ext.Window({
									id:'testfilterwindow'
									,width:300
									,baseCls:'x-menu'
									,header:false
									,closable:false
									,modal:true
									,shim:false
									,items:[	{id:'mf_filter_formpanel'
											,xtype:'form'
											,width:295
											,border:false
											,bodyStyle: 'padding:5px 10px 0;'
											,items:[	{id:'mf_app_filter_set'
													,xtype:'fieldset'
													,title:'myFiles Application Filters'
													,autoHeight:true
													,items:[	{id:'mf_app_filter_group'
															,xtype: 'checkboxgroup'
															,hideLabel:true
															,columns:2
															,items:app_checkboxes
															}
														]
													}	
													
													,{id:'mf_type_filter_group'
													,xtype:'fieldset'
													,title:'myFiles Asset Type Filters'
													,autoHeight:true
													,items:[	{id:'mf_type_filter_group'
															,xtype: 'checkboxgroup'
															,hideLabel:true
															,columns:2
															,items:file_checkboxes
															}
														]
													}
													
													,{id:'testfieldset3'
													,xtype:'fieldset'
													,buttonAlign:'center'
													,buttons:[	{text:'Submit',handler:function(b,e){
																		var values = Ext.getCmp('mf_filter_formpanel').getForm().getValues();
																		var params = {};

																		if(values.mf_app == undefined && values.mf_file == undefined){
																			handleActionFailure('You must make at least one Filter selection.');
																		}else{
																			params.app_filters  = (Ext.type(values.mf_app) == 'array' ? values.mf_app.join() : Ext.value(values.mf_app,''));
																			params.file_filters  = (Ext.type(values.mf_file) == 'array' ? values.mf_file.join() : Ext.value(values.mf_file,''));
																			refreshmyFilesTree(params);
																			Ext.WindowMgr.getActive().destroy();
																		}
																	}}
																,{text:'Cancel',iconCls:'menu-CANCEL',handler:function(b,e){Ext.WindowMgr.getActive().destroy();}}
																																		   
															]
													}
												]
											}
										]
								});
							
							Ext.getBody().unmask();
							filterwindow.setPosition(e.xy[0],e.xy[1]);
							filterwindow.show();
						
							if(Ext.isIE){filterwindow.el.dom.firstChild.style.height = '0px';}

						}// 'load' listener
					}
		});		
}

function getAppFilterCheckBoxes(){
	var app_store = getActiveFileTree().app_store;
	var app_types = app_store.collect('am_display_name');
	var cb_array = new Array();
	
	var treeloader = getActiveFileTree().getLoader();
	var checklist = (Ext.value(treeloader.baseParams.app_filters,'') == '' ? new Array() : treeloader.baseParams.app_filters.split(','));
	
	for(var i=0; i<app_types.length; i++){
		var index =  app_store.data.findIndexBy(function(rec){return rec.get('am_display_name') === app_types[i];}, this);
		
		if(index >= 0){
			var rec = app_store.getAt(index);	
			var checked = (checklist.length == 0 ? true : false);
			for(var j=0; j<checklist.length; j++){
				if(rec.get('am_id') == checklist[j])
					checked = true;
			}
			cb_array.push(
					new Ext.form.Checkbox({
						boxLabel: rec.get('am_display_name')
						,name:'mf_app'
						,inputValue: rec.get('am_id')
						,checked:checked
					})	    
				);
		}
	}

	return cb_array;
}


function getFileFilterCheckBoxes(store){
	var cb_array = new Array();
	
	var treeloader = getActiveFileTree().getLoader();
	var checklist = (Ext.value(treeloader.baseParams.file_filters,'') == '' ? new Array() : treeloader.baseParams.file_filters.split(','));
	
	store.each(function(rec){
					var checked = (checklist.length == 0 ? true : false);
					for(var j=0; j<checklist.length; j++){
						if(rec.get('MT_NAME') == checklist[j])
							checked = true;
					}

					cb_array.push(
							new Ext.form.Checkbox({
								boxLabel: rec.get('MT_DESCRIPTION')
								,name:'mf_file'
								,inputValue: rec.get('MT_NAME')
								,checked:checked
							})	    
						);
					}
			);
	return cb_array;
}



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',
						minWidth:135,
						items: [{
									text: 'Thumbnail View'
									,iconCls:'tree-THUMBVIEW'
									,handler: function(){
										if(tree.id == 'editFilesTree'){
											var url = myRSNApath + "myfiles/update_customer_file.cfm?action=CHANGEVIEW&thumbview=1&cf=" + node_id;
										}else{
											var url = myRSNApath + "plugins/my_bookmarks/my_bookmarks_util.cfm?action=CHANGEVIEW&thumbview=1&media_id=" + node_id;
										}

										if(!node.isRoot){									
											Ext.Ajax.request({
												url:url
												,method:'GET'
												,success:function(responseObj,optionsObj){
													node.attributes.thumbview = true;
													var selModel = tree.getSelectionModel();
													handleFileClick(selModel,node,true);
												}
												,failure:function(responseObj,optionsObj){
												}
											});
										}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 + "myfiles/update_customer_file.cfm?action=CHANGEVIEW&thumbview=0&cf=" + node_id;
										}else{
											var url = myRSNApath + "plugins/my_bookmarks/my_bookmarks_util.cfm?action=CHANGEVIEW&thumbview=0&media_id=" + node_id;
										}
										if(!node.isRoot){
											Ext.Ajax.request({
												url:url
												,method:'GET'
												,success:function(responseObj,optionsObj){
													node.attributes.thumbview = false;
													var selModel = tree.getSelectionModel();
													handleFileClick(selModel,node,true);
												}
												,failure:function(responseObj,optionsObj){
												}
											});
										}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;
		}
		
		var disabled_index = (node.attributes.thumbview ? 0 : 2);
		menuFile.items.items[disabled_index].disable();
	 	menuFile.showAt(event_pos);
}


function handleDeleteFile(selNodes){
	var alert_message = 'Are you sure you want to DELETE ' + (selNodes.length>1?'these files':'this file') + '?';
	var confirm_success = 'File' + (selNodes.length>1?'s':'') + ' deleted successfully.';
	var confirm_failure = 'Sorry, we were unable to delete your file' + (selNodes.length>1?'s':'') + '.';
	var key_list = '';
	var am_id = '';

	for(var i=0; i<selNodes.length; i++){
		key_list = key_list + (key_list.length > 0 ? ',' : '') + selNodes[i].id;
		am_id = am_id + (am_id.length > 0 ? ',' : '') + selNodes[i].attributes.am_id;
	}
	
	Ext.Msg.show({
			id:'deleteFilePrompt'
			,msg:alert_message
			,icon: Ext.MessageBox.QUESTION
			,buttons:Ext.Msg.YESNO
			,fn:function(btn,text){
					if(btn == 'yes'){
						Ext.getBody().mask('Deleting file...','ext-el-mask-msg x-mask-loading');
						
						Ext.Ajax.request({
							url:'/myfiles/update_customer_file.cfm'
							,method:'POST'
							,params:{action:'DELETEFILE',key_list:key_list,am_id:am_id}
							,success:function(responseObj,optionsObj){
									Ext.getBody().unmask();
									
									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();	
									}
								}
							,failure:function(responseObj,optionsObj){
									Ext.getBody().unmask();
									handleActionFailure(confirm_failure);	
								}
						});
						
					}else{
							
					}
				}
		});
}

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;
	}
	
	// This is where we are going to do our quick checks if we'll allow this movement at all 
	if(tree.id == 'editFilesTree'){
		var targetFolder = (dragevent.target.attributes.mt_name == 'FOLDER' ? dragevent.target : dragevent.target.parentNode);
		
		if(!handleBeforeNodeMove(dropNode,targetFolder))
			return false;
	}

	var display_node = tree.getNodeById(tree.display_id);
	if(display_node == undefined)
		tree.getRootNode().cascade(function(node){if(tree.display_id == node.attributes.mm_key){display_node = node; return false;}});

	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();
	var drop_node = tree.getNodeById(tree.display_id)
	if(drop_node == undefined)
		tree.getRootNode().cascade(function(node){if(tree.display_id == node.attributes.mm_key){drop_node = node; return false;}});
	drop_node.select();	
}


function handleBeforeNodeMove(node,target){	
	var source = node.parentNode;
	//OK if you're moving within the same parent node
	if(source.id == target.id)
		return true;
	
	//Fail if you're moving a folder into a different app or app-subfolder (so we can maintain the app folder structure).
	if(node.attributes.mt_name == 'FOLDER'){
		if(node.attributes.am_id == target.attributes.am_id && node.attributes.amt_id == target.attributes.amt_id){
			return true;
		}else{
			return false;
		}
	}

	mf_info = getAppInfo({name:'myFiles'});
	var mf_id = (mf_info == undefined ? 0 : mf_info.get('am_id'));
	smf_info = getAppInfo({name:'Shared myFiles'});
	var smf_id = (smf_info == undefined ? 0 : smf_info.get('am_id'));
	
	//You can't move a shared file copy to a folder that is not for myFiles or Shared files (since we can't change the app type of the source file)
	if(node.attributes.am_id == smf_id && target.attributes.am_id != mf_id && target.attributes.am_id != smf_id)
		return false;
	
	var target_app = getAppInfo({am_id:target.attributes.am_id,amt_id:target.attributes.amt_id});
	var source_app = getAppInfo({am_id:source.attributes.am_id,amt_id:source.attributes.amt_id});

	//Next, see if the folder is not over the size limit && if drag/drop is allowed or if it can accept this file_type (only applies to subfolders)
	if(target_app.get('amt_id') != ''){

		if(target_app.get('amt_item_limit') != '' && target_app.get('amt_item_limit') <= target.childNodes.length){
			Ext.Msg.alert('Alert!', 'The selected folder is full!');
			return false;
		}
		
		if(Ext.util.Format.undef(target_app.get('amt_drop')) == 0)
			return false;
		
		var extension = '';
		var title_array = new Array();
		
		title_array = node.attributes.mm_clientfile.split(".");
		if(title_array.length > 1){
			extension = Ext.util.Format.lowercase(title_array[title_array.length-1]);	
		}
		
		//See if it's an accepted file extension (blank means assumes all types are accepted)
		var file_types = target_app.get('amt_file_types');
		if(file_types.length > 0){
			for(var i=0; i<file_types.length; i++){
				if(Ext.util.Format.lowercase(file_types[i]).indexOf(extension) >= 0){
					return true;	
				}
			}
			Ext.Msg.alert('Alert!', Ext.util.Format.uppercase(extension) + ' files cannot be placed in the selected folder.');
			return false;
		}
	}
	
	if(source_app.get('amt_id') != ''){
		if(Ext.util.Format.undef(source_app.get('amt_drag')) == 0)
			return false;
	}
	return true;
}


function createTreeNode(mm_key,fn){
/**********************************************************************************
This function is used to get a complete tree node that can be used in myFiles.
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:'/myfiles/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 = createMyFilesNode(json);
					eval(fn+'(node)');
				}
		});	
}


function createMyFilesNode(attr){
	var node = null;
	attr = (typeof attr == 'object' || attr == null ? attr : {});
	
	var node = new Ext.tree.AsyncTreeNode({
					id:Ext.value(attr.id,Ext.id())
					,am_id:attr.am_id
					,amt_id:attr.amt_id
					,text:Ext.value(attr.text,'')
					,mm_clientfile:attr.mm_clientfile
					,mm_filesize:attr.mm_filesize
					,mt_name:attr.mt_name
					,mm_key:attr.mm_key
					,mm_height:attr.mm_height
					,mm_width:attr.mm_width
					,mm_duration:attr.mm_duration
					,cq_converting:Ext.value(attr.cq_converting,'N')
					,cq_converted:Ext.value(attr.cq_converted,'Y')
					,mm_thumbnail:attr.mm_thumbnail
					,bm_url:attr.bm_url
					,bm_web:Ext.value(attr.bm_web,'Y')
					,restricted:Ext.value(attr.restricted,false)
					,searchable:Ext.value(attr.searchable,false)
					,thumbnail:attr.thumbnail
					,iconCls:attr.iconCls
					,leaf:Ext.value(attr.leaf,true)
					,success:Ext.value(attr.success,true)
				});

	for (var j in attr){
		if(j != 'id' && Ext.value(node.attributes[j],'') == ''){
			node.attributes[j] = attr[j];
		}
	}  

	return node;
}


function convertRecordToTreeNode(record){
	var attr = record.data;
	attr.searchable = true;
	var node = createMyFilesNode(attr);
	Ext.apply(node,record.data);
	Ext.apply(node.attributes,record.data);
	
	return node;
}


function reloadMediaPanel(node){
	var winid = getActiveFileTree().winid;	
	var view_panel = Ext.getCmp('fileviewpanel'+winid);
	load_imageviewer_panel(node,view_panel);
}


function getAppInfo(args){
	var app_store = Ext.getCmp('myfiles_app_store');
	if(app_store == undefined) app_store = editFilesTree.app_store;
	
	if(args.name != undefined){
		var index = app_store.findBy(function(record,id){
							 if(record.get('am_display_name') == args.name) 
							 	return true;
						});
	}else{
		var index = app_store.findBy(function(record,id){
							 if(record.get('am_id') == args.am_id){
								if(Ext.util.Format.undef(args.amt_id) != ''){
									if(record.get('amt_id') == args.amt_id) {return true;}
								}else{
									return true;
								}
							 }
						});
	}
	
	return app_store.getAt(index);
}


/*************************************************************************************************************************
	Use this function for any special processing when moving a file from an application folder.  For example, myPortfolio
	creates a few db records that are attached to a file, so when we move a file out of myPortfolio, we can use this
	space to do a little clean-up and delete those db records - even check if the myPortfolio tab is rendered & update it.
*************************************************************************************************************************/
function removeCustomerFileFromApp(customer,mm_key,am_id,amt_id){
	var app_info = getAppInfo({am_id:am_id,amt_id:amt_id});
	
	if(app_info != undefined){
		switch(app_info.get('am_display_name')){
			case 'myFiles':
				//do nothing
				break;
			case 'Shared myFiles':
				//do nothing
				break;
			case 'myPortfolio':
				Ext.Ajax.request({
					url:'/my_portfolio/ajax2/upd_util.cfm'
					,method:'POST'
					,params:{action:'REMOVEFILE',customer:customer,mm_key:mm_key,am_id:am_id,amt_id:amt_id}
					,success:function(responseObj,optionsObj){
							var tab = getMyRSNATab('myPortfolio');
							if(tab != undefined && tab.rendered){
								var reload_url = tab.iframe.getDocument().location.href;
								tab.iframe.setSrc(reload_url,false);
							}
						}
					,failure:function(responseObj,optionsObj){
	//						handleActionFailure('Sorry, we were unable to rename your folder.');	
						}
				});	
			case 'myProfile':
				Ext.Ajax.request({
					url:'/plugins/profile/setProfile.cfm'
					,method:'POST'
					,params:{customer:customer,mm_key:mm_key,toggle:false}
					,success:function(responseObj,optionsObj){
						}
					,failure:function(responseObj,optionsObj){
						}
				});	
		}//end Switch
	}
}


/*************************************************************************************************************************
	Similar to removeCustomerFileFromApp, this function gives you an opportunity to do any extra processing when a file
	is added to a new application, such as create stub records for your db or update the status of an application.
*************************************************************************************************************************/
function addCustomerFileToApp(customer,mm_key,am_id,amt_id){
	var app_info = getAppInfo({am_id:am_id,amt_id:amt_id});
	
	if(app_info != undefined){
		switch(app_info.get('am_display_name')){
			case 'myFiles':
				//do nothing
				break;
			case 'Shared myFiles':
				//do nothing
				break;
			case 'myPortfolio':
				//do nothing
				break;
		}// end switch
	}
}