// $Id: browser.js,v 1.1 2010/10/11 19:44:45 laluz Exp $
//
// Mobile7.Evolution Lib
// (c) Copyright 2010 Mobile7.Evolution.
//
// 
//

if ((typeof m7 == 'undefined') || (!m7)) {
	var m7 = {};
	m7._name = 'Mobile7.Evolution';
	m7._shortname = 'm7';
}

/**
 * create a namespace if not existing
 */
m7.namespace = function(ns) {
	var q = m7;

	ns = ns.split('.');
	for ( var i = (ns[0] == 'm7') ? 1 : 0; i < ns.length; i++) {
		q[ns[i]] = q[ns[i]] || {};
		q = q[ns[i]];
	}
	return q;
};

// util
m7.namespace('util');
m7.util.redirectBrowser = function(uri) {
	window.location = uri;
};

// net
m7.namespace('net');
m7.net.getXMLHttpRequest = function() {
	var _client = null;

	if (window.XMLHttpRequest)
		return new window.XMLHttpRequest;

	try {
		_client = new XMLHttpRequest(); // current browsers
	} catch (e) {
		// pre ie7
		try {
			_client = new ActiveXObject("MSXML2.XMLHTTP.3.0");
		} catch (e) {
			try {
				_client = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				_client = null;
			}
		}
	}
	return _client;

};
m7.net.send = function(uri, callback) {

	var _client = m7.net.getXMLHttpRequest();
	var _callback = callback;
	var _callCallback = function() {
		_callback.call(window, _client);
	};

	if (_client != null) {
		_client.open("GET", uri, true);
		_client.onreadystatechange = _callCallback;
		_client.send(null);
	}
};

// forum specific settings
m7.namespace('util');
m7.util.getChecked = function(formItem) {
	for ( var i = 0; i < formItem.length; i++) {
		if (formItem[i].checked)
			return formItem[i];
	}
};

m7.util.setVisible = function(elementId, flag) {
	try {
		var styleVal = flag ? 'visible' : 'hidden';
		var element = document.getElementById(elementId);
		element.style.visibility = styleVal;
	} catch (ex) {
		// ignore
	}
};

m7.util.reloadIframe = function(elementId, force) {
	try {
		var element = document.getElementById(elementId);
		element.contentWindow.location.reload(force);
	} catch (ex) {
		alert(ex);
	}
};

// //////////////////////////////////////
//
// forum specific settings
//
// //////////////////////////////////////
m7.namespace('forum');
m7.namespace('forum.ifc');
m7.forum.registerURI = 'http://www.sinclair-hoerspiele.de/forum/register_ext.php';
m7.forum.loginURI = 'http://www.sinclair-hoerspiele.de/forum/login_ext.php';
m7.forum.successURI = 'http://www.sinclair-hoerspiele.de/cms/registrierung-erfolgreich';
m7.forum.errDivId = 'myWorldRegistrationErr';
m7.forum.errLoginDivId = 'myWorldLoginErr';
m7.forum.iframeId = 'luebbeforum';
m7.forum.formId = 'myWorldRegistration';
m7.forum.formLoginId = 'myWorldLogin';
m7.forum.formLogoutId = 'myWorldLogout';
m7.forum.ERR_INTERNAL = "Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie Ihre Eingabe in k&uuml;rze nochmals.";

// interface codes
m7.forum.ifc = {
	SUCCESS : 200,
	VALIDATION_FAIL : 700,

	CODE : "code",
	TEXT : "text",
	ERRORS : "errors",

	ERROR_TEXT : {
		DEFAULT : m7.forum.ERR_INTERNAL,

		/** Kein Data-Parameter vorhanden */
		401 : m7.forum.ERR_INTERNAL,

		/** ext-id stimmt nicht überein */
		402 : m7.forum.ERR_INTERNAL,

		/** Falscher action-parameter */
		600 : m7.forum.ERR_INTERNAL,

		/** Der Benutzername konnte nicht überprüft werden. */
		799 : m7.forum.ERR_INTERNAL,

		/** Registrierung fehlgeschlagen */
		800 : m7.forum.ERR_INTERNAL,

		/** Registrierung fehlgeschlagen */
		801 : m7.forum.ERR_INTERNAL,

		/** Keine Get-Parameter vorhanden */
		900 : m7.forum.ERR_INTERNAL,

		/** Validierungsfehler, details in errors */
		700 : "Die Registrierung konnte nicht durchgef&uuml;hrt werden. Bitte beachte die folgenden Hinweise:"
	}

};

m7.forum.formatError = function(text) {
	return '<li>' + text + '</li>';
};

m7.forum.onHandleError = function(errData, elementId) {
	if (errData != null) {
		var div = document.getElementById(elementId);
		var errMessage;

		if (errData.code == m7.forum.ifc.VALIDATION_FAIL) {
			errMessage = '<span>' + m7.forum
					.formatError(m7.forum.ifc.ERROR_TEXT[700]) + '</span>';
			errMessage += '<ul>';
			if (errData[m7.forum.ifc.ERRORS]) {
				for ( var i = 0; i < errData[m7.forum.ifc.ERRORS].length; i++) {
					// add iterated errors
					var errText = errData[m7.forum.ifc.ERRORS][i][m7.forum.ifc.TEXT];
					errMessage += m7.forum.formatError(errText);
				}
			}
			errMessage += '</ul>';
		} else {
			var errText = m7.forum.ifc[errData.code];

			if (!errText || !(typeof errText == 'undefined'))
				errText = m7.forum.ifc.ERROR_TEXT.DEFAULT;

			errMessage = '<span>' + errText + '</span>';
		}

		div.innerHTML = errMessage;

		window.scrollTo(div.offsetLeft, div.offsetTop);
	}
};

