
/*
*	Some ideas and the PERL script was adopted from: JEREMY M. DILL (trydobe.com)
*
*	INPUT-ra progress bar-os perl-es xajax-os file feltoltot huzo class 2008-07-04
*	Berlik Levente, flashpistols kft. http://www.fps.hu
*
*	kell egy szabvanyos form, aztan:
*	<script...>fps_fileupload();</script>
*/


// majd kesobb initbol php-val
var fps_fileupload_cgi_bin = "/upload";
var fps_fileupload_folder = "/tmp";
var fps_fileupload_custom_progress_bar_id = false;
var fps_fileupload_delete_image = 'image/delete.gif';

// ez rajzolja a progress bar-t, xajax hivja
function fps_fileupload_progress_bar_handler(total_size, uploaded_size, mysid) {

	if (!fps_fileupload_custom_progress_bar_id) {
		if (!document.getElementById('fps_fileupload_form_'+mysid)) { alert('Form hID: fps_fileupload_form_'+mysid+' not found.'); return; }
		var myform = document.getElementById('fps_fileupload_form_'+mysid).form;
		var progress_bar = myform.previousSibling;
	} else {
		var progress_bar = document.getElementById(fps_fileupload_custom_progress_bar_id);
	}

	var divs = progress_bar.getElementsByTagName("div");
	var meter = divs[1];	// [0] a befoglaloja az [1]-nek
	var meter_text = divs[3];

	if (uploaded_size > 0) {
		var percentage = (uploaded_size/total_size)*100;
	} else {
		var percentage = 0;
	}

	// FIXME nyelv
	//meter_text.innerHTML = (total_size == uploaded_size ? '<img src="image/loader2.gif" alt="" />Feldolgozás...' : Math.ceil(percentage)+' %');
	meter_text.innerHTML = (total_size == uploaded_size ? '<img src="image/loader2.gif" alt="" />' : Math.ceil(percentage)+' %');
	meter.style.width = percentage+'%';

}

function fps_fileupload_render_progress_bar_container(mysid) {

	if (typeof mysid == 'undefined') { alert("BAD mysid"); return; }

	// add progress_bar container
	var progress_bar_container = document.createElement("div");
	progress_bar_container.className = "fps_fileupload_progressbar_container";
	progress_bar_container.style.textAlign = 'left';
	progress_bar_container.style.display = 'none';

	// progress_bar_meter_container
	var progress_bar_container2 = document.createElement("div");
	progress_bar_container2.className = "fps_fileupload_progressbar_meter_container";
	progress_bar_container.appendChild(progress_bar_container2);

	// progress_bar
	var progress_bar = document.createElement("div");
	progress_bar.className = "fps_fileupload_progressbar_meter";
	progress_bar.width = '0%';
	progress_bar_container2.appendChild(progress_bar);

	// cancel
	var cancel_upload = document.createElement("input");
	cancel_upload.setAttribute("type", "button");
	cancel_upload.value = "Stop";	// FIXME nyelv?
	cancel_upload.setAttribute("id", "fps_cancel_upload_"+mysid);
	cancel_upload.className = "fps_button2";

	// internet explorer is so special...
	if (document.all) {
		cancel_upload.style.styleFloat = "right";
	} else {
		cancel_upload.style.cssFloat = "right";
	}

	cancel_upload.onclick = function() {
		var sid = this.id.split("_");
		sid = sid[sid.length-1];
		fps_fileupload_status[sid] = 0;
	}
	progress_bar_container.appendChild(cancel_upload);

	// extended info
	var extended_info = document.createElement("div");
	extended_info.style.width = "200px";
	extended_info.setAttribute("id", "fps_fileupload_extended_info_"+mysid);
	if (document.all) extended_info.style.styleFloat = "left"; else extended_info.style.cssFloat = "left";
	progress_bar_container.appendChild(extended_info);

	// progress text
	var progress_text = document.createElement("div");
	progress_text.className = "fps_fileupload_progressbar_text";
	//progress_text.style.position = "absolute"; // TODO?
	progress_text.style.width = "125px";
	progress_text.style.margin = "0 auto";
	progress_text.style.zIndex = 2;
	progress_text.style.textAlign = "center";
	progress_bar_container.appendChild(progress_text);

	// clear
	var clear = document.createElement("div");
	clear.style.clear = "both";
	clear.style.height = "0px";
	clear.style.fontSize = "0px";
	clear.innerHTML = "<!-- clear! -->";
	progress_bar_container.appendChild(clear);

	return progress_bar_container;
}

// ez a fps_fileupload_refresh_interval idokozonkent meghivott figyelo
var fps_fileupload_refresh_interval = 500;	// milliseconds
var fps_fileupload_status = new Array();	// 0: inaktiv (megszakitott?) feltoltes - 1: aktiv
function fps_fileupload_handler(callback_routine, mysid) {
	var mystatus = fps_fileupload_status[mysid];
	if (mystatus == 0 || !document.getElementById('fps_fileupload_form_'+mysid)) {	// ha cancel gomb, vagy megszunt a formunk
		if (!document.getElementById('fps_fileupload_form_'+mysid)) {
			mystatus = 0;
		} else {
			fps_fileupload_reset_form(mysid);
		}
	}
	xajax_fps_fileupload_handler(callback_routine, mysid, mystatus);
}

