function zeroPad(val, digits) {
    val = val.toString();
    while(val.length < digits) {
        val = '0' + val;
    }
    return val;
}

function get_base_url() {
    return '/cms/list/' + (str_id_ziel>0?str_id_ziel:str_id) + '/DE/?';
}

function cal_get_action(d, m, y) {
    if(d > 0) {
        cal_setcookie(d, m, y);
    }   
    var url = get_base_url();
    var c = str_id;
    var c1 = document.forms['main'].categorie.options[document.forms['main'].categorie.selectedIndex].value;
    var c2 = document.forms['main'].region.options[document.forms['main'].region.selectedIndex].value;
    var qu = document.forms['main'].text.value;
    if(c1.length > 0) {
        c += ';' + c1;
    }
    if(c2.length > 0) {
        c += ';' + c2;
    }    
    
    url += '&c=' + c;
    
    if(qu.length > 0) {
        url += '&qu=' + encodeURIComponent(qu);
    }
    
    if(d > 0) {
        d = zeroPad(d, 2);
        m = zeroPad(m, 2);    
        url += '&cal_day=' + d + '.' + m + '.' + y;
    }    
    return url;
}

function cal_action(d, m, y) {
    var url = cal_get_action(d, m, y);
    location.href=url;
}

function numval(val) {    
    while(val.length > 1 && val.substring(0, 1) == '0') {
        val = val.substring(1, val.length);
    }    
    return parseInt(val);
}

function cal_setcookie(d, m, y) {
    m = zeroPad(m, 2);
    d = zeroPad(d, 2);
    
    dat = d + '.' + m + '.' + y;    
    SetCookie("SCDATE", dat, null, '/')        
}


function SetCookie (name, value) {
    var argv = SetCookie.arguments;
    var argc = SetCookie.arguments.length;
    var expires = (argc > 2) ? argv[2] : null;
    var path = (argc > 3) ? argv[3] : null;
    var domain = (argc > 4) ? argv[4] : null;
    var secure = (argc > 5) ? argv[5] : false;
    
    document.cookie = name + "=" + escape (value) +
    ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
    ((path == null) ? "" : ("; path=" + path)) +
    ((domain == null) ? "" : ("; domain=" + domain)) +
    ((secure == true) ? "; secure" : "");
}


function getCookie(Name) {
    var search = Name + "=";
    var CookieString = document.cookie;
    var result = null;
    if (CookieString.length > 0) {
        offset = CookieString.indexOf(search);
        if (offset != -1) {
            offset += search.length;
            end = CookieString.indexOf(";", offset);
            if (end == -1)
                end = CookieString.length;
            result = unescape(CookieString.substring(offset, end));
        }
    }
    return result;
}


