function phpVariable(variable,json){ window[variable] = eval('('+json+')'); }
function lValue(id){ return labels[id]; }
function substring(string,start,minusEnd){ return string.substr(start,string.length + minusEnd); }
function obj(id){ return document.getElementById(id); }
function value(id){	return document.getElementById(id).value; }
function wrong(element){ if (element.style.borderBottomColor == 'red') return true; }
function display(element,id){ $('#'+id).toggle('slow'); }
function nl2br(str){ return (str + '').replace(/([^>]?)\n/g, '$1<br>'); }
function local(){ if (document.location.host == 'localhost') return true; }
function refresh(){	location.reload(); }
function refresh2(){ document.location.href = '/'; }
function link(element,href){ window.open(href); }
function link2(element,href){ document.location.href = href; }
function isArray(variable){	if (typeof variable == 'object') return true; }

function ajax(modul,data,data2) // modul = function, data = data send by ajax, data2 = parameters as an object for javascript function
{
	if (!modul) return;
	
	$('#loading').show();
	var param = 'ajax=true';
	
	if (isArray(modul)){ // more functions
		for (var i=0; i<modul.length; i++) param += '&modul'+i+'='+modul[i];
		param += '&modulNumber='+modul.length;
	}	
	else param += '&modul='+modul;
	
	if (data) $.each(data, function(key,value){ param += '&'+key+'='+escape(nl2br(value)); });

	$.ajax({
		type:'POST',
		dataType:'json',
		data:param,
		success:function(answer){ answerAjax(answer,modul,data2); }
	});
}
function answerAjax(answer,modul,data)
{
	if (!answer){ write(labels.error['default']); return; }
	if (answer.error){ write2(modul,answer.error,true); return; }
	if (answer.sql) write(answer.sql);
	if (answer.mail) write(answer.mail.message);
	if (answer.info) write2(modul,answer.info);	
	if (answer.modul) modul = answer.modul;
	if (modul && window[modul+'Answer']) window[modul+'Answer'](answer,data);
	else if (modul && window[modul]) window[modul](answer,data);
}
function answerPHP(json)
{
	var answer = eval('('+json+')');
	answerAjax(answer,answer.modul);
}
function sendEvt(element,data)
{
	if (isArray(data)){
		modul = data[0];
		ajax(modul,data[1],data[2]);
	} 
	else ajax(data);
}
function write(text)
{
	$('.infoBox').remove();
	var cont = createBox(document.body,'','boxOrange infoBox',false,false,text);
	var left = ($(window).width()/2)-($(cont).width()/2);
	var top = ($(window).height()/2)-($(cont).height()/2);
	$(cont).css({left:left+'px',top:top+'px'}).click(function(){ $(this).remove(); }); 
	setTimeout(function(){ $(cont).remove(); },15000);
}
function write2(key,text,error)
{
	$('.info').remove();
	var info = '<div class="info">'+text+'</div>'; if (error) $(info).addClass('error');
	
	if (key && typeof(key) == 'string'){
		var element = $('#'+key);		
		if (element.parent().hasClass('submitCont')) element.append(info); 
		else if (element.hasClass('form')) element.find('.submitCont').append(info);
		else write(text);
	} 
	else $(key).parents('.form').find('.submitCont').append(info);	
}
function infoInput(element,type) // ex. forgot login
{
	var frame = createContainer(false); $(element).after(frame);
	var left = ($(window).width()/2)-($(frame).width()/2);
	var top = ($(window).height()/2)-($(frame).height()/2);
	$(frame).css({left:left+'px',top:top+'px'}); 
	
	var cont = createBox(frame,'','boxOrange')
	createText(cont,'','',labels[element.id+'_box']); createBreak(cont);
	var input = createTextfieldNormal(cont,element.id,'input','',type,true,'submitField'); createBreak(cont);	
	input.select();
}
function isEmpty(object)
{
	for (var i in object) if (object.hasOwnProperty(i)) return false;
	return true;
}
function substring2(string,start,end)
{	
	if (!string) return;
	if (end < 0) end = string.length + end - start;
	if (start < 0) start = string.length + start;
	if (end) return string.substr(start,end);
	return string.substr(start);
}
function removeChildren(element,leaveFirst)
{
	if (!element) return;
	var children = element.childNodes;
	for (var i = children.length - 1; i >= 0; i--) { // start with the last
		if (leaveFirst && i == 0) continue;
		element.removeChild(children[i]);
	}
}
function objEmpty(id,leaveFirst)
{
	var cont = document.getElementById(id);
	removeChildren(cont,leaveFirst);
	return cont;
}
function cValue(id)
{
	var element = obj(id);
	if (!element) return false;
	return element.checked;
}
function cgValue(element) // x-values
{
	var value = '';	
	$(element).find('input:checkbox').each(function(i){	if (this.checked) value += 'x';	else value += '-'; });	
	return value;
}
function cgValue2(id) // text-values
{
	var value = '';	
	$('input#'+id).each(function(i){ if (this.checked) value += $(this).next().html()+', '; });	
	return value;
}
function pValid()
{
	var path = window.location.pathname;
	var index = path.lastIndexOf('/')+1;
	if (path.substr(index) != '') return true;
	return false;
}
function pValue()
{
	var path = window.location.pathname;
	var index = path.lastIndexOf('/')+1;
	return path.substr(index);
}
function sValue(element)
{
	var index = element.options.selectedIndex;
	var value = element.options[index].value;
	return value;
}
function rValue(id,idValue)
{
	var value = '';
	$('.checkbox[name='+id+']').each(function(i){ 
		if (!this.checked) return;
		if (idValue) value = this.id; 
		else value = $(this).next().html(); 
		return;
	});	
	return value;
}
function xValue(id,value) // -x-xxxx
{
	var fields = labels[id+'_fields'];
	if (!fields) return;
	var spots = value.split('');	
	var texts = fields.split(',');
	var result = new Array();
	
	for (var i=0; i<spots.length; i++)	if (spots[i] == 'x') result.push(texts[i]);
	return result.join(', ');
}
function oValue(id,value) // object0
{
	var fields = labels[id+'_fields'];
	if (!fields) return;
	var texts = fields.split(',');
	var index = value.substr(id.length);
	return texts[index];
}
function align(element)
{
	var parent = element.parentNode;
	var widthParent = parent.clientWidth;
	var width = element.clientWidth;
	var margin = (widthParent-width)/2;
	element.style.marginLeft = margin+'px';
}
function valign(element)
{
	var height = $(element).height(); if (!height) return;
	var heightParent = $(element).parent().height();
	var margin = (heightParent-height)/2;
	$(element).css('margin-top',margin);
}
function ucfirst(str)
{
    str += '';
    var f = str.charAt(0).toUpperCase();
    return f + str.substr(1, str.length-1);
}
function submitForm(element,formId)
{
	var data = {};
	
	if (isArray(formId)){
		var modul = formId[1];
//		var children = obj(formId[0]).childNodes;
		var cont = obj(formId[0]);
		data.id = formId[0];
	}
	else if (formId){
		var modul = formId;
//		var children = obj(formId).childNodes;
		var cont = obj(formId);
	}
	else return;
	
	// get the values of the textfields
//	for (var i=0; i<children.length; i++){
//		var children2 = children[i].childNodes;
//		for (var j=0; j<children2.length; j++) data = submitElement(data,children2[j]);
//		data = submitElement(data,children[i]);
//	}
	
	// get values
	$(cont).find('input,textarea,select,.selection,.checkboxes').each(function(i,element){
		if ($(this).parent().is(':hidden')) return;
		data = submitElement(data,element); 
	}); 	
	
	// false input?
	if (data.error) write2(element,labels.errorUncomplete);
	else ajax(modul,data,element);
}
function submitElement(data,element)
{
	if (element.type == 'checkbox' && $(element).parents('.checkboxes')[0]) return data; // handle in checkboxes
	
	// trigger the check event	
	if ($(element).hasClass('selection') || $(element).hasClass('checkboxes')) $(element).trigger('click');
	else if (element.tagName == 'TEXTAREA') $(element).trigger('keyup');
	else if (element.type == 'checkbox'){}
	else if (element.tagName == 'INPUT' && element.type != 'submit' && element.type != 'radio' && element.type != 'button') $(element).trigger('blur');
	else return data; // no form field
	
	// get the data or an error
	if ($(element).attr('error')) data.error = true; // error
	else if ($(element).hasClass('selection')) data[element.id] = rValue(element.id);
	else if ($(element).hasClass('checkboxes')) data[element.id] = cgValue(element);
	//else if ($(element).hasClass('checkboxes')) data[element.id] = $(element).find('input:checked').map(function(){ return $(this).val(); }).get();
	else if (element.type == 'checkbox'){ if ($(element).is(':checked')) data[element.id] = 'ja'; }  
	else if (element.tagName == 'SELECT') data[element.id] = sValue(element);
	else if (element.tagName == 'TEXTAREA') data[element.id] = asci(element.value);
	else data[element.id] = asci(element.value);
	return data;
}
function checkElement(element,param)
{
	var result = false;
	var type = param[0];
	var optional = param[1];	
	if (optional != 'second' && optional && element.value == '') return;

	if (optional == 'second'){
		var first = obj(substring(element.id,0,-1)); // delete the 2 in the end of id
		if (element.value == first.value) result = true;
		else result = false;
	}
	else if (type == 'selection'){ if (!optional && !rValue(element.id)) result = false; else result = true; } // radio
	else if (type == 'checkboxes'){ if (!optional && !$(element).children(':checked').length) result = false; else result = true; }
	else if (type == 'checkbox'){ if (element.checked) result = true; }
	else result = check(element.value,type); 
	if (type == 'logon' && !result) result = check(element.value,'mail'); 
	
	if (result){
		$(element).removeClass('inputError').attr('error','');
		$('#'+element.id+'_error').hide();
		if (type == 'selection' || type == 'checkboxes') return true;
		$(element).unbind('keyup');
		return true;
	}
	else if ($(element).attr('error') != '1'){ // not if it's wrong already
		$(element).addClass('inputError').attr('error','1');
		$('#'+element.id+'_error').show();
		if (type == 'selection' || type == 'checkboxes') return false;
		eventBind(element,'checkElement','keyup',param); // now not just blur
		return false;
	}	
}
function check(text,type)
{
	var reg;
	switch(type)
	{	
		case 'mail':		reg = eval('/^([a-zA-Z0-9_\.\-])+[\@]([a-zA-Z0-9\-])+([\.]+[a-zA-Z0-9]{2,})*$/'); break;
		case 'website':		reg = eval('/^(([a-zA-Z0-9\-])+[\.])+[a-zA-Z0-9]{2,4}$/'); break;
		case 'password':	reg = eval('/^[a-zA-Z0-9§(\x20-\x7E)]{3,20}[^\"\']$/i'); break; // x20-x7E special characters, without stringbreaker 
		case 'prenumber':	reg = eval('/^0[0-9]{1,20}$/i'); break;
		case 'number':		reg = eval('/^[0-9]{1,20}$/i'); break;
		case 'number2':		reg = eval('/^[0-9]{2}$/i'); break;
		case 'postcode':	reg = eval('/^[0-9]{5}$/i'); break;
		case 'bankcode':	reg = eval('/^[1-9]{1}[0-9]{7}$/i'); break;
		case 'bankno':		reg = eval('/^[0-9]{4,}$/i'); break;
		case 'date':		reg = eval('/^[0-9]{1,2}[\.][0-9]{1,2}[\.][0-9]{4,4}$/i'); break;
		case 'birthdate':	reg = eval('/^[0-9]{1,2}[\.][0-9]{1,2}[\.][0-9]{4,4}$/i'); break;
		case 'message':		reg = eval('/^.{1,300}$/i'); break;
		case 'tags':		reg = eval('/^[a-z0-9\-äöüß ]{1,300}$/i'); break;
		case 'user':		reg = eval('/^[a-z0-9\-\.äöüß ]{3,10}$/i'); break;
		default:			reg = eval('/^[a-zA-Z0-9äöüß§(\x20-\x7E)]{0,100}[^\"\']$/i'); break;
	}

	if (type == 'message') text = nl2br(text);
	result = reg.test(text);
	if (type == 'birthdate' && result) result = checkDate(text);
	return result;
}
function checkDate(date)
{
	date = date.split('.');
	if (date[0] == 0 || date[0] > 31) return false;
	if (date[1] == 0 || date[1] > 12) return false;
	var now = new Date().getFullYear();
	if (date[2] < 1900 || date[2] > now-16) return false;
	return true;
}
function submitField(element,fieldId)
{
	if (fieldId) var element = obj(fieldId);
	$(element).trigger('blur');
	if (!element.value || $(element).attr('error') == '1') return;
	ajax(element.id,object(element.id,element.value));
}
function submitImageUpload(element,param)
{
	$('#loading').show(); var img = createImage(false,'uploadLoading','','img/loading2.gif'); $(element).after(img);
	var form = param.form;
	if (param.data){
		form.action += '&'+param.data[0]+'=';
		if (isArray(param.data[1])) form.action += param.data[1].value; // input object
		else form.action += param.data[1];
	} 
	form.submit();
}
function asciDecode(string)
{
	string = string.replace(/&auml;/g,'ä');
	string = string.replace(/&Auml;/g,'Ä');
	string = string.replace(/ouml;/g,'ö');
	string = string.replace(/&Ouml;/g,'Ö');
	string = string.replace(/&uuml;/g,'ü');
	string = string.replace(/&Uuml;/g,'Ü');
	string = string.replace(/&szlig;/g,'ß');
	return string;
}
function asci(string)
{
	string = string.replace(/ä/g,'&auml;');
	string = string.replace(/Ä/g,'&Auml;');
	string = string.replace(/ö/g,'&ouml;');
	string = string.replace(/Ö/g,'&Ouml;');
	string = string.replace(/ü/g,'&uuml;');
	string = string.replace(/Ü/g,'&Uuml;');
	string = string.replace(/ß/g,'&szlig;');
	string = string.replace(/€/g,'&#x80;'); // euro sign
	return string;
}
function object(key1,value1,key2,value2,key3,value3,key4,value4,key5,value5)
{
	var object = new Object();
	object[key1] = value1;
	if (key2) object[key2] = value2;
	if (key3) object[key3] = value3;
	if (key4) object[key4] = value4;
	if (key5) object[key5] = value5;
	return object;
}
function array_search( needle, haystack, strict ) {

    var strict = !!strict;
 
    for(var key in haystack){
        if( (strict && haystack[key] === needle) || (!strict && haystack[key] == needle) ){
            return key;
        }
    }
 
    return false;
}
Array.prototype.remove = function(s){
	var index = this.indexOf(s);
	if (this.indexOf(s) != -1) this.splice(index, 1);
}
function formular(parentObj,idForm,fields,empty,mandatory,modul)
{
	// create field ids		
	if (!fields){ 
		var amount = parseInt(labels[idForm+'_fields']); if (!amount) amount = 1;
		fields = new Array(amount); 
		for (var i=0;i<amount;i++) fields[i] = idForm+i; 
	} 
	else var amount = fields.length;
	
	// start
	if (!mandatory)	mandatory = labels.mandatory; if (typeof mandatory == 'string') mandatory = mandatory.split(',');
	var form = createContainer(parentObj,idForm,'form');
	if (labels[idForm+'Title']){ createText(form,idForm+'Title','header'); createBreak(form,2); }
	if (labels[idForm+'Subtitle']){ createText(form,idForm+'Subtitle','bold'); createBreak(form); } 
	if (mandatory){ createText(form,'mandatory_txt'); createBreak(form); } 
	if (window.formAmount) formAmount(form,idForm,amount); // admin
	createBreak(form,2);
	
	$.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'];

		// mandatory
		var optional = true;
		if (array_search(id,mandatory)) optional = false;
		if (substring2(labels[id+'_txt'],-1) == '*'){ optional = false; labels[id+'_txt'] = substring2(labels[id+'_txt'],0,-1)}

		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,value,optional);
			createBreak(form); 
		} 
		else if (type == 'checkboxes'){
			createBreak(form,2);
			var texts = labels[id+'_fields'].split(',');
			createCheckboxes(form,id,texts,value,optional);
		} 
		else if (type == 'checkbox'){
			createBreak(form);
			createCheckbox2(form,id,optional,'',labels[id+'_checked']);
		} 
		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 == 'header'){
			createBreak(form);
			createText(form,id+'_txt','header2');
			createBreak(form);
		} 
		else createTextfield(form,id,'input',value,type,optional);
		
		// admin
		if (window.contextForm){
			if ($('#'+id)[0]) $('#'+id)[0].oncontextmenu = contextForm;
			else if (type == 'checkboxes') for (var i=0; i<texts.length; i++) $('#'+id+i)[0].oncontextmenu = contextForm;
			
		} 		
	});
	createBreak(form);
	if (labels[idForm+'_modul']) modul = labels[idForm+'_modul'];
	if (modul){
		createInput(form,'id','',idForm,'hidden');
		createSubmit(form,idForm+'Submit','submit',Array(idForm,modul));
	} 
	else createSubmit(form,idForm+'Submit','submit');
	
	return form;
}
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';
		if (parentObj) parentObj.appendChild(element);	
	};
}
function createDoubleBreak(parentObj)
{
	createBreak(parentObj);
	createBreak(parentObj);
}
function createBox(parentObj,id,className,title,link,text)
{
	if (id && $('#'+id)[0]){ $('#'+id).empty(); return $('#'+id)[0]; } // just return box
	
	if (title){
		var top = createContainer(parentObj,'',className+'TopTitled');
		if (link) createLink(top,'','link',title,link);
		else createText(top,'','',title);
	} 
	
	var cont = createContainer(parentObj,id,className);
	if (text) createText(cont,'','',text); 
	return cont; 
}
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 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)
{
	var element = createText(parentObj,id,className,value,evtFunction,'click',evtParam);
	$(element).hover(function(){ $(this).removeClass('link').addClass('link_over'); },function(){ $(this).removeClass('link_over').addClass('link'); });
	return element;
}
function createSubmit(parentObj,id,className,modul)
{
	if (!modul) modul = parentObj.id;
	if (labels[id]) var label = asciDecode(labels[id]);
	else var label = asciDecode(labels[className]);
	var cont = createContainer(parentObj,'','submitCont');	
	var element = createInput(cont,id,className,label,'submit','submitForm','click',modul);
	return element;
}
function createContainer(parentObj,id,className,hidden,evtFunction,evtType,evtParam)
{
	var element = document.createElement('DIV');
//	if (hidden) element.style.display = 'none';
	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;
	//element.alt = address;
	if (parentObj) parentObj.appendChild(element);
	attributes(element,id,className,evtFunction,evtType,evtParam);
	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);
	parentObj.appendChild(element);
	attributes(element,'','thickbox');
	tb_init(element);
	return image;
}
function createButton(parentObj,id,className,address,evtFunction,evtParam)
{
	createImage(parentObj,id,className,address,Array(evtFunction,'infoTip','infoTipDelete'),Array('click','mouseover','mouseout'),object(evtFunction,evtParam));
}
function createInput(parentObj,id,className,value,type,evtFunction,evtType,evtParam)
{
	if ($.browser.msie && $.browser.version != '9.0') 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){
		if (type == 'checkbox' && value == 'x') element.checked = true;
		else 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) checkType = 'text';
	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		
