var filelabels = Array();
var fileinfo = Array();

/* Default settings */
var language_id = "default";
var commasep = ",";


/* Sets default labels: */
filelabels["default"] = new createFileLabels("Fil","Størrelse","Type","Kræver");

/* Default: Danish */
fileinfo["default"] = Array();
fileinfo["default"]["PDF"] = new createFileDesc("PDF dokument", "Adobe Acrobat Reader", "http://www.adobe.com/products/acrobat/readstep2.html");
fileinfo["default"]["PPT"] = new createFileDesc("Power Point præsentation", "Microsoft Power Point", "http://www.microsoft.com/office/000/viewers.asp");
fileinfo["default"]["DOC"] = new createFileDesc("Word dokument", "Microsoft Word", "http://www.microsoft.com/office/000/viewers.asp");
fileinfo["default"]["BMP"] = new createFileDesc("Bitmap grafikfil","","");
fileinfo["default"]["EPS"] = new createFileDesc("EPS grafikfil","","");
fileinfo["default"]["JPG"] = new createFileDesc("JPG grafikfil","","");
fileinfo["default"]["GIF"] = new createFileDesc("GIF grafikfil","","");
fileinfo["default"]["PSD"] = new createFileDesc("Photoshop grafikfil", "Adobe Photoshop", "http://www.adobe.com/products/photoshop/main.html");
fileinfo["default"]["RTF"] = new createFileDesc("RTF dokument","","");
fileinfo["default"]["TIF"] = new createFileDesc("TIFF grafikfil", "", "");
fileinfo["default"]["XLS"] = new createFileDesc("Excel regneark", "Microsoft Excel", "http://www.microsoft.com/office/000/viewers.asp");
fileinfo["default"]["ZIP"] = new createFileDesc("ZIP arkiveringsfil", "", "");
fileinfo["default"]["CSS"] = new createFileDesc("Stylesheet", "", "");
fileinfo["default"]["EXE"] = new createFileDesc("Eksekverbar fil", "", "");



function createFileDesc(description, requires, resource) {
	this.description = description;
	this.requires = requires;
	this.resource = resource;
}

function createFileLabels(fname, fsize, ftype, freqs) {
	this.fname = fname;
	this.fsize = fsize;
	this.ftype = ftype;
	this.freqs = freqs;
}

/* Given a full path to a file, return the filename: */
function getFileName(fpath) {
	re = /(.+\/)?([^\/]+)$/;
	return fpath.replace(re,"$2");
}

/* Given a full path or singular file name, return the extension: */
function getFileExtension(fname) {
	re = /.+\.([^\.]+)$/;
	ext = fname.replace(re,"$1").toUpperCase();
	switch (ext) {
		case "JPEG" : ext = "JPG"; break;
		case "TIFF" : ext = "TIF"; break;
	}
	return ext;
}


function getFileDescription(ext) {
	if (fileinfo[language_id][ext] != null) {
		return fileinfo[language_id][ext].description;
	}
	else if (fileinfo["default"][ext] != null) {
		return fileinfo["default"][ext].description;
	}
	return "";
}

function getFileReqs(ext) {
	if (fileinfo[language_id][ext] != null) {
		return fileinfo[language_id][ext].requires;
	}
	else if (fileinfo["default"][ext] != null) {
		return fileinfo["default"][ext].requires;
	}
	return "";
}

function getFileResource(ext) {
	if (fileinfo[language_id][ext] != null) {
		return fileinfo[language_id][ext].resource;
	}
	else if (fileinfo["default"][ext] != null) {
		return fileinfo["default"][ext].resource;
	}
	return "";
}


/* Given a size in bytes, display it with more suitable units */
function formatSize(size) {
	range = Array('B','KB','MB','GB');
	for (i=0; size >= 1024 && i < range.length; i++) {
		size /= 1024;
	}
	res = ""
	if (size > -1) {
		res = Math.round(size*100)/100 + ' ' + range[i];
		res = res.replace(".",commasep);
	}
	return res;
}




function filepop(e, fpath, fsize) {
	if (ua["dom"]) {
		
		if (language_id != "default" && filelabels[language_id] == null) {
			language_id = "default"
		}

		
		str = "";
		ext = getFileExtension(fpath);
		fsize = formatSize(fsize);
		fname = getFileName(fpath);
	
		window.status = fname + ' ('+fsize+')';


		if (filelabels[language_id]) {
			str += '<div class="file_name">' + filelabels[language_id].fname + ': ' + '<a href="'+fpath+'" onclick="return inet_open_win(this.href)">' + fname + '</a></div>';
			str += '<div class="file_size">' + filelabels[language_id].fsize + ': ' + fsize + '</div>';

			resource = getFileResource(ext);
			desc = getFileDescription(ext);
			reqs = getFileReqs(ext);


			if (desc != "") {
				str += '<div class="file_desc">' + filelabels[language_id].ftype + ': ' + desc + '</div>';
			}

			if (reqs != "") {
				str += '<div class="file_reqs">' + filelabels[language_id].freqs + ': ';
				str += (resource != "" ? '<a href="'+resource+'" onclick="return inet_open_win(this.href)">'+reqs+'</a>' : reqs);
				str += '</div>';
			}
		}


		// Clear window.status upon mouseout:
		if (!e) var e = window.event;
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) targ = targ.parentNode;
		
//		elm = ((e.target) ? e.target : e.srcElement);
		elm = targ;
		elm.onmouseout = function() {
			window.status = "";
			return true;
		}

		/*
		elm.onclick = function() {

			if (ua["ff"]) {
				alert(elm);
				return false;
			}
		}
		*/


		showfilepop(e, str);
		return true;
	}
}


