var uploading = 0;
var speed = 0;
var lastdsize = 0;
var lastctime = 0;
var uploadstat = [];
var fieldc = 1;
var filecount = 0;
var lastfileid = '';
if (!mini)
	var mini = false;

// Global

function ShowMask() {
	var dim = $(document.body).getDimensions();
	var vdim = $(document.viewport).getDimensions();
	$('mask').setStyle({
		width: dim.width + 'px',
		height: Math.max(dim.height, vdim.height) + 'px',
		display: 'block'
	});
}

// Upload

function AddField() {
	
	var row;
	
	fieldc++; 
	
	row = document.createElement('div');
	row.className = 'row';
	row.innerHTML = '<label for="uploadFile'+fieldc+'">'+$('uploadFileLabel').innerHTML+'</label><input class="file" type="file" name="uploadFile'+fieldc+'" />';
	$('uploadFormCtrInner').appendChild(row);
	
	row = document.createElement('div');
	row.className = 'row';
	row.innerHTML = '<label for="desc'+fieldc+'">'+$('descLabel').innerHTML+'</label><input class="text" name="desc'+fieldc+'" />';
	$('uploadFormCtrInner').appendChild(row);
	
	row = document.createElement('div');
	row.className = 'clear';
	$('uploadFormCtrInner').appendChild(row);
	
}

function StartUpload () {
	
	if (uploading || !$('uploadFile1').value)
		return;
	
	uploading = 1;
	
	//$('log').innerHTML += 'Initializing upload of ' + $('uploadFile').value + '<br />';
	
	var upservs = [];
	for (var i = 0, l = services.length; i < l; i++) {
		if (mini || $('service_'+services[i]).checked)
			upservs.push(services[i]);
	}
	
	Request('Main', 'StartUpload', {}, function (result) {
		
		$('uploadStatus').src = result.server + 'upst/' + result.uri;
		$('uploadForm').action = result.server + 'up/' + result.uri + '/' + upservs.join(',');
		//$('log').innerHTML += 'Starting upload to ' + result.uri + '<br />';
		
		$('uploadForm').submit();
		
		$('uploadBlock').style.display = 'none';
		$('progressBlock').style.display = 'block';
	
	});
}

function CancelUpload() {
	$('uploadStatus').src = 'about:blank';
	$('uploadTarget').src = 'about:blank';
	
	$('uploadBlock').style.display = 'block';
	$('progressBlock').style.display = 'none';
	
	uploading = 0;
	speed = 0;
	lastdsize = 0;
	lastctime = 0;
	uploadstat = [];
	
	$('uploadProgressPercent').innerHTML = '0%';
	$('uploadSpeed').innerHTML =
	$('uploadSizeDone').innerHTML = 
	$('uploadETA').innerHTML = '';
	$('uploadProgressBar').style.left = '0px';
}

function ExpressBytes(bytes) {
	if (bytes > 536870912) {
		return Math.round(bytes / 1073741824 * 100) / 100 + 'GB';
	}
	else if (bytes > 524288) {
		return Math.round(bytes / 1048576 * 100) / 100 + 'MB';
	}
	else if (bytes > 512) {
		return Math.round(bytes / 1024 * 100) / 100 + 'KB';
	}
	else {
		return bytes + 'B';
	}
}

function ExpressSeconds(seconds) {
	if (seconds >= 3600) {
		return Math.floor(seconds / 3600) + ':' + ((seconds % 3600) / 60 < 10 ? '0' : '') + Math.floor((seconds % 3600) / 60) + ':' + ((seconds % 3600) % 60 < 10 ? '0' : '') + ((seconds % 3600) % 60);
	}
	else {
		return Math.floor((seconds % 3600) / 60) + ':' + ((seconds % 3600) % 60 < 10 ? '0' : '') + ((seconds % 3600) % 60);
	}
}

function UploadProgress(tsize, dsize, stime, ctime) {
	
	var done = dsize / tsize;
	$('uploadProgressBar').style.left = Math.round(done * 432) + 'px';
	
	uploadstat.push([dsize, ctime]);
	if (uploadstat.length > 10)
		uploadstat.shift();
		
	var speed = 0;
	var l = uploadstat.length;

	if (l > 1) {
		speed = Math.round((uploadstat[l-1][0] - uploadstat[0][0]) / (uploadstat[l-1][1] - uploadstat[0][1]));
	}
	else {
		speed = Math.round(dsize / (ctime - stime));
	}
		
	var remaining = Math.round((tsize - dsize) / speed);
	
	$('uploadProgressPercent').innerHTML = Math.round(done * 100)+'%';
	
	$('uploadSpeed').innerHTML = 'Speed: ' + ExpressBytes(speed) + '/s';
	$('uploadSizeDone').innerHTML = 'Done: ' + ExpressBytes(dsize) + ' of ' + ExpressBytes(tsize);
	$('uploadETA').innerHTML = 'Time remaining: ' + ExpressSeconds(remaining);
	
	/*$('uploadInfo').innerHTML =
		'<b>Done:</b> ' +
			ExpressBytes(dsize) + ' of ' + ExpressBytes(tsize) + '<br />' + 
		'<b>Speed:</b> ' +
			ExpressBytes(speed) + '/s<br />' +
		'<b>Time remaining:</b> ' +
			remaining + '<br />';*/
	
	lastdsize = dsize;
	lastctime = ctime;
	
}

