/*
 * 	jquery.replaceselect.js
 * 	Ersetzt normale Selects gegen Div Selects
 * 
 * 	Zur Zeit Multiselect nicht unterstÃ¼tzt
 * 
 * 	Ersteller: BrÃ¼hlmann Reto
 * 
 */

// jQuery erweitern
jQuery.fn.replaceselect = function() {
	
	// Definitionen
		// Alle Events
		var E=[
			"abort","blur","change","click","dblclick","error","focus","keydown",
			"keypress","keyup","load","mousedown","mousemove","mouseout","mouseover",
			"mouseup","reset","resize","select","submit","unload"	
		];	

		// Alle Attribute, welche nicht events darstellen
		var A=["id","value","defaultvalue","name","selected","disabled","src","style","pflichtfeld","style"];
	
	// Initialisieren der Elemente
	var srcselect 				= this;
	var srcoptions				= $(this).find('option[removeitem!=true]').size();
	var newvalueholder 			= $('<input type="hidden" />');
	var newselectholder			= $('<table id="'+srcselect.attr('id')+'__selectholder" cellpadding="0" cellspacing"0" border="0"></table>'); newselectholder.addClass('replaceselectholder');
	var newselectholderrow		= $('<tr></tr>');
	var newselectholdertext		= $('<td style="padding-right:5px;"></td>'); newselectholdertext.css('padding-right','5px');
	
	var newselectpuller			= $('<td><img src="/00-def/template/img/symbols/buttons/dropdown_pulldown2.png" class="replaceselectpuller" /></td>');
	var newselectsearcher		= $('<table cellpadding="0" cellspacing"0" border="0"><tr><td><img src="/00-def/template/img/symbols/divers/search.png" border="0" /></td><td><input id="'+$(this).attr('id')+'__searchkey" defaultvalue="" value="" type="text" /></td></tr></table>');
	
	var selecttitlediv			= $('<div id="'+$(this).attr('id')+'__title" style="padding:5px; display:none;">'+ $(this).attr('defaultvalue') +'</div>');
	var selecttitle				= $(this).attr('defaultvalue');
	var elementid				= $(this).attr("id");
	
	var newselect 				= $('<div class="replaceselect"></div>');
	var newselectsub			= $('<div id="'+$(this).attr('id')+'__sub" class="replaceselect_sub"></div>');
	var newselectsubitemholder	= $('<div id="'+$(this).attr('id')+'__subitemholder"></div>');
	var newselectsubitem		= $('<div class="replaceselect_subitem '+$(this).attr('id')+'"></div>');
	
	// Initialisieren der Werte und anhÃ¤ngen in der DOM
		// Select
			// Text des momentan ausgewÃ¤hlten Eintrags Ã¼bernehmen
			newselect.text($('#'+this.attr('id')+' :selected').text());
			
			// Alle Events Ã¼bernemen
			for(e=0;e<E.length;++e) { if( srcselect.attr('on'+E[e]) ) { newselect.bind(E[e],srcselect.attr('on'+E[e])); } }
		
			// Alle Attribute Ã¼bertragen
			for(a=0;a<A.length;++a) { if( srcselect.attr(A[a])) { newselect.attr(A[a],srcselect.attr(A[a])); } }
			
			// AnhÃ¤ngen
			newselectholder.insertBefore(srcselect);
			newselectholderrow.appendTo(newselectholder);
			newselectholdertext.appendTo(newselectholderrow);
			newselectpuller.appendTo(newselectholderrow);
			
			newselect.appendTo(newselectholdertext);
			
			
			// Klick Ã¼berwachen
			newselectpuller.bind('click', function() {
				//Titel anzeigen
				if(selecttitle && $("#"+elementid).text() != selecttitle) {
						$("#"+elementid+"__title").css("display", "");
				}
				// Sub einblenden				
				newselectsub.slideToggle();
			});
		
		// Select SubFenster
			// AnhÃ¤ngen
			newselectsub.insertAfter(newselect);
			//newselectsub.css('width',newselect.css('width'));
		
		// Select Titel
			//AnhÃ¤ngen
			selecttitlediv.appendTo(newselectsub);
		
		// Select Searcher
			// AnhÃ¤ngen
			if (srcoptions >= 8) {
				newselectsearcher.appendTo(newselectsub);
			}
			// Input ersetzen
			$('#'+$(srcselect).attr('id')+'__searchkey').replacetextinput();
			// Events Ã¼berwachen
				// On Keyup
				newselectsearcher.bind('keyup',function() {
					$('#'+$(srcselect).attr('id')+'__subitemholder').find('div').each(function() { 
						searchtext = $(this).text(); searchtext=searchtext.toLowerCase();
						searchinput = $('#'+$(srcselect).attr('id')+'__searchkey__input').val();
						if( searchtext.search( searchinput.toLowerCase() ) >= 0  || searchinput == '' ) { $(this).fadeIn(); } else { $(this).fadeOut(); }
					});					
				});
		
		// Subitems holder
			// AnhÃ¤ngen
			newselectsubitemholder.appendTo(newselectsub);
					
		// Select Items
			for(option=1;option<=srcoptions;option++) {
				
				actsubitem_ = [];
				// Optionelement intitalisieren (subitem = new, actoption = old)
				actsubitem_[option] = newselectsubitem.clone();
				actoption = $('#'+this.attr('id')+'_option'+option);
				
				// Text Ã¼bernehmen
				actsubitem_[option].text(actoption.text());
				
				// Alle Events Ã¼bernehmen
				for(e=0;e<E.length;++e) { if( actoption.attr('on'+E[e]) ) { actsubitem_[option].bind(E[e],actoption.attr('on'+E[e])); } }

				// Alle Attribute Ã¼bertragen
				for(a=0;a<A.length;++a) { if( actoption.attr(A[a])) { actsubitem_[option].attr(A[a],actoption.attr(A[a])); } }
				
					// AnhÃ¤ngen
					actsubitem_[option].appendTo(newselectsubitemholder);
					
					// Klick Ã¼berwachen
					actsubitem_[option].bind('click', function(){
						// Text setzen
						newselect.text($(this).text());
						// Value setzen
						newvalueholder.attr('value', $(this).attr('value'));
						// Sub schliessen
						newselectsub.slideUp();
					});
			}
		
		// New Value Holder
			// Alle Attribute Ã¼bertragen
			for(a=0;a<A.length;++a) { if( srcselect.attr(A[a])) { newvalueholder.attr(A[a],srcselect.attr(A[a])); } }
			
			// ID ändern
			newvalueholder.attr('id', newvalueholder.attr('id')+'__input');
			
			// AnhÃ¤ngen
			newvalueholder.insertAfter(newselectsub);
	
	// altes Element entfernen
	srcselect.remove();
		
}
