/**
* agora.js Javascripts for agora
* @author: ngrhldm24@schule.suedtirol.it
* @version: 20090624
*
*/

/**
 * Http-Request-IDs
 */
var AGORAREQ_POPUP = 200;
var AGORAREQ_CHECKUPLOAD = 204;
var AGORAREQ_REQIMAGE = 206;

/**
 * Tiny MCE initvars: Können nicht mit Frichtext im Template definiert werden,
 * da im IE ein mittels Httprequest nachgeladener Skriptteil nicht ausgeführt
 * wird.
 */
switch (scope) {
	case 'kids':
		var scope_tinymce_init = {
			theme : "advanced",
			skin : 'lly',
			skin_variant : scope,
			language : language,
			plugins : "paste,emotions",
	        paste_auto_cleanup_on_paste : true,
			theme_advanced_buttons1 : "bold,italic,|,justifyleft,justifycenter,justifyright,|,bullist,removeformat,|,forecolor,backcolor,|,link,unlink,emotions,charmap",
			theme_advanced_buttons2 : "",
			theme_advanced_buttons3 : "",
			theme_advanced_toolbar_location : "top",
			theme_advanced_toolbar_align : "left",
			theme_advanced_statusbar_location : "none",
			content_css : "../blikk/blikk_css/kids/blikk.css",
			mode : "none"
		};
		break;
	case 'teens':
		var scope_tinymce_init = {
			theme : "advanced",
			skin : 'lly',
			skin_variant : scope,
			language : language,
			plugins : 'paste,emotions',
	        paste_auto_cleanup_on_paste : true,
			theme_advanced_buttons1 : "bold,italic,|,justifyleft,justifycenter,justifyright,|,bullist,removeformat,|,forecolor,backcolor,|,link,unlink,emotions,charmap",
			theme_advanced_buttons2 : '',
			theme_advanced_buttons3 : '',
			theme_advanced_toolbar_location : "top",
			theme_advanced_toolbar_align : "left",
			theme_advanced_statusbar_location : "none",
			content_css : "../blikk/blikk_css/teens/blikk.css",
			mode : "none"
		};
		break;
	default:
		var scope_tinymce_init = {
			theme : "advanced",
			skin : 'lly',
			skin_variant : scope,
			language : language,
			plugins : 'paste,emotions',
	        paste_auto_cleanup_on_paste : true,
			theme_advanced_buttons1 : "bold,italic,|,justifyleft,justifycenter,justifyright,|,bullist,removeformat,|,forecolor,backcolor,|,link,unlink,emotions,charmap",
			theme_advanced_buttons2 : '',
			theme_advanced_buttons3 : '',
			theme_advanced_toolbar_location : "top",
			theme_advanced_toolbar_align : "left",
			theme_advanced_statusbar_location : "none",
			content_css : "../blikk/blikk_css/adults/blikk.css",
			mode : "none"
		};
}

/**
 * Initialisierung des Tiny MCE
 */
try {tinyMCE.init(scope_tinymce_init);} catch(e) {}

/**
 * Definitin der Editor-Eigenschaften und
 * in IE6 Seite nach oben scrollen
 */
var layerconf = {	dragbox_id : 'popup',
		 			dragbox_grabber : 'popup_title',
		 			visibility : 'hidden',
		 			scrolltotop : _blikk.isIE6 ? true : false
		 		};

/**
 * calling post-popup via httprequest
 */
function agora_callPost(postaddress) {
	if (postaddress) {
		// Loading ... anzeigen
		_blikk.layer.viewLoader(layerconf);
		var request = postaddress + '&reqid=' + AGORAREQ_POPUP;
		//alert(request);
		sendRequest(request,AGORAREQ_POPUP);
	}
	return false;
}

/**
 * Opens Editor for Posting or refreshes the page
 * if URL was the response
 */
