function createFormular(parentObj,idForm)
{
	// create field ids	
	var amount = parseInt(labels[idForm+'_fields']); if (!amount) amount = 1;
	var fields = new Array(amount); for (var i=0;i<amount;i++) fields[i] = idForm+i; 
	var mand = new Array(); if (labels[idForm+'_mand']) mand = labels[idForm+'_mand'].split(','); 
	var empty = true;
	
	var form = createContainer(parentObj,idForm);	
	$.each(fields,function(id,value){   
		
		// break
		if (value == 'break'){ createBreak(form); return; }
		
		// empty fields or filled with values
		if (empty){ id = value; value = false; }		
		var type = labels[id+'_type'];
		if (!type) type = 'text';

		// mandatory
		var optional = true;
		if (inArray(id,mand)) optional = false;

		if (type == 'textarea'){
			createText(form,id+'_txt','label');
			createTextarea(form,id,'input',value); 
			createBreak(form); 
		}
		else if (type == 'selection'){
			var texts = labels[id+'_fields'].split(',');
			createSelection(form,id,texts,value,optional);
			createBreak(form); 
		} 
		else if (type == 'selectbox'){
			var texts = labels[id+'_fields'].split(',');
			createSelectbox(form,id,texts,value,optional);
			createBreak(form); 
		} 
		else if (type == 'bool'){
			var texts = labels.bool_fields.split(',');
			createSelection(form,id,texts,texts[value],optional);
			createBreak(form); 
		} 
		else if (type == 'checkboxes'){
			createBreak(form,2);
			var texts = labels[id+'_fields'].split(',');
			createCheckboxes(form,id,texts,value);
			createBreak(form); 
		} 
		else if (type == 'checkbox'){
			createBreak(form);
			var value = labels[id+'_checked'];
			createCheckbox(form,id,'','',value);
		} 
		else if (type == 'image'){
			createImageUpload(form,id);
		}
		else if (type == 'mail'){
			createTextfield(form,id,'input',value,type,optional);
			if (labels[id+'2']) createTextfield(form,id+'2','input',value,type,'second');
		} 
		else if (type == 'password'){
			value = '';
			createTextfield(form,id,'input',value,type,optional);
			createTextfield(form,id+'2','input',value,type,'second');
		}
		else if (type == 'get'){
			if (gValid(id)) createTextfield(form,id,'input',gValue(id),'read',optional);
		}
		else if (type == 'header'){
			createText(form,id+'_txt','headerSmall');
			createBreak(form);
		} 
		else createTextfield(form,id,'input',value,type,optional);
			
	});
	
	// submit button
	createBreak(form);
	if (labels[idForm+'_modul']){ createInput(form,'id','',idForm,'hidden'); createSubmit(form,idForm+'Submit',Array(idForm,labels[idForm+'_modul'])); } 
	else createSubmit(form,idForm+'Submit');
	if (mand) createText(form,'mandatory_txt');
	createBreak(form,2);
		
	createText(form,'','info');	
	if (window.formMenu) for (var i=0; i<amount; i++) $('#'+idForm+i)[0].oncontextmenu = formMenu; // admin
	
	return form;
}
function createMap(parentObj,address)
{
	var cont = createContainer(parentObj,'map');
	var options = {zoom:12,mapTypeId:google.maps.MapTypeId.ROADMAP};	
	var map = new google.maps.Map(cont,options);
	var home = new google.maps.LatLng(52.53566,13.39559);
	new google.maps.Marker({map:map,position:home}); 
	map.setCenter(home);	
	return cont;
}
function attributes(element,id,className,evtFunction,evtType,evtParam)
{
	if (evtFunction){
		if (isArray(evtFunction)){
			for (var i=0; i<evtType.length; i++){
				if (!evtType[i]) continue;			
				if (evtParam && evtParam[evtFunction[i]]) eventBind(element,evtFunction[i],evtType[i],evtParam[evtFunction[i]]);
				else eventBind(element,evtFunction[i],evtType[i]);
			} 
		} 
		else if (evtType) eventBind(element,evtFunction,evtType,evtParam);
		else eventBind(element,evtFunction,'click',evtParam);
	}
	if (id) element.id = id;
	if (className) element.className = className;
}
function eventBind(element,evtFunction,evtType,evtParam)
{
	if (evtType == 'enter'){
		var enter = true;
		evtType = 'keypress';
	} 

	$(element).bind(evtType, function(event){   
		element = this;
		if (enter && event.keyCode != '13') return;
		//if (isArray(evtFunction)) for (var i=0; i<evtFunction.length; i++) window[evtFunction[i]](element,evtParam); // more functions on the same event	
		window[evtFunction](element,evtParam);		
	});
}
function createBreak(parentObj,number)
{
	if (!number) number = 1;
	
	for (var i=0; i<number; i++) {
		
		var element = document.createElement('BR');
		element.className = 'break';
		parentObj.appendChild(element);	
	};
}
function createPopup(id,title,width,height,close)
{
	popupClose();
	var cont = createContainer(document.body,id,'popup');
	cont.title = title;	
	$(cont).dialog({width:width,height:height,close:function(){ $(cont).remove(); }});
	return cont;
}
function createImageBox(parentObj,id,type,data,evtFunction,evtType,evtParam)
{
	var className = 'image'+ucfirst(type);
	var box = createContainer(parentObj,'','imageBox',false,'sendEvt','click',Array('profile',object('user',data.id)));
	createContainer(box,'',className+'Top');
	var middle = createContainer(box,'',className+'Middle');
	
	var address = '';
	if (data.pic == '1') address = 'pic/'+data.id+'_'+type+'.jpg';
	else if (data.anrede == 'Herr') address = 'pic/male_'+type+'.jpg';
	else address = 'pic/female_'+type+'.jpg';
	if (data.pic != '1') $(middle).css('text-align','right');
		
	var image = createImage(middle,'',className,address,'valign','load'); // after its loaded put in the middle
	image.alt = data.id;
	createContainer(box,'',className+'Bottom');
	
	// name	
//	if (parentObj.id == 'searchPanel'){
	if (type == 'small' && $(parentObj).attr('class') != 'messageContainer'){
		if (data.nachname.length > 7) data.nachname = data.nachname.substr(0,7)+'..';
		createText(box,'','',data.nachname);
	} 
	
	if (data.confirm && data.confirm == '0') $(image).css({ opacity:'0.4', filter:'alpha(opacity=40)' }); // friend request unconfirmed
	
	return image;
}
function createText(parentObj,id,className,value,evtFunction,evtType,evtParam)
{
	var element = document.createElement('SPAN');
	if (value) element.innerHTML = value;
	else if (labels[id]) element.innerHTML = labels[id];
	else if (id.substr(id.length-4) == '_txt') element.innerHTML = substring(id,0,-4);
	else element.innerHTML = id;
	if (parentObj) parentObj.appendChild(element);
	attributes(element,id,className,evtFunction,evtType,evtParam);
	if (!value && window.labelChange) element.oncontextmenu = labelChange; // label editing		
	return element;
}
function createLink(parentObj,id,className,value,evtFunction,evtParam)
{
	// Array('load').concat(evtType) possibility for more event functions
	return createText(parentObj,id,className,value,Array(evtFunction,'evtOver','evtOut'),Array('click','mouseover','mouseout'),object(evtFunction,evtParam));
}
function createSubmit(parentObj,id,evtParam)
{
	var element = createLink(parentObj,id,'button','','submitForm',evtParam);
	align(element);
	return element;
}
function createContainer(parentObj,id,className,hidden,evtFunction,evtType,evtParam)
{
	var element = document.createElement('DIV');
	if (hidden != 'shadow') element.style.display = 'none';
	if (parentObj) parentObj.appendChild(element);
	if (!hidden) $(element).fadeIn('slow');
	attributes(element,id,className,evtFunction,evtType,evtParam);		
	return element;
}
function createImage(parentObj,id,className,address,evtFunction,evtType,evtParam)
{
	var element = document.createElement('IMG');
	element.src = address+'?'+Math.random();
	element.alt = '';
	if (parentObj) parentObj.appendChild(element);
	attributes(element,id,className,evtFunction,evtType,evtParam);
	return element;
}
//function createImageUpload(parentObj,id,className,text,width,height,address)
//{
//	createText(parentObj,'','',text);	
//	var form = createFormularFrame(parentObj,id);
//	var element = createInput(form,id+'_file',className,'','file','submitUpload','change',object('form',form,'action',id,'width',width,'height',height,'address',address));
//	element.name = id+'_file';
//	createImage(parentObj,'','preview',address); 
//	createImage(parentObj,'','link','img/close.gif','sendEvt','click',Array('imageDelete',object('address',address)))
//	createBreak(parentObj);
//	return element;
//}
function createImageUpload(parentObj,id)
{
	var form = createFormularFrame(parentObj,'upload');
	var element = createInput(form,'upload_file','','','file','submitUpload','change',object('form',form,'modul','image','id',id));
	element.name = 'upload_file';
	return element;
}
//function createImagePopup(parentObj,id,className,address,addressBig,text,evtFunction,evtType,evtParam)
//{
//	var element = document.createElement('A');
//	element.href = addressBig;
//	element.rel = className;
//	if (text) element.title = text;
//	var image = createImage(element,id,className,address,evtFunction,evtType,evtParam);
//	if (parentObj) parentObj.appendChild(element);
//	attributes(element,(id)?id+'Cont':'','thickbox');
//	tb_init(element);
//	return image;
//}
function createButton(parentObj,id,text,evtFunction,evtParam)
{
	return createInput(parentObj,id,'',text,'button',evtFunction,'click',evtParam);
}
function createButton2(parentObj,id,evtFunction,evtParam)
{
	return createInput(parentObj,id,'',decodeAsci(labels[id]),'button',evtFunction,'click',evtParam);
}
function createButtonA(parentObj,id,evtFunction,evtParam)
{
	createBreak(parentObj);
	var img = createImage(parentObj,'','','img/arrow1.gif');
	var link = createLink(parentObj,id,'h3 link','',evtFunction,evtParam); 
	$(link).mouseover(function(){ img.src = 'img/arrow2.gif'; }); $(link).mouseout(function(){ img.src = 'img/arrow1.gif'; });
	createBreak(parentObj);
	return link;
}
function createInput(parentObj,id,className,value,type,evtFunction,evtType,evtParam)
{
	if ($.browser.msie) var element = document.createElement('<input name="">'); // IE bug
	else var element = document.createElement('INPUT');
	if (type) element.type = type;
	else element.type = 'text';	
	if (value) element.value = value;
	if (parentObj) parentObj.appendChild(element);
	attributes(element,id,className,evtFunction,evtType,evtParam);
	return element;
}
function createTextfieldNormal(parentObj,id,className,value,checkType,optional,evtEnter,evtParam)
{
	if (!className) className = 'input';
	if (checkType == 'password') type = checkType;
	else type = 'text';
	
	var evtFunction = Array();
	var evtType = Array();
	
	// check input except when read only or false
	if (checkType && checkType != 'read'){
		evtFunction.push('checkElement');
		evtType.push('blur');
	}
	// enter event
	if (evtEnter){
		evtFunction.push(evtEnter);
		evtType.push('enter');
	}	
	// width
	var className2 = className.split('_');
	if (className2.length > 1){
		className = className2[0];
		var width = className2[1];
	}

	var element = createInput(parentObj,id,className,value,type,evtFunction,evtType,object('checkElement',Array(checkType,optional),evtEnter,evtParam));
	if (width) element.style.width = width;
	if (checkType == 'read') element.readOnly = true; // read only	
	
	// error
	var error = new Array();		
	if (!optional) error.push(labels.error.mandatory);
	if (labels.error[checkType]) error.push(labels.error[checkType]);
	else if (optional == 'second') error.push(labels.error.second);
	createText(parentObj,id+'_error','error',error.join(', '));
	
	return element;
}
function createTextfieldLabeled(parentObj,id,className,checkType,optional,evtEnter,evtParam)
{
	if (checkType == 'password'){ checkType = 'text'; var password = true; } 
	var element = createTextfieldNormal(parentObj,id,className,labels[id],checkType,optional,evtEnter,evtParam);	
	$(element).bind("focus", function(){ 
		$(this).val('');
		$(this).unbind('focus'); 
		if (password){
			$(this).after(createTextfieldNormal(false,id,className,'','password',optional,evtEnter,evtParam));
			$(this).remove();
			$('#'+id).focus();
		}		
	});
}
function createTextfield(parentObj,id,className,value,checkType,optional,evtEnter,evtParam)
{
	var text = createText(parentObj,id+'_txt','label');
	if (!optional || optional == 'second') $(text).append('*');
	var element = createTextfieldNormal(parentObj,id,className,value,checkType,optional,evtEnter,evtParam);
	createBreak(parentObj);
	return element;
}
function createTextfieldHelp(parentObj,id,className,value,checkType,optional,evtEnter,evtParam)
{
	createText(parentObj,id+'_txt','label');		
	var element = createTextfieldNormal(parentObj,id,className,value,checkType,optional,evtEnter,evtParam);
	createImage(parentObj,id+'_tip','','img/help.gif',Array('infoTip','infoTipDelete'),Array('mouseover','mouseout'));
	createBreak(parentObj);
	return element;
}
function createTextfieldBlock(parentObj,id,className,value,checkType,optional,evtEnter,evtParam)
{	
	var cont = createContainer(parentObj,'','textfieldBlock');
	createText(cont,id+'_txt','labelBlock');
	var element = createTextfieldNormal(cont,id,className,value,checkType,optional,evtEnter,evtParam);
	return element;
}
function createTextfieldForm(parentObj,id,className,value,checkType)
{
	createText(parentObj,id+'_txt');	
	var element = createTextfieldNormal(parentObj,id,className,value,checkType,false,'submitField');
	createLink(parentObj,id+'Submit','link','','submitField',id);
	createBreak(parentObj);
	return element;
}
function createTextline(parentObj,id,obj)
{
	createText(parentObj,id+'_txt','label');
	if (obj[id]) createText(parentObj,'','',obj[id]);
	else if (isArray(obj)) createText(parentObj,'','',labels.empty);
	else createText(parentObj,'','',obj);
	createBreak(parentObj);
}
function createTextarea(parentObj,id,className,value,evtFunction,evtType,evtParam)
{
	var element = document.createElement('TEXTAREA');
	if (value) element.innerHTML = value;
	if (parentObj) parentObj.appendChild(element);
	attributes(element,id,className,evtFunction,evtType,evtParam);
	return element;
}
function createTextareaLabeled(parentObj,id,className,evtFunction,evtType,evtParam)
{	
	var element = createTextarea(parentObj,id,className,labels[id],evtFunction,evtType,evtParam);	
	$(element).bind("focus", function(){ 
		$(this).val('');
		$(this).unbind('focus');	
	});
}
function createSelectbox(parentObj,id,values,selected,optional,evtFunction,evtType,evtParam)
{
	// first empty	
	if (!selected){
		values = Array(labels['selectboxFirst']).concat(values);
		selected = labels['selectboxFirst'];
	} 
	
	// optional or mandatory
	if (!labels[id+'_txt']){}
	else if (optional) createText(parentObj,id+'_txt','label');
	else{
		createText(parentObj,'','label',labels[id+'_txt']+'*');
		evtFunction = 'checkElement';
		evtType = 'change';
		evtParam = Array('selectbox',optional);
	} 

	var element = document.createElement('SELECT');	
	for (var i=0; i<values.length; i++) {
		
		var option = document.createElement('OPTION');
		option.innerHTML = values[i];
		element.appendChild(option);
		if (values[i] == selected) element.options.selectedIndex = i;
	};	
	
	attributes(element,id,'input',evtFunction,evtType,evtParam);
	if (parentObj) parentObj.appendChild(element);
		
	createText(parentObj,id+'_error','error',labels['error']['selection']); // error
	
	return element;
}
function createSelectboxLabeled(parentObj,id,values,selected,evtFunction,evtType,evtParam)
{
	if (labels[id+'_txt']) createText(parentObj,id+'_txt','label');
	var element = document.createElement('SELECT');		
	var i=0;
	$.each(values,function(id,value){
		var option = document.createElement('OPTION');
		option.value = id;
		option.innerHTML = value;		
		element.appendChild(option);
		if (id == selected) element.options.selectedIndex = i;	
		i++;
	});
	element.name = id;
	
	attributes(element,id,'selectbox',evtFunction,evtType,evtParam);
	if (parentObj) parentObj.appendChild(element);
	return element;
}
function createSelection(parentObj,id,values,checked,optional,vertical,evtFunction,evtType,evtParam)
{
	// optional or mandatory
	if (labels[id+'_txt'] && optional) createText(parentObj,id+'_txt','label');
	else if (!optional){
		createText(parentObj,'','label',labels[id+'_txt']+'*');
		evtFunction = 'checkElement';
		evtType = 'click';
		evtParam = Array('selection',optional);
	} 
		
	if (values.length > 2) vertical = true;
	var cont = createContainer(parentObj,id,'selection',false,evtFunction,evtType,evtParam);	
	cont.name = 'selection';
	for (var i=0; i<values.length; i++) {
		
		var input = createInput(cont,id+i,'checkbox','','radio');
		input.name = id;
		createText(cont,'','',values[i]);
		if (vertical) createBreak(cont);
		if (values[i] == checked) input.checked = true;
	};
	
	createText(parentObj,id+'_error','error',labels['error']['selection']); // error
	
	return cont;
}
function createCheckbox(parentObj,id,name,text,checked,evtFunction,evtType,evtParam)
{
	var element = createInput(parentObj,id,'checkbox','','checkbox',evtFunction,evtType,evtParam);
	if (name) element.name = name;
	if (text || labels[id+'_txt']){
		createText(parentObj,id+'_txt','labelCheckbox',text);
		createBreak(parentObj);		
	}
	element.checked = checked;
	return element;
}
function createCheckboxes(parentObj,id,texts,value)
{
	var cont = createContainer(parentObj,id);	
	createText(cont,id+'_txt'); createBreak(cont,2);
	if (value) value = value.split(', ');
	for (var i=0; i<texts.length; i++){
		//if (value) createCheckbox(cont,id+i,id,texts[i],value.charAt(i));
		if (value && inArray(texts[i],value)) createCheckbox(cont,id+i,id,texts[i],'x');
		else createCheckbox(cont,id+i,id,texts[i]);
		if (labels[id+i+'_type'] == 'selection'){ createSelection(cont,id+i+'_cg',labels[id+i+'_fields'].split(','),false,true); createBreak(cont); } 
	} 
	createBreak(cont);
	return cont;
}
function createFormularFrame(parentObj,id)
{
	if ($.browser.msie) var element = document.createElement('<form enctype="multipart/form-data">'); // IE bug
	else var element = document.createElement('FORM');
	element.enctype = 'multipart/form-data';
	element.method = 'post';
	element.action = phpFile+'/?action='+id; // for further action in php
	element.target = id+'_iframe';
	element.id = id;	
	createIFrame(element,id+'_iframe','hidden');
	if (parentObj) parentObj.appendChild(element);
	return element;
}
function createIFrame(parentObj,id,className,source,data)
{
	if ($.browser.msie) var element = document.createElement('<iframe name="'+id+'" frameborder="0">'); // IE bug
	else var element = document.createElement('IFRAME');
	if (source) element.src = source;
	else element.src = '#';
	element.name = id;
	if (parentObj) parentObj.appendChild(element);	
	attributes(element,id,className);
	
	if (data) element.contentWindow.window.param = data;
	
	return element;
}
function createList(parentObj,id,className)
{
	var element = document.createElement('UL');
	if (parentObj) parentObj.appendChild(element);
	attributes(element,id,className);
	return element;
}
function createListElement(parentObj,id,className,value)
{
	var element = document.createElement('LI');
	element.innerHTML = value;
	if (parentObj) parentObj.appendChild(element);
	attributes(element,id,className);
	return element;
}
function createMenu(parentObj,id,className)
{
	var element = createList(parentObj,id,className);
	return element;
}
function createMenuElement(parentObj,id,evtFunction,evtParam)
{
	var list = createListElement(parentObj);
	var element = createText(list,id,'menuLink','',Array(evtFunction,'evtOver','evtOut'),Array('click','mouseover','mouseout'),object(evtFunction,evtParam));
	return element;
}
function createSlider(parentObj,data,numberStep,name,boxName,panelWidth,panelHeight,type)
{
	var detail = new Object();
	detail.name = boxName;
	detail.data = data;
	detail.panel = name+'Panel';
	detail.buttons = name+'Control';
	detail.create = boxName+'Box';
	detail.numberNow = numberStep;
	detail.numberStep = numberStep; // step number
	detail.numberAll = data.length; // max to show
	detail.type = type;
	if (type == 'horizontal'){
		if (detail.numberAll < numberStep) detail.size = panelWidth*detail.numberAll; // width of one panel - smaller cause not enough elements
		else detail.size = panelWidth*numberStep; // width of one panel
	}
	else detail.size = panelHeight;
	
	// panel
	var cont = createContainer(parentObj,'','sliderContainer');
	if (type == 'horizontal') cont.style.width = detail.size+'px';
	else cont.style.width = panelWidth;
	var row = createContainer(cont,name+'Row','sliderRow');
	var panel = createContainer(row,detail.panel,'sliderPanel');
	window[boxName+'Box'](panel,data,numberStep,0);	
	row.style.height = row.style.height = panelHeight+'px';
	
	// buttons
	createBreak(cont,2);
	var buttons = createContainer(cont,detail.buttons,'sliderControl');
	var previous = createLink(buttons,'sliderPrevious','sliderPrevious link','','slider',Array(detail,'previous'));
	$(previous).hide();
	var next = createLink(buttons,'sliderNext','sliderNext link','','slider',Array(detail,'next'));
	if (detail.numberAll <= numberStep) $(next).hide();
}
function slider(element,param)
{
	var detail = param[0];
	var panel = obj(detail.panel);
	var control = obj(detail.buttons);
	var direction = param[1];
	var numberCreated = panel.childNodes.length; // already showen
	
	// costum close elements
	if (window[detail.name+'Close']) window[detail.name+'Close']();
	
	// horizontal or vertical
	if (detail.type == 'horizontal') var position = substring($(panel).css('marginLeft'),0,-2);
	else if (detail.type == 'vertical') var position = substring($(panel).css('marginTop'),0,-2);
	
	// what to do when a button pressed
	if (direction == 'previous'){ 
		if (detail.numberNow <= detail.numberStep) return; // beginning
		detail.numberNow -= detail.numberStep;
		var prefix = '+';
	}
	else if (direction == 'next'){	
		if (detail.numberNow >= detail.numberAll) return; // end
		if (detail.numberNow+detail.numberStep > numberCreated && numberCreated < detail.numberAll){ // if it will be more than created, create the next
			window[detail.create](panel,detail.data,detail.numberStep,detail.numberNow); 	
		} 
		detail.numberNow += detail.numberStep; 
		var prefix = '-';
	} 

	$(control).children('#sliderPrevious').hide();
	$(control).children('#sliderNext').hide();
	var pixel = eval(position+prefix+detail.size);
	if (detail.text) $('.'+detail.text).css({ overflow:'hidden' }); // bug in stream
	if (detail.type == 'horizontal') $(panel).animate({marginLeft:pixel},500,false,function(){sliderAfter(detail,control)});
	else if (detail.type == 'vertical') $(panel).animate({marginTop:pixel},500,false,function(){sliderAfter(detail,control)});
}
function sliderAfter(detail,control)
{
	if (detail.text) $('.'+detail.text).css({ overflow:'auto' }); // bug in stream

	// hide buttons
//	var buttons = control.childNodes;
	if (detail.numberNow <= detail.numberStep) $(control).children('#sliderPrevious').hide(); // beginning
	else $(control).children('#sliderPrevious').show();
	if (detail.numberNow >= detail.numberAll) $(control).children('#sliderNext').hide(); // end
	else $(control).children('#sliderNext').show(); 
}
