

//ToDo: ? base64 encoder implementieren
//      ? IE-Implementierung


var filename = "";
var mimeType = "";
var _fileUploadContext = "";

fileUpload = function(context, waitslot){
	/*
		Das funktioniert nur, wenn der User about:config 
		im firefox-Browser aufruft und dann 
		signed.applets.codebase_principal_support auf true setzt. 
		API-Documentation ist unter http://xulplanet.com/references/xpcomref/
		zu finden.
		
	*/

	if(!waitslot) waitslot = 'maincontent';
	
	_fileUploadContext = context;
	// Anfordern der erweiterten Privilegien
	//
	try{
		if(netscape.security.PrivilegeManager.enablePrivilege){
			try{
				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
			}catch(err){
				setStatus("Das Modul funktioniert so nicht.");
				alert("Fehler:\n" + err);
			}
		}
	}catch (err){
			oCM.setDebugMsg("File-Upload geht in IE nicht!\n Bitte verwenden Sie <a href=\"http://www.getfirefox.com\">firefox</a>");
	}
	
	var fpComp = Components.classes["@mozilla.org/filepicker;1"];
	var fp = fpComp.createInstance(Components.interfaces.nsIFilePicker);
	fp.init(this,"Medien Auswahl",0);
	oCM.setDebugMsg("Dateiauswahl ge&ouml;ffnet");
	if(fp.show() == fp.returnOK){
		oCM.showWaitAnimation(waitslot);
		var file = fp.file;
		filename = file.leafName;
		oCM.setDebugMsg("Die Datei " + filename + " wird zum versende vorbereitet");
		
		// Holen einer Instanz eines nsIFileInputStream
		stream = Components.classes["@mozilla.org/network/file-input-stream;1"]
	    	     .createInstance(Components.interfaces.nsIFileInputStream);
		stream.init(file,	0x01, 00004, null);

		
		//	Kann benutzt werden, um zu ermitteln, um welchen mime-typen 
		//	es sich bei der Datei handelt
		var mimeService = Components.classes["@mozilla.org/mime;1"].createInstance(Components.interfaces.nsIMIMEService);
		mimeType = mimeService.getTypeFromFile(file);
	
	
		// Holen einer Instanz eines nsIBufferedInputStream,
		// um den obigen nsIFileInputStream mittel Buffer zu
		// verarbeiten
		var bstream =  Components.classes["@mozilla.org/network/buffered-input-stream;1"].getService();
		bstream.QueryInterface(Components.interfaces.nsIBufferedInputStream);
		bstream.init(stream, 1000); // Stream mit einem buffer von 1000 bytes initialisieren
		bstream.QueryInterface(Components.interfaces.nsIInputStream);

		
		// Holen einer Instanz eines nsIBinaryInputStream
		binary = Components.classes["@mozilla.org/binaryinputstream;1"]
		         .createInstance(Components.interfaces.nsIBinaryInputStream);
		binary.setInputStream (stream);// Input-Stream auf den BufferedInputStream setzen		         
		
		window.setTimeout("ajax_upload()", 500);
	}else{
		oCM.setDebugMsg("Datei Auswahl abgebrochen! Warte auf neue Eingabe...");
	}//End if show()	
}

function ajax_upload() {
	// request more permissions
	
	try {
		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
	} catch (e) {
		alert("Permission to read file was denied.");
	}
	// prepare the MIME POST data
	// rfc1867, rfc2388
	var boundaryString = '--------------------78F901U7281421';
	var boundary = '--' + boundaryString;
	var param = _fileUploadContext+"\n";
	var requestbody = boundary + '\n' 
		+ 'Content-Disposition: form-data; name="id"' + '\n' 
		+ '\n' 
		+ param + '\n' 
		+ boundary + '\n' 
		+ 'Content-Disposition: form-data; name="data"; filename="' + filename + '"' + '\n' 
		+ 'Content-Transfer-Encoding: base64' + '\n'		
		+ 'Content-Type: ' + mimeType + '\n' 
		+ '\n'
		+ btoa(binary.readBytes(binary.available()))	 // geht nur in mozilla und netscape
		+ '\n'
		+ boundary + "--";

	ajaxRequest.setMethod('POST');
	ajaxRequest.setUrl('./upload/com.defdick.data');
	// zusammenbau des headers
	ajaxRequest.setHeader("Content-type", 
						  "multipart/form-data; boundary=\"" + boundaryString + "\"");
	ajaxRequest.addHeader("Connection", "close");
	ajaxRequest.addHeader("Content-length", requestbody.length);
	ajaxRequest.setBody(requestbody);
	ajaxRequest.startRequest();
	delete binary;
}

function edit(elem){
	beanName = elem.getAttribute("id");
	key = elem.getAttribute("key");
	ajaxRequest.setUrl('./ajax');
	ajaxRequest.setHeader("Content-Type", "application/x-www-form-urlencoded;");
	ajaxRequest.setBody("act=MediaControle.setCurrentMediaId&PD:String=" + key);
	ajaxRequest.startRequest();	
}

function del(elem){
	//id2del =  elem.getAttribute("value");
	ajaxRequest.setUrl('./ajax');
	ajaxRequest.setHeader("Content-Type", "application/x-www-form-urlencoded;");
	ajaxRequest.setBody("act=MediaControle.deleteMedia");
	ajaxRequest.startRequest();
}

function next(){
	ajaxRequest.setUrl('./ajax');
	ajaxRequest.setHeader("Content-Type", "application/x-www-form-urlencoded;");
	ajaxRequest.setBody("act=MediaControle.next");
	ajaxRequest.startRequest();
}

function prev(){
	ajaxRequest.setUrl('./ajax');
	ajaxRequest.setHeader("Content-Type", "application/x-www-form-urlencoded;");
	ajaxRequest.setBody("act=MediaControle.prev");
	ajaxRequest.startRequest();
}


function update(){
	var l = oCM.getElementsByName(/FD:CoreMedia/g);


	strBody = "act=MediaControle.update";
	for(var i=0; i<l.length; i++){
	   	strBody += "&" + l[i].name + "=" + encodeURI(l[i].value);
	}
	//alert(strBody);
	ajaxRequest.setUrl('./ajax');
	ajaxRequest.setHeader("Content-Type", "application/x-www-form-urlencoded;");
	ajaxRequest.setBody(strBody);
	ajaxRequest.startRequest();
}