function showfilepop(e, str) {

	if (!ua["ie"] && !ua["dom"]) {
		return
	}
	clearhidemenu()

	menuobj = document.getElementById("popmenu");
	menuobj.thestyle = menuobj.style;

	menuobj.innerHTML = '<div class="menuitems">'+str+'</div>';

	menuobj.contentwidth = menuobj.offsetWidth;
	menuobj.contentheight = menuobj.offsetHeight;

	eventX = ua["ie"] ? event.clientX : ua["moz"] ? e.clientX : e.x;
	eventY = ua["ie"] ? event.clientY : ua["moz"] ? e.clientY : e.y;

	var rightedge = ua["ie"] ? document.body.clientWidth - eventX : window.innerWidth - eventX;
	var bottomedge = ua["ie"] ? document.body.clientHeight - eventY : window.innerHeight - eventY;

	if (rightedge < menuobj.contentwidth) {
		menuobj.thestyle.left = (ua["iemac"]
									? document.body.scrollLeft+eventX-menuobj.contentwidth
									: ua["safari"]
										? eventX - menuobj.contentwidth
										: getPageScroll().x+eventX-menuobj.contentwidth)+"px";
	}
	else {
		menuobj.thestyle.left = (ua["iemac"]
									? document.body.scrollLeft+eventX
									: ua["safari"]
										? eventX
										: getPageScroll().x+eventX)+"px";
	}

	if (bottomedge < menuobj.contentheight) {
		menuobj.thestyle.top = (ua["iemac"]
									? document.body.scrollTop+eventY-menuobj.contentheight
									: ua["safari"]
										? eventY
										: getPageScroll().y+eventY)+"px";
	}
	else {
		menuobj.thestyle.top = (ua["iemac"]
									? document.body.scrollTop+eventY
									: ua["safari"]
										? eventY
										: getPageScroll().y+eventY)+"px";
	}
	menuobj.thestyle.visibility="visible";

}



/* Old filepop function: parse string and pass on to new function: */
function showmenu(e,str){
	var aStr = str.split(": ");

	fpath = "";
	fname = "";
	fsize = "";
	freq = "";
	fres = "";

	fname = (aStr[1] != null ? aStr[1] : "");
	fsize = (aStr[2] != null ? aStr[2] : "");



	//Get path and file name:
	re = /^<a href=([^=> ]+)[^<>]*>[^<>]+<\/a>(.+)?$/i;
	if (re.test(fname)) {
		//Full path:
		fpath = fname.replace(re, "$1");  
	}
	else {
		re = /^([^\.]+\.([a-z]{2,4}|[A-Z]{2,4})).*$/;
		if (re.test(fname)) {
			fpath = fname.replace(re,"$1");
		}
	}

	//File name:
	fname = getFileName(fpath);

	if (fname == fpath) {
		fpath = "";
	}

	//Extension:
	ext = getFileExtension(fname);

	//Get file size indication:
	re = /^(\d+([,\.]\d+)?) (b|kb|mb).*$/i
	if (re.test(fsize)) {
		units = RegExp.$3.toUpperCase();
		fsize = fsize.replace(re, "$1 "+units);
	}
	else {
		re = /^(\d+([,\.]\d+)?).*$/i;
		if (re.test(fsize)) {
			fsize = fsize.replace(re, formatSize(RegExp.$1));
		}
	}

	fsize = fsize.replace(",", commasep);

	window.status = fname + ' ('+fsize+')';

	str = "";
	if (filelabels[language_id]) {
		str += '<div class="file_name">' + filelabels[language_id].fname + ': '
		str += (fpath != "" ? '<a href="'+fpath+'" onclick="return inet_open_win(this.href)">'+fname+'</a>' : fname);
		str += '</div>';

		str += '<div class="file_size">' + filelabels[language_id].fsize + ': ' + fsize + '</div>';

		resource = getFileResource(ext);
		desc = getFileDescription(ext);
		reqs = getFileReqs(ext);

		if (desc != "") {
			str += '<div class="file_desc">' + filelabels[language_id].ftype + ': ' +  desc + '</div>'
		}

		if (reqs != "") {
			str += '<div class="file_reqs">' + filelabels[language_id].freqs + ': ';
			str += (resource != "" ? '<a href="'+resource+'" onclick="return inet_open_win(this.href)">'+reqs+'</a>' : reqs);
			str += '</div>';
		}
	}


	// Clear window.status upon mouseout:
	elm = ((e.target) ? e.target : e.srcElement);
	elm.onmouseout = function() {
		window.status = "";
		return true;
	}


	//Show filepop-menu:
	showfilepop(e, str);

	return true;
}






