var W3CDOM = (document.createElement && document.getElementsByTagName);

function init( lang ) {
	if (!W3CDOM) return;
	var fakeFileUpload = document.createElement('div');
	fakeFileUpload.className = 'fakefile';
	fakeFileUpload.appendChild(document.createElement('input'));
	var image = document.createElement('img');
	image.src='design/images/upload/browse_' + lang + '.gif';
	fakeFileUpload.appendChild(image);
	var x = document.getElementsByTagName('input');
	for (var i=0;i<x.length;i++) {
		if (x[i].type != 'file') continue;
		if (x[i].getAttribute('noscript')) continue;
		if (x[i].parentNode.className != 'fileinputs') continue;
		x[i].className = 'file hidden';
		var clone = fakeFileUpload.cloneNode(true);
		x[i].parentNode.appendChild(clone);
		x[i].relatedElement = clone.getElementsByTagName('input')[0];
		if (x[i].value)
			x[i].onchange();
		x[i].onchange = x[i].onmouseout = function () {
			this.relatedElement.value = this.value;
		}
	}
}

var interval = null;
var upload_start = 0;

function UploadHandler_fetch(uuid, upload_host) {
	var req = new XMLHttpRequest();
	req.open("POST", "upload_status.php?host=" + upload_host + "&X-Progress-ID=" + uuid, 1);
	req.onreadystatechange = function () {
		if (req.readyState == 4) {
			if (req.status == 200) {
				//document.getElementById('debugPanel').innerHTML += req.responseText + '<br />';
				var upload = eval(req.responseText);

				/* change the width if the inner progress-bar */
				if ( (upload.state == 'done' || upload.state == 'uploading') && upload.size > 0 && upload.received != null ) {

					var timediff = (new Date).getTime() - upload_start

					var percentage		= 	upload.received / upload.size;
					percentage			=	percentage * 100;
					document.getElementById("uploadbar").style.backgroundPosition = 100 - percentage + '% 0px';

					var percentageStr 	= 	String(percentage);
					percentageStr		=	percentageStr.split('.');
					percentageStr		=	percentageStr[0];
					document.getElementById('thruput').innerHTML =	percentageStr + '%&nbsp;&nbsp;&nbsp;'
					document.getElementById('thruput').innerHTML +=	convertToMegaBytes( upload.received ) + '&nbsp;/&nbsp;' + convertToMegaBytes( upload.size );
					document.getElementById('thruput').innerHTML +=	'&nbsp;&nbsp;&nbsp; ~' + Math.round( upload.received/timediff ) + " KB/sec";
				}
				if (upload.state == 'done' && upload.size > 0 ) {
					document.getElementById("uploadbar").style.backgroundPosition = '0% 0px';
				}

				/* we are done, stop the interval */
				if (upload.state == 'done' || upload.size == 0 ) {
					window.clearInterval(interval);
					document.getElementById('thruput').innerHTML = '';
				}
			}
		}
	}
	req.send(null);
}

//converts bytes into megabytes
function convertToMegaBytes( bytes ) {
	var mb		=	Math.round((bytes/[Math.pow(1024,2)])*1000000)/1000000;
	var mbStr 	= String(mb);
	var mbArr	=	mbStr.split('.');
	var	rhs		=	mbArr[1];
	mbStr		=	mbArr[0] + '.' + rhs.substr(0,2) + 'MB';
	return mbStr;
}

function UploadHandler_startProgressBar() {
	upload_start = (new Date).getTime();
	/* generate random progress-id */
	uuid = "";
	for (i = 0; i < 32; i++) {
		uuid += Math.floor(Math.random() * 16).toString(16);
	}
	/* patch the form-action tag to include the progress-id */
	document.getElementById("upload").action="http://" + upload_host + "/upload.php?redirect=yes&X-Progress-ID=" + uuid;
	//alert(upload_host + "/upload.php?redirect=yes&X-Progress-ID=" + uuid);
	/* call the progress-updater every 1000ms */
	interval = window.setInterval(	function () { UploadHandler_fetch(uuid, upload_host); }, 1000);

	document.getElementById("uploadbar").style.backgroundPosition = '100% 0px';
}
