var maxFiles = 10;
var delImgPath = '';
var delToolTip = '';
var maxFileNameLength = 60;
var themeDir = '';
var delImage = null;

function FS(se, te, callback){
	this.se = se;
	this.te = te;
	this.c = 0;
	this.i = 0;
	this.m = (maxFiles ? maxFiles : -1);
  this.callback = callback;

  delImage = new Image(16, 16);
  delImage.src = delImgPath;
  
  precacheIcons();
  tooltipInitialize();
	
	this.add = function(e){
		this.ces();
		e.name = 'fu' + this.i++;
		e.ms = this;
		e.size = 40;
		e.onchange = function(){
			var ne = document.createElement('input');
			ne.type = 'file';

			this.parentNode.insertBefore(ne, this );

			this.ms.add(ne);
			this.ms.addRow(this);

			this.style.position = 'absolute';
			this.style.left = '-1000px';
			this.style.display = 'none';
		};
    	if( this.m != -1 && this.c >= this.m ) {
      	e.disabled = true;
      }
		this.c++;
		e.className = 'WZPToolFile';
		this.ce = e;
	};

	this.addRow = function(e){
		var btn = this.cbtn();
		btn.onclick= function(){
			var row = this.parentNode.parentNode;
      var t = row.parentNode;
			row.e.ms.c--;
			row.e.parentNode.removeChild(row.e);
			row.e.ms.ce.disabled = false;
			if (row.e.ms.c == 1) { row.e.ms.se.disabled = true; }
			row.e.ms.te.deleteRow(row.sectionRowIndex);
      reiteratetable(t);
			return false;
		};
		
		if (this.c >= 2) {
			var l = e.value.toString();
			var rowNum = this.te.length;
			rowNum++;

			var fileLabel = document.createElement("span");
      fileLabel.appendChild(document.createTextNode(extractFileName(l)));
			fileLabel.title = l;
			prepareTooltips(fileLabel);
			fileLabel.className = "WZPFileListLabel";
      fileLabel.onmouseover = labelOnMouseOver;
			fileLabel.onmouseout = labelOnMouseOut;
      fileLabel.onmousemove = Locate;
			
	
			var trow = document.createElement("tr");
			trow.className = 'WZPToolFileListTr';
			trow.onmouseover = trOnMouseOver;
			trow.onmouseout = trOnMouseOut;
			trow.e = e;

			var icon = document.createElement("img");
			icon.setAttribute("src", getIcon(extractFileExt(l)));
			icon.setAttribute("alt", "icon");
			var ic = document.createElement("td");
			ic.appendChild(icon);
      ic.style.width = 20 + "px";
			
			var lc = document.createElement("td");
			lc.appendChild(fileLabel);
			
			var bc = document.createElement("td");
			ic.className = "WZPToolFileEntry";
			lc.className = "WZPToolFileEntry";
			bc.className = "WZPToolFileBtn";
			bc.style.width = 20 + "px";
			bc.appendChild(btn);
			
			trow.appendChild(ic);
			trow.appendChild(lc);
			trow.appendChild(bc);
			this.te.getElementsByTagName("tbody")[0].appendChild(trow);
      reiteratetable(this.te);
      
      this.callback(this);
		}
	};
	
	this.ces = function() {
		if (this.se && this.c == 0) { this.se.disabled = true; }
		else if (this.se && this.se.disabled) { this.se.disabled = false; }
	};
	
	this.cbtn = function() {
		var btn = document.createElement('input');
		btn.type = 'image';
		btn.src = delImage.src;
		btn.title = delToolTip;
		return btn;
	};
};

function reiteratetable(t) {
  	for (var i = 0; i < t.rows.length; i++) {
      t.rows[i].cells[0].className = 'WZPToolFileEntry ' + ((i + 1) % 2 == 0 ? 'WZPToolFileEven' : 'WZPToolFileOdd');
    	t.rows[i].cells[1].className = 'WZPToolFileEntry ' + ((i + 1) % 2 == 0 ? 'WZPToolFileEven' : 'WZPToolFileOdd');
			t.rows[i].cells[2].className = 'WZPToolFileEntry ' + ((i + 1) % 2 == 0 ? 'WZPToolFileEven' : 'WZPToolFileOdd');
    }
}

function labelOnMouseOver(e) {
	this.className = "WZPFileListLabelOver";
  showTooltip(e, this);
}

function labelOnMouseOut(e) {
  this.className = "WZPFileListLabel";
  hideTooltip(e);
}

function trOnMouseOver() {
	this.className = "WZPToolFileListTrOver";
	this.cells[0].className = 'WZPToolFileEntryOver';
  this.cells[1].className = 'WZPToolFileEntryOver';
	this.cells[2].className = 'WZPToolFileEntryOver';
}

function trOnMouseOut() {
	this.className = 'WZPToolFileListTr';
	var i = this.rowIndex;
	this.cells[0].className = 'WZPToolFileEntry ' + ((i + 1) % 2 == 0 ? 'WZPToolFileEven' : 'WZPToolFileOdd');
  this.cells[1].className = 'WZPToolFileEntry ' + ((i + 1) % 2 == 0 ? 'WZPToolFileEven' : 'WZPToolFileOdd');
	this.cells[2].className = 'WZPToolFileEntry ' + ((i + 1) % 2 == 0 ? 'WZPToolFileEven' : 'WZPToolFileOdd');
}