function dom_contains(a, b) {
	while (b.parentNode) {
		if ((b = b.parentNode) == a) {
			return true;
		}
	}
	return false;
}

function hidemenu(){
	if (window.menuobj) {
		menuobj.thestyle.visibility = "hidden";
	}
}

function dynamichide(e){ 
	if (ua["ie"] && !menuobj.contains(e.toElement)) {
		hidemenu()
	}
	else if (ua["dom"] && e.currentTarget != e.relatedTarget && !dom_contains(e.currentTarget, e.relatedTarget)) {
		hidemenu()
	}
}

function delayhidemenu(){ 
	if (ua["dom"]) {
		delayhide = setTimeout("hidemenu()", 500)
	}
}

function clearhidemenu(){
	if (window.delayhide)
		clearTimeout(delayhide)
}

function highlightmenu(e, state){
	if (ua["ie"]) {
		src_elm = event.srcElement
	}
	else if (ua["dom"]) {
		src_elm = e.target;
	}

	if (src_elm.className=="menuitems") {
		src_elm.id = (state=="on") ? "mouseoverstyle" : ""
	}
	else {
		while(src_elm.id != "popmenu") {
			src_elm = document.getElementById ? src_elm.parentNode : src_elm.parentElement
			if (src_elm.className == "menuitems") {
				src_elm.id = (state == "on") ? "mouseoverstyle" : "";
			}
		}
	}
}

if (ua["dom"]) {
	document.onclick = hidemenu
}


function createFilePop() {
	if (ua["dom"]) {
		filediv = document.createElement("DIV");
		filediv.setAttribute("id","popmenu");
		filediv.className = "menuskin";
		
		filediv.onmouseover = function(e) {
			if (!e) var e = window.event;
			clearhidemenu();
			highlightmenu(e, 'on');
		}
		filediv.onmouseout = function(e) {
			if (!e) var e = window.event;
			highlightmenu(e, 'off');
			dynamichide(e);
		}
		document.body.insertBefore(filediv, document.body.lastChild);
	}	
}


function filepopcustom(e, fpath, fsize, fname) {
	if (ua["dom"]) {
		
		if (language_id != "default" && filelabels[language_id] == null) {
			language_id = "default"
		}

		
		str = "";
		ext = getFileExtension(fpath);
		fsize = formatSize(fsize);
		//fname = getFileName(fpath);
	
		window.status = fname + ' ('+fsize+')';


		if (filelabels[language_id]) {
			str += '<div class="file_name">' + filelabels[language_id].fname + ': ' + '<a href="'+fpath+'" onclick="return inet_open_win(this.href)">' + fname + '</a></div>';
			str += '<div class="file_size">' + filelabels[language_id].fsize + ': ' + fsize + '</div>';

			resource = getFileResource(ext);
			desc = getFileDescription(ext);
			reqs = getFileReqs(ext);


			if (desc != "") {
				str += '<div class="file_desc">' + filelabels[language_id].ftype + ': ' + desc + '</div>';
			}

			if (reqs != "") {
				str += '<div class="file_reqs">' + filelabels[language_id].freqs + ': ';
				str += (resource != "" ? '<a href="'+resource+'" onclick="return inet_open_win(this.href)">'+reqs+'</a>' : reqs);
				str += '</div>';
			}
		}


		// Clear window.status upon mouseout:
		if (!e) var e = window.event;
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) targ = targ.parentNode;
		
//		elm = ((e.target) ? e.target : e.srcElement);
		elm = targ;
		elm.onmouseout = function() {
			window.status = "";
			return true;
		}

		/*
		elm.onclick = function() {

			if (ua["ff"]) {
				alert(elm);
				return false;
			}
		}
		*/


		showfilepop(e, str);
		return true;
	}
}


function filepopcustomversion(e, ihtml) {
	if (ua["dom"]) {
		str = ihtml;
	

		// Clear window.status upon mouseout:
		if (!e) var e = window.event;
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) targ = targ.parentNode;
		
//		elm = ((e.target) ? e.target : e.srcElement);
		elm = targ;
		elm.onmouseout = function() {
			window.status = "";
			return true;
		}

		showfilepop(e, str);
		return true;
	}
}


addLoadEvent(createFilePop);
