﻿(function($) {
        $.fn.serverClock = function(options) {
            // options
            var opts = $.extend({}, $.fn.serverClock.defaults, options);
            return this.each(function() {
                $this = $(this);
                $this.timerID = null;
                $this.running = false;
                var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
                $this.timeNotation = o.timeNotation;
                $this.useServerTime = o.useServerTime;
                $this.serverDate = o.serverDate;
                $this.serverhours = o.serverhours;
                $this.serverminutes = o.serverminutes;
                $this.serverseconds = o.serverseconds;
                $.fn.serverClock.startClock($this);

            });
        };
        $.fn.serverClock.startClock = function(el) {
            $.fn.serverClock.stopClock(el);
            $.fn.serverClock.displayTime(el);
        }
        $.fn.serverClock.stopClock = function(el) {
            if (el.running) {
                clearTimeout(el.timerID);
            }
            el.running = false;
        }
        $.fn.serverClock.displayTime = function(el) {
            var time = $.fn.serverClock.getTime(el);
            el.html(time);
            el.timerID = setTimeout(function() { $.fn.serverClock.displayTime(el) }, 1000);
        }
        $.fn.serverClock.getTime = function(el) {
            if (el.useServerTime == false) {
                var now = new Date();
            }
            else {
                var now = new Date();
                now.setSeconds(el.serverseconds);
                now.setHours(el.serverhours);
                now.setMinutes(el.serverminutes);
                now.setSeconds(el.serverseconds + 1);
                
                el.serverDate = now.toString();
                el.serverseconds = now.getSeconds();
                el.serverhours = now.getHours();
                el.serverminutes = now.getMinutes();
            }
            if (el.useServerTime == false) {

                if (el.utc == true) {
                    if (el.utc_offset != 0) {
                        now.setUTCHours(now.getUTCHours() + el.utc_offset);
                    }
                    hours = now.getUTCHours();
                    minutes = now.getUTCMinutes();
                    seconds = now.getUTCSeconds();
                } else {
                    hours = now.getHours();
                    minutes = now.getMinutes();
                    seconds = now.getSeconds();
                }
            }  
            else {

                hours = now.getHours();
                minutes = now.getMinutes();
                seconds = now.getSeconds();

            }   
            if (el.timeNotation == '12h') {
                hours = ((hours > 12) ? hours - 12 : hours);
            } else {
                hours = ((hours < 10) ? "0" : "") + hours;
            }

            minutes = ((minutes < 10) ? "0" : "") + minutes;
            seconds = ((seconds < 10) ? "0" : "") + seconds;

            var timeNow = hours + ":" + minutes + ":" + seconds;

            timeNow+='s'
            return timeNow;
        };
        // plugin defaults
        $.fn.serverClock.defaults = {
            timeNotation: '24h',
            useServerTime: false,
            serverhours: 0,
            serverminutes: 0,
            serverseconds: 0,
            serverDate: ''

        };
    })(jQuery);