// Array.without (a la prototype.without)
// entfernt element aus dem Array
// HINWEIS: verändert das vorhandene Array
if(!Array.prototype.without)
{
	Array.prototype.without = function(element)
	{
		var index = this.indexOf(element);
		this.slice(index , 1);
	};
}

(function($) {
	// Liefert eine Kopie des Arrays ohne element
	// $.without (a la prototype.without) 
	jQuery.without = function(array , element)
	{
		if(typeof(array) !== 'object')
		{
			alert('1st Parameter of jQuery.without() must be an Array');
			return false;
		}
		
		return jQuery.grep(array, function(value) {
				return value != element;
			});
	}
	
	// Dialog Erweiterung
	$.dialogCreate = function(text, options) {
		// Kein Text definiert
		if(text == undefined) return;
		
		// check
		if(options == undefined) options = {};
		
		// default Werte
		var defaultOptions = {
			modal: true,
			draggable: false,
			resizable: false,
			buttonsDefault: true,
			title: 'Hinweis'
		};
		$.extend(defaultOptions, options); // Werte vereinen
		
		// Default Buttons setzen
		if(defaultOptions.buttonsDefault) {
			var defaultBtn = {
				'Abbrechen': function() { $(this).dialog("close"); }
			}
			$.extend(defaultBtn, options.buttons);
			defaultOptions.buttons = defaultBtn;
		}
		
		// div erzeugen
		var e = $(document.createElement('div'));
		e.html(text); // text setzen
		
		// dialog aufrufen
		e.dialog(defaultOptions);
		
		return e;
	}
	
	// Erzeugt ein "Bitte warten" Div innerhalb eines Elements
	// Dadruch wird das Element nicht mehr klickbar
	$.fn.waiter = function(options) {
		var control = options;
		
		var cssControl = 'weo-helper-waiter';
		var cssSelector = '.' + cssControl;
		
		// defaults
		var defaults = {  
			backgroundColor: '#fff',
			color: '#000',
			opacity: 0.6,
			text: 'Bitte warten ...',
			imgSrc: OE_IMG_DIR + '/ajax-loader-weooo.gif',
			loadingImage: true  
		};  
		var options = $.extend(defaults, options); // extend defaults with options 
		
		// close the div
		var close = function(obj) {
			var child = obj.children(cssSelector);
			child.remove();
		};
  
		// each for all selected elements
		return this.each(function() {  
			var obj = $(this);
			
			// close
			if(control == 'close') {
				close(obj);
				return;
			}
			
			// save height and width of the element	
			var height = obj.height();
			var width = obj.width();
		    
		    // get the highest z-index value and check for an exist loading div
		    var highZindex = 0;
		    var loadingDivExists = false;
		    var children = obj.children();
		    children.each(function() {
		    	if($(this).css('z-index') > highZindex) highZindex = $(this).css('z-index');
		    	if($(this).hasClass(cssControl)) loadingDivExists = true;
		    });
			
			// div already exist
			if(!loadingDivExists) {
				
				// default css
				var cssObj = {
					'text-align': 'center',
					'vertical-align': 'middle',
					'position': 'absolute',
					'margin-left': '0px',
					'margin-top': '0px',
					'top': 'auto',
					'left': 'auto',
					'color': options.color,
					'z-index': (highZindex + 1)
			    }
				
				// extra css
				var cssObjPlus = {
					'background-color': options.backgroundColor,
					'opacity': options.opacity,
					'z-index': (highZindex + 2)
			    }
			    var cssObjSub = {};
				$.extend(cssObjSub, cssObj, cssObjPlus); 
		    
		    	// the loading dv
				var loadElm = $('<div></div>');
				loadElm.addClass(cssControl)
				.css(cssObj)
				.height(height)
				.width(width);
				
				// modal div
				var loadModal = $('<div></div>');
				loadModal.css(cssObjSub)
				.height(height)
				.width(width);
				
				// the img div
				var loadImg = $('<img />');
				loadImg.attr('src', options.imgSrc);
				
				// the text div
				var loadSpan = $('<span></span>');
				loadSpan.html(options.text);
				loadSpan.css('display', 'block');
				
				// container div for text and img
				var loadContainer = $('<div></div>');
				loadContainer.width(width)
				.css('padding-top', ((height / 2) - 20))
				.css('position', 'absolute')
				.css('z-index', (highZindex + 3))
				.height(height - $(this).css('padding-top'));
				
				// add divs
			 	if(options.loadingImage) loadContainer.append(loadImg);
				if(options.text != '') loadContainer.append(loadSpan);
				loadElm.append(loadModal, loadContainer);
				
				obj.prepend(loadElm);
			}
		});  
	};
})(jQuery);
