/**
 * Javscripts für blikk/index.htm
 * 
 * @author ah <harald.angerer@schule.suedtirol.it>
 * @version 20101108
 * @package blikk
 */

/**
 * Globale Request-IDs
 */
var REQ_ID_USERONLINE = 100;
var REQ_ID_NEWSLETTER = 101;
var REQ_ID_LOGIN = 102;
var REQ_ID_UOL = 103;
var REQ_ID_SHOUTOUT = 104;
var REQ_ID_SHOUTLIST = 105;

/**
 * Konstants
 */
var ID_SHOUTFORM = 'mb_shoutform';
var ID_SHOUTTEXT = 'mb_shouttext';
var ID_SHOUTLIST = 'mb_shoutlist';
var ID_SHOUTAKTID = 'mb_shoutaktid';
var ID_SHOUTNAME = 'mb_shoutname';
var ID_UOL = 'mbuol';
var ID_UOLNUMBER = 'uol_number';
var ID_UOLTIMESPAN = 'uol_timespan';
var ID_UOLPAGE = 'uol_page';
var ID_UOLLOADER = 'mb_uolcont_loader';
var ID_UOLMAIN = 'mb_uolcont_all';
var ID_FACEBOOK = 'mbfacebook';
var ID_EMOTICONS = 'mb_shoutemoticoncont';

var PAR_SHOUTTIME = 5000;
var PAR_UOLTIME = 30000;

/**
 * Load json2.js if no JSON-Object exists
 */
var JSON;
if (!JSON) {
	_blikk.loadScript('json2.js');
}

/**
 * Die blikk-Onload-Funktionen
 */
function blikk_onLoadCustomRequests() {
	doLoginRequest();
	// addonfoucshandler für search und clear der Input-Felder
	if ($_get('main_head_search_input')) {
		_blikk.addHandler('onfocus','mh_search_input',function(){clearInput(this);},'INPUT');
		_blikk.addHandler('onblur','mh_search_input',function(){setInput(this,searchdefault);},'INPUT');
		setInput($_get('main_head_search_input'),searchdefault,true); 
	}
	if ($_get('mhs_loginuser')){
		_blikk.addHandler('onfocus','mh_login_input',function(){clearInput(this);},'INPUT');
		_blikk.addHandler('onblur','mh_login_input',function(){setInput(this,logindefault);},'INPUT');
		setInput($_get('mhs_loginuser'),logindefault,true); 
	}
	if ($_get('scholionuser')) {
		_blikk.addHandler('onfocus','scholioninput',function(){clearInput(this);},'INPUT');
		_blikk.addHandler('onblur','scholioninput',function(){setInput(this,scholionguest);},'INPUT');
		setInput($_get('scholionuser'),scholionguest,true); 
		setInput($_get('scholionpass'),scholionguestpass,true); 
	}
	// adding bubble-function (kids)
	if (scope == 'k') {
		_blikk.addHandler('onmouseover','bubblearea',swapbubble,'AREA');
		_blikk.addHandler('onmouseout','bubblearea',swapbubble,'AREA');
	}
	// user online
	sendRequest(_blikk.server + '/admin/tools/utils/httpreq_useronline.php?id=useronline&ws=blikk',REQ_ID_USERONLINE);
	// preload Loader-Image
	_blikk.layer.preload();
	// Shout-Box aktivieren, wenn vorhanden
	if ($_get(ID_SHOUTLIST)) {
		$_get(ID_SHOUTAKTID).value = '';
		sendRequest(_blikk.server + '/blikk/main/requests/httpreq_shout.php',REQ_ID_SHOUTLIST,getShoutPar(),REQUEST_POST);
		_blikk.setPeriodicalRequest(_blikk.server + '/blikk/main/requests/httpreq_shout.php',REQ_ID_SHOUTLIST,getShoutPar(),0,PAR_SHOUTTIME);
	}
	// UOL-request, wenn vorhanden
	if ($_get(ID_UOL)) {
		reqUserOnline(getUolPar());
		_blikk.setPeriodicalRequest(_blikk.server + '/blikk/main/requests/httpreq_uol.php',REQ_ID_UOL,getUolPar(),0,PAR_UOLTIME);
	}
	// asynchrones Laden der Facebook- und (@TODO:) Twitterscripts 
	if ($_get(ID_FACEBOOK)) {
	    var e = document.createElement('script'); e.async = true;
	    e.src = document.location.protocol + '//connect.facebook.net/' + languagefull + '/all.js#xfbml=1';
	    $_tag('head').appendChild(e);
	}
}

/**
 * Die blikk-custom-Responses
 * @param id:integer Request-ID
 */
