/* // JavaScript Document ------------------------------

	function.js
	-----------
	Saemtliche Flup-Grundfunktionen fr das Frontend.

	Autor:				DA
	Erstellungsdatum:	11.09.2006

--------------------------------------------------- */

// Globale Variabel um flup-Elemente zu speichern
var flup_elem = new Object();
flup_elem.hasFlash = -1;
// flup_elem.init wird aufgerufen wenn das Flash initialisiert wurde

/* Referenz zum eingebetteten SWF 

	flup_elem.flashCall.startBrowse();		flash file browser aufrufen
	flup_elem.flashCall.startUpload();		upload starten
*/

// flup initialisieren
flup_elem.init = function(newConfig) {
	flup_elem.flashCall = this.thisMovie(this.flashId);
	
	// neue Konfiguration uebernehmen
	for( var i in newConfig ) {
		flup_elem.config[i] = newConfig[i];
	}
		
	this.initSubmit();
	this.initBrowse();
	this.initReset(); // neu: Reset-Knopf
}
// flup reset
flup_elem.reset = function() { 
	var flupElem = document.getElementById(flup_elem.flashId);
	if(flupElem) {
		flupElem.parentNode.removeChild(flupElem);
	}	
	flup_elem.so = null;
	flup_elem.hasFlash = -1;
	flup_elem.nBrowse = null;
	flup_elem.aBrowse = new Array();
	flup_elem.aText = new Array();
}

flup_elem.thisMovie = function () {
	/* Browser Check. Wenn IE, flashUploader wird zu window.flashUploader, 
	sonst zu window.document.flashUploader. 
	flashUploader ist die ID des <object> und <embed> Tags */
	return window[this.flashId] || document[this.flashId];
}

// Submit Button aktiven/deaktivieren
flup_elem.setSubmitStatus = function(on) {
	if(on) this.submit.removeAttribute("disabled");
	//else this.submit.setAttribute("disabled","disabled");
}

// Browse Button aktiven/deaktivieren
flup_elem.setBrowseStatus = function(on) {
	for(var i=0; this.aBrowse.length; i++){
		if(on) this.aBrowse[i].removeAttribute("disabled");
		else this.aBrowse[i].setAttribute("disabled","disabled");
	}
}
// Browse Buttons initialisieren
flup_elem.initBrowse = function() {
	
	var thisFlup = this;
	for( var i=0; i < flup_elem.aBrowse.length; i++) {
		this.aBrowse[i].onclick = function() { 
			thisFlup.flashCall.startBrowse(this.id);
		};
		this.aBrowse[i].removeAttribute("disabled");	
	}
}
// Submit Button initialisieren
flup_elem.initSubmit = function() {
	var thisFlup = this;
	this.submit.onclick = function() { 
		// Required-fields hier pruefen, da die Func aus Behaviour.form deaktiviert wurde
		var required = document.getElementsByClassName('js-required');
		var isCorrect = true;
		for(var i=0;i<required.length;i++) {
			if(required[i].tagName == 'INPUT' && required[i].type == 'radio') {
				var radioGroup = document.getElementsByName(required[i].name);
				
				var isCorrect = false;
				for(var j=0;j<radioGroup.length;j++) {
					if(radioGroup[j].checked) isCorrect = true;
					radioGroup[j].onclick = function() {
						this.parentNode.parentNode.style.background = '';	
					}
				}
				
				if(!isCorrect) {
					radioGroup[0].parentNode.parentNode.style.background = '#fcd6d6';
				} else {
					radioGroup[0].parentNode.parentNode.style.background = '';
				}
				
			} else {
				var check = checkFormField(required[i]);
			}
			if(!check) isCorrect = false;
		}		
					
		if(isCorrect) {
			this.setAttribute("disabled","disabled");
			if(document.getElementById('text-flup-0').value != ''){
				thisFlup.flashCall.startUpload();
			}
			else {
				sendPostRequest(flup_elem.flupForm);
			}
		}
	};
}
// Reset Button initialisieren
flup_elem.initReset = function() {
	var thisFlup = this;
	flup_elem.resetBtn.onclick = function() {
		// flash browser reset
		for(var i=0; i<flup_elem.aText.length; i++){
			flup_elem.aText[i].value = "";
			flup_elem.aText[i].removeAttribute("title");
		}
		document.getElementById('flup-file-list').innerHTML = '';
		document.getElementById('flup-file-list').style.display = 'none';
		
		var msg = document.getElementById('flup-message');
		msg.innerHTML = "Keine Datei ausgew&auml;hlt";
		// flash fileRef reset
		thisFlup.flashCall.resetBrowse(null);
		// submit deaktivieren
		//flup_elem.submit.disabled = "disabled";
		flup_elem.flupForm.reset();
	};
}

