var Uploader = new Object();

Uploader.iconsURL = images_url + '/icons/';

var userAgent = navigator.userAgent.toLowerCase();
var is_ie = userAgent.indexOf('msie') > -1;
var is_opera = userAgent.indexOf('opera') > -1;

function rand(){return String(Math.floor(Math.random()*10000000000));}
function rand2(){return rand()+rand()+rand()+rand()+rand();}
function getObj(sId){return document.getElementById(sId);}
function checkIt(b,c){if(b){b.checked=!c;b.click();b.checked=c;}}
function showIt(sId,v){var x=$(sId);if(x)x.style.display=(v?'block':'none');}
function togView(sId){var el=$(sId);if(el){el.style.display=el.style.display=='none'?'':'none';}}
function checkAllBoxes(form,fieldName,chkVal){formObj=$(form);if(!formObj)return false;var checkBoxes=formObj.getElementsByTagName('input');for(var i=0;i<checkBoxes.length;i++){if(checkBoxes[i].name==fieldName&&!checkBoxes[i].disabled){checkBoxes[i].checked=chkVal;}}}
function countCheckedBoxes(form,fieldName){formObj=$(form);if(!formObj)return false;var checkBoxes=formObj.getElementsByTagName('input');var checkedBoxes=0;for(var i=0;i<checkBoxes.length;i++){checkedBoxes+=(checkBoxes[i].name==fieldName&&!checkBoxes[i].disabled&&checkBoxes[i].checked)?1:0;}return checkedBoxes;}
function pInt(oF){if(oF){oF.value=parseInt(oF.value);if(oF.value=='NaN'){oF.value=0;}}}
function pop(sURL){return!window.open(sURL);}
//function go(url){if(url.substr(0,7)!='http://')url=base_url+url;window.location=url;return false;}
function go(url){window.location=url;return false;}
function htmlspecialchars(s){var t={'&':'&amp;','"':'&quot;',"'":'&#039;','<':'&lt;','>':'&gt;'};for(var k in t){rx=new RegExp(k,'g');s=s.replace(rx,t[k]);}return s;}
function addslashes(s){s=s.replace(/'/gi,"&#039;");s=s.replace(/"/gi,"&quot;");return s;}
function alternateRowColor(obj,el,c1,c2){if(obj){var els=obj.getElementsByTagName(el);var j=0;for(var i=0;i<els.length;i++)if(!els[i].getAttribute('skip_alternate')){els[i].style.backgroundColor=(j&1?c2:c1);j++;}}}
function basename(s){var p=-1;for(var i=0;i<s.length;i++){if( s.charAt(i)=='\\'||s.charAt(i)=='/')p=i;}if(p<0)return s;return s.substr(p+1,s.length-p);}
function dirname(s){var p=-1;for(var i=0;i<s.length;i++){if( s.charAt(i)=='\\'||s.charAt(i)=='/')p=i;}if(p<0)return s;return s.substr(0,p+1);}
function togImage(im,n){if(!im)return false;var alt=im.getAttribute('alternateImage');if(!alt)alt=dirname(im.src)+'/'+n;var cur=im.src;im.src=alt;im.setAttribute('alternateImage',cur);}
function get_extension(n){n=n.substr(n.lastIndexOf('.')+1);return n.toLowerCase();}
function str_slice(s,l){if(s.length>l)return s.substr(0,l/2)+'...'+s.substr(s.length-(l/2));return s;}
function str_preview(s,l){return s.length>l?s.substr(0,l)+'...':s;}
function setStyles(obj,styles){if(!obj)return false;for(var k in styles)obj.style[k]=styles[k];}
function number_format(n){n+='';x=n.split('.');x1=x[0];x2=x.length>1?'.'+x[1]:'';var rgx=/(\d+)(\d{3})/;while(rgx.test(x1)){x1 = x1.replace(rgx,'$1'+','+'$2');}return x1+x2;}
function setParentSize(i,s){if(!s)s=2;i.parentNode.parentNode.style.width=i.width+s+'px';i.parentNode.parentNode.style.height=i.height+s+'px';}
function set_border(i,p,s){if(typeof s=='undefined')s=2;p.style.width=i.width+s+'px';p.style.height=i.height+s+'px';}
function trim(v,p){var t=Math.pow(10,p);return Math.round(v*t)/t;}
function get_size(v,u){if(!u)u='B';if(v>1024){if(u=='B')return get_size(v/1024,'KB');if(u=='KB')return get_size(v/1024,'MB');if(u=='MB')return get_size(v/1024,'GB');if(u=='GB')return get_size(v/1024,'TB');}return trim(v,0)+'&nbsp;'+u;}
function deleteNode(n){return n.parentNode.removeChild(n);}
function confirmGo(s,url){if(confirm(s))go(url);return false;}
function str_replace(from,to,str){while(str!=str.replace(from,to))str=str.replace(from,to);return str;}

function get_icon ( ext )
{
	var icons =
	{
		'default':'file.gif',
		// images
		'jpg'	: 'images.gif',
		'jpeg'	: 'images.gif',
		'tiff'	: 'images.gif',
		'tif'	: 'images.gif',
		'png'	: 'png.gif',
		'gif'	: 'gif.gif',
		// media
		'avi'	: 'video.gif',
		'wmv'	: 'video.gif',
		'mpeg'	: 'video2.gif',
		'mpg'	: 'video2.gif',
		'mov'	: 'quicktime.gif',
		'mp3'	: 'mp3.gif',
		// Archives
		'zip'	: 'zip.gif',
		'rar'	: 'zip.gif',
		'tar'	: 'zip.gif',
		// documents
		'pdf'	: 'acrobat.gif',
		'ppt'	: 'powerpoint.gif',
		'txt'	: 'text.gif',
		'doc'	: 'word.gif',
		'xls'	: 'excel.gif',
		'csv'   : 'excel.gif'
	}
	return icons[ext] ? icons[ext] : icons['default'];
}

function copyTextArea (id) {
	var field = $(id);
	if(!field) return;
	field.select();

	if ( !is_ie ) {
		alert ( 'Sorry, this feature is only enabled for Internet Explorer at the moment. Select the text and press Ctrl+C to copy and Ctrl+V to paste.' );
		return;
	} else {
		field.createTextRange().execCommand('copy');
	}
}

function help ( str, container )
{
	container = container || 'message_content';
	var x = $(container);
	if(!x)return false;
	x.innerHTML = str.replace(/\n/g,'<br />');
	showIt ( 'message', true );
}

function showOverlay ( visible )
{
	var overlay = $('overlay');

	if ( overlay ) {
		Element.setOpacity ( overlay, ( visible ? 50 : 0 ) );
		overlay.style.display = visible ? 'block' : 'none';
	} else {
		var overlay = document.body.appendChild ( document.createElement ( 'div' ) );
		overlay.id = 'overlay';
		Element.setOpacity ( overlay, 50 );
	}

	// for IE
	if ( is_ie ) {
		var selects = document.getElementsByTagName ( 'select' );
		for ( var i = 0; i < selects.length; ++i )
			selects[i].style.visibility = visible ? 'hidden' : 'visible';
	}
}

function uplAlert ( str, title )
{
	showOverlay ( true );
	var alertBox = document.body.appendChild ( document.createElement ( 'div' ) );
	alertBox.id = 'alert_box';
	alertBox.style.visibility = 'hidden';
	alertBox.innerHTML = '<div class="top"><!-- --></div>' +
	'<div class="center">' +
		'<div class="left"><h1>' + (title?title:'Files.com Alert') + '</h1></div>' +
		'<div class="right"><img src="' + images_url + '/close2.gif" alt="close" id="alert_close_button" /></div><div class="spacer"></div>' +
		'<p>' + str + '</p>' +
		'<p><input type="button" value="&nbsp;OK&nbsp;" id="alert_ok_button" /></p>' +
	'</div><div class="bottom"><!-- --></div>';
	alertBox.style.visibility = 'visible';

	Event.observe ( document, 'keypress', function ( event ) {
		event = event || window.event;
		if ( event.keyCode == Event.KEY_ESC )
			hideAlert();
	});

	Event.observe ( $('alert_close_button'), 'click', hideAlert );
	Event.observe ( $('alert_ok_button'), 'click', hideAlert );
}

function hideAlert ( )
{
	showOverlay ( false );
	var alert_box = $('alert_box');
	if ( alert_box )
		document.body.removeChild ( $('alert_box') );
}

function uplProgress ( str )
{
	showOverlay ( true );
	var alertBox = document.body.appendChild ( document.createElement ( 'div' ) );
	alertBox.id = 'alert_box';
	alertBox.style.visibility = 'visible';
	alertBox.innerHTML = '<div class="top"><!-- --></div>' +
	'<div class="center" style="text-align:center;vertical-align:middle">' +
		'<img src="'+images_url+'/progress.gif" width="220" height="19" border="0" alt="'+str+'">' +
		'<p>'+ str +'</p>' +
	'</div><div class="bottom"><!-- --></div>';
}

var quickEditFolderDescription = Class.create();
quickEditFolderDescription.prototype = Object.extend(new quickEditBase(), {

	initialize : function(folderId, description, container, maxLength)
	{
		this.folderId = folderId;
		this.setOptions({inputSize:50, maxInput:255, maxCharsVisible:maxLength, maxWidth:400});
		this.container = $(container);
		this.value = description;
		this.initContainer();
		this.ajax = null;
	},

	ajaxCallback : function()
	{
		var response = this.ajax.response;
		if(response.result != 'success') alert(response.message);
		this.hideEditable(this.value==''?'No Description':this.value);
	},

	doUpdate : function()
	{
		if(this.inputField.value != this.value)
		{
			this.value = this.inputField.value;
			var postData = {action:'update_description', folder_id:this.folderId, description:this.value};
			this.ajax = new AjaxRequest(base_url+'folders.php?action=update_description', {method:'post', 'postData':postData, response:'json'});
			this.ajax.oncomplete = this.ajaxCallback.bind(this);
			this.ajax.request();
		}
		else this.hideEditable(this.value==''?'No Description':this.value);
	}
});

var Slider = Class.create();
Slider.prototype = {
	initialize: function(track, handle, options) {
		this.track = $(track);
		if(!this.track)return false;
		this.handle = $(handle);
		if(!this.handle) return false;

		this.options = { barBackgroundColor: '#aaa' };
		Object.extend(this.options, options || {});

		this.onslide = null;
		this.onchange = null;

		this.dragger = new Drag(this.handle);
		this.dragger.setOptions({vertical:false});
		this.dragger.setBoundingObject(this.track);
		this.dragger.ondrag = this.startSlide.bind(this);
		this.dragger.ondragend = this.endSlide.bind(this);

		this.trackOffset = Element.getOffset ( this.track );
	},

	getValue: function(barOffset) {
		var barPosition = barOffset.offsetLeft - this.trackOffset.offsetLeft;
		return barPosition / ( this.trackOffset.offsetWidth - this.handle.offsetWidth );
	},

	setValue: function(percentage) {
		var barPosition = (percentage * this.trackOffset.offsetWidth) + this.trackOffset.offsetLeft;
		this.handle.style.left = barPosition + 'px';
	},

	endSlide: function(barOffset) {
		var scaleOffset = Element.getOffset ( this.track );
		var barPosition = barOffset.offsetLeft - scaleOffset.offsetLeft;
		if( typeof this.onchange == 'function' )
			this.onchange(this.getValue(barOffset));
	},

	startSlide: function(barOffset) {
		if ( typeof this.onslide == 'function' ) this.onslide ( this.getValue(barOffset) );
	}
};

function togFolderPerm(img, url, update_container)
{
	if ( !Ajax.enabled ) return go (url);

	if(confirm("Are you sure you want to change the folder permissions?"))
	{
		var ajax = new AjaxRequest ( url, {method:'get', response:'json'} );
		ajax.oncomplete = function ( )
		{
			var response = this.response;
			if ( response.result == 'success' )
			{
				if ( response.current_perm == 'public' )
				img.src = images_url + '/icon_folder_public.gif';
				else if ( response.current_perm == 'hidden' ) img.src = images_url + '/icon_folder_hidden.gif';
				else img.src = images_url + '/icon_folder_private.gif';
	
				if ( typeof update_container != 'undefined' )
				{
					// remind user that this folder is public
					var share_private_reminder = $('share_private_reminder');
					var permission = response.permission;
					update_container = $(update_container);
					var str = "This folder is set as <strong>" + permission['access'] + "</strong>.";
					if ( permission['access'] == 'public' )
					{
						str += " Anyone may browse and access the files in this folder.";
						share_private_reminder.style.display = 'none';
					}
					else if ( permission['access'] == 'hidden' )
					{
						str += ' Anyone may browse and access the files in this folder if they know <a href="' + response.browse_url + '" class="special">the URL</a>.';
						share_private_reminder.style.display = 'none';
					}
					else
					{
						str += " Only " +
						(permission['friend']?'your <strong class="colgreen">friends</strong>':'') +
						(permission['family']?(permission['friend']?' and <strong class="colfuscia">family</strong>':'your <strong class="colfuscia">family</strong>'):'') +
						(!permission['family']&&!permission['friend']?'<strong>you</strong>':'') +
						' may browse and access the files in this folder.';
						share_private_reminder.style.display = 'inline';
					}
					update_container.innerHTML = str;
				}
			}
		}
		ajax.request();
	}
}

function toggleLayer( whichLayer )
{
  var elem, vis;
  if( document.getElementById ) // this is the way the standards work
    elem = document.getElementById( whichLayer );
  else if( document.all ) // this is the way old msie versions work
      elem = document.all[whichLayer];
  else if( document.layers ) // this is the way nn4 works
    elem = document.layers[whichLayer];
  vis = elem.style;
  // if the style.display value is blank we try to figure it out here
  if(vis.display==''&&elem.offsetWidth!=undefined&&elem.offsetHeight!=undefined)
    vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'block':'none';
  vis.display = (vis.display==''||vis.display=='block')?'none':'block';
}

if('function' != typeof document.getElementById) {
	document.getElementById = function() {return null;};
}

function toggleTbody(id) {
	var tbod = document.getElementById(id);
	if(tbod) { (tbod = (tbod.style || tbod)).display = (tbod.display == 'none') ? '' : 'none'; }
	return false;
}
