function attributes(element,id,className,evtFunction,evtType,evtParam)
{
	if (evtFunction){
		if (isArray(evtFunction)){
			for (var i=0; i<evtType.length; i++){
				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 createTextNew(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;
	parentObj.appendChild(element);
	attributes(element,id,className,evtFunction,evtType,evtParam);
	return element;
}
function createLink(parentObj,id,value,evtFunction,evtParam)
{
	var element = createTextNew(parentObj,id,'link',value,Array(evtFunction,'evtOver','evtOut'),Array('click','mouseover','mouseout'),object(evtFunction,evtParam));
	return element;
}

// old stuff
function addAttributes(element,id,className,withoutName)
{	
	if (id){
		element.id = id;
		if (!withoutName) element.name = id;
	}
	if (className) element.className = className;
	if (element.tagName != 'SELECT') element.onclick = click;
	//element.onblur = click;
	if (element.tagName == 'SELECT' || id == 'regCode') element.onchange = click;
	if (className == 'tabMenu' || className == 'webWidget' || className == 'link' || className == 'userlink'){
		element.onmouseover = function(){this.className = className + '_over'};
		element.onmouseout = function(){this.className = className};
	}
}
// admin view
function createAdmin(parentObj)
{
	for (var i=0; i<dbtables.length; i++) {
		
		createText(parentObj,dbtables[i]);
		createTableHead(parentObj,'admin_'+dbtables[i],'admin');
		// table content
		getData('fillAdminTable_'+dbtables[i],dbtables[i],Array(),Array(),Array(),'true',Array('id'),'','true');
		createText(parentObj,'new Row','link_addAdminRow_'+dbtables[i],'link');
		createDoubleBreak(parentObj);
	};
}
function addAdminRow(idArray)
{
	saveData('addAdminRow',idArray[2],Array('id'),Array());
	refreshAdminTable(idArray[2]);
}
function delAdminRow(idArray)
{
	delData('delAdminRow',idArray[2],Array('id'),Array(idArray[3]))
	refreshAdminTable(idArray[2]);
}
function refreshAdminTable(dbtable)
{
	var table = getObject('admin_'+dbtable);
	removeChildren(table);
	getData('fillAdminTable_'+dbtable,dbtable,Array(),Array(),Array(),'true',Array('id'),'','true');
}
function fillAdminTable(param,dbtable)
{
	var table = getObject('admin_'+dbtable);
	for (var i = 0; i < param[2]; i++) {
				
		var rowData = param[3 + i].split('*');
		if (i == 0){ // header
			createTableTitles(table,rowData);
			var header = rowData;
		} 
		else createTableRow(table,rowData,dbtable,header,'admincell',true);
	}
}
function createTableHead(parentObj,id,name)
{
	var table = document.createElement('TABLE');
	var thead = document.createElement('THEAD');
	var tfoot = document.createElement('TFOOT');
	var tbody = document.createElement('TBODY');
	table.appendChild(thead);
	table.appendChild(tfoot);
	table.appendChild(tbody);
	parentObj.appendChild(table);
	table.className = name;
	tbody.id = id;
	return tbody;
}
function createTableTitles(parentObj,dataArray)
{
	var row = document.createElement('TR');
	for (var i=0; i<dataArray.length; i++) {
		
		var column = document.createElement('TD');
		createText(column,dataArray[i]);
		row.appendChild(column);
	}
	parentObj.appendChild(row);
}
function createTableRow(parentObj,dataArray,dbtable,headerArray,className,directEdit)
{
	var row = document.createElement('TR');
	row.id = dbtable + '_' + dataArray[0]; // table name and row id
	for (var i=0; i<headerArray.length; i++) {
		
		var column = document.createElement('TD');
		var id = row.id + '_' + headerArray[i];
		// TODO -> integrate directEdit
		if (directEdit) createText(column,dataArray[i],id,className);
		else createText(column,dataArray[i],id,className,true);
		row.appendChild(column);
	}
	// delete
	var column = document.createElement('TD');
	var id = 'link_delAdminRow_' + row.id;
	createText(column,'delete',id,'link');
	row.appendChild(column);
	
	parentObj.appendChild(row);
}
function createTable(parentObj,rowNumber, columnNumber)
{	
	var table = document.createElement('TABLE');
	var thead = document.createElement('THEAD'); // neccessary for internet explorer
	var tfoot = document.createElement('TFOOT');
	var tbody = document.createElement('TBODY');
	table.appendChild(thead);
	table.appendChild(tfoot);
	table.appendChild(tbody);
	
	//table..parentNode.on.on..on.tagName.c.on.on
	for (var i=0; i<rowNumber; i++) {
		
		var row = document.createElement('TR');
		row.id = 'row' + i;
		tbody.appendChild(row);
				
		for (var j=0; j<columnNumber; j++) {
						
			var column = document.createElement('TD');
			column.id = 'column_' + i + j;
			//column.style.border = '1px solid gray';
			column.width = columnWidth;
			column.height = columnHeight;
			row.appendChild(column);
			createContainer(column,'cell');
			addMoveability(column);									
		};		
	};

	parentObj.appendChild(table);
	mainTable = table;
}

// elements
function createContainer(parentObj,id,name,hidden,type)
{
	if (type == 'span')	var element = document.createElement('SPAN');
	else var element = document.createElement('DIV');
	parentObj.appendChild(element);
	addAttributes(element,id,name);	
	//if (idHirarchy && type == 'div') labelElements.push(createLink(element,element.id,'label'));
	if (hidden) element.style.display = 'none';
	return element;
}
function createPopupContainer(parentObj,id)
{
	var frame = createContainer(parentObj,id+'Frame',null,true);
	var container = createContainer(frame,id);
	return container;
}
function createFormular(parentObj,id,name)
{
	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 = file + '/?action=' + id; // for further action in php
	element.target = id+'_iframe';	
	createIFrame(element,'#',id+'_iframe',name);
	parentObj.appendChild(element);
	//addAttributes(element,id,name);
	attributes(element,id,name);
	return element;
}
function createSubmit(parentObj,text,id)
{
	var element = createText(parentObj,text,id,'link');
	element.onclick = submit;
	return element;
}
function createImageUpload(parentObj,text,id,name,fullrow)
{
	if (text) createText(parentObj,text,id+'_txt',name+'_txt');
	var element = createFormular(parentObj,'uploadImage',name);
	var file = createInput(element,'','file',id,name);
	file.onchange = uploadImage;
	//createInput(formular,'Upload','submit','upload_submit',name);
	createInput(element,id+'_img','hidden','upload_image',name);
	var image = createImage(parentObj,id+'_img','thumbnail_0');
	image.style.display = 'none';
	if (fullrow) createBreak(parentObj);	
	return element;
}
function createUploadField(parentObj,text,id,name,fullrow)
{
	if (text) createText(parentObj,text,id+'_txt',name+'_txt');
	var element = createInput(parentObj,'','file',id,name);
	createText(parentObj,'help',id+'_help','help');
	if (fullrow) createBreak(parentObj);
	return element;
}
function createIFrame(parentObj,source,id,name)
{
	if ($.browser.msie) var element = document.createElement('<iframe name="'+id+'" frameborder="0">'); // IE bug
	else var element = document.createElement('IFRAME');
	element.src = source;
	parentObj.appendChild(element);	
	addAttributes(element,id,name);
	return element;
}
function createPopupLink(parentObj,divid,title,id,height,width)
{
	var element = document.createElement('A');
	element.href = '#TB_inline?height='+height+'&width='+width+'&inlineId=' + divid;
	element.title = title;
	createText(element,title);
	parentObj.appendChild(element);
	addAttributes(element,id,'thickbox');
	createPopupContainer(getObject('help'),divid);
	tb_init(element);
	return element;
}
function createPopupImage(parentObj,id,name,srcPreview,srcOriginal)
{
	var element = document.createElement('A');
	element.href = srcOriginal;
	var image = createImage(element,id,name,srcPreview);
	parentObj.appendChild(element);
	addAttributes(element,'','thickbox');
	tb_init(element);
	return image;
}
function createMenuButton(parentObj,id,name,text,href,admin)
{
	var liElement = document.createElement('LI');	
	parentObj.appendChild(liElement);
	
	if (admin){
		liElement.style.display = 'none';
		adminArray.push(liElement); 
	} 
	
	if (name == 'thickbox'){
		createPopupLink(liElement,id,text,'popup_'+id,400,800);
		return liElement;
	}

	var aElement = document.createElement('A');
	if (href) aElement.href = href;
	else aElement.onclick = click;
	//aElement.href = '#';
	liElement.appendChild(aElement);
	addAttributes(aElement, id, name);
	createText(aElement,text,'txt_'+id);
	
	return liElement;
}
function createInput(parentObj,value,type,id,name,clearAtFocus,withoutCheck)
{
	if ($.browser.msie) var element = document.createElement('<input name="'+id+'">'); // IE bug
	else var element = document.createElement('INPUT');
	if (!type || type == 'mail' || type == 'name' || type == 'tel' || type == 'website') element.type = 'text';
	else element.type = type;
	element.value = value;	
	parentObj.appendChild(element);
	addAttributes(element,id,name);
	if (type == 'checkbox' && value == 'true') element.checked = true;
	if (withoutCheck || type == 'checkbox') return element;
	element.onkeypress = function(){setTimeout('checkInput("'+id+'","'+type+'")',10);}; // input check, on enter isn't working
	element.onpaste = function(){setTimeout('checkInput("'+id+'","'+type+'")',10);}; // for IE and Safari
	if (clearAtFocus) element.onfocus = function(){this.value = ''; this.onfocus = '';};
	return element;
}
function createInputNew(parentObj,id,className,value,type,evtFunction,evtType,evtParam)
{
	//if ($.browser.msie) var element = document.createElement('<input name="'+inputName+'">'); // IE bug
	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;
	} 
	parentObj.appendChild(element);
	attributes(element,id,className,evtFunction,evtType,evtParam);
	return element;
}
function createLabeledInput(parentObj,text,id,name,type,value)
{
	if (!value) value = '';
	if (text) createText(parentObj,text,id+'_txt','label');
	var element = createInput(parentObj,value,type,id,name);
	createBreak(parentObj);
	return element;
}
function createText(parentObj,text,id,name,generated,fullrow,area) // !generated == editable -> labels
{
	var element = document.createElement('SPAN');
	var label = labels[id];
	if (label) element.innerHTML = label;
	else if (label == '') element.innerHTML = '';
	else element.innerHTML = text;
	parentObj.appendChild(element);
	addAttributes(element,id,name);
	if (!generated) element.onclick = onText;
	if (generated == 'longtext'){
		element.onclick = onLongtext;
		var longtext = $('#'+id+'_cont').html();
		if ((!longtext || longtext == '') && user == adminUser) element.innerHTML = id;
		else element.innerHTML = '';
		if (longtext) element.innerHTML = longtext;
	} 
	if (name == 'admincell') element.onclick = onAdmincell;
	if (fullrow) createBreak(parentObj);
	return element;
}
function createTextfield(parentObj,text,id,name,fullrow)
{
	if (text) createText(parentObj,text,id+'_txt',name+'_txt');
	createInput(parentObj,'','text',id,name);
	createText(parentObj,'help',id+'_help','help');
	if (fullrow) createBreak(parentObj);
}
function createTextarea(parentObj,text,id,name,fullrow,value)
{
	if (text) createText(parentObj,text,id+'_txt',name+'_txt');
	var element = document.createElement('TEXTAREA');
	if (value) element.innerHTML = value;
	parentObj.appendChild(element);
	addAttributes(element,id,name);
	createText(parentObj,'help',id+'_help','help');
	if (fullrow) createBreak(parentObj);
	return element;
}
function createRadio(parentObj,text,valueArray,id,name,fullrow,vertical)
{
	if (text) createText(parentObj,text,id+'_txt',name+'_txt');
	var cont = createContainer(parentObj,id);
	for (var i=0; i<valueArray.length; i++){

		if (i!= 0 && vertical) createBreak(cont);
		var field = createInput(cont,valueArray[i],'radio',valueArray[i],name);
		if (i == 0) field.checked = 'true';
		field.name = name;
		createText(cont,valueArray[i],valueArray[i]+'_txt',name);	
		createText(cont,'help',valueArray[i]+'_help','help');
	} 
	if (fullrow) createBreak(parentObj);		
}
function createList(parentObj,id,name,title)
{
	var element = document.createElement('UL');
	if (title) createText(parentObj,title,id+'_txt',name+'_txt');
	parentObj.appendChild(element);
	addAttributes(element,id,name);
	return element;
}
function createListElement(parentObj,text,id,name)
{
	var element = document.createElement('LI');
	var realElement = createText(element,text,id,name,true);
	parentObj.appendChild(element);
	return realElement;
}
function createBreak(parentObj)
{
	var element = document.createElement('BR');
	element.className = 'break';
	parentObj.appendChild(element);
}
function createDoubleBreak(parentObj)
{
	createBreak(parentObj);
	createBreak(parentObj);
}
function createImage(parentObj,id,name,address,info)
{
	var element = document.createElement('IMG');
	if (address) element.src = address;
	if (info) element.title = info;
	parentObj.appendChild(element);
	addAttributes(element,id,name);
	return element;
}
function createChoiceBox(parentObj,text,itemArray,id,name,sameId)
{
	if (text) createText(parentObj,text,id+'_txt',name+'_txt');
	var element = document.createElement('SELECT');
	if (itemArray) for (var i=0; i<itemArray.length; i++) createChoiceBoxElement(element,itemArray[i],sameId);
	parentObj.appendChild(element);
	addAttributes(element,id,name);
	return element;
}
function createChoiceBoxElement(parentObj,id,sameId)
{
	var element = document.createElement('OPTION');
	if (sameId){
		element.value = id;
		element.innerHTML = id;
	}
	else {
		element.value = id[0];
		element.innerHTML = id[1];
	}
	parentObj.appendChild(element);
	return element;
}
function createSelectbox(parentObj,id,values,selected,evtFunction,evtType,evtParam) // new
{
	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,'selectbox',evtFunction,evtType,evtParam);
	parentObj.appendChild(element);
}
function createEditor(parentObj)
{
	createText(parentObj,'Save','link_saveEditor','link',null,true);
	createTextarea(parentObj,'Editor','editor_txt','editor');	
	var uri = file + '/?action=editor';
	request(uri);
}
function receiveEditor(param)
{
	var editor = document.getElementById('editor_txt');
	editor.value = param[1];
}
function saveEditor()
{
	var editor = document.getElementById('editor_txt');
	var uri = file + '/?action=editorsave';
	var post = 'html=' + editor.value;
	request(uri,post);
}
