jQuery(function(){
	
	jQuery.fn.d_select= function(opt){
		/*
		 * Globale Variable und Funktionen anlegen um auf das selektierte
		 * Element zuzugreifen
		 */
		var hinweis= jQuery("<span/>").attr("id","d_select_hinweis").appendTo(jQuery("body")).css("position","fixed").css("bottom","0px").css("left","0px").css("background","#007D40").css("color","white").css("border","1px solid black").css("display","none").html("Multiselect");
		document.d_selected=new Array();
		document.getSelected=function(){			
				return document.d_selected;
		}
		document.setSelected=function(el){
			document.d_selected=new Array();
			document.d_selected.push(el)
		}
		document.removeSelectedElement= function(el){
			var tempArr=new Array();
			for(var z=0;z<document.d_selected.length;z++){				
				if(document.d_selected[z] != el){
					tempArr.push(document.d_selected[z]);
				}
			}
			document.d_selected=tempArr;
		}
		
		document.addSelected=function(el){
			document.d_selected.push(el);
		}
		/*
		 * Globale Variable anlegen um auf multiselect für alle Elemente zu realisieren 
		 * 
		 */
		document.multiselect=false;
		return this.each(function(){
			var i=jQuery(this);
			/*
			 * Falls keine ID vergeben ist, wird eine eindeutige ID 
			 * mittels Timestamp vergeben
			 */
			if(i.attr("id")=='undefined' || i.attr("id")==null || i.attr("id")==""){
				// Da JS "zu schnell" ist muss die 
				// Generierung mit 1 ms Verzögerung aufgerufen werden
				i.attr("id","d_select_"+setTimeout(uniqid(),1));
				/*
				 * Erzeugt einen Timestamp und liefert ihn zurück
				 */
				function uniqid()
				{
				var newDate = new Date;
				return newDate.getTime();
				}
			}
			
			jQuery().keydown(function(e){
				
				toggleMultiSelect(e);
			});
			
			jQuery().keyup(function(e){
				jQuery().bind("keydown",function(e){toggleMultiSelect(e)});
			
			})
			
			function toggleMultiSelect(e){
				if(e.keyCode=='17'){ //STRG^
					e.preventDefault();
					if(document.multiselect==true){
						document.multiselect=false;	}
					else{
					document.multiselect=true;
					}toggleHinweis();
				jQuery().unbind("keydown");
				}
			}
			
			function toggleHinweis(){
				if(document.multiselect==true){
					hinweis.show("slow");}else{						
					hinweis.hide("slow");
					}
			}
			/*
			 * Entfernen der Anderen selectierten Elemente und Markieren des aktuellen
			 * + Schreiben als Globale Variable
			 */
			i.click(function(){
				if(jQuery(this).hasClass("d_selected")){
					jQuery(this).removeClass("d_selected");
					document.removeSelectedElement(this)
					return;
				}
				toggleHinweis();
				if(document.multiselect==false){
				jQuery(".d_selected").removeClass("d_selected");
				document.setSelected(this);
				}else{
					document.addSelected(this);
				}
				jQuery(this).addClass("d_selected");
			});			
			
			
			});
			
		};
});
