﻿'use strict';

tnew.lib.Version = function (major, minor, revision, build) {
    var versionString = major;

    var extractPart = function(o) {
        if (typeof o === "undefined") {
            return 0;
        }

        var r = parseInt(o, 10);

        if (isNaN(r)) {
            return 0;
        }

        return r;
    };

    if (typeof versionString !== "undefined" && versionString !== null && versionString.length > 0) {
        var parts = versionString.split(".");
        this.major = extractPart(parts[0]);
        this.minor = extractPart(parts[1]);
        this.revision = extractPart(parts[2]);
        this.build = extractPart(parts[3]);
    } else {
        this.major = extractPart(major);
        this.minor = extractPart(minor);
        this.revision = extractPart(revision);
        this.build = extractPart(build);
    }

    this.toString = function() {
        return this.major + "." + this.minor + "." + this.revision + "." + this.build;
    };
    
    this.valueOf = function() {
        return tnew.lib.Version.BuildValue(this);
    };
}

tnew.lib.Version.BuildValue = function(v) {
    // 5 digits of support
    var buildFactor = 100000;

    // 4 digits of support
    var revisionFactor = 10000 * buildFactor;

    // 3 digits of support;
    var minorFactor = 100 * revisionFactor;

    return (v.major * minorFactor) + (v.minor * revisionFactor) + (v.revision * buildFactor) + v.build;
};