function agora_openEditor(responseText) {
	if (responseText != '') {
		if (responseText.indexOf('http://') == 0) {
			agora_closeEditor();
			// Loading ... anzeigen
			_blikk.layer.viewLoader(layerconf);
			window.location.replace(responseText);
		} else {
			if ($_get('popup_richtextarea')) {
				tinyMCE.execCommand('mceFocus', false,'popup_richtextarea');
				tinyMCE.execCommand('mceRemoveControl', false, 'popup_richtextarea',true);
			}
			// evtl. Attachment-Selections löschen
			_blikk.layer.resetSels();
			_blikk.layer.hide('blikk_loader');
			_blikk.layer.openOpacLayer(responseText,layerconf);
			$_set("javascript:agora_closeEditor();",'popup_closer','href');
			if ($_get('popup_richtextarea')) {
				tinyMCE.execCommand('mceAddControl', false, 'popup_richtextarea');
				//tinyMCE.execCommand('mceFocus', false,'popup_richtextarea'); // troubles with tinyMCE 3.3.8
			}
			$_get('opac_box_layer').style.visibility = 'visible';
		}
	}
}

/**
 * Close Editor for Posting
 */
function agora_closeEditor() {
	try { tinyMCE.execCommand('mceRemoveControl', false, 'popup_richtextarea',true); } catch(e) {}
	_blikk.layer.closeOpacLayer();
	// stoppt evtl. laufende Updater
	_blikk.stopPeriodicalRequest();
}

/**
 * Saving the Form via Httprequest
 */
function agora_savePost(formid) {
	//alert(tinyMCE.activeEditor.getContent());
	try {
		tinyMCE.triggerSave();
		tinyMCE.execCommand('mceFocus', false,'popup_richtextarea');
		tinyMCE.execCommand('mceRemoveControl', false, 'popup_richtextarea',true);
	} catch(e) {}
	_blikk.postForm(formid,AGORAREQ_POPUP);
	// Loading ... anzeigen
	_blikk.layer.viewLoader(layerconf);
}

/**
 * ------------------- Attachment functions ---------------------------------------------
 */


/**
 * Switch to attachment panel and back
 * @param string direction next or back
 */
function agora_attSwitch(formid,direction) {
	$_get('sendbutton').name = direction;
	agora_savePost(formid);
}

/**
 * Die Funktion startet einen Dateiupload und initiiert
 * wiederholte httprequests zur Ermittlung des Upload-Status
 * 
 * @param string formname Name des Uploadformulars
 * @param string session Eindeutige Session-ID
 * @param string uploaddir Pfad zum Uploadverzeichnis
 */
function agora_uploadRequester(formname,session,uploaddir) {
	// request starten
	_blikk.fileUpload('agora/httprequests/uploadresponse.php',formname,session,uploaddir,AGORAREQ_CHECKUPLOAD);
	// progressanzeige
	_blikk.layer.coverElements('popup_uploadformpart','popup_uploadresponsepart');
	// buttons deaktivieren
	$_get('popup_buttonattdel').disabled = true;
	$_get('popup_buttonback').disabled = true;
	$_get('popup_buttonfinish').disabled = true;
}

/**
 * Die Funktion bricht einen laufenden Upload ab - die Reaktion
 * erfolgt erst nach dem nächsten periodischen Request
 */
function agora_uploadCanceler(session) {
	// @todo: sicherheitsabfrage?
	// request starten
	var filename = $_get('popup_progress').innerHTML;
	sendRequest('agora/httprequests/uploadresponse.php',AGORAREQ_CHECKUPLOAD,'sid='+session+'&filename='+filename+'&cancel=1',REQUEST_POST);
	// Button aendern
	_blikk.layer.coverElements('popup_uploadcancel','popup_uploadrepeat');
}

/**
 * Die Funktion stellt die File-Upload-Auswahl wieder her
 */
function agora_uploadRepeater() {
	$_get('popup_fileinput').value = '';
	_blikk.layer.coverElements('popup_uploadresponsepart','popup_uploadformpart');
	_blikk.layer.coverElements('popup_uploadrepeat','popup_uploadcancel');
	$_get('popup_progress').innerHTML = $_get('popup_uploadMsgstart').innerHTML;
	$_get('popup_progress').style.backgroundPosition = '-100% -100%';
}

/**
 * Die Funktion zeichnet den Fortschrittsbalken, gibt den Uploadstatus in Prozent aus
 * und stellt ggf. eine Fehlermeldung dar. Nach erfolgreichem Abschluss des Uploads werden die 
 * Sendebutton aktiv gestellt und die Vorbereitungen für einen evtl. neuen Upload
 * getroffen.
 * 
 * @param int id ID des periodischen Upload-Requests
 * @param json json Json-Objekt der Antwort (vgl. agora/httprequests/uploadresponse.php):
 * 		z.B.: {"sid":"d092eea2a85c2254d4223021c934836bagoraupload",
 * 				"filename":"gyc591r.jpg",
 * 				"total_size":"40866",
 * 				"status":"ok",
 * 				"progress":0,
 * 				"current_size":0}
 */