function tooltipInitialize() {
var h;
if(!document.getElementById || !document.getElementsByTagName) return;
h=document.createElement("span");
h.id="WZPBalloon";
h.setAttribute("id","WZPBalloon");
h.style.position="absolute";
document.getElementById("WZPToolId").appendChild(h);
}

function prepareTooltips(el) {
  var tooltip,t,b,s,l;
  t=el.getAttribute("title");
  if(t==null || t.length==0) t="";
  el.removeAttribute("title");
  
  tooltip=CreateEl("div","WZPTooltip");
  tooltip.appendChild(document.createTextNode(t));
  tooltip.style.filter="alpha(opacity:95)";
  tooltip.style.KHTMLOpacity="0.95";
  tooltip.style.MozOpacity="0.95";
  tooltip.style.opacity="0.95";
  el.tooltip=tooltip;
}

function CreateEl(t,c){
var x=document.createElement(t);
x.className=c;
x.style.display="block";
return(x);
}

function showTooltip(e, el){
document.getElementById("WZPBalloon").appendChild(el.tooltip);
Locate(e);
}

function hideTooltip(e){
var d=document.getElementById("WZPBalloon");
if(d.childNodes.length>0) d.removeChild(d.firstChild);
}

function Locate(e){
var posx=0,posy=0;
if(e==null) e=window.event;
if(e.pageX || e.pageY){
    posx=e.pageX; posy=e.pageY;
    }
else if(e.clientX || e.clientY){
    if(document.documentElement.scrollTop){
        posx=e.clientX+document.documentElement.scrollLeft;
        posy=e.clientY+document.documentElement.scrollTop;
        }
    else{
        posx=e.clientX+document.body.scrollLeft;
        posy=e.clientY+document.body.scrollTop;
        }
    }
document.getElementById("WZPBalloon").style.top=(posy+10)+"px";
document.getElementById("WZPBalloon").style.left=(posx-20)+"px";
}

function extractFileName(path) {
    if (path.indexOf('/') > -1)
        return path.substring(path.lastIndexOf('/')+1,path.length);
    else
        return path.substring(path.lastIndexOf('\\')+1,path.length);
    return path;
}

function extractFileExt(path) {
		if (path.indexOf('.') > -1) {
			 return path.substring(path.lastIndexOf('.')+1, path.length);
		}
    return null;
}

var iconCount = 15;
var iconArray = new Array(iconCount);
function precacheIcons() {
	var iconPath = themeDir + "images/icons/";
  iconArray[0] = new Image(16, 16);
  iconArray[0].src = iconPath + "archive.png";
  iconArray[1] = new Image(16, 16);
  iconArray[1].src = iconPath + "binary.png";
  iconArray[2] = new Image(16, 16);
  iconArray[2].src = iconPath + "document.png";
  iconArray[3] = new Image(16, 16);
  iconArray[3].src = iconPath + "dvi.png";
  iconArray[4] = new Image(16, 16);
  iconArray[4].src = iconPath + "font.png";
  iconArray[5] = new Image(16, 16);
  iconArray[5].src = iconPath + "html.png";
  iconArray[6] = new Image(16, 16);
  iconArray[6].src = iconPath + "image.png";
  iconArray[7] = new Image(16, 16);
  iconArray[7].src = iconPath + "log.png";
  iconArray[8] = new Image(16, 16);
  iconArray[8].src = iconPath + "midi.png";
  iconArray[9] = new Image(16, 16);
  iconArray[9].src = iconPath + "pdf.png";
  iconArray[10] = new Image(16, 16);
  iconArray[10].src = iconPath + "sound.png";
  iconArray[11] = new Image(16, 16);
  iconArray[11].src = iconPath + "source.png";
  iconArray[12] = new Image(16, 16);
  iconArray[12].src = iconPath + "text.png";
  iconArray[13] = new Image(16, 16);
  iconArray[13].src = iconPath + "video.png";
  iconArray[14] = new Image(16, 16);
  iconArray[14].src = iconPath + "file.png";
}

function getIcon(ext) {
	switch (ext.toUpperCase()) {
	  case "ZIP": case "RAR":
		  return iconArray[0].src;
		case "EXE": case "COM": case "DLL": case "OCX":
		  return iconArray[1].src;
	  case "DOC": case "RTF":
		  return iconArray[2].src;
	  case "DVI":
		  return iconArray[3].src;
	  case "TTF":
			return iconArray[4].src;
		case "HTML": case "HTM": case "SHTML": case "XHTML": case "ASPX":
		  return iconArray[5].src;
     case "GIF": case "PNG": case "BMP": case "JPG": case "TIFF":
		  return iconArray[6].src;
		case "LOG":
		  return iconArray[7].src;
     case "MIDI":
		  return iconArray[8].src;
	  case "PDF":
		  return iconArray[9].src;
		case "MP3": case "WAV":
		  return iconArray[10].src;
		case "PHP": case "CS": case "C": case "CPP": case "PAS":
		case "BAS": case "H": case "JAVA":
		  return iconArray[11].src;
		case "TXT": case "CSS":
			return iconArray[12].src;
		case "AVI": case "MPG":
			return iconArray[13].src;
		default:
		  return iconArray[14].src;
   }
   return iconArray[14].src;
}