/* start zipped version Mi Aug 18 10:38:29 CEST 2010 */
// global.js
var isTop = self===top;
var trans = '/images/trans.gif';
var adderClone = 0;

function send2server(url, callback) {
    jQuery.ajax({
        type: "GET",
        url: url,
        cache: false,
        success: callback
    });
};

/**
 * Returns the rating image for a given number of stars
 */
function getRateHTML(num) {
	return '<img src="' + trans + '" alt="" class="rateimg rate'+num+'" />';
};

/**
 * Adds the "mehr anzeigen" link to the left stats column in Mein DocInsider.
 * To be called inside Mein DocInsider -> Mein DocInsider ** NOT on domload! **
 * Assumes MORE_LINK_TEXTS defined globally, otherwise defaults to standard texts.
 */
function addStatsMoreLink() {
	self.MORE_LINK_TEXTS = self.MORE_LINK_TEXTS || [
				'mehr anzeigen',			
				'weniger anzeigen'];
	
	document.write(	'<div class="dotline" style="margin:5px 0"></div>'+
					'<a id="l_fullstats" href="#" class="moreLink">'+MORE_LINK_TEXTS[0]+'</a>');
	
	jQuery('#fullstats').addClass('hide');
	jQuery( function() {
		jQuery('#l_fullstats').click( function() {
			var jFS = jQuery('#fullstats');
			if (typeof this.fullstatsON=='undefined') this.fullstatsON = 0;
			if (this.fullstatsON)
				 jFS.fadeOut(300);
			else jFS.fadeIn(300);
			this.fullstatsON = ++this.fullstatsON % 2;
			jQuery(this).html( MORE_LINK_TEXTS[this.fullstatsON] ).toggleClass('reverse');
			return false;
		});
	});
};

/**
 * Set cursor focus on what field  
 */
jQuery( function() {
    if (typeof NO_FOCUS=='undefined' && document.location.href.indexOf('#') == -1) {
        // focus "was" field on start...
        var yuiWhat = jQuery('#yuiWhat');
        if (yuiWhat.length != 0) yuiWhat[0].focus();
    }

    jQuery('ul.smalltabs li a').bind('click', smallTabsClickHandler);
});

/**
 * to be assigned on dom load
 */