function agora_uploadResponder(id,json) {
	// json auswerten
	var ret = eval('(' + json + ')');
	// error-handling
	if (ret.status == 'error') {
		//error?
		var errnum = ret.error_msg.substr(0,ret.error_msg.indexOf('::'));
		if (errnum == '100' || errnum == '1') {
			$_get('popup_progress').innerHTML = $_get('popup_uploadError' + errnum).innerHTML;
		} else {
			$_get('popup_progress').innerHTML = $_get('popup_uploadError').innerHTML + errnum;
		}
		_blikk.stopPeriodicalRequest(id);
		_blikk.layer.coverElements('popup_uploadcancel','popup_uploadrepeat');
		// buttons aktivieren
		$_get('popup_buttonattdel').disabled = false;
		$_get('popup_buttonback').disabled = false;
		$_get('popup_buttonfinish').disabled = false;
		return;
	}
	// fertig?              
	if (ret.progress >= 100 || ret.progress=='done') {
		ret.progress = 100;
		_blikk.stopPeriodicalRequest(id);
		//_blikk.layer.coverElements('popup_uploadcancel','popup_uploadrepeat');
		// buttons aktivieren
		//$_get('popup_buttonback').disabled = false;
		//$_get('popup_buttonfinish').disabled = false;
		// upload-Liste aktualisieren und Upload-Auswahl wiederherstellen
		agora_attSwitch('agorapost','refresh');
	} else {
		// nächsten periodical Request wieder frei geben
		_blikk.freePeriodicalRequest(id);
	}
	// Dateinamen und Balken
	var progwidth = parseInt($_get('popup_progress').style.width);
	var progdisplace = parseInt(((progwidth * ret.progress) / 100) - progwidth);
	$_get('popup_progress').innerHTML = ret.filename + ' (' + ret.progress + '%)';
	$_get('popup_progress').style.backgroundPosition = progdisplace + 'px center';

}

/**
 * Die Funktion ruft die _blikk.select-Funktionen mit dem
 * multiple=true-Parameter auf
 * 
 * @param object obj Das angeklickte Objekt
 */
function agora_select(obj) {
	_blikk.layer.select(obj.parentNode.childNodes,obj,'popup_atttable_row_sel','popup_atttable_row_desel',true,'input');
}

/**
 * Die Funktion baut ein Zitat in den Originaltext ein.
 * @param integer htmlflag 0 = normales Textarea, 1 = RichText
 */
function agora_cite(htmlflag) {
	// trim citetext
	var citetext = $_get('popup_citetext').innerHTML.replace(/^\s+/,'').replace(/\s+$/,'');
	if (htmlflag == 0) {
		// &gt; und &lt; durch >< ersetzen
		$_get('popup_bodytextarea').value += citetext.replace(/\&gt;/g,'>').replace(/\&lt;/g,'<');
	} else {
		tinyMCE.execCommand('mceInsertContent',false,citetext);
	}
	return false;
}

/**
 * Die Funktion setzt einen Httprequest zur Anzeige eines Bildes ab
 * @param string src Vollständiger Pfad zur Datei
 * @param string scope Bereich (k|t|a)
 * @param integer w Bildbreite
 * @param integer h Bildhoehe
 */
function agora_reqImage(src,scope,w,h) {
	var url = _blikk.decodeURL();
	sendRequest('agora/httprequests/getimage.php?bn=' + url.bn + '&scope=' + scope + '&img=' + src + '&w=' + w + '&h=' + h + '&lang=' + url.lang,AGORAREQ_REQIMAGE);
}

/**
 * Die Funktion zeigt das mittels Httprequest geholte Bild (ggf. zusammen mit Html-Einbettung)
 * als "Opac"-Overlay an.
 * @param string html Request-Antowort als Html-Code
 */
function agora_openImage(html) {
	if (html) {
		_blikk.layer.openOpacLayer(html);
	}
}

/**
 * Die Funktion schließt das mittels Overlay angezeigt Bild
 */
function agora_closeImage() {
	_blikk.layer.closeOpacLayer();
}



