]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Event/event.js
Localisation updates from http://translatewiki.net.
[quix0rs-gnu-social.git] / plugins / Event / event.js
index 8ed25a899bff11674efa006380a047a7dbc5d267..696176edbde81b562daf05711a604c4a5637d3f6 100644 (file)
 $(document).ready(function() {
 
-    var today = new Date();
+    // get current time from server
+    var today = new Date($('now').val());
 
     $("#event-startdate").datepicker({
-        // Don't let the user set a crazy start date
+        // Don't let the user set a start date < before today
         minDate: today,
-        onClose: function(dateText, picker) {
-            // Don't let the user set a crazy end date
-            var newStartDate = new Date(dateText);
-            var endDate = new Date($("#event-startdate").val());
-            if (endDate < newStartDate) {
-                $("#event-enddate").val(dateText);
-            }
-            if (dateText !== null) {
-                $("#event-enddate").datepicker('option', 'minDate', new Date(dateText));
-            }
-        },
-        onSelect: function() {
-            var startd = $("#event-startdate").val();
-            var endd = $("#event-enddate").val();
-            var sdate = new Date(startd);
-            var edate = new Date(endd);
-            if (sdate !== edate) {
-                updateTimes();
-            }
-        }
+        onClose: onStartDateSelected
     });
 
     $("#event-enddate").datepicker({
         minDate: today,
-        onSelect: function() {
-            var startd = $("#event-startdate").val();
-            var endd = $("#event-enddate").val();
-            var sdate = new Date(startd);
-            var edate = new Date(endd);
-            if (sdate !== edate) {
-                updateTimes();
+        onClose: onEndDateSelected
+    });
+
+    $("#event-starttime").change(function(e) {
+        var tz = $("#tz").val();
+
+        var startDate = $("#event-startdate").val();
+        var startTime = $("#event-starttime option:selected").val().replace(/(pm|am)/, ' $1');
+        var startStr = startDate + ' ' + startTime + ' ' + tz;
+
+        var endDate =  $("#event-enddate").val();
+        var endTime = $("#event-endtime option:selected").val();
+        var endStr = endDate + ' ' + endTime.replace(/(pm|am)/, ' $1') + ' ' + tz;
+
+        // just need to compare hours
+        var start = new Date(startStr);
+        var end = new Date(endStr);
+
+        updateTimes(startStr, (startDate === endDate), function (data) {
+            var times = [];
+            $.each(data, function(key, val) {
+                times.push('<option value="' + key + '">' + val + '</option>');
+            });
+            $("#event-endtime").html(times.join(''));
+
+            if (start > end) {
+                $("#event-endtime").val(startTime).attr("selected", "selected");
+            } else {
+                $("#event-endtime").val(endTime).attr("selected", "selected");
+            }
+        });
+
+    });
+
+    $("#event-endtime").change(function(e) {
+        var HOUR = 60 * 60 * 1000;
+        var tz = $("#tz").val();
+        var startDate = $("#event-startdate").val();
+        var endDate = $("#event-enddate").val();
+        var starttime = $("#event-starttime option:selected").val();
+        var endtime = $("#event-endtime option:selected").val();
+        var endtimeText = $("#event-endtime option:selected").text();
+
+        // If the end time is in the next day then update the start date
+        if (startDate === endDate) {
+            var startstr = startDate + ' ' + starttime.replace(/(pm|am)/, ' $1') + ' ' + tz;
+            var start = new Date(startstr);
+            var matches = endtimeText.match(/\(.*\)/);
+            var hours;
+            if (matches) {
+                hours = matches[0].substr(1).split(' ')[0]; // get x from (x hours)
+                if (hours) {
+                    if (hours == 30) {
+                        hours = .5; // special case: x == 30 from (30 mins)
+                    }
+                    var end = new Date(start.getTime() + (hours * HOUR));
+                    if (end.getDate() > start.getDate()) {
+                        $("#event-enddate").datepicker('setDate', end);
+                        var endstr = endDate + ' 12:00 am ' +  tz;
+                        updateTimes(endstr, false, function(data) {
+                            var times = [];
+                            $.each(data, function(key, val) {
+                                times.push('<option value="' + key + '">' + val + '</option>');
+                            });
+                            $("#event-endtime").html(times.join(''));
+
+                            if (start > end) {
+                                $("#event-endtime").val(starttime).attr("selected", "selected");
+                            } else {
+                                $("#event-endtime").val(endtime).attr("selected", "selected");
+                            }
+                        });
+                    }
+                }
             }
         }
     });
 
-    function updateTimes() {
-        var startd = $("#event-startdate").val();
-        var endd = $("#event-enddate").val();
+    function onStartDateSelected(dateText, inst) {
+        var tz = $("#tz").val();
+        var startTime = $("#event-starttime option:selected").val();
+        var startDateTime = new Date(dateText + ' ' + startTime.replace(/(pm|am)/, ' $1') + ' ' + tz);
+
+        // When we update the start date and time, we need to update the end date and time
+        // to make sure they are equal or in the future
+        $("#event-enddate").datepicker('option', 'minDate', startDateTime);
+
+        recalculateTimes();
+    }
+
+    function onEndDateSelected(dateText, inst) {
+        recalculateTimes();
+    }
+
+    function recalculateTimes(showDuration) {
+        var tz = $("#tz").val();
 
-        var startt = $("#event-starttime option:selected").val();
-        var endt = $("#event-endtime option:selected").val();
+        var startDate = $("#event-startdate").val();
+        var startTime = $("#event-starttime option:selected").val();
+        var startStr = startDate + ' ' + startTime.replace(/(pm|am)/, ' $1') + ' ' + tz;
+        var startDateTime = new Date(startStr);
 
-        var sdate = new Date(startd + " " + startt);
-        var edate = new Date(endd + " " + endt);
-        var duration = (startd === endd);
+        var endDate = $("#event-enddate").val();
+        var endTime = $("#event-endtime option:selected").val();
+        var endDateTime = new Date(endDate + ' ' + endTime.replace(/(pm|am)/, ' $1') + ' ' + tz);
+        var showDuration = true;
+
+        if (endDateTime.getDate() !== startDateTime.getDate()) {
+            starStr = endDate + ' 12:00 am ' +  tz;
+            showDuration = false;
+        }
 
-        $.getJSON($('#timelist_action_url').val(),
-            { start: startt, ajax: true, duration: duration },
-            function(data) {
-                var times = [];
-                $.each(data, function(key, val) {
+        updateTimes(startStr, showDuration, function(data) {
+            var times = [];
+            $.each(data, function(key, val) {
                 times.push('<option value="' + key + '">' + val + '</option>');
             });
-
             $("#event-endtime").html(times.join(''));
-            if (startt < endt) {
-                $("#event-endtime").val(endt).attr("selected", "selected");
+            if (startDateTime > endDateTime) {
+                $("#event-endtime").val(startTime).attr("selected", "selected");
+            } else {
+                $("#event-endtime").val(endTime).attr("selected", "selected");
             }
-        })
+        });
     }
 
-    $("#event-starttime").change(function(e) {
-        updateTimes();
-    });
+    function updateTimes(start, duration, onSuccess) {
+        $.getJSON($('#timelist_action_url').val(), {start: start, ajax: true, duration: duration}, onSuccess);
+    }
 
 });