Reminder = Class.create();
Object.extend(Reminder.prototype, WebControl.prototype);

Object.extend(Reminder.prototype,
    {
        initialize : function(config)
        {
            WebControl.prototype.initialize.call(this, config);
            
            var thisClass = this;
            
            // Show
            this.config.Show = function()
            {
                GlobalLoading.Start();
                
                var date = thisClass.config.selectedDate;
                var pars = "year=" + date.getFullYear();
                    pars += "&month=" + (date.getMonth() + 1);
                    pars += "&day=" + date.getDate();
                var reminderData = ActionHandler.GetResponse(
                {
                    url: "Components/Reminder/ReminderActionHandler.php",
                    action: "GetEventListData",
                    parameters: pars
                });
                
                var panel = new Element("div");
                panel.addClassName("newEventPanel");
                var label = new Element("h3");
                label.innerHTML = thisClass.config.selectedDate.getFullYear() + "." + Utils.ConvertToTwoDigits(thisClass.config.selectedDate.getMonth()+1) + "." + Utils.ConvertToTwoDigits(thisClass.config.selectedDate.getDate()) + ".";
                panel.insert(label);
                
                var eventListPanel = new Element("div");
                eventListPanel.addClassName("eventList");
                
                if(reminderData != null)
                {
                    for(i = 0; i < reminderData.length; i++)
                    {
                        var line = new Element("div");
                        line.addClassName("line");
                        var link = new Element("a");
                        link.href = "#" + reminderData[i].event_id;
                        var date = new Date();
                        date.setTime(reminderData[i].event_start_time*1000);
                        link.innerHTML = Utils.ConvertToTwoDigits(date.getHours()) + ":" + Utils.ConvertToTwoDigits(date.getMinutes()) + " - " + Utils.StripSlashes(reminderData[i].event_name);
                        link.id = "eventLink" + i;
                        line.insert(link);
                        eventListPanel.insert(line);
                    }
                }
                else
                {
                    var line = new Element("div");
                    line.addClassName("line");
                    var label = new Element("h1");
                    label.innerHTML = "nincs esemény erre a napra";
                    line.insert(label);
                    eventListPanel.insert(line);
                }
                
                //NEW EVENT LINK
                var button = new Element("a");
                button.id = "newEventLink";
                button.className = "button";
                button.update("Új esemény");
                eventListPanel.insert(button);
                
                panel.insert(eventListPanel);
                
                $(thisClass.config.container).update(panel);
                
                GlobalLoading.Stop();
            }
            
            // Add Events
            this.config.AddEvents = function()
            {
                var index = 0;
                
                while($("eventLink"+index) != null)
                {
                    Event.observe( "eventLink"+index, "click", thisClass.ModifyEventClicked.bindAsEventListener(thisClass) );
                    index++;
                }
                Event.observe( "newEventLink", "click", thisClass.NewEventClicked.bindAsEventListener(thisClass) );
            }
        },
        
        LockFunctions : false,
        
        CurrentEventID : -1,
        
        NewWindow : new Window({
            container: "window",
            title: "Emlékeztető",
            width: 600,
            contentURL: "Components/Reminder/NewReminder.php"
        }),
        
        ModifyWindow : new Window({
            container: "window",
            title: "Emlékeztető",
            width: 600,
            contentURL: "Components/Reminder/ModifyReminder.php"
        }),
        
        NewEventClicked : function(event)
        {
            if(IsRoleSuccess())
            {
                Event.stop(event);
                
                GlobalLoading.Start();
                
                this.NewWindow.Show();
                var thisClass = this;
                
                Event.observe( "reminderCancel", "click", function(event) { Event.stop(event); thisClass.NewWindow.Close(); } );
                Event.observe( "reminderSave", "click", this.SaveEvent.bindAsEventListener(this) );
                Event.observe( "fromHour", "blur", this.FromHourBlur.bindAsEventListener(this) );
                Event.observe( "fromMinute", "blur", this.PadMinute.bindAsEventListener(this) );
                Event.observe( "toHour", "blur", this.PadHour.bindAsEventListener(this) );
                Event.observe( "toMinute", "blur", this.PadMinute.bindAsEventListener(this) );
                $("what").focus();
                
                GlobalLoading.Stop();
            }
            else
            {
                NoRightWindow.Show(event);
            }
        },
        
        FromHourBlur: function(event)
        {
            var currentValue = parseInt(Event.element(event).value);
            if(isNaN(currentValue)) currentValue = currentValue.replace("0", "");
            Event.element(event).value = currentValue.toPaddedString(2);
            
            if(currentValue < 23) { currentValue++; }
            $("toHour").value = currentValue.toPaddedString(2);
        },
        
        PadHour: function(event)
        {
            var currentValue = parseInt(Event.element(event).value);
            if(isNaN(currentValue)) currentValue = currentValue.replace("0", "");
            if(isNaN(currentValue) || currentValue > 23) { currentValue = 0; }
            Event.element(event).value = currentValue.toPaddedString(2);
        },
        
        PadMinute: function(event)
        {
            var currentValue = parseInt(Event.element(event).value);
            if(isNaN(currentValue)) currentValue = currentValue.replace("0", "");
            if(isNaN(currentValue) || currentValue > 59) { currentValue = 0; }
            Event.element(event).value = currentValue.toPaddedString(2);
        },
        
        SaveEvent : function(event)
        {
            Event.stop(event);
            
            GlobalLoading.Start();
            
            $("reminderSave").focus();
            if(!this.LockFunctions)
            {
                this.LockFunctions = true;
                if($("what").value.blank()) $("what").value = "üres";
                var pars = "year=" + this.config.selectedDate.getFullYear();
                    pars += "&month=" + (this.config.selectedDate.getMonth() + 1);
                    pars += "&day=" + this.config.selectedDate.getDate();
                    pars += "&what=" + $("what").value;
                    pars += "&fromHour=" + $("fromHour").value;
                    pars += "&fromMinute=" + $("fromMinute").value;
                    pars += "&toHour=" + $("toHour").value;
                    pars += "&toMinute=" + $("toMinute").value;
                    pars += "&where=" + $("where").value;
                    pars += "&desc=" + $("desc").value;
                
                ActionHandler.GetResponse(
                {
                    url: "Components/Reminder/ReminderActionHandler.php",
                    action: "SaveEvent",
                    parameters: pars
                });
                
                this.NewWindow.Close();
                this.Refresh();
                this.config.calendar.Show();
                this.LockFunctions = false;
            }
            GlobalLoading.Stop();
        },
        
        ModifyEventClicked : function(event)
        {
            if(IsRoleSuccess())
            {
                Event.stop(event);
                
                GlobalLoading.Start();
                
                this.ModifyWindow.Show();
                var href = Event.element(event).href;
                var eventID = href.substring(href.indexOf("#") + 1, href.length);
                var pars = "eventID=" + eventID;
                var eventData = ActionHandler.GetResponse(
                {
                    url: "Components/Reminder/ReminderActionHandler.php",
                    action: "GetEventData",
                    parameters: pars
                });
                this.CurrentEventID = eventData.event_id;
                
                var startDate = new Date();
                var endDate = new Date();
                startDate.setTime(eventData.event_start_time*1000);
                endDate.setTime(eventData.event_end_time*1000);
                
                if(eventData.event_where == "null") eventData.event_where = "";
                if(eventData.event_description == "null") eventData.event_description = "";
                
                $("what").value = Utils.BR2NL(Utils.StripSlashes(eventData.event_name));
                $("fromHour").value = Utils.ConvertToTwoDigits(startDate.getHours());
                $("fromMinute").value = Utils.ConvertToTwoDigits(startDate.getMinutes());
                $("toHour").value = Utils.ConvertToTwoDigits(endDate.getHours());
                $("toMinute").value = Utils.ConvertToTwoDigits(endDate.getMinutes());
                $("where").value = Utils.BR2NL(Utils.StripSlashes(eventData.event_where));
                $("desc").value = Utils.BR2NL(Utils.StripSlashes(eventData.event_description));
                
                var thisClass = this;
                
                Event.observe( "reminderCancel", "click", function(event) { Event.stop(event); thisClass.ModifyWindow.Close(); } );
                Event.observe( "reminderModify", "click", this.ModifyEvent.bindAsEventListener(this) );
                Event.observe( "reminderDelete", "click", this.DeleteEvent.bindAsEventListener(this) );
                $("what").focus();
                
                GlobalLoading.Stop();
            }
            else
            {
                NoRightWindow.Show(event);
            }
        },
        
        ModifyEvent : function(event)
        {
            Event.stop(event);
            
            GlobalLoading.Start();
            
            if(!this.LockFunctions)
            {
                this.LockFunctions = true;
                var pars = "&eventID=" + this.CurrentEventID;
                    pars += "&year=" + this.config.selectedDate.getFullYear();
                    pars += "&month=" + (this.config.selectedDate.getMonth() + 1);
                    pars += "&day=" + this.config.selectedDate.getDate();
                    pars += "&what=" + $("what").value;
                    pars += "&fromHour=" + $("fromHour").value;
                    pars += "&fromMinute=" + $("fromMinute").value;
                    pars += "&toHour=" + $("toHour").value;
                    pars += "&toMinute=" + $("toMinute").value;
                    pars += "&where=" + $("where").value;
                    pars += "&desc=" + $("desc").value;
                
                ActionHandler.GetResponse(
                {
                    url: "Components/Reminder/ReminderActionHandler.php",
                    action: "ModifyEvent",
                    parameters: pars
                });
                
                this.ModifyWindow.Close();
                this.Refresh();
                this.config.calendar.Show();
                this.LockFunctions = false;
            }
            GlobalLoading.Stop();
        },
        
        DeleteEvent : function(event)
        {
            Event.stop(event);
            
            GlobalLoading.Start();
            
            if(!this.LockFunctions)
            {
                this.LockFunctions = true;
                var pars = "&eventID=" + this.CurrentEventID;
                
                ActionHandler.GetResponse(
                {
                    url: "Components/Reminder/ReminderActionHandler.php",
                    action: "DeleteEvent",
                    parameters: pars
                });
                
                this.ModifyWindow.Close();
                this.Refresh();
                this.config.calendar.Show();
                this.LockFunctions = false;
            }
            
            GlobalLoading.Stop();
        }
        
    }
);

