var TQ = Object();

/******************************************************************************
* TOOLS
******************************************************************************/
TQ.Tools = new Object();
TQ.Tools = {
	submitForm: function(formElementName) {
		var formularElement;
		var result;

		if(typeof(formElementName) == "string") {
			// id of element
			formularElement = document.getElementById(formElementName);
		} else {
			// form object
			formularElement = formElementName;
		}

		if(formularElement) {
			if(formularElement.onsubmit) {
				// handle onsubmit
				try {
					// try to call the onsubmit-event manually
					result = formularElement.onsubmit();
				} catch(e) {
					// catched an error, maybe an empty onsubmit
					result = true;
				}

				if(result == true || typeof(result) == "undefined") {
					// onsubmit passed the submit, now fire submit()
					formularElement.submit();
				}
			} else {
				// simple submit
				formularElement.submit();
			}
		}
	},


	/**
	 * Handles form element onSubmit
	 */
	formElementSubmit: function( event, sender ) {
		if (!event) {
			var event = window.event;
		}

		if( event.keyCode == 13 || event.which == 13 ) {
			sxFormSubmit(sender.form);
			return false;
		}
		return true;
	},


	/**
	 * Stop event propagation
	 */
	eventPropagationStop: function( event ) {
		if (!event) {
			var event = window.event;
		}

		event.cancelBubble = true;
		if (event.stopPropagation) {
			event.stopPropagation();
		}
	},

	setFormElementValue: function(name, value) {
		var element = document.getElementById(name);
		if(element) {
			elemenet.value = value;
		}
	},

	show: function(element) {
		var element = document.getElementById(element);
		if(element) {
			element.style.display = "block";
		}
	},

	hide: function(element) {
		var element = document.getElementById(element);
		if(element) {
			element.style.display = "none";
		}
	},

	sprintf: function() {
		var args = this.sprintf.arguments;
		var argsLength = args.length;

		if( argsLength < 2 ) {
			return;
		}

		var ret = args[ 0 ];

		for( var k=1; k<argsLength; ++k ) {
			var currentArg = args[k];

			switch( typeof( currentArg ) ) {
				case 'string':
					ret = ret.replace( /%s/, currentArg );
					break;

				case 'number':
					ret = ret.replace( /%d/, currentArg );
					break;

				case 'boolean':
					ret = ret.replace( /%b/, currentArg ? 'true' : 'false' );
					break;

				default:
					/// function | object | undefined
					break;
			}
 		}

 		return ret;
	},

	vsprintf: function() {
		var args = this.vsprintf.arguments;
		var argsLength = args.length;

		if( argsLength < 2 ) {
			return;
		}

		var ret = args[ 0 ];


		if( typeof( args[ 1 ] ) == 'object' ) {
			var k = 0;
			var replace = args[ 1 ];
		} else {
			var k = 1;
			var replace = args;
		}

		for( var k=1; k<replace.length; ++k ) {
			var currentArg = replace[k];

			switch( typeof( currentArg ) ) {
				case 'string':
					ret = ret.replace( /%s/, currentArg );
					break;

				case 'number':
					ret = ret.replace( /%d/, currentArg );
					break;

				case 'boolean':
					ret = ret.replace( /%b/, currentArg ? 'true' : 'false' );
					break;

				default:
					/// function | object | undefined
					break;
			}
 		}

		return ret;
	},

	pageLoadingStart: function(content) {
		// Init
		var body =$$('body')[0];

		// create loading wrapper div
		var loadingWrapper = document.createElement('div');
		Element.extend(loadingWrapper);

		document.body.appendChild(loadingWrapper);

		$$('html, body').invoke('setStyle', {width: '100%', height: '100%', overflow: 'hidden'});
		$$('select', 'object', 'embed').each(function(node){ node.style.visibility = 'hidden' });

		if(content == '') {
			content = 'Page is loading, please wait';
		}

		with(loadingWrapper) {
			setAttribute('id', 'tqPageLoadingWrapper');

			update('<div id="tqPageLoadingContent">'+content+'</div>');

			setStyle({
				position: 'absolute',
				top: '0',
				left: '0',
				bottom: '0',
				right: '0',

				width: '100%',
				height: '100%',

				zIndex: 99,

				textAlign: 'center',
				verticalAlign: 'middle',

				opacity: 0.6,
				backgroundColor: 'black',
				color: 'white'
			});

			loadingWrapper.scrollTo();
		}
	},

	pageLoadingStart: function() {
		// Init
		var body =$$('body')[0];
		var loadingWrapper = $('tqPageLoadingWrapper');
		var bodyWrapper = $('bodyWrapper');

		if(loadingWrapper) {
			loadingWrapper.remove();
		}

		$$('html, body').invoke('setStyle', {width: '', height: '', overflow: ''});
		$$('select', 'object', 'embed').each(function(node){ node.style.visibility = 'visible' });
	}
}


/******************************************************************************
* VAR
******************************************************************************/
TQ.Var = new Object();
TQ.Var = {
	isArray: function(obj) {
		//returns true is it is an array
		return (obj.constructor.toString().indexOf("Array") != -1);
	}
}


/******************************************************************************
* DICT
******************************************************************************/
TQ.Dict = new Object();
TQ.Dict = {
	languageCode:	"",
	languageTitle:	"",
	database:		{ },

	get: function() {
		var args = this.get.arguments;
		var argsLength = args.length;

		if( argsLength < 2 ) {
			// no token specified
			return "";
		}

		var extension	= args[0];
		var token		= args[1];

		if(this.database[extension][token]) {
			if(argsLength == 2) {
				// use only token
				return this.database[extension][token];

			} else {
				// use vsprintf with token
				delete(args[0]);
				delete(args[1]);
				token = this.database[extension][token];
				return +TQ.Tools.vsprintf( token, args )
			}
		} else {
			return "";
		}
	},

	exists: function(extension, token) {
		if(this.database[extension][token]) {
			return true;
		} else {
			return false;
		}
	},

	addTokens: function(extension, tokens) {
		if(!this.database[extension]) {
			this.database[extension] = new Object();
		}

		for(var i in tokens) {
			this.database[extension][i] = tokens[i];
		}
	},

	setTokens: function(tokens) {
		this.database = tokens;
	}
}


