function addAttributes(element,id,className)
{	
	if (id){
		element.id = id;
		element.name = id;
	}
	if (className) element.className = className;
	if (element.tagName != 'SELECT') element.onclick = click;
	//element.onblur = click;
	if (element.tagName == 'SELECT') element.onchange = click;
	if (className == 'tabMenu' || className == 'link'){
		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 createFormular(parentObj,phpfile,id,name)
{
	if (browser == 'IE') 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';	
	createIFrame(element,'#',id+'_iframe',name);
	parentObj.appendChild(element);
	addAttributes(element,id,name);
	return element;
}
function createSubmit(parentObj,text,id)
{
	var element = createText(parentObj,text,id,'link');
	element.onclick = submit;
	return element;
}
//function createFormular(parentObj,action,target,id,name)
//{
//	if (browser == 'IE') 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;
//	element.target = target;	
//	//parentObj.appendChild(element);
//	//addAttributes(element,id,name);
//	//labelElements.push(createLink(element,'label',element.id));
//	return element;
//}
function createUpload(parentObj,text,id,name,fullrow)
{
	if (text) createText(parentObj,text,id+'_txt',name+'_txt');
	var element = createFormular(parentObj,'main.php',id,name);
	var file = createInput(element,'','file',id+'_file',name);
	file.onchange = submit;
	//createInput(formular,'Upload','submit','upload_submit',name);
	createInput(element,id+'_img','hidden','upload_image',name);
	var image = createImage(parentObj,id+'_img',name,30,30);
	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+'_file',name);
	if (fullrow) createBreak(parentObj);
	return element;
}
function createIFrame(parentObj,source,id,name)
{
	if (browser == 'IE') 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 createPopupContainer(parentObj,id)
{
	var frame = createContainer(parentObj,id+'Frame','',true);
	createContainer(frame,id);
}
function createPopupLink(parentObj,divid,title,id,height,width,parentCont,image,popupTitle)
{
	var element = document.createElement('A');
	element.href = '#TB_inline?height='+height+'&width='+width+'&inlineId='+divid;
	if (!popupTitle) popupTitle = title;
	element.title = popupTitle;
	if (image) createImage(element,image);
	else createText(element,title);
	parentObj.appendChild(element);
	addAttributes(element,id,'thickbox');
	
	if (parentCont == 'without') null;
	else if (parentCont) createPopupContainer(parentCont,divid);
	else createPopupContainer(getObject('help'),divid);
	
	tb_init(element);
	return element;
}
function createPopupLinkIframe(parentObj,url,text,id,height,width)
{
	var element = document.createElement('A');
	element.href = url;
	element.href += '&KeepThis=true&TB_iframe=true&height='+height+'&width='+width;
	//element.href += '?KeepThis=true&TB_iframe=true&height='+height+'&width='+width;
	element.title = text;
	createText(element,text);
	parentObj.appendChild(element);
	addAttributes(element,id,'thickbox');
	return element;
}
function createPopupLinkAjax(parentObj,url,text,id,height,width)
{
	var element = document.createElement('A');
	element.href = url;
	element.href += '&height='+height+'&width='+width;
	element.title = text;
	createText(element,text);
	parentObj.appendChild(element);
	addAttributes(element,id,'thickbox');
	return element;
}
function createPopupImage(parentObj,id,name,address)
{
	var element = document.createElement('A');
	element.href = address;
	createImage(element,id,name,address);
	parentObj.appendChild(element);
	addAttributes(element,'','thickbox');
	return element;
}
function createLine(parentObj)
{
	var element = document.createElement('hr');
	parentObj.appendChild(element);
}
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.href = '#';
		aElement.onclick = click;
	}
	liElement.appendChild(aElement);
	addAttributes(aElement, id, name);
	createText(aElement,text,'txt_'+id);
	
	return liElement;
}
function createInput(parentObj,value,type,id,name,clearAtFocus)
{
	if (browser == 'IE') 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 (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 createLabeledInput(parentObj,text,id,name,type,noBreak)
{
	if (text) createText(parentObj,text,id+'_txt','label');
	createInput(parentObj,'',type,id,name);
	if (!noBreak) createBreak(parentObj);
}
function createText(parentObj,text,id,name,generated,fullrow) // !generated == editable -> labelArray
{
	var element = document.createElement('SPAN');
	var label = labelArray[id];
	if (label) element.innerHTML = label;
	else element.innerHTML = text;
	parentObj.appendChild(element);
	addAttributes(element,id,name);
	if (!generated) element.onclick = onText;
	if (generated == 'longtext') element.onclick = onLongtext;
	if (name == 'admincell') element.onclick = onAdmincell;
	if (fullrow) createBreak(parentObj);
	return element;
}
function createTextarea(parentObj,text,id,name,width,height)
{
	var element = document.createElement('TEXTAREA');
	element.innerHTML = text;
	if (width) element.style.width = width+'px';
	if (height) element.style.height = height+'px';
	parentObj.appendChild(element);
	addAttributes(element,id,name);
	return element;
}
function createRadio(parentObj,text,valueArray,id,name,fullrow)
{
	if (text) createText(parentObj,text,id+'_txt',name+'_txt');
	for (var i=0; i<valueArray.length; i++){
				
		createInput(parentObj,valueArray[i],'radio',id,name);
		createText(parentObj,valueArray[i],id+'_txt',name);
	} 
	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,address,id,name,alt)
{
	var element = document.createElement('IMG');
	if (address) element.src = address;
	if (alt) element.alt = alt;
	parentObj.appendChild(element);
	addAttributes(element,id,name);
	return element;
}
function createChoiceBox(parentObj,text,itemArray,id,name,fullrow)
{
	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]);
	parentObj.appendChild(element);
	addAttributes(element,id,name);
	if (fullrow) createBreak(parentObj);
	return element;
}
function createChoiceBoxElement(parentObj,idArray)
{
	var element = document.createElement('OPTION');
	element.value = idArray[0];
	element.innerHTML = idArray[1];
	parentObj.appendChild(element);
	return element;
}
function addMoveability(parentObj)
{
	var element = createLink(parentObj,'Breiter','move_width_more');
	moveElements.push(element);
	var element = createLink(parentObj,'Schmaler','move_width_less');
	moveElements.push(element);
	var element = createLink(parentObj,'Höher','move_height_more');
	moveElements.push(element);
	var element = createLink(parentObj,'Tiefer','move_height_less');
	moveElements.push(element);
}

