
/**
 * Entfernt Whitespaces am Anfang und Ende eines Strings
 * 
 */
String.prototype.strip = function(){
	return this.replace(/^\s+/, '').replace(/\s+$/, '');
};

/**
 * BlueGFX Namespace
 */
var bluegfx = {

	/**
	 * Internet Explorer?
	 *
	 * @var boolean
	 */
	IE: !+"\v1",

	/**
	 * Internet Explorer 6?
	 *
	 * @var boolean
	 */
	IE6: !+"\v1" && window.XMLHttpRequest === undefined,
	
	/**
	 * Überprüft ob ein Objekt ein String ist
	 * 
	 * @param {Object} object
	 */
	isString: function(object){
		return Object.prototype.toString.call(object) === "[object String]";
	},
	
	/**
	 * Gibt das Element im DOM mit der ID element zurück
	 * Ist element bereits ein Objekt, wird dieses unverändert zurückgegeben
	 * 
	 * @param {Object} element ID des Elements
	 */
	getElement: function(element){
		return bluegfx.isString(element) ? document.getElementById(element) : element;
	},
	
	/**
	 * Gibt den Wert eines Formular-Feldes zurück
	 * element kann entweder die ID des Elements sein oder das Element selbst
	 * 
	 * @param {Object} element ID oder Element
	 */
	getFormValue: function(element){
		element = bluegfx.getElement(element);
		switch(element.tagName.toLowerCase()){
			case 'input': 
				switch(element.type.toLowerCase()){
					case 'checkbox':
					case 'radio':
						return element.checked ? element.value : null;
					default:
						return element.value;
				}
			case 'textarea':
				return element.value;
			case 'select':
				var index = element.selectedIndex;
				return index >= 0 ? (function(el){
					return !!el.getAttribute('value') ? el.value : el.text; 
				}(element.options[index])) : null;
		}
	},
	
	/**
	 * Lädt eine Javascript-Datei dynamisch asynchron nach
	 * 
	 * @param {String} src Die Datei oder URL, die geladen werden soll
	 * @param {Object} callback Callback-Funtion die aufgerufen wird, wenn das Script fertig geladen ist
	 */
	loadJs: function(src, callback){
		var s = document.createElement('script');
		s.type = 'text/javascript';
		
		if (callback) {
			if (s.readyState) { // IE
				s.onreadystatechange = function(){
					if (s.readyState === "loaded" || s.readyState === "complete") {
						s.onreadystatechange = null;
						callback();
					}
				};
			}
			else { // alle andren
				s.onload = function(){
					callback();
				};
			}
		}
				
		s.src = src;
		document.getElementsByTagName('head')[0].appendChild(s);		
	},
	
	/**
	 * Füllt eine Select-Box dynamisch mit Option-Elementen
	 * 
	 * @param {Object} target Ziel Select-Box
	 * @param {Object} data Neue Options als Array/Object
	 * @param {Object} selected ausgewähltes Element
	 */
	fillSelect: function(target, data, selected){
		
		target.innerHTML = '';
		var o;
		for(var i in data){
			o = document.createElement('option');
			o.value = i;
			o.selected = (selected && i == selected);
			o.appendChild(document.createTextNode(data[i]));
			target.appendChild(o);
		}		
		
	},
	
	/**
	 * Verpackt die Aktion und die Parameter für einen Ajax-Aufruf
	 * 
	 * @param {String} action Aktion
	 * @param {Object} parameters Parameter als Object
	 */
	ajax: function(action, parameters){
		return Object.toJSON({
			action: action,
			parameters: parameters ? parameters : {}
		});
	},
	
	/**
	 * Zeigt das Ajax-Ladesymbol an
	 * 
	 * @param {Object} target Ziel, zu dem das Symbol relativ positioniert wird
	 */
	showAjaxLoader: function(target){

		target = $(target);
		var loader = $('ajax_loading');
		
		if(!loader){
			loader = new Element('div',{
				id: "ajax_loading"
			}).setStyle({
				display: "none"
			}).update('<span>Lade...</span>');
			
			$('page').insert(loader);
		}
		
		var pos = target.cumulativeOffset();
		var dim = target.getDimensions();
		loader.setStyle({
			top: pos.top + 20 + "px",
			left: Math.floor(pos.left + dim.width/2 - loader.getWidth()/2) + "px"
		}).show();
		
	},
	
	/**
	 * Versteckt das Ajax-Ladesymbol
	 */
	hideAjaxLoader: function(){
		$('ajax_loading').hide();
	}
	
};

/**
 * Registriert Helfer-Funktionen, falls Prototype nicht vorhanden ist
 * 
 * @param {Object} undefined Referenz für das undefined Objekt
 */
(function(undefined){
	if(undefined === window.Prototype){
		window.$ = bluegfx.getElement;
		window.$F = bluegfx.getFormValue;
	}	
}());