flup_elem.testSWF = function () {
	var id = "flup-test";
	var tempDiv = null;
	
	// Flash test DIV erstellen falls nicht vorhanden
	if( typeof document.getElementById(id) == "object") {
		tempDiv = document.createElement("div");
		tempDiv.id = id;
		tempDiv.className = "flup-flash-test";
		document.getElementById('content-container-left').appendChild(tempDiv); // jobonline spezifisch
		//document.getElementsByTagName("body")[0].appendChild(tempDiv);
	}
	
	if( flup_elem.hasFlash == -1) { 
		flup_elem.soTest = new SWFObject(flup_config.flupUrl + "/FlashTest.swf", "flup-flash-Test", "16", "16", "8", "#ffffff", false);
		flup_elem.soTest.addParam("menu", "false");
		flup_elem.hasFlash = (flup_elem.soTest.write(id) ? 1 : 0);
		if(tempDiv != null ) {
		   tempDiv.parentNode.removeChild(tempDiv);
		}
		else if(flup_elem.hasFlash == 1) {
			var tempFlash = cssQuery("#flup-flash-Test");
			tempFlash.parentNode.removeChild(tempFlash);
		}
	} 
	
}

// FLUP initialisieren
function initFlup() {
	flup_elem.flashCall = null;
	flup_elem.flashDivName = "flupMeUp";
	flup_elem.flashId = "flashflupMeUp";
	flup_elem.flashDiv = document.getElementById(flup_elem.flashDivName) || null;
	flup_elem.so = null;
	flup_elem.config = new Object();
	flup_elem.config.maxFileSize = "300";

	// Flash DIV erstellen falls nicht vorhanden
	if( flup_elem.flashDiv == null) {
		var tempDiv = document.createElement("div");
		tempDiv.id = flup_elem.flashDivName;
		tempDiv.className = "flup-flash";
		
		// jobonline spezifisch
		try {
			var myHelpDiv = document.getElementById('locatorHelper').appendChild(tempDiv);
		} catch(e) {}
		
		flup_elem.flashDiv = tempDiv;
	}
}
// SWF schreiben
function createSWF(swfDiv) {
	/*	SWF div 
	
		<div id="swfDiv"><p>F&uuml;r diese Aktion ist der <a 
		href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" 
		target="_blank">Macromedia Flash Player 8</a> erforderlich</p></div>
	*/
	
	if( flup_elem.so == null) {
		
		flup_elem.so = new SWFObject(flup_config.flupUrl + "/upload.swf?" + Math.random(), flup_elem.flashId, "16", "16", "8", "#ffffff", false);
		flup_elem.so.addParam("menu", "false");
		//flup_elem.so.addParam("allowScriptAcces", "always");
		flup_elem.so.addVariable("CFUUID", flup_config.cfuuid);
		flup_elem.so.addVariable("jsInit", "flupInit");
		flup_elem.so.addVariable("jsCallback", "flupCallback");
		flup_elem.so.addVariable("fileExtensions", "*.jpg");
		flup_elem.so.addVariable("fileInfo", "Bilder");
		flup_elem.so.addVariable("CFTOKEN", flup_config.token);
		flup_elem.so.addVariable("maxFileSize", flup_elem.config.maxFileSize);
		flup_elem.so.addVariable("uploadUrl", flup_config.flupUrl + "/upload.cfm");
		flup_elem.so.addVariable("multiUpload", "true");
		flup_elem.so.addVariable("singleBrowse", "false");
		flup_elem.so.write('locatorHelper');
	}
	else {
		flup_elem.flupInit();	
	}
}


/* Nachdem das Flash geladen ist, wird aus dem Flash initalize aufgerufen */
function flupInit(config) {
	var t = cssQuery("#debugtext")[0];
	
	var newConfig = new Object();

	newConfig.singleBrowse = false;
	newConfig.multiUpload = true;
	newConfig.maxFileSize = 10*1024;	// in KB z.B. 100 = 100kb, 3*1024 = 3MB
	newConfig.fileTypes = [
						   {description: "Dokumente", extension: "*.doc;*.pdf;*.xls;*.ppt"},
						   {description: "Bilder", extension: "*.jpg;*.jpeg;*.gif;*.png"}, 
						   {description: "Komprimierte Dateien", extension: "*.zip;*.rar;*.sit"}
						   ];
	flup_elem.init(newConfig);	
	return (newConfig);
}

