function EventTimer(element,eventDate){
    this.element = element;
    this.eventDate = eventDate;
    this.finished = false;
}

function DateUtil() {
    this.minuteMilliseconds = 1000*60;
    this.hourMilliseconds = this.minuteMilliseconds*60;
    this.dayMilliseconds = this.hourMilliseconds*24;

    this.eventTimerArray = new Array();
    this.eventTimerRepeat = true;
    this.eventTimerRepeatTime = 1000;

    this.daysPrefix="";
    this.daysSuffix=" days";
    this.timePrefix="";
    this.timeSuffix="";
    this.eventStarted="Started";
}

DateUtil.prototype.isDayOrMoreLeft = function(milliseconds){
    if((new Date(milliseconds) - new Date()) / this.dayMilliseconds > 1)
        return true;
    return false;
}

DateUtil.prototype.setEventTimerText = function(daysPrefix,daysSuffix,timePrefix,timeSuffix){
    if(daysPrefix)
        this.daysPrefix = daysPrefix+" ";
    if(daysSuffix)
        this.daysSuffix+=" "+daysSuffix;
    if(timePrefix)
        this.timePrefix+=timePrefix+" ";
    if(timeSuffix)
        this.timeSuffix+=" "+timeSuffix
}

DateUtil.prototype.setEventTimerRepeatTime = function(repeat){
    this.eventTimerRepeatTime = repeat;
}

DateUtil.prototype.addEventTimer = function(containerId,eventMillisecs){
    //check if PHP time stamp, convert if so...
    if(eventMillisecs < 10000000000)
        eventMillisecs*=1000;
    var et=new EventTimer(document.getElementById(containerId),new Date(eventMillisecs));
    this.eventTimerArray.push(et);
}

DateUtil.prototype.getTimeLeftString = function(currentDate,eventDate){
    if(!currentDate || !eventDate)
        return null;

    var remainingTime = eventDate.getTime() - currentDate.getTime();
    if(remainingTime > 0){
        if(remainingTime / this.dayMilliseconds > 1){
            var daysLeft = Math.floor(remainingTime / this.dayMilliseconds) + 1;
            return this.daysPrefix + daysLeft + this.daysSuffix;
        } else {
            //show hours & minutes
            var hours = Math.floor(remainingTime / this.hourMilliseconds);
            remainingTime-=hours * this.hourMilliseconds;
            var minutes = Math.floor(remainingTime / this.minuteMilliseconds);
            remainingTime-=minutes * this.minuteMilliseconds;
            var secs = Math.floor(remainingTime / 1000);
            var timeStr = this.timePrefix;
            if(hours > 0)
                timeStr+=hours+":";
            if(hours > 0 && minutes < 10)
                timeStr+="0";
            timeStr+=minutes+":";
            if(secs < 10)
                timeStr+="0";
            timeStr+=secs;
            return timeStr + this.timeSuffix;
        }
    } else {
        return this.eventStarted;
    }
}

DateUtil.prototype.writeTimeLeft = function(){
    var count = 0;
    var cd = new Date();
    for(var i=0;i<this.eventTimerArray.length;i++){
        if(!this.eventTimerArray[i].finished){
            var e = this.eventTimerArray[i].element;
            var d = this.eventTimerArray[i].eventDate;
            if(e && d){
                var s = this.getTimeLeftString(cd, d);
                if(!s || s==this.eventStarted || s.indexOf(this.daysSuffix, 0) > -1){
                    this.eventTimerArray[i].finished=true;
                }
                e.innerHTML=s;
                count++;
            } else {
                this.eventTimerArray[i].finished=true;
            }
        }
    }
    if(count > 0)
        this.eventTimerRepeat = true;
    else
        this.eventTimerRepeat = false;
}

DateUtil.prototype.renderTimeLeft = function(){
    this.writeTimeLeft();
    if(this.eventTimerRepeat){
        var _this = this;
        window.setTimeout(function(){_this.renderTimeLeft();},this.eventTimerRepeatTime);
    }
}