// ez eltuntenti a progress_bar-t es megjeleniti a hozza tartozo form-ot
function fps_fileupload_reset_form(mysid) {
	var iframe = document.getElementById('fps_fileupload_iframe_'+mysid).src = "";	// azert van, hogy a post lealljon (FF3, IE ok)
	if (document.getElementById('fps_fileupload_form_'+mysid).form) {
		var myform = document.getElementById('fps_fileupload_form_'+mysid).form;
		myform.style.display = 'block';
		var progress_bar = myform.previousSibling;
		progress_bar.style.display = 'none';
	}
}

// elinditja a mysid ID-ju form feltolteset
function fps_fileupload_start(mysid) {
	if (!mysid) return false;
	var myform = document.getElementById('fps_fileupload_form_'+mysid).form;
	myform.submit();
	myform.onsubmit();
}

// ez ami kezdetben atalakitja a form-okat olyanra, ami tetszik nekunk
function fps_fileupload(callback_routine, uplfold) {

	if (typeof uplfold != 'undefined') fps_fileupload_folder = uplfold;

	this.newsid = function() {
		return "sid"+((new Date()).getTime() + "" + Math.floor(Math.random() * 1000000)).substr(0, 18);
	}

	var inputs = document.getElementsByTagName("input");
	for (var i = 0; i < inputs.length; i++) {
		var obj = inputs[i];
		var mytype = obj.type;

		if (mytype == 'file') {

			// selection beszurasa
			var info = document.createElement("a");
			obj.parentNode.insertBefore(info, obj);

			obj.onchange = function() {
				var a = this.previousSibling;
				var selected_filename = this.value.split("\\");
				a.innerHTML = selected_filename[selected_filename.length-1]+'<img src="'+fps_fileupload_delete_image+'" alt="" />';
				a.className = "fps_fileupload_selected";
				a.href = "javascript: void(0);";
				a.title = "File eltávolítása."; // FIXME nyelv

				a.onclick = function() {
					var file_input = this.nextSibling;
					if (document.all) {
						var fi = document.createElement('<input name="'+file_input.name+'">');
					} else {
						var fi = document.createElement("input");
						fi.setAttribute("name", file_input.name);
					}
					fi.setAttribute("type", "file");
					fi.onchange = file_input.onchange;
					file_input.parentNode.replaceChild(fi, file_input);
					this.style.display = 'none';
				}

				a.style.display = 'inline';
				this.style.display = 'none';
			}

			// form fixalas + iframe
			if (!obj.form.action.match(/upload\.cgi/)) {

				var mysid = this.newsid();
				while (document.getElementById("fps_fileupload_iframe_"+mysid)) mysid = this.newsid();	// ha letezne...

				if (!document.getElementById('fps_fileupload_iframe_'+mysid)) {
					if (document.all) {
						var iframe = document.createElement('<iframe name="fps_fileupload_iframe_'+mysid+'">');
					} else {
						var iframe = document.createElement("iframe");
						iframe.setAttribute("name", "fps_fileupload_iframe_"+mysid);
					}
					iframe.setAttribute("id", "fps_fileupload_iframe_"+mysid);
					iframe.setAttribute("height", "0");
					iframe.setAttribute("width", "0");
					iframe.setAttribute("src", "");		// FIXME?
					iframe.setAttribute("frameBorder", "0");
					iframe.style.display = 'none';
					document.body.appendChild(iframe);
				}

				// hax, ez annyira jo, hogy megkaphatjuk vele a formjat, meg a sidjet
				if (document.all) {
					var hidden_field = document.createElement('<input name="fps_fileupload_form_mysid" value="'+mysid+'">');
				} else {
					var hidden_field = document.createElement("input");
					hidden_field.setAttribute("name", "fps_fileupload_form_mysid");
					hidden_field.setAttribute("value", mysid);
				}
				hidden_field.setAttribute("type", "hidden");
				hidden_field.setAttribute("id", "fps_fileupload_form_"+mysid);
				obj.form.appendChild(hidden_field);

				if (obj.form.enctype != 'multipart/form-data') {
					obj.form.enctype = "multipart/form-data";
					obj.form.encoding = "multipart/form-data";	// IE
				}
				if (obj.form.method != 'post') obj.form.setAttribute("method", "post");

				if (!fps_fileupload_cgi_bin.match(/\/$/)) fps_fileupload_cgi_bin += '/';
				if (!fps_fileupload_folder.match(/\/$/)) fps_fileupload_folder += '/';

				var action_str = fps_fileupload_cgi_bin+"upload.cgi?sid="+mysid+
					"&amp;maxfile=100000000000"+
					"&amp;cgidebug=0"+
					"&amp;speed=10"+
					"&amp;temp_dir="+fps_fileupload_folder;

				obj.form.setAttribute("action", action_str);
				obj.form.setAttribute("target", "fps_fileupload_iframe_"+mysid);

				obj.form.parentNode.insertBefore(fps_fileupload_render_progress_bar_container(mysid), obj.form);

				// elkuldeskor ez lesz
				obj.form.onsubmit = function() {
					if (fps_fileupload_custom_progress_bar_id && document.getElementById(fps_fileupload_custom_progress_bar_id)) {
						var progress_bar = document.getElementById(fps_fileupload_custom_progress_bar_id);
					} else {
						var progress_bar = this.previousSibling;
						this.style.display = 'none';
					}
					progress_bar.style.display = 'block';
					var mysid = this.fps_fileupload_form_mysid.value;
					fps_fileupload_status[mysid] = 1;
					fps_fileupload_handler(callback_routine, mysid);
				}

			}

		} // eof match

	}	// eof for i
}
