/* 
fixLinkDecoration()
Copyright 2008 by backslash - artists of new media - www.backslash.ch

Version: 1.0, 28.8.2008, ms

arguments: 
	- elType: 
		Werte: tag,class,id,name
	- elName:
		Wert: Bezeichnung des gewuenschten Elements 
	- decoClass (optional):
		Wert: Name der CSS-Klasse, die ein gesetztes Underline-Atribut enthaelt
		Default: setdeco
Besonderes: Hilfsfunktion getElementsByClassName muss vorhanden sein.
*/

	

function fixLinkDecoration(elType,elName){
	var decoClass = 'setdeco';
	var endSpan = '\<\/span>';
	var el,h,spanClass,posAdd,aryNames; 
	var aryChars = new Array('p','y','j','q','g', ',', ';');
	var firstChildOnly = false;
	aryNames = elName.split(',');
	if(fixLinkDecoration.arguments.length>2){
		decoClass = fixLinkDecoration.arguments[2];
		}
	if(fixLinkDecoration.arguments.length>3){
		firstChildOnly = fixLinkDecoration.arguments[3];
		}
	spanClass = '\<span class="' + decoClass + '"\>';
	posAdd = spanClass.length;
	
	for( var e=0; e<aryNames.length; e++){
		el = getElementsToFix(elType,aryNames[e],firstChildOnly);
		if(elType=='id'){
			if(firstChildOnly){
				if( el[0].childNodes.length ){
					dofixLinkDecoration(false, el[0].firstChild ,spanClass,endSpan,aryChars,posAdd);
					}
				}
			else{
				dofixLinkDecoration(false,el,spanClass,endSpan,aryChars,posAdd);	
				}
			}
		else{
			for(var i=0;i<el.length; i++){
				dofixLinkDecoration(firstChildOnly,el[i],spanClass,endSpan,aryChars,posAdd);
				}
			}
		}
	}
function dofixLinkDecoration(firstChildOnly,el,spanClass,endSpan,aryChars,posAdd){
	var found = false;
	var hasNbsp = false;
	var h,tEl;
	if(firstChildOnly){
		if( el.childNodes.length ){
			tEl = el.firstChild;
			found = true;
			}
		}
	else{
		tEl = el;
		found = true;
		}
	h = tEl.innerHTML;
	if( h.indexOf('<') == -1 && ( h.match('[pgjqy]') || h.indexOf(',') != -1 || h.indexOf(';') != -1) ) {
		tEl.style.textDecoration='none';
		h = spanClass + h;
		if(h.indexOf('&nbsp;')!=-1){
			hasNbsp = true;
			h = h.replace(/&nbsp;/g, "fixthisnonbreakin"); 
			}
		for(var p=0;p<aryChars.length;p++){
			var pos = h.indexOf(aryChars[p], 3);
			while (pos >= 0){
				h = h.substring(0, pos) + endSpan + aryChars[p] + spanClass + h.substring(pos+1);
				pos = h.indexOf(aryChars[p], pos + posAdd);
				}
			}
		h += endSpan;
		if(hasNbsp){
			h = h.replace(/fixthisnonbreakin/g, "&nbsp;"); 
			}
		tEl.innerHTML = h;
		}
	
	}
function getElementsToFix(elType,elName){
	switch (elType.toLowerCase()) {
		case "tag":
			return document.getElementsByTagName(elName);
			break;
		case "class":
			return document.getElementsByClassName(elName);
			break;
		case "id":
			var aryReturn = new Array(document.getElementById(elName));
			return aryReturn;
			break;
		case "name":
			return document.getElementsByName(elName);
			break;
		}
	return new Array();
	}