var THEME = new function() {
	
	this.view = 1; //1 => details, 2 => small icons, 3 => large icons, 4=> thumbnails
	this.shares = new Array();
	this.previewPane = true;
	this.selected = false;
	this.selectedPath = false;
	this.selectedName = false;
	this.selectedType = false;
	this.dcnt = 0;
	this.fcnt = 0;
	this.uploadStack = 0;
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// winLoad - fix heights on page load.
	this.winLoad = function(e){
		//fix heights.
		THEME.fixHeights();
		
		//apply events to menu items
		YAHOO.util.Event.addListener('login_link','click',THEME.showLogin);
		YAHOO.util.Event.addListener('logout_link','click',THEME.logout);
		YAHOO.util.Event.addListener('views_link','click',THEME.showViews);
		YAHOO.util.Event.addListener('fileops_link','click',THEME.showFileOps);
		YAHOO.util.Event.addListener('admin_link','click',THEME.showAdmin);
		YAHOO.util.Event.addListener('upload_link','click',THEME.showUpload);
		
		//and hide menu items when needed
		YAHOO.util.Event.addListener('wrapper','click',THEME.hideLogin);
		YAHOO.util.Event.addListener('wrapper','click',THEME.hideViews);
		YAHOO.util.Event.addListener('wrapper','click',THEME.hideShares);
		YAHOO.util.Event.addListener('wrapper','click',THEME.hideFileOps);
		YAHOO.util.Event.addListener('wrapper','click',THEME.hideAdmin);		
	} //end winLoad
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// fixHeights - fix heights on page load.
	this.fixHeights = function(e){
		
		//get height of viewport, and make main adjust to that height.
		var h=YAHOO.util.Dom.getViewportHeight();
		if(xGetElementById('main')){
			//adjust height of Main
			xHeight('main',(h-93));

			//adjust height of main_content
			xHeight('main_content',(xHeight('main')-21));
			//and preview pane
			xHeight('preview_pane',(xHeight('main')-21));
			xHeight('preview_pane_container',(xHeight('main')-21));
			
			//last step, get height of main_content, and match main_left and main_right.
			if(xGetElementById('main_left')){
				xHeight('main_left',xHeight('main'));
			}
			if(xGetElementById('main_right')){
				xHeight('main_right',xHeight('main'));
			}	
		}
	} //end fixHeights
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// showMLoad - shows main loading screen.
	this.showMLoad = function(){
		//make the div!
		var l=document.createElement('div');
		l.id='main_loading';
		YAHOO.util.Dom.setStyle(l,'opacity',0);
		xGetElementById('main').appendChild(l);
		
		YAHOO.util.Event.onAvailable('main_loading',function(){ 
			YAHOO.util.Dom.setStyle('main_loading','top',(((xHeight('main')/2)-10)*0.7)+'px'); // 56 * 21
			YAHOO.util.Dom.setStyle('main_loading','left',((xWidth('main')/2)-27)+'px');
			var anim = new YAHOO.util.Anim('main_loading',{opacity:{to:1}},.2,YAHOO.util.Easing.easeOut);
			anim.animate();
			var anim2 = new YAHOO.util.Anim('main_content',{opacity:{to:0}},.2,YAHOO.util.Easing.easeIn);
			anim2.animate();
			var anim3 = new YAHOO.util.Anim('preview_pane',{opacity:{to:0}},.2,YAHOO.util.Easing.easeIn);
			anim3.animate();
		});
	} //showMLoad
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// hideMLoad - shows main loading screen.
	this.hideMLoad = function(){
		if(xGetElementById('main_loading')){
			var anim = new YAHOO.util.Anim('main_loading',{opacity:{to:0}},.2,YAHOO.util.Easing.easeOut);
			anim.onComplete.subscribe(function(){
		    destroyElm('main_loading');
		  });
			anim.animate();
			var anim2 = new YAHOO.util.Anim('main_content',{opacity:{to:1}},.2,YAHOO.util.Easing.easeIn);
			anim2.animate();
			var anim3 = new YAHOO.util.Anim('preview_pane',{opacity:{to:1}},.2,YAHOO.util.Easing.easeIn);
			anim3.animate();
		}
	} //hideMLoad
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// showPreviewLoading
	this.showPreviewLoading = function(){
		//make the div!
		var l=document.createElement('div');
		l.id='preview_loading';
		YAHOO.util.Dom.setStyle(l,'opacity',0);
		xGetElementById('preview_pane').appendChild(l);
		
		YAHOO.util.Event.onAvailable('preview_loading',function(){ 
			YAHOO.util.Dom.setStyle('preview_loading','top',(((xHeight('preview_pane')/2)-10)*0.7)+'px'); // 56 * 21
			YAHOO.util.Dom.setStyle('preview_loading','left',((xWidth('preview_pane')/2)-27)+'px');
			var anim = new YAHOO.util.Anim('preview_loading',{opacity:{to:1}},.2,YAHOO.util.Easing.easeOut);
			anim.animate();
			var anim2 = new YAHOO.util.Anim('preview_pane_container',{opacity:{to:0}},.2,YAHOO.util.Easing.easeIn);
			anim2.animate();
		});
	} //showPreviewLoading
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// hidePreviewLoading
	this.hidePreviewLoading = function(){
		if(xGetElementById('preview_loading')){
			var anim = new YAHOO.util.Anim('preview_loading',{opacity:{to:0}},.2,YAHOO.util.Easing.easeOut);
			anim.onComplete.subscribe(function(){
		    destroyElm('preview_loading');
		  });
			anim.animate();
			var anim2 = new YAHOO.util.Anim('preview_pane_container',{opacity:{to:1}},.2,YAHOO.util.Easing.easeIn);
			anim2.animate();
		}
	} //hidePreviewLoading
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// loggedInText - shows 'Logged In as' or 'Not Logged In'
	this.loggedInText = function(t){
		if(!t || t.trim().length == 0){
			var t = '&nbsp;';
		}
		//get foot_left
		if(xGetElementById('foot_left')){
			xInnerHtml('foot_left','<p>'+t+'</p>');
		}
	} //end loggedInText
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// showLogin
	this.showLogin = function(e){
		if(xGetElementById('login_box')){
			//hide it
			THEME.hideLogin();
		} else {
			THEME.hideViews();
			THEME.hideShares();
			THEME.hideFileOps();
			addClassName('login_link','selected');
			var l=document.createElement('div');
			l.id='login_box';
			
			//get left of #login_link and adjust box to show there too.
			var x = YAHOO.util.Dom.getX('login_link');
			YAHOO.util.Dom.setStyle(l,'left',(x-4)+'px');
			
			xInnerHtml(l,'<div class="inner"><p><input type="text" name="username" id="login_username" class="txt" /> Username:</p><p><input type="password" name="password" id="login_password" class="txt" /> Password:</p><p align="right"><input type="button" name="login" value="Login" id="login_submit" class="button" /></p></div>');
			//YAHOO.util.Dom.setStyle(l,'width','0');
			//YAHOO.util.Dom.setStyle(l,'height','0');
			YAHOO.util.Dom.setStyle(l,'opacity','0');
			xGetElementById('wrapper').appendChild(l);
			YAHOO.util.Event.onAvailable('login_box',function(){
				YAHOO.util.Event.addListener('login_box','click',THEME.discard);
				YAHOO.util.Event.addListener('login_submit','click',THEME.login);
				var anim = new YAHOO.util.Anim('login_box',{opacity:{to:1}},.2,YAHOO.util.Easing.easeOut);
				anim.animate();
			});
		}
		if(e){
			THEME.discard(e);
		}
	} //end showLogin
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// login
	this.login = function(e){
		
		//check if fields have been entered
		var u = xGetElementById('login_username').value;
		var p = xGetElementById('login_password').value;
		
		if (u.trim().length==0){
			var err='Username perlu diisi';
		} else if(p.length==0){
			var err='Password diperlukan';
		}
		
		if(err){
			THEME.showError(err);
		} else {
			//show waiting screen
			THEME.showMLoad();
			AFB.tryLogin(u,p);
		}
		THEME.hideLogin();
	} //end login
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// logout
	this.logout = function(e){
		//show waiting screen
		THEME.showMLoad();
		AFB.tryLogout();
	} //end logout
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// hideLogin
	this.hideLogin = function(e){
		if(xGetElementById('login_box')){
			removeClassName('login_link','selected');
			//var anim = new YAHOO.util.Anim('login_box',{width:{to:0},height:{to:0}},.2,YAHOO.util.Easing.easeOut);
			var anim = new YAHOO.util.Anim('login_box',{opacity:{to:0}},.2,YAHOO.util.Easing.easeOut);
			anim.onComplete.subscribe(function(){
				destroyElm('login_box');
			});
			anim.animate();
		}
	}
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// showShares
	this.showShares = function(e){
		if(xGetElementById('shares_box')){
			//hide it
			THEME.hideShares();
		} else {
			THEME.hideViews();
			THEME.hideLogin();
			THEME.hideFileOps();
			
			if (THEME.shares.length > 16) {
				//more than 16 shares, show a selection box.
				
				//show error bg
				var ae=document.createElement('div');
				ae.id='app_error';
				//set opacity
				YAHOO.util.Dom.setStyle(ae,'opacity',.7);
				//set dimensions.
				YAHOO.util.Dom.setStyle(ae,'width',YAHOO.util.Dom.getViewportWidth()+'px');
				YAHOO.util.Dom.setStyle(ae,'height',YAHOO.util.Dom.getViewportHeight()+'px');
				
				//show error text
				var et=document.createElement('div');
				et.id='app_upload_box';
				//set opacity
				YAHOO.util.Dom.setStyle(et,'opacity',0);
				//set dimensions.
				YAHOO.util.Dom.setStyle(et,'left',((YAHOO.util.Dom.getViewportWidth() / 2) - 192)+'px');
				YAHOO.util.Dom.setStyle(et,'top',(((YAHOO.util.Dom.getViewportHeight() / 2) - 200) * 0.8)+'px');
				//p
				var h = '';
				var lst = new Array(); //array of link id's for events below
				for(var i=0;i<THEME.shares.length;i++){
					h += '<li><a href="javascript:void(null);" id="share_link_'+THEME.shares[i][0]+'" rel="'+THEME.shares[i][0]+'" title="'+THEME.shares[i][1]+'">'+THEME.shares[i][1]+'</a></li>';
					lst[lst.length] = 'share_link_'+THEME.shares[i][0];
				}
				xInnerHtml(et,'<p class="head">Data</p><div class="body" id="upload_body"><ul>'+h+'</ul><p class="btns"><input type="button" value="Tutup" onclick="THEME.hideShares();" class="button" id="upload_close_btn" /></p></div>');
				
				//apend!
				xGetElementById('body').appendChild(ae);
				xGetElementById('body').appendChild(et);
				
				//anim
				YAHOO.util.Event.onAvailable('app_upload_box',function(){
					var anim = new YAHOO.util.Anim('app_upload_box',{opacity:{to:1}},.3,YAHOO.util.Easing.easeOut);
					anim.animate();
					YAHOO.util.Event.addListener(lst,'click',THEME.changeShare);
					YAHOO.util.Event.addListener(lst,'click',THEME.hideShares);
					//YAHOO.util.Event.addListener('app_upload_box','click',THEME.hideError);
					//YAHOO.util.Event.addListener('app_error','click',THEME.hideError);
				});
				
				
			} else {
				//16 shares or less.
				addClassName('shares_link','selected');
				var l=document.createElement('div');
				l.id='shares_box';
				
				//get left of #shares_link and adjust box to show there too.
				var x = YAHOO.util.Dom.getX('shares_link');
				YAHOO.util.Dom.setStyle(l,'left',(x-4)+'px');
				
				var h = '<ul>';
				var lst = new Array(); //array of link id's for events below
				if (THEME.shares.length > 0){
					for(var i=0;i<THEME.shares.length;i++){
						h += '<li><a href="javascript:void(null);" id="share_link_'+THEME.shares[i][0]+'" rel="'+THEME.shares[i][0]+'" title="'+THEME.shares[i][1]+'">'+THEME.shares[i][1]+'</a></li>';
						lst[lst.length] = 'share_link_'+THEME.shares[i][0];
					}
				} else {
					h += '<li><a href="javascript:void(null);">(tidak ada shares)</a></li>';
				}
				h += '</ul>';
	
				xInnerHtml(l,'<div class="inner">'+h+'</div>');
				YAHOO.util.Dom.setStyle(l,'opacity','0');
				xGetElementById('wrapper').appendChild(l);
				YAHOO.util.Event.onAvailable('shares_box',function(){
					YAHOO.util.Event.addListener('shares_box','click',THEME.discard);
					YAHOO.util.Event.addListener(lst,'click',THEME.changeShare);
					var anim = new YAHOO.util.Anim('shares_box',{opacity:{to:1}},.2,YAHOO.util.Easing.easeOut);
					anim.animate();
				});
			}
		}
		if(e){
			THEME.discard(e);
		}
	} //end showShares
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// hideShares
	this.hideShares = function(e){
		if(xGetElementById('shares_box')){
			removeClassName('shares_link','selected');
			//var anim = new YAHOO.util.Anim('views_box',{width:{to:0},height:{to:0}},.2,YAHOO.util.Easing.easeOut);
			var anim = new YAHOO.util.Anim('shares_box',{opacity:{to:0}},.2,YAHOO.util.Easing.easeOut);
			anim.onComplete.subscribe(function(){
				destroyElm('shares_box');
			});
			anim.animate();
		}else if(xGetElementById('app_upload_box')){
			var anim = new YAHOO.util.Anim('app_upload_box',{opacity:{to:0}},.3,YAHOO.util.Easing.easeOut);
			anim.onComplete.subscribe(function(){
				destroyElm('app_error');
				destroyElm('app_upload_box');
			});
			anim.animate();
			
			//stop any propegation.
			if (e){
				THEME.discard(e);
			}
		}
	} //end hideShares
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// showViews
	this.showViews = function(e){
		if(xGetElementById('views_box')){
			//hide it
			THEME.hideViews();
		} else {
			THEME.hideLogin();
			THEME.hideShares();
			THEME.hideFileOps();
			addClassName('views_link','selected');
			var l=document.createElement('div');
			l.id='views_box';
			//get left of #views_link and adjust box to show there too.
			var x = YAHOO.util.Dom.getX('views_link');
			YAHOO.util.Dom.setStyle(l,'left',(x-4)+'px');
			var pp = '';
			if (xGetElementById('preview_pane').style.display != 'block'){
				pp = '<li><a href="javascript:void(null);" id="v_pp">Panel Preview</a></li>';
			}
			xInnerHtml(l,'<div class="inner"><ul><li><a href="javascript:void(null);" id="cv_d">Detail</a></li><li><a href="javascript:void(null);" id="cv_si">Small Icons</a></li><li><a href="javascript:void(null);" id="cv_li">Large Icons</a></li><li><a href="javascript:void(null);" id="cv_t">Thumbnails</a></li>'+pp+'</ul></div>');
			//YAHOO.util.Dom.setStyle(l,'width','0');
			//YAHOO.util.Dom.setStyle(l,'height','0');
			YAHOO.util.Dom.setStyle(l,'opacity','0');
			xGetElementById('wrapper').appendChild(l);
			YAHOO.util.Event.onAvailable('views_box',function(){
				YAHOO.util.Event.addListener('views_box','click',THEME.discard);
				YAHOO.util.Event.addListener('v_pp','click',THEME.showPreviewPane);
				YAHOO.util.Event.addListener('cv_si','click',function(){THEME.changeView(2);});
				YAHOO.util.Event.addListener('cv_li','click',function(){THEME.changeView(3);});
				YAHOO.util.Event.addListener('cv_d','click',function(){THEME.changeView(1);});
				YAHOO.util.Event.addListener('cv_t','click',function(){THEME.changeView(4);});
				var anim = new YAHOO.util.Anim('views_box',{opacity:{to:1}},.2,YAHOO.util.Easing.easeOut);
				anim.animate();
			});
		}
		if(e){
			THEME.discard(e);
		}
	}
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// hideViews
	this.hideViews = function(e){
		if(xGetElementById('views_box')){
			removeClassName('views_link','selected');
			//var anim = new YAHOO.util.Anim('views_box',{width:{to:0},height:{to:0}},.2,YAHOO.util.Easing.easeOut);
			var anim = new YAHOO.util.Anim('views_box',{opacity:{to:0}},.2,YAHOO.util.Easing.easeOut);
			anim.onComplete.subscribe(function(){
				destroyElm('views_box');
			});
			anim.animate();
		}
	}
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// changeView
	this.changeView = function(i){
		THEME.hideViews();
		THEME.view = i;
		
		removeClassName('main_content','view_details');
		removeClassName('main_content','view_large');
		removeClassName('main_content','view_small');
		removeClassName('main_content','view_thumbnails');
		
		if (i==3){
			addClassName('main_content','view_large');
			THEME.unloadThumbnails();
		}else if (i==2){
			addClassName('main_content','view_small');
			THEME.unloadThumbnails();
		}else if (i==4){
			addClassName('main_content','view_thumbnails');
			setTimeout(THEME.loadThumbnails,100);
		}else{
			addClassName('main_content','view_details');
			THEME.unloadThumbnails();
		}

	} //end changeView
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// discard - stops events
	this.discard = function(e){
		YAHOO.util.Event.stopEvent(e);
	}
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// showError
	this.showError = function(msg,fn){ //fn not implemented
		if(msg.length > 0){
			
			//show error bg
			var ae=document.createElement('div');
			ae.id='app_error';
			//set opacity
			YAHOO.util.Dom.setStyle(ae,'opacity',.7);
			//set dimensions.
			YAHOO.util.Dom.setStyle(ae,'width',YAHOO.util.Dom.getViewportWidth()+'px');
			YAHOO.util.Dom.setStyle(ae,'height',YAHOO.util.Dom.getViewportHeight()+'px');
			
			//show error text
			var et=document.createElement('div');
			et.id='app_error_text';
			//set opacity
			YAHOO.util.Dom.setStyle(et,'opacity',0);
			//set dimensions.
			YAHOO.util.Dom.setStyle(et,'left',((YAHOO.util.Dom.getViewportWidth() / 2) - 192)+'px');
			YAHOO.util.Dom.setStyle(et,'top',(((YAHOO.util.Dom.getViewportHeight() / 2) - 20) * 0.8)+'px');
			//p
			xInnerHtml(et,'<p class="head">Error</p><p>'+msg+'</p><p class="foot">Klik dimana saja untuk melanjutkan</p>');
			
			//apend!
			xGetElementById('body').appendChild(ae);
			xGetElementById('body').appendChild(et);
			
			//anim
			YAHOO.util.Event.onAvailable('app_error_text',function(){
		 		var anim = new YAHOO.util.Anim('app_error_text',{opacity:{to:1}},.3,YAHOO.util.Easing.easeOut);
				anim.animate();
				YAHOO.util.Event.addListener('app_error_text','click',THEME.hideError);
				YAHOO.util.Event.addListener('app_error','click',THEME.hideError);
			});
			
			
		}
	}
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// hideError
	this.hideError = function(e){
		var anim = new YAHOO.util.Anim('app_error_text',{opacity:{to:0}},.3,YAHOO.util.Easing.easeOut);
		anim.onComplete.subscribe(function(){
	 		destroyElm('app_error');
			destroyElm('app_error_text');
		});
		anim.animate();

		//stop any propegation.
		THEME.discard(e);
	}
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// showPreviewPane
	this.showPreviewPane = function(h) {
		THEME.hideViews();
		if (xGetElementById('preview_pane')){
			
			if (h && typeof(h) == 'string'){
				xInnerHtml('preview_pane_container',h);
			}
			
			YAHOO.util.Event.onAvailable('hide_pp',function(){
				YAHOO.util.Event.addListener('hide_pp','click',THEME.hidePreviewPane);
			});
			
			YAHOO.util.Dom.setStyle('preview_pane','display','block');
			//anim if required
			var anim = new YAHOO.util.Anim('preview_pane',{width:{to:200}},.5,YAHOO.util.Easing.easeOut);
			anim.animate();
			
			THEME.previewPane = true;
			
		} //end check
	} //end showPreviewPane
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// hidePreviewPane
	this.hidePreviewPane = function() {
		if (xGetElementById('preview_pane')){
			
			
			//anim if required
			var anim = new YAHOO.util.Anim('preview_pane',{width:{to:0}},.5,YAHOO.util.Easing.easeOut);
			anim.onComplete.subscribe(function(){
		    YAHOO.util.Dom.setStyle('preview_pane','display','none');
		  });
			anim.animate();
			
			THEME.previewPane = false;
			
		} //end check
	} //end hidePreviewPane
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// updateShareList
	this.updateShareList = function(srs) {
		THEME.shares = srs;
		
		//remove any listeners, and add our click listener to link.
		// we add this here so that when the page is loading, people don't
		// click it before we can populate it.
		YAHOO.util.Event.purgeElement('shares_link',false);
		YAHOO.util.Event.addListener('shares_link','click',THEME.showShares);
		
	} //end updateShareList
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// changeShare
	this.changeShare = function(e){
		var elm=e;
		if (!e.nodeName) {			
			//was fired by yahoo
			elm = (e.srcElement) ? e.srcElement : e.target;
		}
		if (!elm){
			THEME.hideShares();
			return false;
		}
		
		//get rel tag from elm
		var id = elm.getAttribute('rel');
		if(parseInt(id) > 0){
			//show main loading screen
			THEME.showMLoad();
			//send the job to AFB class
			AFB.loadShare(id);
		} //end id check
		
		THEME.hideShares();
	} //end changeShare
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// loadShare - returned from AFB class, a result from THEME.changeShare
	this.loadShare = function(xml) {
		if (xml){
			var dcnt = 0;
			var fcnt = 0;
			
			//get share
			var s = xml.getElementsByTagName('share')[0];
			
			//share name
			var sname = xmlTag('name',s);
			
			//change header to share name.
			uid = getUniqueId();
			var h = '<a href="javascript:void(null);" rel="/" id="'+uid+'">'+sname+'</a>';
			var ids = new Array();
			ids[ids.length] = uid;
			
			//get breadcrumbs elements
			var bc = xml.getElementsByTagName('breadcrumb')[0];
			if (bc){
				var crumbs = xmlTags('crumb',bc);
				if (crumbs && crumbs.length > 0){
					for (var i=0;i<crumbs.length;i++){
						uid = getUniqueId();
						h += ' &nbsp; &gt; &nbsp; <a href="javascript:void(null);" rel="'+xmlTag('path',crumbs[i])+'" id="'+uid+'">'+unescape(xmlTag('name',crumbs[i]))+'</a>';
						ids[ids.length] = uid;
					}
				}
			}
			
			YAHOO.util.Event.addListener(ids,'click',THEME.getDir);
			
			THEME.mainTitle(h);
			
			//clear main area...
			removeChildrenFromNode('main_content');
			
			//previewpane
			if(THEME.previewPane){
				THEME.showPreviewPane();
			}
			
			//create ul
			var u = document.createElement('ul');
			u.id = 'share_listing';

			//get dirs
			if (xml.getElementsByTagName('dirs') && xml.getElementsByTagName('dirs').length > 0){
				var d = xml.getElementsByTagName('dirs')[0];
				var dirs = xmlTags('dir',d);
				for(var i=0;i<dirs.length;i++){
					var li = document.createElement('li');
					li.className = 'dir';
					li.id = xmlTag('unique',dirs[i]);
					li.setAttribute('rel',xmlTag('fullpath',dirs[i]));
					li.setAttribute('name',xmlTag('name',dirs[i]));
					//check for img
					if (dirs[i].getElementsByTagName('thumbnail') && dirs[i].getElementsByTagName('thumbnail').length > 0 && typeof(xmlTag('thumbnail',dirs[i])) != 'object'){
						var img = '<p class="img_thumbnail">'+unescape(xmlTag('thumbnail',dirs[i]))+'</p>';
					} else {
						var img = '';
					}
					xInnerHtml(li,img+'<p class="name">'+unescape(xmlTag('name',dirs[i]))+'</p>');
					THEME.addHoverEvents(li);
					u.appendChild(li);
					dcnt++;
				}
			}

			//get files
			if (xml.getElementsByTagName('files') && xml.getElementsByTagName('files').length > 0){
				var f = xml.getElementsByTagName('files')[0];
				var fls = xmlTags('file',f);
				for(var i=0;i<fls.length;i++){

					var li = document.createElement('li');
					//check for cat
					if (fls[i].getElementsByTagName('thumbnail') && fls[i].getElementsByTagName('thumbnail').length > 0 && typeof(xmlTag('category',fls[i])) != 'object'){
						var cat = ' cat_'+unescape(xmlTag('category',fls[i]));
					} else {
						var cat = ' cat_file';
					}

					li.className = 'file type_'+xmlTag('type',fls[i])+cat;
					li.id = xmlTag('unique',fls[i]);
					li.setAttribute('rel',xmlTag('fullpath',fls[i]));
					li.setAttribute('name',xmlTag('name',fls[i]));
					//check for img
					if (fls[i].getElementsByTagName('thumbnail') && fls[i].getElementsByTagName('thumbnail').length > 0 && typeof(xmlTag('thumbnail',fls[i])) != 'object'){
						var img = '<p class="img_thumbnail">'+unescape(xmlTag('thumbnail',fls[i]))+'</p>';
					} else {
						var img = '';
					}
					xInnerHtml(li,img+'<p class="name">'+unescape(xmlTag('name',fls[i]))+'</p><p class="type">'+unescape(xmlTag('type',fls[i]))+' file</p><p class="size">'+xmlTag('size',fls[i])+'</p>');
					THEME.addHoverEvents(li);
					u.appendChild(li);
					fcnt++;
				}
			}

			THEME.dcnt = dcnt;
			THEME.fcnt = fcnt;
			
			//check if dir is empty
			if (dcnt == 0 && fcnt == 0){
				//nothing in dir, maybe has no permissions or has no files.
				if (parseInt(xmlTag('perm_list',s)) == 1) {
					//no files in dir.
					xInnerHtml('main_content','<p>Tidak ada file di dalam Direktori ini.</p>');
					
				} else if (parseInt(xmlTag('perm_write',s)) == 1) {
					//only allowed to upload.
					xInnerHtml('main_content','<p>Anda hanya di izinkan untuk mengupload file di dalam shares ini. Anda tidak dapat melihat file yang telah Anda upload, dan anda tidak dapat meng-overwrite file. Pilih \'Upload Here\' dari menu untuk segera memulai.</p>');
				}
			}
			
			//show or hide upload link, depending on status.
			if (parseInt(xmlTag('perm_write',s)) == 1) {
				//show
				YAHOO.util.Dom.setStyle('upload_link','display','block');
			} else {
				//hide
				YAHOO.util.Dom.setStyle('upload_link','display','none');
			}
			
			//show views link
			YAHOO.util.Dom.setStyle('views_link','display','block');
			
			//clear selected
			THEME.clearSelected();
			
			if (typeof(xmlTag('perm_modify',s)) == 'string' && parseInt(xmlTag('perm_modify',s)) == 1) {
				//show
				YAHOO.util.Dom.setStyle('fileops_link','display','block');
			} else {
				YAHOO.util.Dom.setStyle('fileops_link','display','none');
			}
			
			xGetElementById('main_content').appendChild(u);
			THEME.doPreview();
			
		}
		//hide main loading screen
		THEME.hideMLoad();
		if (THEME.view == 4){
			//load theme thumbnails
			setTimeout(THEME.loadThumbnails,100);
		}
		
	} //end loadShare
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	//addHoverEvents - adds listeners for mouse hovers to an elm
	this.addHoverEvents = function(elm){
		YAHOO.util.Event.addListener(elm,'mouseover',THEME.doAddHover);
		YAHOO.util.Event.addListener(elm,'mouseout',THEME.doHideHover);
		YAHOO.util.Event.addListener(elm,'click',THEME.doPreview);
		YAHOO.util.Event.addListener(elm,'dblclick',THEME.doOpen);
	} //end addHoverEvents
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// doAddHover
	this.doAddHover = function(e){
		var elm=e;
		if (!e.nodeName) {			
			//was fired by yahoo
			elm = (e.srcElement) ? e.srcElement : e.target;
		}
		if (elm.nodeName.toLowerCase() !== 'li'){
			elm = searchUp(elm,'li');
		}
		addClassName(elm,'hover');
	} //end doAddHover
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// doHideHover
	this.doHideHover = function(e){
		var elm=e;
		if (!e.nodeName) {			
			//was fired by yahoo
			elm = (e.srcElement) ? e.srcElement : e.target;
		}
		if (elm.nodeName.toLowerCase() !== 'li'){
			elm = searchUp(elm,'li');
		}
		removeClassName(elm,'hover');
	} //end doHideHover
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// doSelect - select the current item.
	this.doSelect = function(e){
		if (e){
			var elm=e;
			if (!e.nodeName) {			
				//was fired by yahoo
				elm = (e.srcElement) ? e.srcElement : e.target;
			}
			if (elm.nodeName.toLowerCase() != 'li'){
				elm = searchUp(elm,'li');
			}
			
			//unselect any previously selected item
			THEME.clearSelected();
						
			//get id and path,
			var id = elm.id;
			var path = elm.getAttribute('rel');
			var name = elm.getAttribute('name');
			THEME.selected = id;
			THEME.selectedPath = unescape(path);
			THEME.selectedName = unescape(name);
			if (hasClassName(elm,'dir')){
				THEME.selectedType = 'dir';
			}else if(hasClassName(elm,'file')){
				THEME.selectedType = 'file';
			}
			addClassName(elm,'selected');
			
			//get currentshare
			for (var i=0;i<AFB.shares.length;i++){
				if (AFB.shares[i][0] == AFB.currentShare){
					var share = AFB.shares[i];
					break;
				}
			}
			YAHOO.util.Dom.setStyle('fileops_link','display','none');
			if (share){
				if ((typeof(share[6]) == 'string' && share[6] == 1) || (hasClassName(elm,'file') && typeof(share[5]) == 'string' && share[5] == 1)){
					//show file menu item
					YAHOO.util.Dom.setStyle('fileops_link','display','block');
				}
			}
			
		}
	} //end doSelect
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// clearSelected - clear selected item
	this.clearSelected = function(){
		if (THEME.selected && xGetElementById(THEME.selected)){
			//remove class from selected
			removeClassName(THEME.selected,'selected');
		}
		THEME.selected = false;
		THEME.selectedPath = false;
		THEME.selectedName = false;
		THEME.selectedType = false;
		
		//hide menu item
		//YAHOO.util.Dom.setStyle('fileops_link','display','none');
		
	} //end clearSelected
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// doPreview - update preview pane with file or dir details.
	this.doPreview = function(e){
		var id='';
		if (e){
			var elm=e;
			if (!e.nodeName) {			
				//was fired by yahoo
				elm = (e.srcElement) ? e.srcElement : e.target;
			}
			if (elm.nodeName.toLowerCase() != 'li'){
				elm = searchUp(elm,'li');
			}
			//get rel attribute,
			var fp = elm.getAttribute('rel');
			id = elm.id;
		} else {
			var fp = '/';
		}
		
		if(id != THEME.selected){
			//send ajax request with AFB class
			AFB.getPreviewInfo(fp);
			//show loading on preview pane
			THEME.showPreviewLoading();
		}
		//select item
		THEME.doSelect(e);
		
	} //end doPreview
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// loadPreview - called from AFB class, with xml information.
	this.loadPreview = function(xml){
		//chekc if xml
		if (!xml){
			//display nothing in the pane.
			xInnerHtml('preview_pane_container','');
			THEME.hidePreviewLoading();
			return;
		}
		
		//get preview node
		var p = xml.getElementsByTagName('preview')[0];
		if (p){
			//get type
			var t = xmlTag('type',p);
			if(t == 'dir'){
				//dir
				var img = xmlTag('img',xml);
				if (img && img.length > 0){
					img = '<img src="'+unescape(img)+'" border="0" alt="Preview" />';
				} else {
					var img = '&nbsp;';
				}
				
				xInnerHtml('preview_pane_container','<div class="image image_dir">'+img+'</div><p class="name">'+unescape(xmlTag('name',p))+'</p><p class="details">'+unescape(xmlTag('files',p))+' files, '+unescape(xmlTag('dirs',p))+' folders</p><p class="details">'+xmlTag('size',p)+'</p>');				
				
			}else if(t == 'file'){
				//file
				var ext = xmlTag('ext',xml);
				if (ext && ext.length > 0){
					ext = '<p class="details">'+unescape(ext)+' file</p>';
				} else {
					var ext = '';
				}
				var size = xmlTag('size',xml);
				if (size && size.length > 0){
					size = '<p class="details">'+size+'</p>';
				} else {
					var size = '';
				}
				var img = xmlTag('img',xml);
				if (img && img.length > 0){
					img = '<img src="'+unescape(img)+'" border="0" alt="Preview" />';
				} else {
					var img = '&nbsp;';
				}
				var cat = xmlTag('category',xml);
				if (!cat || cat.length == 0 || typeof(cat) != 'string'){
					var cat = 'file';
				}
				var dl = xmlTag('download',xml);
				if (dl && dl.length > 0){
					dl = '<p class="download"><a href="'+unescape(dl)+'" title="Download Sekarang" class="button">Download</a></p>';
				} else {
					var dl = '&nbsp;';
				}
				var dim = xmlTag('dimensions',xml);
				if (dim && dim.length > 0){
					dim = '<p class="details">'+dim+'</p>';
				} else {
					var dim = '';
				}
				
				xInnerHtml('preview_pane_container','<div class="image image_'+cat+'">'+img+'</div><p class="name">'+unescape(xmlTag('name',p))+'</p>'+ext+dim+size+dl);
				
			}else{
				xInnerHtml('preview_pane_container','<p align="center">Informasi Preview tidak tersedia</p>');
			}
		} else {
			xInnerHtml('preview_pane_container','<p align="center">Informasi Preview tidak tersedia</p>');
		}
		//hide loading thing.
		THEME.hidePreviewLoading();
	} //end loadPreview
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// doOpen - open a dir or download
	this.doOpen = function(e){
		var elm=e;
		if (!e.nodeName) {			
			//was fired by yahoo
			elm = (e.srcElement) ? e.srcElement : e.target;
		}
		if (elm.nodeName.toLowerCase() != 'li'){
			elm = searchUp(elm,'li');
		}
		//get rel attribute,
		var fp = elm.getAttribute('rel');
		if (hasClassName(elm,'file')){
			//file, download
			AFB.download(fp);
		} else if (hasClassName(elm,'dir')){
			//dir, traverse
			THEME.getDir(fp);
		}
	} //end doOpen
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// getDir - load a dir
	this.getDir = function(path){
		if (typeof(path) != 'string'){
			//must have been called from an event
			var path = (path.srcElement) ? path.srcElement : path.target;
			path = path.getAttribute('rel');
		}
		if (path && path.length > 0){
			//show main loading screen
			THEME.showMLoad();
			//send the job to AFB class
			AFB.loadShare(0,path);
		}
	} //end getDir
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// mainTitle - fixes memory leaks
	this.mainTitle = function(str){
		if (str){
			xInnerHtml('main_head','<p>'+str+'</p>');
		}
	}
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// showFileOps
	this.showFileOps = function(e){
		if(xGetElementById('fileops_box')){
			//hide it
			THEME.hideFileOps();
		} else {
			THEME.hideLogin();
			THEME.hideShares();
			THEME.hideViews();
			
			//get file permissions
			for (var i=0;i<AFB.shares.length;i++){
				if (AFB.shares[i][0] == AFB.currentShare){
					var share = AFB.shares[i];
					break;
				}
			}
			
			if ((THEME.selected && xGetElementById(THEME.selected)) || (share && typeof(share[6]) == 'string' && parseInt(share[6]) == 1)){
				addClassName('fileops_link','selected');

				//create div
				var l=document.createElement('div');
				l.id='fileops_box';
				
				//get left of #views_link and adjust box to show there too.
				var x = YAHOO.util.Dom.getX('fileops_link');
				YAHOO.util.Dom.setStyle(l,'left',(x-4)+'px');
				
				//check share found and read permissions apply
				if (share && parseInt(share[3]) == 1) {
					
					var h = '<ul>';
					
					if (THEME.selectedType == 'dir') {
						//directory
						
						//check modify perms
						if (typeof(share[6]) == 'string' && parseInt(share[6]) == 1) {
							h += '<li><a href="javascript:void(null);" title="Ganti nama '+THEME.selectedName+'" onclick="THEME.renameSelected();THEME.hideFileOps();">Ganti nama Direktori</a></li>';
							h += '<li><a href="javascript:void(null);" title="Hapus '+THEME.selectedName+'" onclick="THEME.deleteSelected();THEME.hideFileOps();">Hapus Direktori</a></li>';
						}
						
					} else if (THEME.selectedType == 'file') {
						//file
						
							//check dl perms
							if (typeof(share[5]) == 'string' && parseInt(share[5]) == 1) {
								h += '<li><a href="javascript:void(null);" title="Download '+THEME.selectedName+'" onclick="AFB.download(\''+escape(THEME.selectedPath)+'\');THEME.hideFileOps();">Download File</a></li>';
							}
							
							//check modify perms
							if (typeof(share[6]) == 'string' && parseInt(share[6]) == 1) {
								h += '<li><a href="javascript:void(null);" title="Ganti nama '+THEME.selectedName+'" onclick="THEME.renameSelected();THEME.hideFileOps();">Ganti nama File</a></li>';
								h += '<li><a href="javascript:void(null);" title="Hapus '+THEME.selectedName+'" onclick="THEME.deleteSelected();THEME.hideFileOps();">Hapus File</a></li>';
							}
							
							
						
					} //end type check
					
					if (typeof(share[6]) == 'string' && parseInt(share[6]) == 1) {
						h += '<li><a href="javascript:void(null);" title="Buat Direktori" onclick="THEME.createDir();THEME.hideFileOps();">Buat Direktori</a></li>';
					}
					
					h += '</ul>';
					
					xInnerHtml(l,'<div class="inner">'+h+'</div>');
					YAHOO.util.Dom.setStyle(l,'opacity','0');
					xGetElementById('wrapper').appendChild(l);
					YAHOO.util.Event.onAvailable('fileops_box',function(){
						YAHOO.util.Event.addListener('fileops_box','click',THEME.discard);
						var anim = new YAHOO.util.Anim('fileops_box',{opacity:{to:1}},.2,YAHOO.util.Easing.easeOut);
						anim.animate();
					});
					
				} //end share check
				
			} else {
				THEME.clearSelected();
			}
			if(e){
				THEME.discard(e);
			}
		}
	} //end showFileOps
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// hideFileOps
	this.hideFileOps = function(e){
		removeClassName('fileops_link','selected');
		if(xGetElementById('fileops_box')){
			var anim = new YAHOO.util.Anim('fileops_box',{opacity:{to:0}},.2,YAHOO.util.Easing.easeOut);
			anim.onComplete.subscribe(function(){
				destroyElm('fileops_box');
			});
			anim.animate();
		}
	} //end hideFileOps
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// createDir
	this.createDir = function(){
		THEME.showDialog('Buat Direktori','<input type="text" name="dir" id="dialog_box_1" />','<input type="button" value="Save" onclick="THEME.saveDir(\'dialog_box_1\');" class="button" /> <input type="button" value="Batal" onclick="THEME.hideDialog();" />');
		YAHOO.util.Event.onAvailable('dialog_box_1',function(){
			jFocus('dialog_box_1');
		});
	} //end createDir
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// saveDir
	this.saveDir = function(elm){
		if(typeof(elm) == 'string') {
			elm = xGetElementById(elm);
		}
		if (elm) {
			
			//check if data is empty
			var d = elm.value.trim();
			if (d.length > 0){
				//attempt to save
				AFB.saveDir(d);
				THEME.hideDialog();
				THEME.showMLoad();
			}
		}
	} //end saveDir
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// insertDir - returned from AFB class
	this.insertDir = function(xml){
		//get ul
		var u = xGetElementById('share_listing');
		var d = xml.getElementsByTagName('dir')[0];
		if(u&&d) {
			//get dir details and append to UL.
			
			var li = document.createElement('li');
			li.className = 'dir';
			li.id = xmlTag('unique',d);
			li.setAttribute('rel',xmlTag('fullpath',d));
			li.setAttribute('name',xmlTag('name',d));
			xInnerHtml(li,'<p class="name">'+xmlTag('name',d)+'</p>');
			THEME.addHoverEvents(li);
			u.appendChild(li);
			THEME.addHoverEvents(li);
		}
		if (THEME.dcnt == 0 && THEME.fcnt==0){
			THEME.getDir(AFB.currentPath);
		}
		THEME.hideMLoad();
		
	} //end insertDir
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// deleteSelected
	this.deleteSelected = function(){
		var h = '';
		var b ='';
		if (THEME.selectedType == 'dir'){
			h = 'Hapus Direktori';
			b = 'Apakah Anda ingin menghapus direktori ini? Semua file dan direktori di dalamnya juga akan ikut terhapus!';
		} else if(THEME.selectedType == 'file') {
			//file
			h = 'Hapus File';
			b = 'Apakah Anda ingin menghapus file ini? Perubahan yang terjadi nantinya tidak dapat dibatalkan!';
		}
		THEME.showDialog(h,b,'<input type="button" value="yes" onclick="THEME.confirmDelete();" class="button" /> <input type="button" value="Batal" onclick="THEME.hideDialog();" />');
	} //end deleteSelected
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// confirmDelete
	this.confirmDelete = function(){
		
		AFB.deleteitem(THEME.selectedType,THEME.selectedPath);
		
		THEME.hideDialog();
		THEME.showMLoad();
	} //end confirmDelete
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// returnDelete - returned from AFB class
	this.returnDelete = function(xml){
		//remove item from list
		if(xGetElementById(THEME.selected)){
			xGetElementById(THEME.selected).parentNode.removeChild(xGetElementById(THEME.selected));
			THEME.clearSelected();
		}
		if (THEME.dcnt+THEME.fcnt == 1){
			THEME.getDir(AFB.currentPath);
		}
		THEME.hideMLoad();
	} //end returnDelete
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// renameSelected
	this.renameSelected = function(){
		var h = '';
		var b ='';
		if (THEME.selectedType == 'dir'){
			h = 'Ganti nama Direktori';
		} else if(THEME.selectedType == 'file') {
			//file
			h = 'Ganti nama File';
		}
		THEME.showDialog(h,'<input type="text" name="dir" id="dialog_box_1" value="'+THEME.selectedName+'" />','<input type="button" value="Save" onclick="THEME.saveRename(\'dialog_box_1\');" class="button" /> <input type="button" value="Batal" onclick="THEME.hideDialog();" />');
		YAHOO.util.Event.onAvailable('dialog_box_1',function(){
			jFocus('dialog_box_1');
		});
	} //end renameSelected
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// saveRename
	this.saveRename = function(elm){
		if(typeof(elm) == 'string') {
			elm = xGetElementById(elm);
		}
		if (elm) {
			//check if data is empty
			var d = elm.value.trim();
			if (d.length > 0){
				//attempt to save rename
				AFB.saveRename(THEME.selectedType,THEME.selectedPath,d);
				THEME.hideDialog();
				THEME.showMLoad();
			}
		}
	} //end saveRename
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// returnRename
	this.returnRename = function(xml){
		var u = xGetElementById('share_listing');
		var s = xGetElementById(THEME.selected);
		var d = xml.getElementsByTagName('data')[0];
		if(THEME.selectedType == 'dir'){
			//dir			
			var li = document.createElement('li');
			li.className = 'dir';
			li.id = xmlTag('unique',d);
			li.setAttribute('rel',xmlTag('fullpath',d));
			li.setAttribute('name',xmlTag('name',d));
			xInnerHtml(li,'<p class="name">'+xmlTag('name',d)+'</p>');
			THEME.addHoverEvents(li);
			u.insertBefore(li,s);
			s.parentNode.removeChild(s);
		}else if(THEME.selectedType=='file'){
			//file
			var li = document.createElement('li');
			li.className = 'file type_'+xmlTag('type',d);
			li.id = xmlTag('unique',d[i]);
			li.setAttribute('rel',xmlTag('fullpath',d));
			li.setAttribute('name',xmlTag('name',d));
			xInnerHtml(li,'<p class="name">'+xmlTag('name',d)+'</p><p class="type">'+xmlTag('type',d)+' file</p><p class="size">'+xmlTag('size',d)+'</p>');
			THEME.addHoverEvents(li);
			u.insertBefore(li,s);
			s.parentNode.removeChild(s);
		}
		THEME.hideMLoad();
	} //end returnRename
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// showDialog
	this.showDialog = function(title,body,buttons,foot){ //fn not implemented
		if(title && body){

			//show error bg
			var ae=document.createElement('div');
			ae.id='app_error';
			//set opacity
			YAHOO.util.Dom.setStyle(ae,'opacity',.7);
			//set dimensions.
			YAHOO.util.Dom.setStyle(ae,'width',YAHOO.util.Dom.getViewportWidth()+'px');
			YAHOO.util.Dom.setStyle(ae,'height',YAHOO.util.Dom.getViewportHeight()+'px');
			
			//show error text
			var et=document.createElement('div');
			et.id='app_dialog_text';
			//set opacity
			YAHOO.util.Dom.setStyle(et,'opacity',0);
			//set dimensions.
			YAHOO.util.Dom.setStyle(et,'left',((YAHOO.util.Dom.getViewportWidth() / 2) - 192)+'px');
			YAHOO.util.Dom.setStyle(et,'top',(((YAHOO.util.Dom.getViewportHeight() / 2) - 20) * 0.8)+'px');
			//p
			var h = '<p class="head">'+title+'</p><p>'+body+'</p>';
			if(buttons){
				h += '<p class="btns" align="center">'+buttons+'</p>';
			}
			if(foot){
				h+='<p class="foot">'+foot+'</p>';
			}
			xInnerHtml(et,h);
			
			//apend!
			xGetElementById('body').appendChild(ae);
			xGetElementById('body').appendChild(et);
			
			//anim
			YAHOO.util.Event.onAvailable('app_dialog_text',function(){
		 		var anim = new YAHOO.util.Anim('app_dialog_text',{opacity:{to:1}},.3,YAHOO.util.Easing.easeOut);
				anim.animate();
				YAHOO.util.Event.addListener('app_error','click',THEME.hideDialog);
			});
			
			
		}
	} //end showDialog
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// hideDialog
	this.hideDialog = function(e){
		var anim = new YAHOO.util.Anim('app_dialog_text',{opacity:{to:0}},.3,YAHOO.util.Easing.easeOut);
		anim.onComplete.subscribe(function(){
	 		destroyElm('app_error');
			destroyElm('app_dialog_text');
		});
		anim.animate();

		//stop any propegation.
		if (e){
			THEME.discard(e);
		}
	} //end hideDialog
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// showUpload
	this.showUpload = function(e){
		
		THEME.hideLogin();
		THEME.hideShares();
		THEME.hideFileOps();
		THEME.hideViews();
		
		//get file permissions
		for (var i=0;i<AFB.shares.length;i++){
			if (AFB.shares[i][0] == AFB.currentShare){
				var share = AFB.shares[i];
				break;
			}
		}
		//check for share and permission to upload
		if (share && parseInt(share[4]) == 1){
			//ok!
			
			//clear stack
			THEME.uploadStack = 0;
			
			//show error bg
			var ae=document.createElement('div');
			ae.id='app_error';
			//set opacity
			YAHOO.util.Dom.setStyle(ae,'opacity',.7);
			//set dimensions.
			YAHOO.util.Dom.setStyle(ae,'width',YAHOO.util.Dom.getViewportWidth()+'px');
			YAHOO.util.Dom.setStyle(ae,'height',YAHOO.util.Dom.getViewportHeight()+'px');
			
			//show error text
			var et=document.createElement('div');
			et.id='app_upload_box';
			//set opacity
			YAHOO.util.Dom.setStyle(et,'opacity',0);
			//set dimensions.
			YAHOO.util.Dom.setStyle(et,'left',((YAHOO.util.Dom.getViewportWidth() / 2) - 192)+'px');
			YAHOO.util.Dom.setStyle(et,'top',(((YAHOO.util.Dom.getViewportHeight() / 2) - 200) * 0.8)+'px');
			//p
			xInnerHtml(et,'<p class="head">Upload</p><div class="body" id="upload_body"><p class="note">Files cannot exceed 16mb each</p><div id="upload_ol_wrapper"><ol id="upload_ol"></ol></div><p class="btns"><input type="button" value="Tutup" onclick="THEME.hideUpload();" class="button" id="upload_close_btn" /></p></div>');
			
			//apend!
			xGetElementById('body').appendChild(ae);
			xGetElementById('body').appendChild(et);
			
			//on available, add upload boxs..
			THEME.addUploadField(3);
			
			
			//anim
			YAHOO.util.Event.onAvailable('app_upload_box',function(){
		 		var anim = new YAHOO.util.Anim('app_upload_box',{opacity:{to:1}},.3,YAHOO.util.Easing.easeOut);
				anim.animate();
				//YAHOO.util.Event.addListener('app_upload_box','click',THEME.hideError);
				//YAHOO.util.Event.addListener('app_error','click',THEME.hideError);
			});
			
		}
		if(e){
			THEME.discard(e);
		}
	} //end showUpload
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// hideUpload
	this.hideUpload = function(e){
		if (THEME.uploadStack < 1){
			var anim = new YAHOO.util.Anim('app_upload_box',{opacity:{to:0}},.3,YAHOO.util.Easing.easeOut);
			anim.onComplete.subscribe(function(){
				destroyElm('app_error');
				destroyElm('app_upload_box');
			});
			anim.animate();
			
			//refresh listing
			THEME.getDir(AFB.currentPath);
			
			//stop any propegation.
			if (e){
				THEME.discard(e);
			}

		}
	} //end hideUpload
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// addUploadField
	this.addUploadField = function(amt){
		
		if (!amt){ var amt = 1; }
		
		var ids = new Array();
		
		if (xGetElementById('upload_ol')){
			
			for (var i=0;i<amt;i++){
				
				//count li's in ol.
				var cnt = xmlTags('li',xGetElementById('upload_ol'));
				cnt = cnt.length +1;
				
				var li = document.createElement('li');
				li.className = 'uploadItem';
				li.id = 'uploadItem_'+cnt;
				xInnerHtml(li,'<form method="post" enctype="multipart/form-data" action="" name="upform_'+cnt+'"> <input type="file" name="file" id="uploadFile_'+cnt+'" rel="'+cnt+'" /> </form>');
				//add id to array for attachment
				ids[ids.length] = 'uploadFile_'+cnt;
				
				xGetElementById('upload_ol').appendChild(li);
				
			} //end i for
			
			//attach events
			if (ids.length > 0){
				YAHOO.util.Event.onAvailable(ids[0],function(){
					YAHOO.util.Event.addListener(ids,'change',THEME.uploadSubmit);
				});
			} //end ids length check
			
			var anim = new YAHOO.util.Scroll('upload_ol_wrapper', { scroll: { to: [0, YAHOO.util.Dom.get('upload_ol_wrapper').scrollHeight] } }, 1, YAHOO.util.Easing.easeOut);
			anim.animate();
			
		} //end ol check
	} //end addUploadField
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// uploadSubmit
	this.uploadSubmit = function(e){
		
		var elm=e;
		if (!e.nodeName) {			
			//was fired by yahoo
			elm = (e.srcElement) ? e.srcElement : e.target;
		}
		if (elm.nodeName.toLowerCase() != 'input'){
			elm = searchUp(elm,'input');
		}
		if(elm.type!='file'){
			return;
		}

		//cehck vlaue length
		if (elm.value == '') {
			return;
		}

		//get number
		var num = elm.getAttribute('rel');
		if (parseInt(num) == 0){
			return;
		}
		
		//get li
		var li = searchUp(elm,'li');
		
		
		//check that the file hasn't already been uploaded in this instance
		for(var i=0;i<THEME.uploadStack.length;i++){
			if(elm.value == THEME.uploadStack[i]){
				//found a duplicate..
				
				return;
				break;
			}
		}
		
		//show uploading state
		var p = document.createElement('p');
		p.id='uploadNotify_'+num;
		p.className = 'uploadNotify_uploading';
		xInnerHtml(p,'Uploading... Silahkan memilih file lainnya');
		li.appendChild(p);
		
		//submit form via AFB class
		THEME.uploadStack++;
		
		xGetElementById('upload_close_btn').disabled = true;
		
		AFB.uploadForm(elm.form,num,getFileName(elm.value));
		
		//disable input
		elm.blur();
		elm.disabled = 'true';
		
	} //end uploadSubmit
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// uploadReturn
	this.uploadReturn = function(frm,num,file,res){
		//display a different message.
		var p = xGetElementById('uploadNotify_'+num);
		if(p){
        	if (res) { 
            	//success 
                p.className = 'uploadNotify_done';
                xInnerHtml(p,'File telah di upload<br /><strong>'+file+'</strong>');
            } else {
            	//failed
            	p.className = 'uploadNotify_failed';
                xInnerHtml(p,'File BELUM di upload<br /><strong>'+file+'</strong>');
            }
		}
		//add another upload box.
		THEME.addUploadField();
		THEME.uploadStack--;
		if (THEME.uploadStack < 1){
			xGetElementById('upload_close_btn').disabled = false;
		}
	} //end uploadReturn
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// loadThumbnails
	this.loadThumbnails = function(){
		//this function loads thumbnails only when the thumbnails view has been selected.
		var destr = new Array();
		//get all p's on the page.
		var ps = xmlTags('p',document);
		for(var i=0;i<ps.length;i++){
			if(hasClassName(ps[i],'img_thumbnail')){
				//load image
				var img = document.createElement('img');
				img.className = 'thumbnail';
				img.src = xInnerHtml(ps[i]).replace(/&amp;/g,'&');
				img.width = 94;
				img.height = 94;
				img.alt = "Thumbnail";
				img.border = 0;
				ps[i].parentNode.insertBefore(img,ps[i]);
				destr[destr.length] = ps[i];
			}
		}
		for (var i=0;i<destr.length;i++){
			destr[i].parentNode.removeChild(destr[i]);
		}
	} //end loadThumbnails
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// unloadThumbnails
	this.unloadThumbnails = function(){
		//this function unloads thumbnails only when the thumbnails view has been unselected.
		var destr = new Array();
		//get all img's on the page.
		var imgs = xmlTags('img',document);
		for(var i=0;i<imgs.length;i++){
			if(hasClassName(imgs[i],'thumbnail')){
				//unload image
				var p = document.createElement('p');
				p.className = 'img_thumbnail';
				xInnerHtml(p,imgs[i].src);
				imgs[i].parentNode.insertBefore(p,imgs[i]);
				destr[destr.length] = imgs[i];
			}
		}
		for (var i=0;i<destr.length;i++){
			destr[i].parentNode.removeChild(destr[i]);
		}
	} //end unloadThumbnails
	
	// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	// cleanup - fixes memory leaks
	this.cleanup = function(e){
		
	}

} // END THEME CLASS
// -----------------------------------------------------------------------------------------------
// end THEME CLASS
// ***********************************************************************************************



//==================================================================================================================
//  Window Load Listeners
//------------------------------------------------------------------------------------------------------------------
YAHOO.util.Event.addListener(window, "load", THEME.winLoad);
YAHOO.util.Event.addListener(window, "unload", THEME.cleanup);