var _psdAPC = false;
var _psdUploadCurrent = 0;
var _psdUploadTime = 0;
var _psdUploadTimeStr = "";
var _psdUploadStart = 0;
var _psdUploadDays = 30;

if (!document.attachEvent) {
    // firefox & friends
    window.addEventListener('load', psdInitUpload,true);
} else {
    // ie
    window.attachEvent('onload',psdInitUpload);
}


function psdInitUpload() {
	var obj = document.getElementById("uploadForm");
	if (!obj) return;

	if (!document.attachEvent) {
	    // firefox & friends
	    obj.addEventListener('submit', psdUploadShowProgress,true);
	} else {
	    // ie
	    obj.attachEvent('onsubmit',psdUploadShowProgress);
	}
}

function psdUploadShowProgress(e) {
	var f = document.getElementById("uploadForm");
	
	if (!f['terms']) return false;
	if (!f['terms'].checked) return false;
	
	if (!e) e = window.event;


	/*
	try {
		e.returnValue = false;
		e.preventDefault();
	}
	catch (Exception) {
		// do nothing
	}
	*/
	
	var apc = document.getElementById("APC_UPLOAD_PROGRESS");
	if (!apc) return;

	_psdAPC = apc.value;	

	var progressBar = document.getElementById("progressBar");
	if (!progressBar) return;
	progressBar.style.display = 'block';	
	
	var bar = document.getElementById("bar");
	var info = document.getElementById("uplInfo");
	if (!info) return;
	info.innerHTML = "Jungiamasi...";

	var d = new Date();
	_psdUploadStart = d.getTime()/1000;
	psdUploadFetchResult();

}

function psdUploadFetchResult() {

	var xmlHttp;

	var url = "/uploadGetInfo.php?id="+_psdAPC+"&s="+Math.random();
	if (document.implementation && document.implementation.createDocument)
	{
		try {
		    // Firefox, Opera 8.0+, Safari, IE7+
		    xmlHttp = new XMLHttpRequest(); // xmlHttp is now a XMLHttpRequest.
		 } catch (e) {
		    // Internet Explorer
		    try {
		       xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		    } catch (e) {
		       xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		    }
		 }
		 xmlHttp.onreadystatechange = function() {
		    if (xmlHttp.readyState == 4)
		       try { // In some instances, status cannot be retrieved and will produce an error (e.g. Port is not responsive)
		          if (xmlHttp.status == 200) {

					if (xmlHttp.responseXML) {
		             var root = xmlHttp.responseXML.documentElement;
					var total = root.getElementsByTagName("total")[0].childNodes[0].nodeValue;
					var current = root.getElementsByTagName("current")[0].childNodes[0].nodeValue;
					//var start = root.getElementsByTagName("start")[0].childNodes[0].nodeValue;
					
					psdUpdateParseOutput(total, current);
					}

		          }
		       } catch (e) {
		          //document.getElementById("ajax_output").innerHTML = "Error on Ajax return call : " + e.description;
		       }

		 }
		 xmlHttp.overrideMimeType('text/xml');
		 xmlHttp.open("get",url, true); // .open(RequestType, Source);
		 xmlHttp.send(null); // Since there is no supplied form, null takes its place as a new form.
	}
	else if (window.ActiveXObject) {
		xmlHttp = new ActiveXObject("Microsoft.XMLDOM");
		xmlHttp.onreadystatechange = function () {
			if (xmlHttp.readyState == 4) {
				var root = xmlHttp.getElementsByTagName('root')[0];	
					var total = root.getElementsByTagName("total")[0].childNodes[0].nodeValue;
					var current = root.getElementsByTagName("current")[0].childNodes[0].nodeValue;
				//	var start = root.getElementsByTagName("start")[0].childNodes[0].nodeValue;

				psdUpdateParseOutput(total, current);			
			}
			
		};
		xmlHttp.load(url);	
	}
	else { }
	
	
	setTimeout("psdUploadFetchResult()", 1000);
}