function FileDone(name, size, id) {
	
	if (mini) {
		document.location.href = miniCallback + '?name=' + name + '&url=http://'+document.location.hostname+'/' + id;
	}
	else {
		lastfileid = id;
		filecount++;
		
		$('log').innerHTML += name + ' of size ' + size + ' uploaded as ' + id + '<br />' + 'http://'+document.location.hostname+'/' + id + '<br />';
		
		var ctr = $(document.createElement('div'));
		ctr.className = 'boxout';
		var box = $(document.createElement('div'));
		box.className = 'boxin filedone';
		
		
		box.innerHTML = '<h3>' + name + '</h3>' + 'URL: <input value="http://'+document.location.hostname+'/' + id + '" onmouseup="this.select()" readonly="readonly" /> <a href="http://'+document.location.hostname+'/' + id + '" target="_blank">' + 'Open in new window' + '</a>';
		
		ctr.appendChild(box);
		
		var box = $(document.createElement('div'));
		box.className = 'boxend';
		ctr.appendChild(box);
		
		$('filesBlock').appendChild(ctr);
	}
	
}

function Complete() {
	$('log').innerHTML += 'Done!<br />';
	$('progressBlock').style.display = 'none';
	if (filecount == 1)
		document.location.href = 'http://'+document.location.hostname+'/' + lastfileid;
}

function CheckFileStatus() {
	Request('File', 'GetStatus', {
		'file' : fileid,
		'services' : checkservs
	}, function (result) {
	
		window.parent.UpdateFileStatus(result, checkservs);
		
		setTimeout(CheckFileStatus, 1000);
		
	});
}

function UpdateFileStatus(result, checkservs) {
	for (i = 0, l = checkservs.length; i < l; i++) {
	
		var service = checkservs[i];
		
		if (!$(service+'_td') || !$(service+'_avail'))
			continue;
		
		if (result[service].status < 0) {
			
			$(service+'_td').innerHTML = 'upload failed';
			$(service+'_avail').innerHTML = '<img src="/files/img/unavail.jpg" />';
			
		}
		else if (result[service].status < 2) {
			
			if (!$(service+'_pr_inner'))
				continue;
			
			$(service+'_pr_inner').style.left = Math.round(2.5 * result[service].progress - 5) + 'px';
			
		}
		else {
		
			var link = 'http://' + document.location.hostname+'/' + fileid + '/' + service;
			$(service+'_td').innerHTML = link.link(link);
			$(service+'_avail').innerHTML = '<img src="/files/img/avail.jpg" />';
			
		}
		
	}
}

function ShowServiceForm(provider) {
	ShowMask();
	var dim = $(document.body).getDimensions();
	$(provider+'_form_ctr').setStyle({
		display: 'block',
		zIndex: 10,
		left: Math.round(dim.width / 2 - 150) + 'px'
	});
}

function SaveProviderSettings(provider) {
	
	if (!$(provider+'_login').value.length || !$(provider+'_passwd').value.length)
		return;
	
	var mtype = '_';
	if ($(provider+'_mtype')) {
		mtype = $(provider+'_mtype').value;
	}
	else {
		var radios = $$('input[type=radio][name='+provider+'_mtype]');
		for (var i = 0, l = radios.length; i < l; i++) {
			if (radios[i].checked)
				mtype = radios[i].value;
		}
	}
	
	Request('Settings', 'SaveProvider', {
		provider : provider,
		mtype : mtype,
		login :  $(provider+'_login').value,
		passwd :  $(provider+'_passwd').value
	}, function(){
		$(provider+'_form_ctr').style.display = 'none';
		$('mask').style.display = 'none';
	});
	
}

function CloseProviderSettings(provider) {
	$(provider+'_form_ctr').style.display = 'none';
	$('mask').style.display = 'none';
}

function SetAdmin (user, checked) {
	Request('Admin', 'SetAdmin', { user: user, checked: checked }, function () {});
}

function DeleteUser (user) {
	Request('Admin', 'DeleteUser', { user: user }, function () {
		document.location.reload();
	});
}

function CheckAll(ctrlel, classname) {
	var els = $$('.'+classname);
	for (i = 0, l = els.length; i < l; i++) {
		els[i].checked = ctrlel.checked;
	}
}


function ShowForm (form) {
	$(form + '_error_ctr').style.display = 'none';
	ShowMask();
	var offset = $(form + '_link').cumulativeOffset();
	$(form+'_form_ctr').setStyle({
		display: 'block',
		zIndex: 10,
		top: offset['top'] + $(form + '_link').getHeight() + 5 + 'px',
		left: offset['left'] + 5 + 'px'
	});
	
	if (form == 'password') {
		$('current_password').value = $('new_password').value = $('confirm_password').value = '';
		$('current_password').focus();
	}
	else if (form == 'email')
		$('email').focus();
}

function SaveForm (form) {
	$(form + '_error_ctr').style.display = 'none';
	if (form == 'password')
		var data = {
			form: 'password',
			current_password: $('current_password').value,
			new_password: $('new_password').value,
			confirm_password: $('confirm_password').value
		};
	else if (form == 'email')
		var data = {
			form: 'email',
			email: $('email').value
		};
	
	Request('Settings', 'SaveForm', data, function (result) {
		if (result.ok) {
			if (form == 'email')
				$('email_ctr').innerHTML = $('email').value;
			CloseForm(form);
		}
		else {
			$(form + '_error').innerHTML = result.message;
			$(form + '_error_ctr').style.display = '';
		}
	});
	
}

function CloseForm (form) {
	$(form + '_error_ctr').style.display = 'none';
	$(form+'_form_ctr').style.display = 'none';
	$('mask').style.display = 'none';
}

function HideIcons() {
	$('blahblah').style.display = 'none';
	var expdate = new Date ();
	expdate.setTime(expdate.getTime() + 31536000000);
	document.cookie = 'hidesplash=1;expires='+expdate.toGMTString()+';path=/;';
}