function blikk_customProcessData(id) {
	var rText = xmlHttp[id].responseText;
	switch (id) {
		case REQ_ID_USERONLINE:
			$_get('main_foot_useronlinevalue').innerHTML = rText;
			break;
		case REQ_ID_NEWSLETTER:
			//alert(rText);
			if (rText != '') {
				_blikk.layer.viewLoader(layerconf);
				_blikk.layer.openOpacLayer(rText,layerconf);				
			}
			break;
		case REQ_ID_LOGIN:
			doLogin(rText);
			if (window.resize) {
				resize();
			}
			break;
		case REQ_ID_UOL:
			procUol(rText);
			break;
		case REQ_ID_SHOUTOUT:
			//alert(rText);
			break;
		case REQ_ID_SHOUTLIST:
			procShout(JSON.parse(rText));
			break;
	}
}

/**
 * Die Funktion stellt den Standard-Input-String wieder her
 * @param force:bool Auch, wenn der Inhalt gar nicht leer ist
 * @return void
 */
function setInput(obj,str,force) {
	if (obj.value == '' || force === true) {
		obj.value = str;
		$_addClass(obj.id,'mh_passiv');
	}
}

/**
 * Löscht den Input-String
 * @return void
 */
function clearInput(obj) {
	obj.value = '';
	$_removeClass(obj.id,'mh_passiv');
}

/**
 * Triggert einen Http-Request zum Einblenden des Newsletter-Formulars
 * @param send:bool Bei True (default) wird der Request gesendet, sonst als string zurückgegeben
 * @return string oder void
 */
function getnewsletter(send) {
	if (send == null) {
		send = true;
	}
	var parameter = _blikk.makeParameters();
	var email = '';
	if (doLogin.userdata) {
		email = doLogin.userdata.useraddress;
	} 
	var req = _blikk.server + '/blikk/main/requests/httpreq_newsletter.php?' + parameter + '&application=' + applicationid + '&bn=' + newsname + '&sub=cats&em=' + email;
	if (send) {
		sendRequest(req,REQ_ID_NEWSLETTER);
	} else {
		return req;
	}
}

/**
 * Triggert den Login-Request zum Anzeigen des Login-Zustands oder des Formularschalters
 * @return
 */
function doLoginRequest() {
	var parameters = _blikk.makeParameters();
	var nd = new Date;
	//sendRequest(_blikk.server + '/blikk/main/requests/httpreq_login.php?' + parameters + '&nocache=' + nd.getTime(),REQ_ID_LOGIN);
	sendRequest(_blikk.server + '/blikk/main/requests/httpreq_login.php?' + parameters,REQ_ID_LOGIN);
}

/**
 * Login-Return auswerten und Login anzeigen oder nicht
 * @param string Returntext, JSON-encoded;
 */
function doLogin(rettext) {
	var login = eval('(' + rettext + ')');
	if (login.logged_in) {
		// als statischen Wert merken
		doLogin.userdata = login.userdata;
		// Login ausblenden und Logout anzeigen
		$_get('logout_container').style.display = 'inline';
		$_get('register_container').style.display = 'none';
		$_get('logout').href = login.login_logout;
		if ($_get('main_head_search_login')) {
			$_get('main_head_search_login').style.display = 'none';
		}
		if ($_get('mhs_loginuser')) {
			$_get('mhs_loginuser').innerHTML = 'none';
		}
		if ($_get('mhs_username')) {
			$_get('mhs_username').innerHTML = login.userdata.username;
		}
		return;
	}
	if ($_get('side_login')) {
		_blikk.layer.show('side_login');
	}
	$_get('register_container').style.display = 'inline';
	$_get('register').href = login.login_register;
	if ($_get('main_head_search_login')) {
		$_get('main_head_search_login').style.display = 'block';
	}
	$_get('mhs_loginform').action = login.login_action;
}

/**
 * Die Funktion zeigt das Login-Formular an und merkt sich den Status
 */
function getlogin() {
	// position des Eingabefeldes ermitteln
	var mhs = $_get('main_head_search_login');
	var pos = _blikk.layer.findPos(mhs,false);
	var t = pos[1];
	var l = pos[0];
	var h = mhs.offsetHeight;
	var mhsl = $_get('mhs_loginfield');
	var test = $_get('_test');
	if (!_blikk.layer.scale.objs || !_blikk.layer.scale.objs['mhs_loginfield']) {
		mhsl.style.position = 'absolute';
		mhsl.style.top = t + 'px';
		mhsl.style.left = l + 'px';
		mhsl.style.visibility = 'hidden';
		mhsl.style.display = 'block';
		mhsl.step = 5;
		mhsl.type = 'down';
		mhsl.state = 'small';
		mhsl.lWidth = mhsl.offsetWidth;
		mhsl.lHeight = mhsl.offsetHeight;
	}
	_blikk.layer.scale(mhsl);
}