function moveTable(parentObj,direction,type)
{
	if (direction == 'width') {
	
		oldWidth = parseInt(parentObj.width);
		if (type == 'more') parentObj.width = oldWidth + 25;
		else if (type == 'less') parentObj.width = oldWidth - 25;
	}
	if (direction == 'height') {
	
		oldHeight = parseInt(parentObj.height);
		if (type == 'more') parentObj.height = oldHeight + 25;
		else if (type == 'less') parentObj.height = oldHeight - 25;
	}
		
	return;		
}

function getId(parentObj)
{
	var idFather = getIdNumber(parentObj);
	//if (!idFather) return '_0';
	var idSibling = getIdNumber(parentObj.lastChild.previousSibling,true);
	if (idSibling != 0 && !idSibling) return idFather + '_0';
	
	//var idSibling = lastSibling.id.split('_');
	//idSelf = idSibling + 1;
	return idFather + '_' + (idSibling + 1);
}
function getIdNumber(element,justLast)
{
	var id = '';
	if (element == null || element.id == null) return '';
	var idArray = element.id.split('_');
	if (justLast) return parseInt(idArray[idArray.length-1]);
	for (var i=0; i<idArray.length; i++) {
		if (!isNaN(idArray[i])) id += '_' + idArray[i]; // just numbers
	};
	return id;
}
function submit()
{
	var answer = beforeSubmit(this.parentNode);
	if (answer) this.parentNode.submit();
}