// $Id: OPCutils.js,v 1.2 2008-09-09 08:25:16 uhahn Exp $
// verschiedene Helferlein, um Pica Layouts zu erweitern


var presLabels=new Array('preslabel','rec_lable'); // welche gibts noch?
var preslabelClass="init";
var presvalueClass='presvalue';
var PicaLabelTab=null;
initpica();

/**
	finde die Ergebnistabelle eines Pica OPC
	
	assert: 
		preslabelClass enthaelt den gefundenen CSS classname 
		PicaLabelTab ist das TBODY oder TABLE element und wird von addOPCTitleLine gebraucht
*/
function initpica(){
for(var i in presLabels){
	var tmptab=labelTab(presLabels[i]);
	if(tmptab){
		preslabelClass=presLabels[i];
		PicaLabelTab=tmptab;
		break;
}}
}

/**
 finde das Tabellenenelement, an dem die PICA preslabel haengen (keine id noetig)
 @param {tdclass} class name of the current label class en vogue 
 (hint: a list of recognized label
 
  class names is maintained in Array presLabels[])
*/
function labelTab(tdclass){
var labeltds=new Array();
var alltds=document.getElementsByTagName('td');
for(t in alltds){ 
	if(tdclass==alltds[t].className){ 
		labeltds=labeltds.concat(alltds[t]);
	}
}
//alert(labeltds.length + " labeltds found");

if(labeltds.length){
var node=labeltds[0];
	while(node=node.parentNode){ // ist root.parentNode == null?
		if(('TBODY'==node.nodeName.toUpperCase()) || ('TABLE'==node.nodeName.toUpperCase())){
			return node;
	}}
return null;	
}}

/**
 erweitere die Titelanzeige in einem PicaOPC

 @param {label name} label:value pair which is appended to the currently displayed Pica labels
 @param{DOM Object} the value currently has to be prepared as a DOM Object
*/
function addOpcTitleLine(label,dataEl){ 
var labeltab=PicaLabelTab; // set before as found on page
if(!labeltab) return; // wo sind wir? 
var labelEl=document.createTextNode(label);

// @TODO flexible DOM Object / Text handling
//var dataEl=document.createTextNode(data);

var newrow=document.createElement('tr');
	newrow.appendChild(document.createElement('td'));
	newrow.lastChild.className=preslabelClass;
	newrow.lastChild.style.verticalAlign="top"; // why not set in class?
	newrow.lastChild.appendChild(labelEl);
	newrow.appendChild(document.createElement('td'));
	newrow.lastChild.className=presvalueClass;
	newrow.lastChild.style.verticalAlign="bottom"; // why not set in class?
	newrow.lastChild.appendChild(dataEl);

labeltab.appendChild(newrow);
}


/**
	load URL as a new stylesheet into the HEAD of the current Document
	@param{url} URL of type text/css or..
*/
function loadStyle(url){
var newsty = document.createElement('link');
newsty.setAttribute('type','text/css');
newsty.setAttribute('rel','stylesheet');
document.getElementsByTagName('head')[0].appendChild(newsty);
newsty.setAttribute('href',url);
}
