/**
 * @author icebox
 */

/*globals YAHOO, Timeline */

YAHOO.namespace("proplus.trampa");

YAHOO.proplus.trampa.COOKIE = "proplus.trampa";

YAHOO.proplus.trampa.init = function () {        
    var Dom = YAHOO.util.Dom,
        oldFillInfoBubble,
        tl, bandInfos, cal, eventSource, activities,
        helpPanel, helpHeader = "Help",
        helpBody = "<iframe src='help/TRamPA_help.html' width='100%' height='100%' frameborder='0'/>";
    
    activities = {};
    activities.events = [];
    
    eventSource = new Timeline.DefaultEventSource();
    
    bandInfos = [
        Timeline.createBandInfo({
            eventSource: eventSource,
            width: "80%", 
            intervalUnit: Timeline.DateTime.MONTH, 
            intervalPixels: 100
        }),
        Timeline.createBandInfo({
            overview: true,
            trackHeight: 0.5,
            trackGap: 0.2,
            eventSource: eventSource,
            width: "20%", 
            intervalUnit: Timeline.DateTime.YEAR, 
            intervalPixels: 200
        })
    ];
    bandInfos[1].syncWith = 0;
    bandInfos[1].highlight = true;   
   
    tl = Timeline.create(Dom.get("timeline-project"), bandInfos);
    
    cal = new YAHOO.proplus.trampa.IntervalCalendar("start-end-activity", {
        title: "Begin / End Activity Date",
        pages: 2
    });    
    cal.render();    

    function saveProject() {
        var i, lastProject, projectRestored, eventsRestored,
            evIter, ev, event, eventIDS = [];
        
        lastProject = YAHOO.util.Cookie.get(YAHOO.proplus.trampa.COOKIE + ".project");
        if (lastProject !== null) {
            projectRestored = YAHOO.util.Cookie.get(YAHOO.proplus.trampa.COOKIE + 
                "." + lastProject, {
                expires: YAHOO.widget.DateMath.add(new Date(), 
                    YAHOO.widget.DateMath.DAY, 30)
            });                                                     
            
            eventsRestored = projectRestored.split(",");
            for (i = 0; i < eventsRestored.length; i = i + 1) {
                YAHOO.util.Cookie.remove(YAHOO.proplus.trampa.COOKIE + 
                    "." + lastProject + "." +  eventsRestored[i], {
                    expires: YAHOO.widget.DateMath.add(new Date(), 
                        YAHOO.widget.DateMath.DAY, 30)
                });
            }
            YAHOO.util.Cookie.remove(YAHOO.proplus.trampa.COOKIE + "." + lastProject, {
                expires: YAHOO.widget.DateMath.add(new Date(), 
                    YAHOO.widget.DateMath.DAY, 30)
            });                                                     
            YAHOO.util.Cookie.remove(YAHOO.proplus.trampa.COOKIE + ".project");
        }            
        
        evIter = eventSource.getAllEventIterator();
        ev = evIter.next();
        while (ev !== null) {
            event = {};
            event.title = ev.getText();
            event.description = ev.getDescription();
            event.start = ev.getStart();
            if (ev.getStart().getTime() !== ev.getEnd().getTime()) {
                event.end = ev.getEnd();
            }
            event.durationEvent = !ev.isInstant();
            
            YAHOO.util.Cookie.setSubs(YAHOO.proplus.trampa.COOKIE + 
                "." + activities.project + "." + event.title, 
                event, {
                expires: YAHOO.widget.DateMath.add(new Date(), 
                    YAHOO.widget.DateMath.DAY, 30)
            });                                                     
            
            eventIDS.push(event.title);
            
            ev = evIter.next();
        }        
                        
        if (eventIDS.length > 0) {
            YAHOO.util.Cookie.set(YAHOO.proplus.trampa.COOKIE + "." + activities.project, eventIDS, {
                expires: YAHOO.widget.DateMath.add(new Date(), YAHOO.widget.DateMath.DAY, 30)
            });
            YAHOO.util.Cookie.set(YAHOO.proplus.trampa.COOKIE + ".project", activities.project, {
                expires: YAHOO.widget.DateMath.add(new Date(), YAHOO.widget.DateMath.DAY, 30)
            });
        }                               
    }        
    
    YAHOO.util.Event.addListener("addActivity", "click", function () {
        var nActivities, interval, project, title, description, message;
              
        project = Dom.get("project").value;
        title = Dom.get("title").value;
        description = Dom.get("desc").value;
        message = Dom.get("message");
        interval = cal.getInterval();
                                
        if (interval.length === 0) {
            message.innerHTML = "Please pick a date or select a range of dates";
            return;
        }

        if  (project === "") {
            message.innerHTML = "Please insert a project name";
            return;
        }
        
        if  (title === "") {
            message.innerHTML = "Please insert an activity title";
            return;
        }
                   
        if (description === "") {
            message.innerHTML = "Please insert an activity description";
            return;    
        }   

        message.innerHTML = "";

        nActivities = activities.events.length;
        activities.events[nActivities] = {};

        activities.project = project;        
        activities.events[nActivities].title = title;
        activities.events[nActivities].description = description;
        interval[0].setHours(9);
        activities.events[nActivities].start = interval[0];
        activities.events[nActivities].end = interval[0];
                                     
        if (interval[0].getTime() !== interval[1].getTime()) {
            interval[1].setHours(9);
            activities.events[nActivities].end = interval[1];
            activities.events[nActivities].durationEvent = true;
        } else {
            activities.events[nActivities].durationEvent = false;            
        }

        eventSource.clear();
        eventSource.loadJSON(activities, ".");
        saveProject();                     
    });
    
    oldFillInfoBubble = Timeline.DefaultEventSource.Event.prototype.fillInfoBubble;
    Timeline.DefaultEventSource.Event.prototype.fillInfoBubble = function (elmt, theme, labeller) {
        var eventObject, div;
                    
        oldFillInfoBubble.call(this, elmt, theme, labeller);

        eventObject = this;
        div = document.createElement("div");
        div.id = "deleteActivity";
        div.innerHTML = 'Delete activity';
        div.style.cursor = 'pointer';
                        
        YAHOO.util.Event.addListener("deleteActivity", "click", function () {
            var i, j, newActivities;
                        
            newActivities = {};
            newActivities.events = [];  
            newActivities.project = activities.project;          
            for (i = 0, j = 0; i < activities.events.length; i = i + 1) {
                if (eventObject.getText() !== activities.events[i].title) {
                    newActivities.events[j] = activities.events[i];
                    j = j + 1;
                }
            }
            activities = newActivities;

            tl.getBand(0).closeBubble();     
            
            eventSource.clear();
            eventSource.loadJSON(activities, ".");
            saveProject();                           
        });

        elmt.appendChild(div);
    };    
    
    helpPanel = new YAHOO.widget.Panel("helpPanel", {
        visible: false, 
        constraintoviewport: true,         
        draggable: true, 
        close: true, 
        fixedcenter: true,
        width: '400px',
        height: '500px',
        zIndex: 99
    });   
    helpPanel.setHeader(helpHeader);   
    helpPanel.setBody(helpBody);   
    helpPanel.setFooter("");   
    helpPanel.render(Dom.get('bd'));
    
    YAHOO.util.Event.addListener("help", "click", function () {
        helpPanel.setBody(helpBody);   
        helpPanel.bringToTop();
        helpPanel.show();
    });
    
    function loadProject() {
        var i, lastProject, projectRestored, eventsRestored;
        
        lastProject = YAHOO.util.Cookie.get(YAHOO.proplus.trampa.COOKIE + ".project");
        if (lastProject !== null) {
            activities.project = lastProject;
            projectRestored = YAHOO.util.Cookie.get(YAHOO.proplus.trampa.COOKIE + 
                "." + lastProject, {
                expires: YAHOO.widget.DateMath.add(new Date(), 
                    YAHOO.widget.DateMath.DAY, 30)
            });                                                     
            
            eventsRestored = projectRestored.split(",");
            for (i = 0; i < eventsRestored.length; i = i + 1) {
                activities.events[i] = YAHOO.util.Cookie.getSubs(YAHOO.proplus.trampa.COOKIE + 
                    "." + lastProject + "." +  eventsRestored[i], {
                    expires: YAHOO.widget.DateMath.add(new Date(), 
                        YAHOO.widget.DateMath.DAY, 30)
                });
            }
            
            eventSource.clear();
            eventSource.loadJSON(activities, ".");
            Dom.get("project").value = activities.project;
        }         
           
    }
    
    loadProject();        
};


YAHOO.util.Event.onDOMReady(YAHOO.proplus.trampa.init);

