﻿//////////////////////////////////////////////////////////////////////////////////////////////////////////
// KLASSE JSTRANSLATION
// ÜBERSETZUNGSKLASSE FÜR JAVASCRIPT
// DER SERVER GENERIERT FOLGENDES KONSTRUKT AUF DIE SEITE:
//
//      { "Properties":[
//            { "PROP":"ja", "VAL":"TODO->NEED TRANS: ja", "MEMBER":"JA", "NS":"Der Namespace zum Feld"},
//            { "PROP":"nein", "VAL":"TODO->NEED TRANS: nein", "MEMBER":"NEIN", "Der Namespace zum Feld"}
//         ]
//      }
//
// Die Funktionen TransByProperty, TransByMember können dann dazu verwendet werden um Übersetzungen
// zu ermitteln.
//
// Beispiel:
//
// var trans1 = TransByProperty("speichere mich");
// var trans2 = TransByProperty("speichere mich", "[NAMESPACE - Übersetzung aus bestimmten Namespace]");
// var trans3 = TransByMember("JA");
// var trans4 = TransByMember("JA", "[NAMESPACE - Übersetzung aus bestimmten Namespace]");
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/// <reference path="jquery-1.3.2.min-vsdoc.js" />


var __JsTranslation_WinVarName = "__#OBJECT#__JsTranslation";

// Instanziert das JsTranslation (Daten) anhand eines JSON - Objekts
JsTranslation = function(jsonlangobj) {

	this.win = window;
	this.selfname = __JsTranslation_WinVarName;
	this.win[this.selfname] = this;

	this.isCorrectInitialized = false;

	this.__msg_error_invalid_json_object = "INTERNAL ERROR! INVALID JSON OBJECT!";
	this.__msg_no_trans_prefix = "$";


	// Initialisierungsvorgang
	try {
		this.translations = $.json.decode(jsonlangobj);
		this.isCorrectInitialized = true;
	} catch (err) {
		alert(this.__msg_error_invalid_json_object + " [" + err.description + "]");
	}

	// Hilfsfunktion - prüft ob die Klasse richtig initialisiert wurde.
	this.fct_check_correct_initialized = function() {
		if (this.isCorrectInitialized == false) {
			alert(this.__msg_error_invalid_json_object);
			return;
		}
	}
}

// Liefert die Übersetzung anhand des Properties
// Es wird einfach nach dem erstbesten Vorkommen im Array gesucht
// Wird ein Namespace angegeben wird dieser auch berücksichtigt
JsTranslation.prototype.GetTransByProperty = function(property, ns) {

	this.fct_check_correct_initialized();

	for (var cnt = 0; cnt < this.translations.Properties.length; cnt++) {
		if (Url.decode(this.translations.Properties[cnt].PROP) == property) {
			if (ns != null && ns != undefined) {
				if (this.translations.Properties[cnt].NS == ns) {
					return this.translations.Properties[cnt].VAL;
				}
			} else {
				return this.translations.Properties[cnt].VAL;
			}
		}
	}

	return this.__msg_no_trans_prefix + property;
}

// Liefert die Übersetzung anhand des Members
// Es wird einfach nach dem erstbesten Vorkommen im Array gesucht
// Wird ein Namespace angegeben wird dieser auch berücksichtigt
JsTranslation.prototype.GetTransByMember = function(member, ns) {

	this.fct_check_correct_initialized();

	for (var cnt = 0; cnt < this.translations.Properties.length; cnt++) {
		if (this.translations.Properties[cnt].MEM == member) {
			if (ns != null && ns != undefined) {
				if (this.translations.Properties[cnt].NS == ns) {
					return this.translations.Properties[cnt].VAL;
				}
			} else {
				return this.translations.Properties[cnt].VAL;
			}
		}
	}

	return this.__msg_no_trans_prefix + member;
}

// Erstellt eine neue Instanz des Objekts
JsTranslation.CreateInstance = function() {

	var transobj = window[__JsTranslation_WinVarName];
	if (transobj == null) {
		transobj = new JsTranslation('{"Properties":[]}');
	}

	return transobj;
}

// Arbeitet mit der Klasse JsTranslation und ruft die Funktion GetTransByProperty auf.
function TransByProperty(property, ns) {
	return JsTranslation.CreateInstance().GetTransByProperty(property, ns);
}

// Arbeitet mit der Klasse JsTranslation und ruft die Funktion GetTransByMember auf.
function TransByMember(member, ns) {
	return JsTranslation.CreateInstance().GetTransByMember(member, ns);
}
