/**
** This script is developed by Smikkel <www.smikkel.dk>.
**
** The script allows you to upload multiple files.
**
** You need to handle filetypes etc either by adding to the script or in the
** server script side (e.g. in your php code).
** Also you must remember that a check in the script is note enough - you must
** validate server side.
**
** smikkel_multifile.js is free to use, free to change and
** free of responsebility from developers hand.
**
** Tested to work with jQuery vers. 1.2.
**
**/

var sNumOfsBoxes;
var sBoxes = new Array();
var sValidTypes = ['png','jpg','doc','gif','pdf'];

var sTranslation = {"da" :
							{"remove_title":"Slet fil fra liste",
							 "type_alert":"Filen er ikke et accepteret format",
							 "filelist_header":"Filer til upload:"}
							,
					"en" :
							{"remove_title":"Delete file from list",
							 "type_alert":"File is not a valid format",
							 "filelist_header":"Files for upload:"}

				};
var sLanguage = sTranslation.da; //default sLanguage set to danish
var sCurrentUploads  = new Array();
var sFileListIsDisplayed = false;
var sDeletedFiles = new Array();

$(function(){
	init_sMultifile();
});

function init_sMultifile(){
	$(".sMultifile").children("input").change(sFileChange);
	sNumOfsBoxes = $(".sMultifile").children("input").length;

	if(sCurrentUploads.length > 0 && !sFileListIsDisplayed){
		$(".sMultifile").append(sCreateFilelist());
		sFileListIsDisplayed = true;
	}
	applyStyles();
}

function set_sLanguage(aLang){
	sLanguage = sTranslation.aLang;
}

function applyStyles(){
	$(".sFilelink:even").css({"background-color":"#fff"});
	$(".sFilelink:odd").css({"background-color":"#eee"});
}

function set_sCurrentUploads(arrayOfUploadedFiles){
	sCurrentUploads = arrayOfUploadedFiles;
	//init_sMultifile();
}

function sCreateFilelist(){
	var filelink = '';
	var anId = '';
	for(var i = 0; i < sCurrentUploads.length; i++){
		anId = "sFileInList_"+i;
		filelink += '<div class="sFilelink" title="'+sCurrentUploads[i]+'">';
		filelink += '<a onclick="sRemoveFile(\''+anId+'\', $(this))" title="'+sLanguage.remove_title+'">[X]</a><span class="sFilename">';
		filelink += sCurrentUploads[i] + '</span></div>';
	}
	filelink = '<div class="sFilesHeader">'+sLanguage.filelist_header+'</div>' + filelink;
	return filelink;
}

function sRemoveFile(anId, sender){
	//console.log(sender.next());
	if(!$(sender).parent("div").hasClass("sNewFile")){
		sDeletedFiles.push($(sender).next().text());
		$("#sDeletedFiles").val(sDeletedFiles.join(','));
	}
	$("#"+anId).remove();
	$(sender).parent().remove(".sFilelink");
	applyStyles();
}

function sFileChange(){
	theNewFileBx = newFilebox($(this).attr("name"), $(this).attr("id"), $(this).val());
	if(theNewFileBx == false){
		alert(sLanguage.type_alert);
	}
	else{
		$(".sMultifile").prepend(theNewFileBx.filebx);
		$(".sMultifile").append(theNewFileBx.filelnk);
		$(this).addClass('sHidden');
		sNumOfsBoxes++;
		init_sMultifile();
	}
}

//Remember to server side check the file!
function checkFile(aFile){
	var pos = aFile.lastIndexOf('.')+1;
	var ext = aFile.substring(pos, aFile.length);
//	console.log(jQuery.inArray(ext, sValidTypes));
	if(jQuery.inArray(ext.toLowerCase(), sValidTypes) > -1){
		return true;
	}
	return false;
}

function newFilebox(aName, anId, path){
	if(checkFile(path)){
		var pos = aName.lastIndexOf('_');
		var newName;
		obj = new Object();
		obj.name = aName;
		obj.pathe = path;
		sBoxes.push(obj);
		if(pos > 0){
			newName = aName.substring(0, aName.length-(aName.length-pos))+"_"+sNumOfsBoxes;
		}
		else{
			newName = aName + '_' +sNumOfsBoxes;
		}
		var newId = 'sFileNum_'+sNumOfsBoxes;
		var filename = path.substring(path.lastIndexOf("\\")+1, path.length);
		var filebox = '<input type="file" name="'+ newName +'" ';
		filebox += 'id="'+newId+'" />';
		var filelink = '<div class="sFilelink sNewfile" title="'+path+'">';
		filelink += '<a onclick="sRemoveFile(\''+anId+'\', $(this))" title="'+sLanguage.remove_title+'">[X]</a><span class="sFilename">';
		filelink += filename + '</span></div>';
		if(sNumOfsBoxes == 1 && sCurrentUploads.length == 0){
			filelink = '<div class="sFilesHeader">'+sLanguage.filelist_header+'</div>' + filelink;
		}
		return {"filebx" : filebox, "filelnk" : filelink};
	}
	return false;
}
