
The web app should be build as MVC or at least have a distinct Model (set of .js files).
function Person(oInit) { this.Clear(); if (typeof oInit === "object") { this.Init(oInit); } this.Init(oInit) } Person.sId = "Party"; Person.sColor = "#00f"; Person.sIcon = "../img/user_suit.png"; Person.prototype.Clear = function () { this.nkPer = 0; this.rvPer = 0; this.sPerLNm = ""; this.sPerEml = ""; };
String.prototype.PadLeft = function (nLen, sPad) { if (typeof sPad !== "string") sPad = " "; if (typeof nLen !== "number") nLen = 2; var sResult = this; while (sResult.length < nLen) sResult = sPad + sResult; return sResult; }; String.prototype.PadRight = function(sPad, nLen) { if (typeof sPad !== "string") sPad = " "; if (typeof nLen !== "number") nLen = 2; var sResult = this; while (sResult.length < nLen) sResult += sPad; return sResult; }; String.prototype.Trim = function () { return this.replace(/^\s+|\s+$/g, ""); }; String.prototype.TrimLeft = function () { return this.replace(/^\s+/, ""); }; String.prototype.TrimRight = function () { return this.replace(/\s+$/, ""); };
Date.prototype.Format = function (sFormat) { if (typeof sFormat !== "string") return this.getFullYear().toString() + (this.getMonth() + 1).toString().PadLeft("0", 2) + this.getDate().toString().PadLeft("0", 2); var that = this; return sFormat.replace(/dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?/g, function (sFormat) { switch (sFormat) { case "yyyy": return that.getFullYear().toString(); case "yy": return that.getFullYear().toString().substring(2, 4); case "MM": return (that.getMonth() + 1).toString().PadLeft(2, "0"); case "dd": return that.getDate().toString().PadLeft(2, "0"); case "hh": return (that.getHours() <= 12 ? that.getHours() : (that.getHours() - 12)).toString().PadLeft(2, "0"); case "HH": return that.getHours().toString().PadLeft(2, "0"); case "mm": return that.getMinutes().toString().PadLeft(2, "0"); case "ss": return that.getSeconds().toString().PadLeft(2, "0"); case "M": return (that.getMonth() + 1).toString(); case "d": return that.getDate().toString(); case "h": return (that.getHours() <= 12 ? that.getHours() : (that.getHours() - 12)).toString(); case "H": return that.getHours().toString(); case "m": return tht.getMinutes().toString(); case "s": return that.getSeconds().toString(); } }); };
addEventListener
and IE7's market share is diminishing (goodle analytics tell me that ie7 and older is at 14% and loses 2% per month).ins.oUser.eUsrLang
Stopwatch
class (click "Start", wait some seconds, click "Stop":
"use strict"; ins.Stopwatch = function () { var dFr, dTo, that = this; this.nMilliseconds; this.nSeconds; this.nMinutes; this.nHours; this.nDays; var _bRun = false; this.bRun = function () { return _bRun; }; this.Start = function () { _bRun = true; this.Reset(); dFr = new Date(); }; this.Stop = function () { _bRun = false; if (!dFr) { return Reset(); } else { dTo = new Date(); return Calc(); } }; this.Reset = function () { dFr = dTo = null; this.nMilliseconds = this.nSeconds = this.nMinutes = this.nHours = this.nDays = 0; return 0; }; this.toString = function (sFormat) { if (typeof sFormat !== "string") sFormat = "m:s.f"; return sFormat.replace(/d/g, this.nDays.toString()). replace(/h/g, this.nHours.toString().PadLeft(2, "0")). replace(/m/g, this.nMinutes.toString().PadLeft(2, "0")). replace(/s/g, this.nSeconds.toString().PadLeft(2, "0")). replace(/f/g, this.nMilliseconds.toString().PadLeft(3,"0")); }; var Calc = function () { if (dFr && dTo && dFr.getTime() < dTo.getTime()) { var nTime = dTo.getTime() - dFr.getTime() that.nMilliseconds = Math.round(nTime); that.nSeconds = Math.floor(that.nMilliseconds / 1000); that.nMilliseconds -= that.nSeconds * 1000; that.nMinutes = Math.floor(that.nSeconds / 60); that.nSeconds -= that.nMinutes * 60; that.nHours = Math.floor(that.nMinutes / 60); that.nMinutes -= that.nHours * 60; that.nDays = Math.floor(that.nHours / 24); that.nHours -= that.nDays * 24; return nTime; } else { return that.Reset(); } }; this.Reset(); }; if (typeof String.prototype.PadLeft != "function") { String.prototype.PadLeft = function (nLen, sPad) { if (typeof sPad !== "string") sPad = " "; if (typeof nLen !== "number") nLen = 2; var sResult = this; while (sResult.length < nLen) sResult = sPad + sResult; return sResult; }; }Usage:
var oSW = new i.Stopwatch(); var oBtn, oDiv; window.onload = function () { oBtn = document.getElementById("btnFr"); oDiv = document.getElementById("divResults"); oBtn.onclick = ToggleSW; }; var ToggleSW = function () { oBtn.disabled = true; if (oSW.bRun()) { oSW.Stop(); } else { oSW.Start(); } oBtn.innerHTML = oSW.bRun() ? "Stop" : "Start"; oDiv.innerHTML = oSW.bRun() ? "" : oSW.toString("m:s:f"); oBtn.removeAttribute("disabled"); };