/*	Callback Funktion (eventObj:Object) */
function flupCallback(eventObj) { 
	/*					
	eventObj.type				Event Type
	eventObj.bytesTotal			gesamt Bytes der upload files
	eventObj.bytesTotalText		gesamt Bytes der upload files als Text z.B. 12Kb, 30Mb, 420b
	eventObj.bytesLoaded		gesamt Bytes der upload files
	eventObj.bytesLoadedText	gesamt Bytes der upload files als Text z.B. 12Kb, 30Mb, 420b
	eventObj.percent			Prozent der hochgeladenen Bytes = 100
	eventObj.filesIgnored		Anzahl der Dateien, welche beim Browse nicht hinzugefuegt wurden (zu Gross)
	eventObj.filesTotal			gesamt anzahl der Dateien
	eventObj.filesLoaded		anzahl der geladenen Dateien
	eventObj.fileList			String mit Ausgewaehlten Files
	eventObj.info				Meldungen,  bei Type "error" Fehlermeldung
	*/		
		
	var msg = document.getElementById('flup-message');
	var br = '<br/>';
		
	eventObj.info = (eventObj.info == "null" ? "" : eventObj.info);
	msg.innerHTML = ""; // eventObj.type; // + br + eventObj.info.split("\n").join("<br>");
	var statusMsg =  br + eventObj.percent + "%" + br + eventObj.filesLoaded + "/" + eventObj.filesTotal + " Datei(en) (" + eventObj.bytesLoadedText + "/ " + eventObj.bytesTotalText + ")";

	switch (eventObj.type) {
		case "browse":
		case "clear":
			// File-browse wurde ausgefuehrt
			if( flup_elem.aText[0] ) {
				flup_elem.aText[0].value = flup_elem.aText[0].title = eventObj.fileList.join(",");
				
				if( $('flup-file-list') ) {
					$('flup-file-list').innerHTML = '<div class="flup-file-list-msg">' + eventObj.filesTotal + " Datei" + (eventObj.filesTotal == 1 ? "" : "en") + " ausgew&auml;hlt.</div>";

					$('flup-file-list').style.display = eventObj.fileList.length ? '' : 'none';

					var divfilelist = $('flup-file-list');
					for( var i = 0; i < eventObj.fileList.length; i++) {
						// DIV einfuegen
						var div = document.createElement("div");
						div.id = "flup-file-list-" + i;
						div.className = "clear";
						div.innerHTML = '<span>' + eventObj.fileList[i] + '</span><a href="javascript://Datei entfernen;" id="flup-file-list-a-' + i + '" title="Datei entfernen"><span>l&ouml;schen</span></a>';
						divfilelist.appendChild(div);
						$('flup-file-list-a-' + i).onclick = function() {
							flup_elem.flashCall.resetBrowse(this.id.split("-")[4]);
						}
						$('flup-file-list-a-' + i).onmouseover = function() {
							this.parentNode.firstChild.className = 'flup-highlight';
							this.className = 'flup-highlight';
						}
						$('flup-file-list-a-' + i).onmouseout = function() {
							this.parentNode.firstChild.className = '';
							this.className = '';
						}
						
					}
				}
			}
			flup_elem.setSubmitStatus(eventObj.fileList.length > 0);
			
			//msg.innerHTML += eventObj.filesTotal + " Datei" + (eventObj.filesTotal == 1 ? "" : "en") + " ausgew&auml;hlt.";
			if (eventObj.filesIgnored) {
				msg.innerHTML += "Nur Dateien kleiner als " + flup_elem.config.maxFileSize + "KB sind erlaubt.";
				msg.innerHTML += br + eventObj.filesIgnored + (eventObj.filesIgnored == 1 ? " Datei wurde" : " Dateien wurden") + " ignoriert.";
			};
				
			break;
		case "cancel":
			// file browse wurde abgebrochen
			break;
		case "start":
			/*	upload ist gestartet
			*/
			// Jobonline Loading...
			showLoadingMsg();
			// Button disable
			flup_elem.setBrowseStatus(false);
			flup_elem.setSubmitStatus(false);
			msg.innerHTML += statusMsg;
			break;
		
		case "progress":
			/* 
				Upload laeuft
			*/
			msg.innerHTML += statusMsg;
			
			break;

		case "complete":
			/*
				Upload ist fertig
			*/
			// Jobonline Loading...
			hideLoadingMsg();
			
			msg.innerHTML +=  br + eventObj.percent + "%" + br + eventObj.filesTotal + " Datei(en) geladen (" + eventObj.bytesTotalText + ")";
			flup_elem.aText[0].value = flup_elem.aText[0].title = "";
			
			// Formular senden
			sendPostRequest(flup_elem.flupForm);
			break;

		case "filecomplete":
			/*
				Upload einer Datei ist fertig
			*/
			msg.innerHTML += statusMsg;
			break;

		case "error":
			/*
				Upload error
			*/
			
			msg.innerHTML += br + eventObj.info;
			msg.innerHTML += statusMsg;

			break;
	}
	
	return true;
}
// Browser-Check Hilfsfunktion
function isIE() {
	if (navigator.appName.indexOf("Microsoft") != -1) {
		return true;
	}
	else {
		return false;
	}
}