//	if (optional == 'second') createText(parentObj,id+'_error','error',labels.error.second); // second
//	createText(parentObj,id+'_error','error',labels.error[checkType]); // error
	
	// error
	var error = labels.error[checkType];	
	if (error && (!optional || optional == 'second')) error += ', ';
	if (!optional) error += labels.error['mandatory'];
	else if (optional == 'second') error += labels.error['second'];
	var errorText = createText(parentObj,id+'_error','error',error); $(errorText).attr('type',checkType);

	return element;
}
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 createTextfieldLabeled(parentObj,id,className,checkType,optional,evtEnter,evtParam)
{
	if (checkType == 'password'){ checkType = 'text'; var password = true; } 
	var element = createTextfieldNormal(parentObj,id,className,labels[id+'_txt'],checkType,optional,evtEnter,evtParam);	
	$(element).bind("focus", function(){ 
		$(this).val('');
		$(this).unbind('focus'); 
		if (password) this.type = 'password';		
	});
}
function createTextfieldBlock(parentObj,id,className,value,checkType,optional,evtEnter,evtParam)
{	
	var cont = createContainer(parentObj,'','textfieldBlock');
	var element = createTextfieldNormal(cont,id,className,value,checkType,optional,evtEnter,evtParam);
	createBreak(cont);
	createText(cont,id+'_txt','label');
	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;
	parentObj.appendChild(element);
	attributes(element,id,className,evtFunction,evtType,evtParam);
	return element;
}
function createSelectbox(parentObj,id,values,selected,evtFunction,evtType,evtParam)
{
	if (labels[id+'_txt']) createText(parentObj,id+'_txt','label');
	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;
	};
	element.name = id;
	
	attributes(element,id,'input',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']){
		var text = createText(parentObj,id+'_txt','label');
		if (!optional){
			$(text).append('*');
			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 (labels[id+i+'_tip']){  
//			var img = createImage(cont,'listingHelp','','img/help.gif'); 
//			$(img).tooltip(labels[id+i+'_tip']);  
//		}
		if (labels[id+i+'_tip']) createText(cont,id+i+'_tip');
		if (vertical) createBreak(cont);
	};
	if (checked) obj(checked).checked = true; //else obj(id+'0').checked = true;	
	
	createText(parentObj,id+'_error','error',labels['error']['selection']); // error
	
	return cont;
}
function createCheckbox2(parentObj,id,optional,text,value,evtFunction,evtType,evtParam)
{	
	var element = createInput(parentObj,id,'checkbox',value,'checkbox',evtFunction,evtType,evtParam);	
	if (text || labels[id+'_txt']) createText(parentObj,id+'_txt','labelCheckbox',text);
	if (!optional){
		createText(parentObj,id+'_error','error',labels['error']['mandatory']);
		$(element).change(function(){ checkElement(this,Array('checkbox',optional)); });
	}
	createBreak(parentObj);	
	return element;
}
function createCheckbox(parentObj,id,name,text,value,evtFunction,evtType,evtParam)
{	
	var element = createInput(parentObj,id,'checkbox',value,'checkbox',evtFunction,evtType,evtParam);
	if (name) element.name = name;
	if (text || labels[id+'_txt']){
		createText(parentObj,id+'_txt','labelCheckbox',text);
		createBreak(parentObj);		
	}
	return element;
}
function createCheckboxes(parentObj,id,texts,value,optional)
{
	var header = labels[id+'_txt']; if (!optional) header += '*';
	createText(parentObj,id+'_txt','header2',header); if (texts.length > 4) createBreak(parentObj);
	var cont = createContainer(parentObj,id+'Cont'); if (!optional) $(cont).attr('name','mandatory');
	for (var i=0; i<texts.length; i++){
		if (!texts[i]) createBreak(cont);
		else if (value && array_search(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(parentObj); } 
	} 
	createBreak(parentObj,2);
}
function createFormular(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 = '/?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)
{
	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;
	parentObj.appendChild(element);	
	attributes(element,id,className);
	return element;
}
function createImageUpload(parentObj,id,className,text,evtParam)
{
	createText(parentObj,id+'_txt','label',text);	
	var form = createFormular(parentObj,id);
	var element = createInput(form,id+'_file',className,'','file','submitImageUpload','change',object('form',form,'data',evtParam));
	element.name = id+'_file';
	if (labels[id+'_tip']){ var img = createImage(form,'listingHelp','','img/help.gif'); $(img).tooltip(labels[id+'_tip']); }
	createBreak(parentObj);	
	return element;
}
function createList(parentObj,id,className)
{
	var element = document.createElement('UL');
	parentObj.appendChild(element);
	attributes(element,id,className);
	return element;
}
function createListElement(parentObj,id,className,value)
{
	var element = document.createElement('LI');
	element.innerHTML = value;
	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','',evtFunction,'click',evtParam);
	$(element).hover(function(){ $(this).removeClass('link').addClass('link_over'); },function(){ $(this).removeClass('link_over').addClass('link'); });
	return element;
}
function createPopup(parentObj,id,idText,width,height,evtFunction,evtParam)
{
	var popup = createContainer(parentObj,id,'',true);
	createBreak(popup);
	createText(popup,'','',labels[id]);
	
	if (!width) width = 700;
	if (!height) height = 500;
	var element = document.createElement('A');
	element.href = '#TB_inline?width='+width+'&height='+height+'&inlineId='+id;
	if (!idText) idText = id+'_txt';
	element.title = labels[idText];
	element.innerHTML = labels[idText];
	parentObj.appendChild(element);
	attributes(element,idText,'thickbox',evtFunction,'click',evtParam);
	tb_init(element);
	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(); 
}