function psdUpdateParseOutput(total, current) {
	var max = document.getElementById("maxFileSize");
	if (!max) return;
	var maxSize = parseInt(max.innerHTML);
	maxSize = maxSize*1024*1024;
	
	if (total > maxSize) {
		window.location = "/?oversize=1";
		return;
	}
	
	
	total = Number(total);
	current = Number(current);
	
//	debug("c:"+current+", t:"+total);
//	debug("_:"+_psdUploadCurrent);
	if (current <= _psdUploadCurrent) return;
	if (total == 0) return;

	var p = (current*100)/total;
	var bar = document.getElementById("bar");
	var barMax = document.getElementById("barMax");
	if (!bar || !barMax) return;
	var w = 0;
	if(barMax.offsetWidth){ 
		w=barMax.offsetWidth; 
	} 
	else if(barMax.style.pixelWidth){ 
		 w=barMax.style.pixelWidth; 
	}
	else if (barMax.style.width) {
		w = parseInt(barMax.style.width);
	}
	var newW = Math.round((w*p)/100);
	bar.style.width = newW+"px";
	
	
	var info = document.getElementById("uplInfo");
	var infoDetailed = document.getElementById("uplInfoDetailed");
	if (!info || !infoDetailed) return;
	info.innerHTML = "<p><b>Įkelta / failo dydis:</b> " + psdFormatSize(current) + " / " + psdFormatSize(total) + "</p>";
	var d = new Date();
	
	if (_psdUploadCurrent > 0 && _psdUploadTime > 0) {
		var sDiff = current - _psdUploadCurrent;
		var tDiff = d.getTime() - _psdUploadTime;
		tDiff = tDiff / 1000;
		//debug(sDiff+","+tDiff);
//		info.innerHTML += " >> "+sDiff+" "+tDiff;
		infoDetailed.innerHTML = "";
		if (tDiff > 0 && sDiff > 0) {
			_psdUploadTimeStr = "";
			var rate = sDiff / tDiff;
			
			infoDetailed.innerHTML += "<p><b>Greitis:</b> " + psdFormatSize(rate) + "/s<br />";
			infoDetailed.innerHTML += "<b>Praėjo laiko:</b> " + psdFormatTime(Math.round(((d.getTime()/1000)-_psdUploadStart))) + "<br />";
			
			var tc = total - current;
			var tl = tc/rate;
			
			_psdUploadTimeStr += "<b>Liko laiko:</b> ";
			_psdUploadTimeStr += psdFormatTime(tl) + "</p>";
			
						
		}		
	}
	infoDetailed.innerHTML += _psdUploadTimeStr;

	_psdUploadTime = d.getTime();
	_psdUploadCurrent = current;	
}
function psdFormatSize(size) {
	var c = 0;
	while (size > 1024) {
		size /= 1024;
		c++;
	}
	size = Math.round(size*100)/100;
	switch (c) {
		case 0: size = size+" B"; break;
		case 1: size = size+" KB"; break;
		case 2: size = size+" MB"; break;
		case 3: size = size+" GB"; break;
		case 4: size = size+" TB"; break;
	}

	return size;
}

function psdFormatTime(tl) {
	var str = "";
	
	
	var h = tl / 3600;
	h = Math.floor(h);
	if (h.toString().length < 2) h = "0"+h;


	tl = tl - h*3600;
	var m = tl / 60;
	m = Math.floor(m);
	if (m.toString().length < 2) m = "0"+m;
	tl = tl - m*60;
	tl = Math.round(tl);
	if (tl.toString().length < 2) tl = "0"+tl;

	
	str = h+":"+m+":"+tl;
	
	return str;
}

function debug(str) {
	var obj = document.getElementById("debug");
	if (!obj) return;

	obj.innerHTML += str+"<br/>";
}