m7.forum.onHandleRegisterResult = function(client) {
	if (client.readyState != 4)
		return;

	var resultData = {
		code : -1
	};

	if (client.status == 200) {
		try {
			var evalData = eval('(' + client.responseText + ')');
			resultData = evalData;
		} catch (ex) {
			// ignore
		}
	}

	if (resultData.code == m7.forum.ifc.SUCCESS) {
		m7.util.redirectBrowser(m7.forum.successURI);
	} else {
		m7.forum.onHandleError(resultData, m7.forum.errDivId);
	}

};

m7.forum.onSubmitRegister = function() {
	var form = document.getElementById(m7.forum.formId);

	var jsonData = '{"username":"' + mix_ext_data(form["username"].value) + '",';
	jsonData += '"lieblingsgenre":"' + mix_ext_data(form["lieblingsgenre"].options[form["lieblingsgenre"].selectedIndex].value) + '",';
	jsonData += '"anrede":"' + mix_ext_data(m7.util.getChecked(form["anrede"]).value) + '",';
	jsonData += '"email":"' + mix_ext_data(form["email"].value) + '",';
	jsonData += '"passwort":"' + mix_ext_data(form["passwort"].value) + '",';
	jsonData += '"passwortBestaetigung":"' + mix_ext_data(form["passwort_bestaetigung"].value) + '",';
	jsonData += '"vorname":"' + mix_ext_data(form["vorname"].value) + '",';
	jsonData += '"nachname":"' + mix_ext_data(form["nachname"].value) + '",';
	jsonData += '"strasse":"' + mix_ext_data(form["strasse"].value) + '",';
	jsonData += '"hausnummer":"' + mix_ext_data(form["hausnummer"].value) + '",';
	jsonData += '"plz":"' + mix_ext_data(form["plz"].value) + '",';
	jsonData += '"ort":"' + mix_ext_data(form["ort"].value) + '",';
	jsonData += '"myWorldAccepted":"' + mix_ext_data(form["myWorld_accepted"].value) + '",';
	jsonData += '"myWorldBonussystem":"' + mix_ext_data(form["myWorld_bonussystem"].value) + '"}';

	var uriData = "?action=" + form["action"].value + "&data="
			+ form["ext_id"].value + "_" + jsonData;

	m7.net
			.send(m7.forum.registerURI + uriData,
					m7.forum.onHandleRegisterResult);
};

m7.forum.onHandleLoginResult = function(client) {
	if (client.readyState != 4)
		return;

	var resultData = {
		code : -1
	};

	if (client.status == 200) {
		try {
			var evalData = eval('(' + client.responseText + ')');
			resultData = evalData;
		} catch (ex) {
			// ignore
		}
	}

	if (resultData.code == m7.forum.ifc.SUCCESS) {
		m7.util.setVisible(m7.forum.formLoginId, false);
		m7.util.setVisible(m7.forum.formLogoutId, true);
		m7.util.reloadIframe(m7.forum.iframeId, true);
	} else {
		m7.forum.onHandleError(resultData, m7.forum.errLoginDivId);
	}

};

m7.forum.onHandleLogoutResult = function(client) {
	if (client.readyState != 4)
		return;

	var resultData = {
		code : -1
	};

	if (client.status == 200) {
		try {
			var evalData = eval('(' + client.responseText + ')');
			resultData = evalData;
		} catch (ex) {
			// ignore
		}
	}

	if (resultData.code == m7.forum.ifc.SUCCESS) {
		m7.util.setVisible(m7.forum.formLoginId, true);
		m7.util.setVisible(m7.forum.formLogoutId, false);
		m7.util.reloadIframe(m7.forum.iframeId, true);
	} else {
		m7.util.setVisible(m7.forum.formLoginId, false);
		m7.util.setVisible(m7.forum.formLogoutId, true);
	}

};

m7.forum.onHandleCheckLoginStatusResult = function(client) {
	if (client.readyState != 4)
		return;

	var resultData = {
		code : -1
	};

	if (client.status == 200) {
		try {
			var evalData = eval('(' + client.responseText + ')');
			resultData = evalData;
		} catch (ex) {
			// ignore
		}
	}

	if (resultData.code == m7.forum.ifc.SUCCESS) {
		m7.util.setVisible(m7.forum.formLoginId, false);
		m7.util.setVisible(m7.forum.formLogoutId, true);
	} else {
		m7.util.setVisible(m7.forum.formLoginId, true);
		m7.util.setVisible(m7.forum.formLogoutId, false);
	}

};

m7.forum.onSubmitLogin = function() {
	var form = document.getElementById(m7.forum.formLoginId);

	var jsonData = '{"username":"' + mix_ext_data(form["username"].value) + '",';
	jsonData += '"password":"' + mix_ext_data(form["password"].value) + '"}';

	var uriData = "?action=" + form["action"].value + "&data="
			+ form["ext_id"].value + "_" + jsonData;

	m7.net.send(m7.forum.loginURI + uriData, m7.forum.onHandleLoginResult);
};

m7.forum.onSubmitLogout = function() {
	var form = document.getElementById(m7.forum.formLogoutId);
	var uriData = "?action=" + form["action"].value + "&data="
			+ form["ext_id"].value;

	m7.net.send(m7.forum.loginURI + uriData, m7.forum.onHandleLogoutResult);
};

m7.forum.onCheckLoginStatus = function() {
	var uriData = "?action=check_loggedin";

	m7.net.send(m7.forum.loginURI + uriData,
			m7.forum.onHandleCheckLoginStatusResult);
};

