﻿//
/*
Example

curDate.DateDiff({interval:interval,date1:startDate,date2:endDate});
alert(curDate.difference);

*/
// JScript source code
// JScript source code
var DayName = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];



var oneMinute = 1000 * 60;

var intervalObject = new Object();
intervalObject["yyyy"] = { units: 1000 * 60 * 60 * 24 * 365, measure: "year" };
intervalObject["m"] = { units: 1000 * 60 * 60 * 24 * 30, measure: "month" };
intervalObject["d"] = { units: 1000 * 60 * 60 * 24, measure: "day" };
intervalObject["Q"] = { units: intervalObject["m"].units * 3, measure: "quarter" };
intervalObject["H"] = { units: oneMinute * 60, measure: "hour" };
intervalObject["N"] = { units: oneMinute, measure: "minute" };
intervalObject["S"] = { units: 1000, measure: "second" };


function DateDiff(dateAddObj) {
    this.interval = dateAddObj.interval;
    this.date1 = dateAddObj.date1;
    this.date2 = dateAddObj.date2;
    this.calculate = calculate;
    this.calculate();
}

Date.prototype.DateDiff = DateDiff;




function calculate() {
    var paramDate1 = new String(this.date1);
    splitDate1 = paramDate1.split("-");
    paramDateYear1 = splitDate1[0];
    paramDateMonth1 = splitDate1[1] - 1;
    paramDateDay1 = splitDate1[2];
    if (paramDateMonth1 > 12) {
        alert("Invalid Month!");
        return false;
    }
    if (paramDateDay1 > 31) {
        alert("Invalid Day!");
        return false;
    }


    var paramDate2 = new String(this.date2);
    splitDate2 = paramDate2.split("-");
    paramDateYear2 = splitDate2[0];
    paramDateMonth2 = splitDate2[1] - 1;
    paramDateDay2 = splitDate2[2];
    if (paramDateMonth2 > 12) {
        alert("Invalid Month!");
        return false;
    }
    if (paramDateDay2 > 31) {
        alert("Invalid Day!");
        return false;
    }


    var paramDate1Object = new Date(paramDateYear1, paramDateMonth1, paramDateDay1);
    paramDate1Object.setHours(0);
    paramDate1Object.setMinutes(0);
    paramDate1Object.setSeconds(0);
    //paramDate1Object.getTimezoneOffset() * oneMinute;
    var paramDate1ObjectTime = paramDate1Object.getTime();


    var paramDate2Object = new Date(paramDateYear2, paramDateMonth2, paramDateDay2);
    paramDate2Object.setHours(0);
    paramDate2Object.setMinutes(0);
    paramDate2Object.setSeconds(0);
    var paramDate2ObjectTime = paramDate2Object.getTime();

    if (paramDate2Object > paramDate1Object) {
        DSTAdjust = (paramDate2Object.getTimezoneOffset() - paramDate1Object.getTimezoneOffset()) * oneMinute;

    }
    else {
        DSTAdjust = (paramDate1Object.getTimezoneOffset() - paramDate2Object.getTimezoneOffset()) * oneMinute;
    }

    if (typeof intervalObject[this.interval] != "undefined") {
        if (typeof intervalObject[this.interval].units == "undefined") {
            alert("Interval is invalid!");
            return false;
        }

        var diff = Math.abs(paramDate2ObjectTime - paramDate1ObjectTime) - DSTAdjust;
        var timeDiff = Math.floor(diff / intervalObject[this.interval].units);
        if (timeDiff > 1) {
            var rname = intervalObject[this.interval].measure + "s";
        }
        else {
            var rname = intervalObject[this.interval].measure;
        }

        this.difference = parseInt(timeDiff);
    }
    else {
        this.difference = "Wrong format of interval!";

    }

}