var smallTabsClickHandler = function() {
	var me = this;
	if (this.className.match(/active/)) return false;
	jQuery('a.active', this.parentNode.parentNode).removeClass('active').each( function() {
		try {
			var divID = this.href.match(/(#.*)$/)[1];
            jQuery(divID).removeClass('active');
        } catch(ignore) {
			return;
		}
	});
	try {
		var divID = this.href.match(/(#.*)$/)[1];
		jQuery(this).add(divID).addClass('active');
	} catch(ignore) {
		return;
	}	
	return false;
};

function escapeOverlay(url) {
	try {
		if (top.frames.length > 0 && url != null && url != '') {
			top.location.href = url;
		}
	} catch(ignore) {}
};

/**
 * MeinDocInsider -> Einstellungen -> Bearbeiten handler
 * To be assigned using activateEditHandlers() on the resp. page
 */
self.editLinkHandler = function() {
	this.isON = (this.isON || 0);
	var id = this.id.match(/editlink_(.*)$/)[1],
		editSelector = '#'+id+'_edit',
		infoSelector = '#'+id+'_info';
	jQuery(editSelector+','+infoSelector).toggleClass('hide');
	this.isON = ++this.isON % 2;
	this.innerHTML = self.EDIT_LINK_TEXTS[this.isON];
	if (editSelector == '#eintrag_edit') {
		document.getElementsByName('editData')[0].value = this.isON;
	} else
	if (editSelector == '#sprech_edit') {
		document.getElementsByName('editSchedule')[0].value = this.isON;
	} else
	if (editSelector == '#leistung_edit') {
		document.getElementsByName('editBenefits')[0].value = this.isON;
	} else
	if (editSelector == '#tags_edit') {
		document.getElementsByName('editTags')[0].value = this.isON;
	}
	if (self!=top && self.adaptSize) self.adaptSize();
	return false;
};

self.EDIT_LINK_TEXTS = [ // should be overwritten in respective files with wording from properties file
	'Bearbeiten',
	'Abbrechen'];

function activateEditHandlers() {
	jQuery('a.editlink').each( function() {
		jQuery(this).click(self.editLinkHandler);
		var id = this.id.match(/editlink_(.*)$/)[1],
			editSelector = '#'+id+'_edit';
		if (!jQuery(editSelector+'.hide').length) {
			this.isON = 1;
		}
		jQuery(this).html( self.EDIT_LINK_TEXTS[this.isON || 0] );
	});
};

/**
 * Adds 'add input field' functionality to a buttton/input pair.
 * @param string buttonID the 'add' buttton's ID
 * @param string protoInputID id of the text-input to use as pattern for new inputs
 * Updates the overlay's size if opened in the latter.
 */
function addAdderHandler(buttonID, protoInputID) {
	// add "add email address" functionality..
	jQuery('#'+buttonID).click( function() {
		var clone = document.getElementById(protoInputID).cloneNode(1);
		if (!clone.nodeName.match(/select/i)) clone.value = '';
		 else clone.selectedIndex = 0;
		clone.removeAttribute('id');
		jQuery(this).before(clone);
		clone.focus();
		if (self!=top && self.adaptSize) self.adaptSize();
		return false;
	});
};

/**
 * Adds 'add input field' functionality to a buttton/input pair.
 * @param string buttonID the 'add' buttton's ID
 * @param string protoInputID id of the text-input to use as pattern for new inputs
 */
function addInputAdderHandler(buttonID, protoInputID) {
	// add "add email address" functionality..
	jQuery('#'+buttonID).click( function() {
		if (adderClone > 8) return false; // 10 items limit
		var clone = document.getElementById(protoInputID).cloneNode(1);
		if (!clone.nodeName.match(/select/i)) clone.value = '';
		else clone.selectedIndex = 0;
		var strId = clone.getAttribute('id');
		var strName = clone.getAttribute('name');
		if (strId == null) strId = '';
		if (strName == null) strName = '';
		clone.removeAttribute('id');
		adderClone++;
		clone.setAttribute('id',strId + adderClone);
		clone.setAttribute('name',strName + adderClone);
		jQuery(this).before(clone);
		clone.focus();
		if (self!=top && self.adaptSize) self.adaptSize();
		return false;
	});
};

loginUrlParameterWhat = '';
loginUrlParameterWhere = '';
loginUrlParameterClass = '';

function loginStatusOkCallbackHandler(obj) {
    if (obj != null) {
        //var stat = document.getElementById('loginMenu');
        var stat = jQuery('#loginMenu');
        if (stat != null) {
            //stat.innerHTML = obj
            stat.html(obj);
        }
    }
};

function getThickboxLink(url, msg) {
    return '<a href="'+url+'" rel="nofollow, noindex" class="thickbox">'+msg+'</a>';
};

function createStaticLoginMenu(divId, systemUrl, callbackUrl, loginText, registerText) {
    var loginUrl    = systemUrl+"login/auth?url="+callbackUrl+"&KeepThis=true&TB_iframe=true&width=931&height=432";
    var registerUrl = systemUrl+"user/register";

    var content = "";
    content +=  "<div class='loginMenuLogin'>";
    content +=      getThickboxLink(loginUrl, "<img src='"+systemUrl+"images/buttons/but_anmelden.jpg'/>");
    content +=  "</div>";
    content +=  "<div class='loginMenuRegister'>";
    content +=  "   <a href='"+registerUrl+"' rel='nofollow, noindex' id='lnk_reg'>"+registerText+"</a>";
    content +=  "</div>";
    document.getElementById(divId).innerHTML = content;
};

function adaptSize(updateHoriToo) {
    var HORI_PADDING = 25,
        h = jQuery(self.document.body).innerHeight(),
        w = (updateHoriToo)? jQuery('#ocontent div:first').width() : jQuery(self.document.body).width(),
        jTBWIN = jQuery('#TB_window', top.document),
        reused = jTBWIN.attr('reused');		// indicates whether a new page has been loaded into an opened overlay

    if (!h || !w) return;

    var	o = {
            height: h+'px',
            width: ( (updateHoriToo)? (2*HORI_PADDING+w) : w ) + 'px'
            };

    jQuery('#TB_window', top.document).css(o);
    jQuery('#TB_iframeContent', top.document).css(o);
    if (top.updateTBOverlay) top.updateTBOverlay();

    if (updateHoriToo && reused) {
        jTBWIN.css({
                marginLeft:'-'+Math.round(w/2) + 'px',
                top: jQuery(top.document).scrollTop() + 'px'
        });
        // ^ restore top position too (same code as in jquery.thickbox.js->tb_position())
    }

    if (!reused) {
        jTBWIN.attr('reused', 1);
    }
};

// ====================== docinsider-mobile ========================
  
function onMobileRemindSuccess(e) {
    var container = jQuery('#remindResult');
    container.html(e);
};

function clearBoxDelay(id, time) {
    setTimeout("document.getElementById('"+id+"').innerHTML='';", time);
};

function sendMobileRemind(url, cookieDomain) {
    jQuery('#remindResult').html('Erinnerung wird gespeichert...');
    var form = jQuery('#mobileRemindForm');
    var docId=jQuery('#i_docId');
    var mobileNumber=jQuery('#i_mobileNumber');
    var remindNumber=jQuery('#i_remindNumber');
    var remindDate=jQuery('#i_remindDate');
    var remindTime=jQuery('#i_remindTime');
    var agbConfirm=jQuery('#i_agbConfirm');

    url += '?docId=' + docId.val();
    url += '&mobileNumber=' + mobileNumber.val();
    url += '&remindNumber=' + remindNumber.val();
    url += '&remindDate=' + remindDate.val();
    url += '&remindTime=' + remindTime.val();
    url += '&agbConfirm=' + agbConfirm.val();
    
    send2server(url, onMobileRemindSuccess);
    writeMobileRemindNumberCookie(cookieDomain)
};

function getCookie(cookieName, defaultValue) {
    var cookie = ""+document.cookie;
    if (cookie.length > 0) {
        var start = cookie.indexOf(cookieName + "=");
        if (start != -1) { 
            start = start + cookieName.length+1; 
            var end = cookie.indexOf(";", start);
            if (end == -1) {
                end = cookie.length;
            }
            return unescape(cookie.substring(start, end));
        } 
    }
    return defaultValue;
};

function setCookie(name, expires, domain, path, value) {
    var time = new Date();
    time = new Date(time.getTime() + expires).toGMTString();
    var cookie = name+'='+value+'; expires='+time+'; domain='+domain+'; path='+path+';';
    document.cookie = cookie;
};

function writeMobileRemindNumberCookie(domain) {
    var remindNumber = document.getElementById("i_remindNumber");
    var mobileNumber = document.getElementById("i_mobileNumber");
    var rn = remindNumber.checked ? mobileNumber.value : "";
    setCookie("di_mobile_remind_number", 60*60*24*30, domain, "/", rn);
};

function readMobileRemindNumberCookie() {
    var value = getCookie("di_mobile_remind_number", "");
    var mobileNumber = document.getElementById("i_mobileNumber");
    var remindNumber = document.getElementById("i_remindNumber");
    mobileNumber.value   = value;
    remindNumber.checked = value != "";
};

function initDateSelectBox() { 
    var today = new Date();
    var min_m = today.getMonth()+1;
    var min_d = today.getDate();
    var min_y = today.getFullYear();

    var minDate = min_m+"/"+min_d+"/"+min_y;

    var max_m = min_m + 6;
    var max_y = min_y;
    if (max_m > 12) {
        max_m -= 12;
        max_y++;
    }
    var maxDate = max_m+"/"+min_d+"/"+max_y;
    YAHOO.example.calendar.cal1 = new YAHOO.widget.Calendar("cal1", "cal1Container", {close:true, mindate:minDate, maxdate:maxDate } ); 

    // Correct formats for Germany: dd.mm.yyyy, dd.mm, mm.yyyy 

    YAHOO.example.calendar.cal1.cfg.setProperty("DATE_FIELD_DELIMITER", "."); 

    YAHOO.example.calendar.cal1.cfg.setProperty("MDY_DAY_POSITION", 1); 
    YAHOO.example.calendar.cal1.cfg.setProperty("MDY_MONTH_POSITION", 2); 
    YAHOO.example.calendar.cal1.cfg.setProperty("MDY_YEAR_POSITION", 3); 

    YAHOO.example.calendar.cal1.cfg.setProperty("MD_DAY_POSITION", 1); 
    YAHOO.example.calendar.cal1.cfg.setProperty("MD_MONTH_POSITION", 2); 

    // Date labels for German locale 
    YAHOO.example.calendar.cal1.cfg.setProperty("MONTHS_SHORT",   ["Jan", "Feb", "M\u00E4r", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"]); 
    YAHOO.example.calendar.cal1.cfg.setProperty("MONTHS_LONG",    ["Januar", "Februar", "M\u00E4rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]); 
    YAHOO.example.calendar.cal1.cfg.setProperty("WEEKDAYS_1CHAR", ["S", "M", "D", "M", "D", "F", "S"]); 
    YAHOO.example.calendar.cal1.cfg.setProperty("WEEKDAYS_SHORT", ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"]); 
    YAHOO.example.calendar.cal1.cfg.setProperty("WEEKDAYS_MEDIUM",["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"]); 
    YAHOO.example.calendar.cal1.cfg.setProperty("WEEKDAYS_LONG",  ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]);                                 

    YAHOO.example.calendar.cal1.render();        
    YAHOO.util.Event.addListener("datePickerButton", "click", YAHOO.example.calendar.cal1.show, YAHOO.example.calendar.cal1, true); 

    function handleSelect(type, args, obj) { 
        var dates = args[0]; 
        var date = dates[0]; 
        var y = date[0], m = date[1], d = date[2]; 

        //var dt = YAHOO.example.calendar.cal1.toDate(date);
        //var t = YAHOO.example.calendar.cal1.cfg.getProperty("WEEKDAYS_SHORT")[dt.getDay()];                                 

        var txtDate1 = document.getElementById("i_remindDate"); 

        if (d < 10) d = "0"+d;
        if (m < 10) m = "0"+m;

        txtDate1.value = d+"."+m+"."+y;
        this.hide();
    } 
    YAHOO.example.calendar.cal1.selectEvent.subscribe(handleSelect, YAHOO.example.calendar.cal1, true);   
};

// Updatet den Overlay-Link durch setzen des Frage-URL-Parameters.

function showTooltip(toolTipId) {
    document.getElementById(toolTipId).style.display = "inline";
};

function hideTooltip(toolTipId) {
    document.getElementById(toolTipId).style.display = "none";
};

function showSalesInfoDiv() {
    jQuery('#salesDiv').css('visibility','visible');
};

function hideSalesInfoDiv() {
    jQuery('#salesDiv').css('visibility','hidden');
};

function checkLoginStatus() {
    var params = '&urlParams=';
    if (loginUrlParameterWhat != '') params += 'what:' + loginUrlParameterWhat + ',';
    if (loginUrlParameterWhere != '') params += 'where:' + loginUrlParameterWhere + ',';
    if (loginUrlParameterClass != '') params += 'class:' + loginUrlParameterClass;
    send2server(loginStatusUrl + (new Date().getTime()) + '?url=' + encodeURI(document.location.href + params), loginStatusOkCallbackHandler);
};

function getWeekOfYear() {
    var date = new Date();

    var d = date.getDate();
    var m = date.getMonth()+1;
    var y = String(date.getYear());
    var date = new Date();

    if (!d) {
        y = date.getYear(); if (1900 > y) y +=1900;
        m = date.getMonth(); t = date.getDate();
    } else {
        m--;
    }

    date = new Date(y,m,d,0,0,1);

    var day = date.getDay();
    if (day == 0) day = 7;

    var tmp = new Date(2004,0,1).getTimezoneOffset();
    var summertime = (Date.UTC(y,m,d,0,tmp,1) - Number(date)) / 3600000;
    date.setTime(Number(date) + summertime * 3600000 - (day - 1) * 86400000);
    var year = date.getYear();
    if (1900 > year) year += 1900;

    var woy = 1;
    if (new Date(year,11,29) > date) {
        var offset = new Date(year,0,1);
        offset = new Date(Number(offset) + 86400000*(8 - offset.getDay()));
        if (offset.getDate() > 4) offset.setTime(Number(offset) - 604800000);
        woy = Math.ceil((date.getTime() - offset) / 604800000);
    }
    return woy;
}

function toggle(element){
    if (document.getElementById(element).style.display=='none') {
        document.getElementById(element).style.display='';
    } else {
        document.getElementById(element).style.display='none';
    }
};

function setFocusOnId(id) {
    try { // IE fix
        var focusControl = document.getElementById(id);
        if (focusControl != null && focusControl.type != 'hidden' && !focusControl.disabled) {
           focusControl.focus();
        }
    } catch(ignore) {
    }
};

function openPopUnder(url) {
    var win=window.open(url);
    if(win) {
        win.blur();
        window.focus();
    }
};


var openAutocompletes = 0; 

/* Used for search */
jQuery.diSearch = function(opts) {
    // opts.url
    // opts.attachToDomId

    if (!opts.slideUpDelay) {
        opts.slideUpDelay = 8000;
    };

    if (!opts.value) {
        opts.value = '';
    };

    if (!opts.typeDelay) {
        opts.typeDelay = 300;
    };

    if (!opts.attachResultsToDomId) {
        opts.attachResultsToDomId='newheader';
    };

    if (!opts.attachToDomId) {
        return;
    };

    if (!opts.attachToFormId) {
        opts.attachToFormId='hp';
    };

    var dom = jQuery('#' + opts.attachToDomId);
    if (!dom) {
        return;
    } else {
        if (dom.val() == '') {
            dom.val(opts.value);
        }

        dom.focus(function() {
            if (dom.val() == '' || dom.val() == opts.value) {
                dom.val('');
            }
        });

        dom.blur(function() {
            if (dom.val() == '') {
                dom.val(opts.value);
            }
            slideUpResults(0);
        });

        dom.keyup(function(key) {
            if (key.keyCode == 13 || key.keyCode == 38 || key.keyCode == 40) {
                
                return;
            }

            resetGetDataTimeout();
        });

        dom.keydown(function(key) {
            if (key.keyCode == 13) { // submit form on enter key

                var total = totalEntries();
                var str = dom.val();

                if (total > 0) {
                    str = currentEntry()['value'];
                    dom.val(str);

                    if (searchWord == str) {
                        jQuery('#' + opts.attachToFormId).submit();
                    }
                } else {
                    jQuery('#' + opts.attachToFormId).submit();                    
                }

                searchWord = str;
                slideUpResults(0);
                key.preventDefault(); 
            } else
            if (key.keyCode == 38) { // handle key up
                prevEntry();
            } else

            if (key.keyCode == 40) { // handle key down
                nextEntry();
            }
        });



        dom.attr('autocomplete', 'off');
    };

    var searchWord;

    // Create results
    var results = document.createElement("div");
    // Create jQuery object for results
    var results = jQuery(results);
    results.attr('id', opts.attachToDomId + 'Div');

    hideResults();

    // Add to body element
    jQuery('#' + opts.attachResultsToDomId).append(results);

    function getData() {
        var query = trim(dom.val());

        if (query == '') {
            return;
        };

        var strUrl = opts.url + query + '&div=' + opts.attachToDomId;

        jQuery.ajax({
            type: "GET",
            url: strUrl,
            cache: false,
            success: function(data) {
                hideResults();
                if (data != '') {
                    results.html(data);
                    results.slideDown(300);
                    openAutocompletes++; 
                    addFunctions();
                }
            },
            error: function() {
               // alert('error');
            }
        });
    };

    function addFunctions() {

        var obj = jQuery('#'+opts.attachToDomId+'Div').children().filter("ul").children().filter("li");
        var counter = 0;

        obj.each(function() {
            var li = jQuery(this);

            li.attr('id',''+counter);
            counter++;

            li.mousedown(function() {
                var value = li.attr('val');
                 
                dom.val(value);
                slideUpResults(0);
                dom.focus();
            });

            li.mouseover(function() {
                setActiveClassForId(li.attr('id'));
            });

        });
    };

    function currentEntry() {
        var obj = results.children().filter("ul").children().filter("li");
        var id = '';
        var val = '';

        obj.each(function() {
            var obj=jQuery(this);
            var cn = obj.attr('class');
            if (cn == 'active') {
                id = obj.attr('id');
                val = obj.attr('val');
            };
        });

        var item = new Array();

        item['id'] = id;
        item['value'] = val;

        return item;
    };

    function totalEntries() {
        return results.children().filter("ul").children().filter("li").length;
    };

    function setActiveClassForId(pos) {
        var obj = results.children().filter("ul").children().filter("li");

        var counter = 0;

        obj.each(function() {

            if (counter == pos) {
                jQuery(this).addClass('active');
            } else {
                jQuery(this).removeClass('active');
            }

            counter++;
        });
    };

    function nextEntry() {
        var pos = parseInt(currentEntry()['id']);
        var total = totalEntries();

        if (pos + 1 < total) {
            setActiveClassForId(pos + 1);
        } else {
            setActiveClassForId(0);
        }
    };

    function prevEntry() {
        var pos = currentEntry()['id'];
        var total = totalEntries();

        if (pos - 1 >= 0) {
            setActiveClassForId(pos - 1);
        } else {
            setActiveClassForId(total - 1);
        }
    };

    function hideResults() {
        results.css('display','none');
    };

    function slideUpResults(delay) {
        openAutocompletes--;
        if (opts.slideUpDelayId) {
            clearTimeout(opts.slideUpDelayId);
        }

        if (delay == 0) {
            jQuery('#'+opts.attachToDomId+'Div').slideUp(300, function() { hideResults(); });
        } else {
            opts.slideUpDelayId = setTimeout(function() { jQuery('#'+opts.attachToDomId+'Div').slideUp(300, function() { hideResults(); }); }, delay);
        }
    };

    function resetGetDataTimeout() {
        // do this with a delay
        if (opts.typeDelayId) {
            clearTimeout(opts.typeDelayId);
        }
        opts.typeDelayId = setTimeout(function() { getData(); }, opts.typeDelay);
    };


};

function hasOpenAutocompletes() {
    return openAutocompletes>0; 
}

function showQuestionOverlay() {
    var url = questionOverlayUrl;
    var question = jQuery('#newq').val();

    url = url.replace('title=', 'title=' + question);
    tb_show('Fragen', url, '');
    return false;
};

function showRegistrationOverlay() {
    var username = jQuery('#welcomeUsername').val();
    if (username.length == 0) return;
    var url = registrationOverlayUrl.replace('username=', 'username=' + username);
    tb_show('Registrieren', url, '');
    return false;
};

function trim(str) {
    if (str == null || str.length == 0) return '';
    return str.replace (/^\s+/, '').replace (/\s+$/, '');
};

/* moreLess JavaScript */
jQuery( function() {
    jQuery('#moreHits a.moreLink').bind('click', function() {
        jQuery(this.href.match(/(#.*)$/)[1]||'foo').slideToggle(300, function() {
            if (self.adaptSize) self.adaptSize();
        });
        var jMe = jQuery(this);
        var newWord = '';
        if (!this.isOpen) {
            newWord = MORELINK_LESS_WORDING;
            this.oldWord = jMe.html();
        } else {
            newWord = this.oldWord || '???';
        }
        jMe.html(newWord).toggleClass('reverse');
        this.isOpen = !this.isOpen;
        return false;
    }).each( function() {this.isOpen=0});

    jQuery('#moreHits a.moreLink2').bind('click', function() {
        jQuery(this.href.match(/(#.*)$/)[1]||'foo').slideToggle(300, function() {
            if (self.adaptSize) self.adaptSize();
        });

        var jMe = jQuery(this);
        var newWord = '';

        if (!this.isOpen) {
            newWord = MORELINK_LESS_WORDING;
            this.oldWord = jMe.html();
        } else {
            newWord = this.oldWord || '???';
        }
        jMe.html(newWord).toggleClass('reverse');
        this.isOpen = !this.isOpen;
        return false;
    }).each( function() {this.isOpen=0});
});

function preloadImages(arrImages) {
    if (document.images) {
        if(!document.preloadImagesArray) {
            document.preloadImagesArray = new Array();
        }

        for(var i=0;i<arrImages.length;i++) {
            var img = new Image();
            img.src = arrImages[i]; 
            document.preloadImagesArray[document.preloadImagesArray.length] = img;
        }
    }
};
/* end zipped version Mi Aug 18 10:38:29 CEST 2010 */
