tar_cfelement = {
	init:function(seek){
		var seek=(seek)?seek:".tar_cfe";
		$(seek).each(function(){
			tar_cfelement.setup.delegate(this,seek.substr(1));
		});
	},
	setup:{
		delegate:function(elem,seek){
			var type=elem.nodeName.toLowerCase();
			while($(elem).attr("id")==""){
				var newid=tar_cfelement.randomstring();
				if(!($("#"+newid).length)){$(elem).attr("id",newid);}
			}
			if(type in tar_cfelement.setup){
				tar_cfelement.setup[type].init(elem,seek);
			}
		},
		select:{
			init:function(elem,seek){
				$(elem).hide();
				var myid= "rep_"+$(elem).attr("id");
				var myclass=$.trim($(elem).attr("class").replace(seek,""));
				myclass=(myclass!="")?' class="tar_custom select '+myclass+'"':' class="tar_custom select"';
				var appstring='<div id="'+myid+'"'+myclass+'><div class="arrow"></div><div class="display_box"></div><div class="actor"></div><div class="options_box"></div></div>';
				$(elem).after(appstring);
				var selex=tar_cfelement.setup.select.addoptions(elem,$("#"+myid).find(".options_box"));
				$("#"+myid).attr("rel",selex).find(".display_box").text($(elem).find("option:eq("+selex+")").text());
				$("#"+myid+" .options_box").hide();
				tar_cfelement.setup.select.events($("#"+myid),elem);
			},
			refresh:function(elem,selbox){
				var selex=tar_cfelement.setup.select.addoptions(selbox,$(elem).find(".options_box"));
				$(elem).attr("rel",selex).find(".display_box").text($(selbox).find("option:eq("+selex+")").text());
				$(elem).find(".options_box").hide();
				tar_cfelement.setup.select.events(elem,selbox);
			},
			addoptions:function(elem,cont){
				var limit=$(elem).find("option").length;
				var optiontemplate='<div class="option{s}" rel="{i}">{v}</div>';
				var appstring="";
				var testit=$(elem).val();
				for(i=0;i<limit;i++){
					var portelem=$(elem).find("option:eq("+i+")");
					if($(portelem).val()==testit){
						var selc=" selected";
						var selex=i;
					}else{
						var selc="";
					}
					appstring+=optiontemplate.replace("{s}",selc).replace("{i}",i).replace("{v}",$(portelem).text());
				}
				$(cont).empty().append(appstring);
				return selex;
			},
			events:function(elem,selbox){
				$(elem).find(".actor").unbind("click").click(function(){
					if($(elem).hasClass("open")){
						$(elem).removeClass("open").find(".options_box").fadeOut(300);
						$("body").unbind("click");
					}else{
						$(elem).addClass("open").find(".options_box").fadeIn(300,function(){
							$("body").click(function(){
								$(elem).removeClass("open").find(".options_box").fadeOut(300);
								$("body").unbind("click");
							});
						});
					}
				});
				$(elem).find(".option").unbind("click").click(function(){
					var switchto=$(this).attr("rel");
					var switchtext=$(this).text();
					$(elem).find(".selected").removeClass("selected");
					$(this).addClass("selected");
					$(elem).attr("rel",switchto);
					$(elem).find(".display_box").text(switchtext);
					$(selbox).find("option[selected]").removeAttr("selected");
					$(selbox).find("option:eq("+switchto+")").attr("selected",true);
				});
				$(selbox).unbind("change").change(function(){
					tar_cfelement.setup.select.refresh(elem,selbox);
				});
			}
		}
	},
	randomstring:function(len,custring){
		var pool=(custring)?custring.split(""):"abcdefghijklmnopqurtuvwxyz".split("");
		var len=(len)?len:6;
		var newid="";
		for(i=0;i<len;i++){newid+=pool[Math.floor(Math.random()*pool.length)];}
		return newid;
	}
}

