﻿/* ---- config -------------- */
var CDS_MARK_POSITION = "before";
var CDS_EX_STYLE = "padding-right:0.5em;";

var CDS_MARK_CLOSING = '';
var CDS_MARK_OPENING = '';

var CDS_IDSUFFIX_TITLE = '_titel';
var CDS_IDSUFFIX_LIST = '_content';

var CDS_TARGET_CLOSE = new Array('article2','article3','article4','article5','article6','article7','article8','article9','article10','article11','article12','article13','article14','article15','re_article2','re_article3','re_article4','re_article5','re_article6','re_article7');
var CDS_TARGET_OPEN = new Array('article1','article1_2','article1_3','article1_4','article1_5','article1_6','article1_7','article1_8','article1_9','article1_10','article1_11','re_article1','re_article1_2','re_article1_3');
/* ---- end of config -------- */

var CDS_MARK_IDX_CLOSE = 0;
var CDS_MARK_IDX_OPEN = 1;
var CDS_MARK = new Array(CDS_MARK_CLOSING, CDS_MARK_OPENING);

var CDS_CSSNAME = "_changedisplay.css";

var crnt_style;
var cssrule_idxs;
var disp_vals;
var title_formats;

var id_regexp;

function cds_initialize() {
    var isIE = true;
    try {
        document.createStyleSheet( CDS_CSSNAME );
    } catch(ex) {
        isIE = false;
        var newStyle = document.createElement('style');
        newStyle.type = "text/css";
        document.getElementsByTagName('head')[0].appendChild(newStyle);
    }

    disp_vals = new Array();
    id_regexp = new RegExp(CDS_IDSUFFIX_TITLE+"$");
    crnt_style = document.styleSheets[document.styleSheets.length-1];

	var markIsEnabled = (CDS_MARK_CLOSING != '') && (CDS_MARK_OPENING != '');

    if (isIE == true) {
        title_formats = new Array();

        setOnclickEvent = setOnclickEvent_IE;
		getDispval = getDispval_IE;
		if (markIsEnabled == true) {
	        initMark = initMark_IE;
	        setMark = setMark_IE;
		}
    } else {
        cssrule_idxs = new Array();
        for (var i = 0; i < CDS_MARK.length; i++) { CDS_MARK[i] = ':' + CDS_MARK_POSITION + '{content:"' + CDS_MARK[i] + '";' + CDS_EX_STYLE + '}'; }

        setOnclickEvent = setOnclickEvent_OTHER;
		getDispval = getDispval_OTHER;
		if (markIsEnabled == true) {
	        initMark = initMark_OTHER;
	        setMark = setMark_OTHER;
		}
    }

    init_lists(CDS_TARGET_CLOSE, CDS_MARK_IDX_CLOSE);
    init_lists(CDS_TARGET_OPEN, CDS_MARK_IDX_OPEN);
}

// # mark initialize
function initMark(){};
function initMark_IE(title, list, disp) {
    title_formats[list.id] = (CDS_MARK_POSITION == 'before') ? '%MARK% ' + title.innerText : title.innerText + ' %MARK%';
    title.innerText = title_formats[list.id].replace('%MARK%', CDS_MARK[ disp ]);
}
function initMark_OTHER(title, list, disp) {
    cssrule_idxs[list.id] = 
        crnt_style.insertRule(
            title.tagName + '#' + title.id + CDS_MARK[ disp ],
            crnt_style.cssRules.length );
}

// # init display values
function getDispval(){};
function getDispval_IE(){ return ''; }
function getDispval_OTHER(list){ return window.getComputedStyle(list, null).display; }

// # list initialize
function init_lists(targets, disp) {
    var len = targets.length;
    for (var i = 0; i < len; i++) {
        var title = document.getElementById(targets[i] + CDS_IDSUFFIX_TITLE);
        var list = document.getElementById(targets[i] + CDS_IDSUFFIX_LIST);
		if ((title == null) || (list == null)) continue;

        setOnclickEvent(title);
		disp_vals[list.id] = getDispval(list);
        initMark(title, list, disp);
        title.style.cursor = 'pointer';
        if ( disp == CDS_MARK_IDX_CLOSE ) { list.style.display = 'none'; }
    }
}

// # onclick event
function change_display(evt) {
    evt = (evt) ? evt : event;
    var title = (evt.srcElement) ? evt.srcElement : evt.target;
    var list = document.getElementById(title.id.replace(id_regexp, CDS_IDSUFFIX_LIST));
    setMark(title, list);
    setListDisplay(list);
}
function setOnclickEvent(){};
function setOnclickEvent_IE(elm){ elm.attachEvent('onclick', change_display); };
function setOnclickEvent_OTHER(elm){ elm.onclick = change_display; };

// # change mark
function setMark(){};
function setMark_IE(title, list) {
    var stat = (list.style.display != 'none') ? CDS_MARK_IDX_CLOSE : CDS_MARK_IDX_OPEN;
    title.innerText = title_formats[list.id].replace('%MARK%', CDS_MARK[stat]);
}
function setMark_OTHER(title, list) {
    var stat = (list.style.display != 'none') ? CDS_MARK_IDX_CLOSE : CDS_MARK_IDX_OPEN;
    crnt_style.deleteRule(cssrule_idxs[list.id]);
    cssrule_idxs[list.id] = 
        crnt_style.insertRule(
            title.tagName + '#' + title.id + CDS_MARK[stat],
            cssrule_idxs[list.id] );
}

// # change list's display
function setListDisplay(list) {
    list.style.display = (list.style.display != 'none') ? 'none' : disp_vals[list.id];
}

window.onload = cds_initialize;