/**
 * Wrapper zum Schließen eines Request-Popups
 * @return void
 */
function closePopup() {
	_blikk.layer.closeOpacLayer();
}

/**
 * Wrapper zum Abschicken des Newsletter-Formulars mittels Request
 * @param form:string Name oder ID des Formulars
 * @return
 */
function doPost(form) {
	_blikk.postForm(form,REQ_ID_NEWSLETTER,getnewsletter(false));
}

/** 
 * Sendet den Request zur Ermittlung der aktuell eingeloggten Benutzer
 * 
 * @param pars:string Paramterstring
 */
function reqUserOnline(pars) {
	_blikk.layer.coverElements(ID_UOLMAIN,ID_UOLLOADER);
	sendRequest(_blikk.server + '/blikk/main/requests/httpreq_uol.php?' + pars,REQ_ID_UOL);
}

/** 
 * Verarbeitet die Request-Antwort auf die Ermittlung der eingeloggten User
 * 
 * @param html:string Paramterstring
 */
function procUol(html) {
	_blikk.layer.coverElements(ID_UOLLOADER,ID_UOLMAIN);
	_blikk.layer.replaceElement(ID_UOLMAIN,html);
	if (_blikk.periodRequester[REQ_ID_UOL]) {
		_blikk.periodRequester[REQ_ID_UOL].data = getUolPar();
		_blikk.freePeriodicalRequest(REQ_ID_UOL);
	}
}

/** 
 * User-Online-Action-Handler
 * 
 * @param obj:object Referentz auf das angeklickte Objekt
 * @TODO: noch mit sinnvoller Action zu füllen (z. B. Select ...)
 */
function uolAction(obj) {
	
}

/** 
 * Sendet den Shout-out-Request
 * 
 * @param formid:string ID des Formularelements
 */
function reqShoutOut() {
	_blikk.postForm(ID_SHOUTFORM,REQ_ID_SHOUTOUT);
	$_get(ID_SHOUTTEXT).value = '';
	return false;
}

/** 
 * Ermittelt die Shout-Parameter für den List-Request
 */
function getShoutPar() {
	return 'action=list&id=' + $_get(ID_SHOUTAKTID).value + '&shoutname=' + $_get(ID_SHOUTNAME).value;
}

/** 
 * Ermittelt die Shout-Parameter für den List-Request
 */
function getUolPar() {
	return 'number=' + $_get(ID_UOLNUMBER).value + '&timespan=' + $_get(ID_UOLTIMESPAN).value + '&page=' + $_get(ID_UOLPAGE).value + '&scope=' + scope + '&lang=' + language;
}

/** 
 * Schreibt die Shoutlist in das Listfenster und triggert den nächsten listrequest
 * 
 * @param JSON json 'lastid':Aktuelle DB-Id, 'html':HTML der Liste
 */
function procShout(json) {
	$_get(ID_SHOUTAKTID).value = json.lastid;
	if (json.html) {
		_blikk.layer.addElement(ID_SHOUTLIST,json.html);
		$_get(ID_SHOUTLIST).scrollTop = 100000;
	}
	_blikk.periodRequester[REQ_ID_SHOUTLIST].data = getShoutPar();
	_blikk.freePeriodicalRequest(REQ_ID_SHOUTLIST);
}

/**
 * Emoticonauswahl anzeigen
 * 
 * @param object me Aufrufendes Objekt
 */
function showEmoticons(me) {
	var ems = $_get(ID_EMOTICONS);
	if(!ems.style.top && me) {
		var pos = _blikk.layer.findPos(me,true);
		ems.style.top = pos[1]+'px';
		ems.style.left = pos[0]+'px';
	}
	ems.style.display = 'block';
	ems.style.visibility = 'hidden';
	ems.style.overflow = 'hidden';
	ems.step = 5;
	ems.type = 'up';
	_blikk.layer.scale(ems);
}



function findPos(element) {
//    element = $(element);
//
//    var layout = element.getLayout();

    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
      if (element) {
        if (element.tagName === 'BODY') break;
        var p = _blikk.layer.getStyle(element,'position');
        if (p && p !== 'static') break;
      }
    } while (element);

//    valueL -= layout.get('margin-top');
//    valueT -= layout.get('margin-left');

    return {top:valueT,left:valueL};
}


/**
 * Fügt ein Emoticon als Satzzeichenkürzel in die Textzeile ein
 * 
 * @param object Referenz auf das Emoticon-Image
 */
function insertEmoticon(me) {
	var st = $_get(ID_SHOUTTEXT);
	st.value += me.alt;
	showEmoticons();
	st.focus();
}

