Effect.Scroll = Class.create();
Object.extend(Object.extend(Effect.Scroll.prototype, Effect.Base.prototype), {
    initialize: function(element) {
        this.element = $(element);
        if(!this.element) throw(Effect._elementDoesNotExistError);
        this.start(Object.extend({x: 0, y: 0}, arguments[1] || {}));
    },
    setup: function() {
        var scrollOffsets = (this.element == window) 
            ? document.viewport.getScrollOffsets() 
        : Element._returnOffset(this.element.scrollLeft, this.element.scrollTop) ;
        this.originalScrollLeft = scrollOffsets.left;
        this.originalScrollTop  = scrollOffsets.top;
    },
    update: function(pos) {
        this.element.scrollTo(Math.round(this.options.x * pos + this.originalScrollLeft), Math.round(this.options.y * pos + this.originalScrollTop));
    }
});
    
var expand=false;
var lastObject="";
var lastId="";
var lastScrollTo="";
var lastRenderIn="";
var dateCache = new Object();
var dateCacheRows = new Object();
var inProgress=false;
    
Event.observe(document, 'click', respondToClick);

function respondToClick(event) {  
    if ( expand == true && inProgress == false) {
        expandDates(lastObject, lastId, lastScrollTo, lastRenderIn);
    }
    inProgress=false;
}        

function dateHighlight ( id, status ) {
    if (status == true) {
        $("dateDate"+id).setStyle("background-color: #d3e7ea");
        $("dateLocation"+id).setStyle("background-color: #d3e7ea");
        $("datePrice"+id).setStyle("background-color: #d3e7ea");
    } else {
        $("dateDate"+id).setStyle("background-color: transparent");
        $("dateLocation"+id).setStyle("background-color: transparent");
        $("datePrice"+id).setStyle("background-color: transparent");
    }
}

function changeHref(sid, cid) {
    document.location.href="detail.do?id="+cid+"&sid="+sid;
}

function expandDates(object, id, scrollTo, renderIn) {
    inProgress=true;
    if ( object != lastObject && lastObject != "" && expand == true) {
        var tempObject = lastObject;
        var tempId = lastId;
        var tempRenderIn = lastRenderIn;
        var tempScrollTo = lastScrollTo;
        lastObject ="";
        lastId="";
        lastRenderIn="";
        lastScrollTo="";
        expandDates(tempObject, tempId, tempScrollTo, tempRenderIn);
    }
    var leftFrom="", mainFrom="", rightFrom="", leftTo="", mainTo="", rightTo="";
    if ( expand == true) {
        leftFrom = "selectLightBlueBgLeft";
        mainFrom = "selectLightBlueBgMain";
        rightFrom = "selectLightBlueBgRight";
        leftTo = "lightBlueBgLeft";
        mainTo = "lightBlueBgMain";
        rightTo = "lightBlueBgRight";
        expand=false;
        lastObject="";
        lastId="";
        lastScrollTo="";
        lastRenderIn="";
        clearContainer(renderIn);
    } else {
        leftFrom = "lightBlueBgLeft";
        mainFrom = "lightBlueBgMain";
        rightFrom = "lightBlueBgRight";
        leftTo = "selectLightBlueBgLeft";
        mainTo = "selectLightBlueBgMain";
        rightTo = "selectLightBlueBgRight";
        expand=true;
        lastObject=object;
        lastId=id;
        lastScrollTo=scrollTo;
        lastRenderIn=renderIn;
        paintContainer(renderIn, id, object, scrollTo);
    }
    changeClass(object, leftFrom, leftTo);
    changeClass(object, mainFrom, mainTo);
    changeClass(object, rightFrom, rightTo);
    inProgress=true;
}
    
function changeClass(parent, from, to) {
    var elementList = [];
    elementList = $(parent).getElementsByClassName(from);
    for (var i = 0; i < elementList.length; i++) {
        elementList[i].addClassName( to);
        elementList[i].removeClassName(from);
    }
}
    
function clearContainer(objectName){
    Effect.Fade(objectName, { duration: 0.3, from: 0.9});
    //Effect.Fold(objectName, { duration: 1.0});
}
    