function date_is_valid(d, m, y) {
    if(m < 1 || m > 12 || y < 1950 || y > 2100) return false;
    var ml =[0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    if(m != 2 && d > ml[m]) return d <= ml[m];
    if(m == 2) {
        if(y % 400 == 0 || (y % 100 != 0 && y % 4 == 0)) return (d <= 29);
        return d <= 28;
    }
        
    return true;
}
 


function computeCal(d, m, y) {    
    d = numval(d);
    m = numval(m);    
    y = numval(y); 
    
    cur_dat = new Array(d, m, y);
   
    var mn =
    ['Januar', 'Februar', 'M&auml;rz', 'April', 'Mai', 'Juni', 'Juli', 'August',
    'September', 'Oktober', 'November', 'Dezember'];
    var dim =[31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    var wt = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So'];  
    var oD = new Date (y, m - 1, 1);	  
    oD.od = oD.getDay ();
    var todaydate = new Date ()
    var scanfortoday = (y == todaydate.getFullYear () && m == todaydate.getMonth () + 1) ? todaydate.getDate () : 0	
    
    dim[1] = (((oD.getFullYear () % 100 != 0) && (oD.getFullYear () % 4 == 0))
        || (oD.getFullYear () % 400 == 0)) ? 29 : 28;
    
    var prev_m = m-1;
    var prev_y = y;
    var next_m = m+1;
    var next_y = y;
    if(prev_m == 0) {
        prev_m = 12;
        prev_y--;
    }
    if(next_m == 13) {
        next_m = 1;
        next_y++;
    }            
    
    var t ='<div class="simplecal">';
    
    t += '<table class="simplecal_table_top" cols="7" cellpadding="0" border="0" cellspacing="0">';
    t += '<tr align="center">';
    t += '<td class="simplecal_head_top_left"><a href="#" onclick="printCal(1, ' + prev_m + ',' + prev_y + '); return false">&laquo;</a></td>';
    t += '<td colspan="5" align="center" class="simplecal_td">' + mn[m - 1] + ' ' + y + '</td>';
    t += '<td class="simplecal_head_top_right"><a href="#" onclick="printCal(1, ' + next_m + ',' + next_y + '); return false">&raquo;</a></td>';
    t += '</tr></table>';
    
    t += '<table class="simplecal_table" cols="7" cellpadding="0" border="0" cellspacing="0">';
	t += '<tr align="center">';    
    for (s = 0; s < 7; s++) {
        t += '<td class="simplecal_head">' + wt[s] + '</td>';
    }    
    t += '</tr><tr align="center">';        
    
    var von = 1;
    var bis = 42;
    if(oD.od == 0) {
        von -= 7;
        bis -= 7;
    }    
        
    for (i = von; i <= bis; i++) {        
        var x = ((i - oD.od >= 0)
            && (i - oD.od < dim[m - 1])) ? i - oD.od + 1 : '';        
        var px = (x>''?x:'&nbsp');
                
		if(x == d) {
	        t += '<td class="simplecal_selected">';
		} else if(x > 0) {
			t += '<td class="simplecal_day">';
		} else {
			t += '<td class="simplecal_empty">';
		}
        if(x > '') {            
            t += '<a href="#" onclick="cal_action(' + x + ',' +  m + ',' + y+'); return false">';
        }
        t += px;
        if(x > '') {            
            t += '</a>';
        }
        
        t += '</td>';                
        
        if (((i) % 7 == 0) && (i < 36)) {
            if(x == '' || x == dim[m-1]) {
                break;
            }
            t += '</tr><tr align="center">';
        }        
    }
    t += '</tr></table></div>';     
    return t;
}

function printCal(d, m, y) {        
    d = numval(d);    
    m = numval(m);    
    y = numval(y);    
    
    var simplecal_id = document.getElementById('simplecal_html');    
        
    var s = computeCal(d, m, y);
    //s += '<br/>' + getCookie('SCDATE');
    simplecal_id.innerHTML = s;
    cal_setcookie(d, m, y);  
}

var str_id = 0;
var str_id_ziel = 0;
var cur_dat = '';
function initCal(_str_id) {
    var url = location.href;
    str_id = _str_id;    
    var curval = getCookie('SCDATE');    
    if(curval == null || !date_is_valid(curval))
        curval = '';
    var rx = /^(\d{2})\.(\d{2})\.(\d{4})$/;    
    var rx2=  /(new_)?cal_day=today/;
    if(!curval.match(rx) || url.match(rx2)) {
        var dat = new Date();
        curval = '' + zeroPad(dat.getDate(), 2) + '.' + 
                 zeroPad(dat.getMonth()+1, 2) + '.' +
                 dat.getFullYear();           
    }            
    
    // Noch mehr zieht der cal_day parameter
    var rx1 = /(new_)?cal_day=(\d{2}\.\d{2}\.\d{4})/;
    if(url.match(rx1)) {
        curval = RegExp.$2;        
    }        

    rx.exec(curval);
    var d = numval(RegExp.$1);
    var m = numval(RegExp.$2);
    var y = numval(RegExp.$3);        
    
    if(!date_is_valid(d, m, y)) {
        var dat = new Date();
        d = dat.getDate();
        m = dat.getMonth()+1;
        y = dat.getFullYear();
    }
    
    printCal(d, m, y);
        
    // Auswertung der 'c' Parameter
    rx = /c=\d+-?;(\d+-?);(\d+-?)/;    
    if(url.match(rx)) {        
        var c1 = RegExp.$1;
        var c2 = RegExp.$2;

        var el = document.forms['main'].categorie;
        var i;                
        for(i = 0; i < el.length; i++) {            
            if(el.options[i].value == c1) {                                
                el.selectedIndex=i;
                break;
            }
        }
        var el = document.forms['main'].region;
        for(i = 0; i < el.length; i++) {            
            if(el.options[i].value == c2) {                                
                el.selectedIndex=i;
                break;
            }
        }
    }    
}

function do_today() {
    var url = get_base_url();
    var dat = new Date();
    cal_action(dat.getDate(), dat.getMonth()+1, dat.getFullYear());
}
    

function do_tomorrow() {
    var url = get_base_url();
    var dat = new Date();
    dat = new Date(dat.getFullYear(), dat.getMonth(), dat.getDate()+1);
    cal_action(dat.getDate(), dat.getMonth()+1, dat.getFullYear());
}

function doSubmit() {    
    var s = "cal_action(" + cur_dat[0] + ", " + cur_dat[1] + ", " + cur_dat[2] + ")";
    window.setTimeout(s, 10);    
}

function do_clear() {        
    var url = get_base_url();
    var dat = new Date();
    var cal_day = zeroPad(dat.getDate(), 2) + '.' +
                  zeroPad(dat.getMonth()+1, 2) + '.' +
                  dat.getFullYear();
    url += '&cal_day=' + cal_day;    
    location.href=url;
}

function do_next7() {
    var dat = new Date();    
    str_id_ziel = 35973197;
    var url = cal_get_action(0,0,0);
    
    // Was ist der naechste Samstag?    
    var dat1 = new Date(dat);
    dat1.setTime(dat1.getTime());
    var dat2 = new Date(dat);
    dat2.setTime(dat2.getTime() + 6*1000*60*60*24);
        
    url += '&cal_start=' +
           zeroPad(dat1.getDate(), 2) + '.' +
           zeroPad(dat1.getMonth()+1, 2) + '.' +
           dat1.getFullYear();
    url += '&cal_end=' +
           zeroPad(dat2.getDate(), 2) + '.' +
           zeroPad(dat2.getMonth()+1, 2) + '.' +
           dat2.getFullYear();    
    location.href=url;
}

function do_weekend() {
    var dat = new Date();    
    str_id_ziel = 35973197;
    var url = cal_get_action(0,0,0);
    
    // Was ist der naechste Samstag?
    var dow = dat.getDay();
    var dat1 = new Date(dat);    
    if(dow == 0) {
        // Sonntag: passt, dann ist cal_start=cal_end
    } else {
        while(dow < 6) {
            dat1.setTime(dat1.getTime() + 1000*60*60*24);
            dow++;
        }        
    }
    var dat2 = new Date(dat1);    
    dat2.setTime(dat2.getTime() + 1000*60*60*24);        
        
    url += '&cal_start=' +
           zeroPad(dat1.getDate(), 2) + '.' +
           zeroPad(dat1.getMonth()+1, 2) + '.' +
           dat1.getFullYear();
    url += '&cal_end=' +
           zeroPad(dat2.getDate(), 2) + '.' +
           zeroPad(dat2.getMonth()+1, 2) + '.' +
           dat2.getFullYear();    
    location.href=url;
}

