2erlei/public/js/bereiche.js

150 lines
4.5 KiB
JavaScript
Raw Permalink Blame History

// <script>
/* Bereiche
*
* @version 2.2
* @author Matthias Viehweger <kronn@kronn.de>
*/
var Bereiche = {
count: 0,
fieldlist: new Array(),
helpfield: '',
init: function() {
// auf Funktionen pr<70>fen
if (!document.getElementsByTagName) return;
if (!document.getElementById) return;
// alle Unterhilfetexte verstecken.
Bereiche.helpfield = $('adminhelp');
Bereiche.hideAllHelp();
// alle Felder finden und verstecken
var fields = document.getElementsByTagName('fieldset');
for (var i = 0; i < fields.length; i++ ) {
// individuell einstellbare Textbereiche anzeigen oder verstecken
if ( Element.hasClassName(fields[i], 'bereich_indiv') ) {
if ( !Element.hasClassName(fields[i], 'unsichtbar') && !Element.hasClassName(fields[i], 'sichtbar') ) {
Bereiche.show(fields[i]);
}
base.addEvent(fields[i].firstChild, 'click', Bereiche.toggleIndiv, false);
// statische Textbereiche anzeigen
} else if ( Element.hasClassName(fields[i], 'bereich_static') ) {
Bereiche.show(fields[i]);
Element.addClassName(fields[i], 'spalte2');
}
if ( Element.hasClassName(fields[i], 'bereich_static') || Element.hasClassName(fields[i], 'bereich_indiv') ) continue;
if ( fields[i].id != '' ) {
Bereiche.hide(fields[i]);
base.addEvent(fields[i].firstChild, 'click', Bereiche.getToggle, false);
Bereiche.fieldlist.push(fields[i]);
}
}
Bereiche.count = Bereiche.count + Bereiche.fieldlist.length;
// ggf. ausgewähltes Feld anzeigen
var chosen = window.location.hash;
if( chosen.length > 1 ) {
window.scrollTo(0,0);
chosen = document.getElementById(chosen.substr(1,chosen.length));
Bereiche.show(chosen);
} else if( Bereiche.fieldlist.length > 0 ) {
Bereiche.show(Bereiche.fieldlist[0]);
}
},
getToggle: function(e) {
var target = window.event ? window.event.srcElement : e ? e.target : null;
if (!target) return;
target = target.parentNode;
Bereiche.doToggle(target);
},
toggle: function(targetid) {
target = $(targetid);
Bereiche.doToggle(target);
},
doToggle: function(target) {
// wenn sichtbar, dann verstecken und Funktion verlassen
if ( Element.hasClassName(target, 'sichtbar') ) {
Bereiche.hide(target);
Bereiche.count--;
return true;
}
// ggf. offene Bereiche verstecken
if ( Bereiche.count >= 1 ) {
for( var i = 0; i < Bereiche.fieldlist.length; i++ ) {
if ( Element.hasClassName(Bereiche.fieldlist[i], 'unsichtbar') ) continue;
Bereiche.hide( Bereiche.fieldlist[i] );
Bereiche.count--;
}
}
// gewählten Bereich zeigen
Bereiche.show(target);
Bereiche.count++;
},
toggleIndiv: function(e) {
var target = window.event ? window.event.srcElement : e ? e.target : null;
if (!target) return;
target = target.parentNode;
// verstecken oder anzeigen
if ( !Element.hasClassName(target, 'sichtbar') ) {
Bereiche.show(target);
} else {
Bereiche.hide(target);
}
},
hide: function(field) {
if ( Element.hasClassName(field, 'sichtbar') ) {
Element.removeClassName(field, 'sichtbar');
}
Element.addClassName(field, 'unsichtbar');
// evtl. Hilfetexte verstecken
// Bereiche.hideAllHelp();
},
show: function(field) {
if ( Element.hasClassName(field, 'unsichtbar') ) {
Element.removeClassName(field, 'unsichtbar');
}
Element.addClassName(field, 'sichtbar');
// passende Hilfe anzeigen
Bereiche.showHelp(field.id);
},
showHelp: function(helpid) {
var returnval = false;
if ( !Bereiche.helpfield ) return returnval;
Bereiche.hideAllHelp();
// nur einen bestimmten Text im Feld "hilfe" anzeigen
var helpfields = Bereiche.helpfield.getElementsByTagName('div');
for (var i = 0; i < helpfields.length; i++) {
if ( helpfields[i].className == 'hidden' &&
(' ' + helpfields[i].getAttribute('rel') + ' ').indexOf(' '+helpid+' ') != -1 ) {
helpfields[i].className = '';
new Effect.Appear(helpfields[i]);
returnval = true;
}
}
return returnval;
},
hideAllHelp: function() {
// alle Hilfetexte verstecken
if ( !Bereiche.helpfield ) return;
var helpfields = Bereiche.helpfield.getElementsByTagName('div');
for ( var i = 0; i < helpfields.length; i++ ) {
if ( helpfields[i].className == '' ) helpfields[i].className = 'hidden';
}
var helpheadings = Bereiche.helpfield.getElementsByTagName('h4');
for ( var i = 0; i < helpheadings.length; i++ ) {
if ( helpheadings[i].className == '' ) helpheadings[i].style.display = 'none';
}
}
}
base.addEvent(window, 'load', Bereiche.init, false);
if( window.location.hash != '' ) { window.scrollTo(0,0) }