function contentFromObject(objectName, inId, objectFrom, scrollTo, jsonObject) {
    var content="";
    Effect.ScrollTo(scrollTo);
    if (objectFrom.substr(0,9) == "locations" || objectFrom.indexOf("Top") > -1) {
        content+="<div class=\"dateSubLeftTopRound\"><\/div>";
    } else {
        content+="<div class=\"dateSubLeftTop\"><\/div>";
    }
    content+="<div class=\"dateSubMiddleTop\">";
    content+="<div class=\"dateDate\">";
    content+="Datum";
    content+="<\/div>";
    content+="<div class=\"dateLocation\">";
    content+="Ort";
    content+="<\/div>";
    content+="<div class=\"datePrice\">";
    content+="Preis";
    content+="<\/div>";
    content+="<div class=\"clear\"><\/div>";
    content+="<\/div>";
    if (objectFrom.indexOf("Top") > -1) {
        content+="<div class=\"dateSubRightTopSquare\"><\/div>";
    } else {
        content+="<div class=\"dateSubRightTop\"><\/div>";
    }
    content+="<div class=\"clear\"><\/div>";
        

    content+="<div class=\"dateSubLeftCenter\">";
    content+="<div class=\"dateSubRightCenter\">";
    content+="<div id=\"dsm"+objectName+"\" class=\"dateSubMiddleCenter\">";
    var addClass=" borderBottom";
    var i = 0;
    if (jsonObject) {
        var hashObject;
        for (i = 0; i < jsonObject.length; i++) {
            if ( i == jsonObject.length - 1) {
                addClass="";
            }
            hashObject = new Hash(jsonObject[i]);
            content+="<div id=\"dateDate"+objectName+hashObject.get("id")+"\" onclick=\"changeHref('"+hashObject.get("id")+"', '"+inId+"')\" onmouseover=\"dateHighlight('"+objectName+hashObject.get("id")+"', true)\" onmouseout=\"dateHighlight('"+objectName+hashObject.get("id")+"', false)\" class=\"dateDate"+addClass+"\">";
            content+=hashObject.get("beginn");
            if (hashObject.get("beginn") != "" && hashObject.get("end") != "") {
                content+=" bis ";
            }
            content+=hashObject.get("end");
            content+="<\/div>";
            content+="<div id=\"dateLocation"+objectName+hashObject.get("id")+"\" onclick=\"changeHref('"+hashObject.get("id")+"', '"+inId+"')\" onmouseover=\"dateHighlight('"+objectName+hashObject.get("id")+"', true)\" onmouseout=\"dateHighlight('"+objectName+hashObject.get("id")+"', false)\" class=\"dateLocation"+addClass+"\">";
            content+=hashObject.get("city");
            content+="<\/div>";
            content+="<div id=\"datePrice"+objectName+hashObject.get("id")+"\" onclick=\"changeHref('"+hashObject.get("id")+"', '"+inId+"')\" onmouseover=\"dateHighlight('"+objectName+hashObject.get("id")+"', true)\" onmouseout=\"dateHighlight('"+objectName+hashObject.get("id")+"', false)\" class=\"datePrice"+addClass+"\">";
            content+=hashObject.get("price");
            content+="<\/div>";
            content+="<div class=\"clear\"><\/div>";
        }
        
    }
    content+="<\/div>";
    content+="<\/div>";
    content+="<\/div>";
    content+="<div class=\"clear\"><\/div>";

    content+="<div class=\"dateSubLeftBottom\"><\/div>";
    content+="<div class=\"dateSubMiddleBottom\"><\/div>";
    content+="<div class=\"dateSubRightBottom\"><\/div>";
    content+="<div class=\"clear\"><\/div>";
    dateCacheRows[objectName]=i+1;
    dateCache[objectName]=content;
    $(objectName).innerHTML=content;
    if ( i > 16) {
        $("dsm"+objectName).addClassName("overflowDates");
    } else {
        $("dsm"+objectName).removeClassName("overflowDates");
    }
    $(objectName).setOpacity(0.0);
    Effect.Appear(objectName, { duration: 0.3, from: 0.0, to: 0.9});
}
    
function paintContainer(objectName, id, objectFrom, scrollTo) {
    var content="";
    var jsonObject=null;
    if ( dateCache[objectName] == null ) {
        new Ajax.Request(_portalBasePath + 'DateDetail', {   parameters: {id: id}, method: 'get',   onSuccess: function(transport){ var json = transport.responseText.evalJSON(); contentFromObject(objectName, id, objectFrom, scrollTo, json); } }); 
    }
    else {
        content=dateCache[objectName];
        Effect.ScrollTo(scrollTo);
        $(objectName).innerHTML=content;
        if ( dateCacheRows[objectName] > 17) {
            $("dsm"+objectName).addClassName("overflowDates");
        } else {
            $("dsm"+objectName).removeClassName("overflowDates");
        }
        Effect.Appear(objectName, { duration: 0.3, to: 0.9});
    }
}

