﻿/*******************************************************************************************
This file should be included on the second line of most ASP pages in this site (after the ASP Processing Directive for JavaScript) via something like this:
    #INCLUDE VIRTUAL = "/ic/includes/ssJS.asp"
    
__TOC
Site wide variables
Run on every page
Database Functions
    ssCloseConnection()
    ssOpenConnection()
DateTime Functions
    ssFormatDtm(dtm)
String Functions
    ssSTRtoSQL(str)
    ssSQLtoSQL(str)
    ssPad(ID,intPlaces)
    String.prototype.trim = function()
*******************************************************************************************/

/********* Site wide variables ***********/

var ssintServerNumber = 0; //Change this to 0-N depending on the server the database is on.
var gstrServerArray = ["SERVER0", "SERVER1", "SERVER2", "SERVER3"];
var gstrServer = gstrServerArray[gintServerNumber];
var gstrHTTPS;
if (gintServerNumber!=2) {  //Production Server (currently SERVER2)
    gstrHTTPS = "/aa/login/index.asp";
} else {
    gstrHTTPS = "https://www.somesite.com/aa/login/index.asp";
}

var ssSql, ssCnn, ssRst;

var ssSECONDinMS = 1000; // the number of milliseconds in a second
var ssMINUTEinMS = ssSECONDinMS * 60;
var ssHOURinMS = ssMINUTEinMS * 60;
var ssDAYinMS = ssHOURinMS * 24;
var ssWEEKinMS = ssDAYinMS * 7;
var ssDAYNAME = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
var ssDAYNAME3 = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
var ssMONTHNAME = ["January","February","March","April","May","June","July","August","September","October","November","December"];
var ssMONTHNAME3 = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];

var ssNOW = new Date(); //Date at time of page load
var ssYEARoftheNOW = ssNOW.getFullYear();
var ssMONTHoftheNOW = ssNOW.getMonth(); //0-11
var ssDAYOFMONTHoftheNOW = ssNOW.getDate();
var ssDAYOFWEEKoftheNOW = ssNOW.getDay();
var ssHOURoftheNOW = ssNOW.getHours();
var ssMINUTEoftheNOW = ssNOW.getMinutes();
var ssSECONDoftheNOW = ssNOW.getSeconds();
var ssMILLISECONDoftheNOW = ssNOW.getMilliseconds();
var ssNOWinMS = ssNOW.getTime();
var ssHOURSFROMGMToftheNOW = ssNOW.getTimezoneOffset()/60;
var sstzdhour = ssNOW.getTimezoneOffset()/60;
var sstzdminute = ssNOW.getTimezoneOffset()%60;
var ssVALUEOFtheNOW = ssNOW.valueOf();
var ssSEEDoftheNOW = ssNOW.getTime() % 0xfffffff;

/********* Run on every page ************/

//This chunk logs each page visit
var sqlVisit;
ssOpenConnection();
sqlVisit = 
    "INSERT INTO WebSession (" +
    	"UserWinLogin,"+
        "UserHost,"+
        "UserAddress,"+
        "UserBrowser,"+
        "URL,"+
        "ServerHost,"+
        "ServerAddress,"+
        "Stamp,Note"+
    ") VALUES (" +
        "'" + Request.ServerVariables("REMOTE_USER") + "'," +
        "'" + Request.ServerVariables("REMOTE_HOST") + "'," +
        "'" + Request.ServerVariables("REMOTE_ADDR") + "'," +
        "'" + Request.ServerVariables("HTTP_USER_AGENT") + "'," +
        "'" + Request.ServerVariables("URL") + "'," +
        "'" + Request.ServerVariables("HTTP_HOST") + "'," +
        "'" + Request.ServerVariables("LOCAL_ADDR") + "'," +
        "'" + ssformatDtm('now', 'MM/DD/YYYY') + "'," +
        "'page visit'" +
    ")";
ssCnn.Execute(sqlVisit);
ssCloseConnection();

/********* Database Functions ***********/

//Close the connection
function ssCloseConnection() {
    //if (typeof(ssRst)=="object") {
    //  if (ssRst.State == 1) ssRst.Close();
    //  //ssRst = null;
    //}
    ssCnn.Close();
    ssCnn = null;
}
//Open a connection.
function ssOpenConnection() {
    var strConnection = "Provider=SQLOLEDB; Server="+gstrServer+"; Database=myDatabase; User ID=george; Password=notArealPassword;";
    ssCnn = Server.CreateObject("ADODB.Connection");
    ssCnn.Open(strConnection)
}

/********* DateTime Functions ***********/

function ssFormatDtm(myDate,format) {
    var strDate = "";
    if (myDate=="now") {
        var jsdate = new Date();
    } else {
        var jsdate = myDate;
        //myDate EGs: new Date("Oct 22, 1968"), new Date(), dtmX
    }
    var fullyear = jsdate.getFullYear();
    var jsmonth = jsdate.getMonth(); //0-11
    var dayofthemonth = jsdate.getDate();
    var dayoftheweek = jsdate.getDay();
    var hour = jsdate.getHours();
    var minute = jsdate.getMinutes();
    var second = jsdate.getSeconds();
    var millisecon = jsdate.getMilliseconds();
    var dtminms = jsdate.getTime();
    var valueofthedtm = jsdate.valueOf();
    var tzdhour = jsdate.getTimezoneOffset()/60;
    var tzdminute = jsdate.getTimezoneOffset()%60;
    var tzd; 
    if (tzdhour>0) {
        tzd = "-"+ gPad(tzdhour,2) +":"+ gPad(tzdminute,2);
    } else if (tzdhour<0) {
        tzd="+"+ gPad(-tzdhour,2) +":"+ gPad(tzdminute,2);
    } else tzd = "Z";
    switch (format) {
    case "Mmmm d, yyyy":
        strDate = ssMONTHNAME[jsmonth]+" "+dayofthemonth+", "+fullyear; break;
    case "Mmmm d, yyyy Z":
        strDate = ssMONTHNAME[jsdate.getUTCMonth()] +" "+ jsdate.getUTCDate() +", "+ jsdate.getUTCFullYear(); break;
    case "MM/DD/YYYY":
        strDate = gPad(jsmonth+1,2)+"/"+gPad(dayofthemonth,2)+"/"+fullyear; break;
    case "MM/DD/YYYY Z":
        strDate = gPad(jsdate.getUTCMonth()+1,2) +"/"+ gPad(jsdate.getUTCDate(),2) +"/"+ jsdate.getUTCFullYear(); break;
    case "YYYY":
        strDate = fullyear; break;
    case "YYYY Z":
        strDate = jsdate.getUTCFullYear(); break;
    case "YYYY-MM":
        strDate = fullyear+"-"+gPad(jsmonth+1,2); break;
    case "YYYY-MM Z":
        strDate = jsdate.getUTCFullYear() +"-"+ gPad(jsdate.getUTCMonth()+1,2); break;
    case "YYYY-MM-DD":
        strDate = fullyear+"-"+gPad(jsmonth+1,2)+"-"+gPad(dayofthemonth,2); break;
    case "YYYY-MM-DD Z":
        strDate = jsdate.getUTCFullYear() +"-"+ gPad(jsdate.getUTCMonth()+1,2) +"-"+ gPad(jsdate.getUTCDate(),2); break;
    case "hh:mm":
        strDate = gPad(hour,2)+":"+gPad(minute,2); break;
    case "hh:mm tzd":
        strDate = gPad(hour,2)+":"+gPad(minute,2)+tzd; break;
    case "hh:mm Z":
        strDate = gPad(jsdate.getUTCHours(),2) +":"+ gPad(jsdate.getUTCMinutes(),2) +"Z"; break;
    case "hh:mm:ss":
        strDate = gPad(hour,2)+":"+gPad(minute,2)+":"+gPad(second,2); break;
    case "hh:mm:ss tzd":
        strDate = gPad(hour,2)+":"+gPad(minute,2)+":"+gPad(second,2)+tzd; break;
    case "hh:mm:ss Z":
        strDate = gPad(jsdate.getUTCHours(),2) +":"+ gPad(jsdate.getUTCMinutes(),2) +":"+ gPad(jsdate.getUTCSeconds(),2) +"Z"; break;
    case "LocaleString":   //Usual EG: Tuesday, June 10, 2003 08:25:22 PM
        strDate = jsdate.toLocaleString(); break;
    case "Ddd, dd Mmm YYYY hh:mm:ss": //RFC 822
        strDate = 
            ssDAYNAME3[dayoftheweek]+", "+gPad(dayoftheweek,2)+" "+ssMONTHNAME3[jsmonth]+" "+dayofthemonth+" "+
            gPad(hour,2)+":"+gPad(minute,2)+":"+gPad(second,2); break;
    case "Ddd, dd Mmm YYYY hh:mm:ss tzd":
        //strDate = jsdate.toUTCString();       //Don't use because lousy JS puts "UTC" on end by default.
        strDate = 
            ssDAYNAME3[dayoftheweek]+", "+gPad(dayoftheweek,2)+" "+ssMONTHNAME3[jsmonth]+" "+dayofthemonth+" "+
            gPad(hour,2)+":"+gPad(minute,2)+":"+gPad(second,2)+" "+tzd; break;
    case "Ddd, dd Mmm YYYY hh:mm:ss GMT": //GMT is preferred over Z or UTC for rss.
        strDate =
            ssDAYNAME3[jsdate.getUTCDay()]+", "+gPad(jsdate.getUTCDate(),2)+" "+ssMONTHNAME3[jsdate.getUTCMonth()]+" "+jsdate.getUTCFullYear()+" "+
            gPad(jsdate.getUTCHours(),2)+":"+gPad(jsdate.getUTCMinutes(),2)+":"+gPad(jsdate.getUTCSeconds(),2)+" GMT"; break;
    case "Ddd, dd Mmm YYYY hh:mm:ss Z":
        strDate =
            ssDAYNAME3[jsdate.getUTCDay()]+", "+gPad(jsdate.getUTCDate(),2)+" "+ssMONTHNAME3[jsdate.getUTCMonth()]+" "+jsdate.getUTCFullYear()+" "+
            gPad(jsdate.getUTCHours(),2)+":"+gPad(jsdate.getUTCMinutes(),2)+":"+gPad(jsdate.getUTCSeconds(),2)+" Z"; break;
    case "YYYY-MM-DDthh:mm:ss": //ISO 8601
        strDate = 
            fullyear+"-"+gPad(jsmonth+1,2)+"-"+gPad(dayofthemonth,2)+"t"+gPad(hour,2)+":"+gPad(minute,2)+":"+gPad(second,2); break;
    case "YYYY-MM-DDthh:mm:ss tzd":
        strDate = 
            fullyear+"-"+gPad(jsmonth+1,2)+"-"+gPad(dayofthemonth,2)+"t"+gPad(hour,2)+":"+gPad(minute,2)+":"+gPad(second,2)+tzd; break;
    case "YYYY-MM-DDthh:mm:ss Z":
        strDate = //'hi ISO';
            jsdate.getUTCFullYear() +"-"+ gPad(jsdate.getUTCMonth()+1,2) +"-"+ gPad(jsdate.getUTCDate(),2) +"t"+
            gPad(jsdate.getUTCHours(),2) +":"+ gPad(jsdate.getUTCMinutes(),2) +":"+ gPad(jsdate.getUTCSeconds(),2) +"Z"; break;
    }
    return strDate;
}

/********* String Functions ***********/

//Encode a string for storing in a field in SQL
function ssSTRtoSQL(str) {
    var str1 = new String(str);
    str1=str1.replace(/'/g, "''");
    return str1.trim();
}
//Take a field from SQL and puts it back
function ssSQLtoSQL(str) {
    if (str=="") return "'\'";
    else {
        var str1 = new String(str);
        str=str1.replace(/'/g, "''");
        if (str.toLowerCase().trim()=="null") return "NULL";
        else return "'"+str.trim()+"'";
    }
}
//Pad ID (str or int) with zeros on its left.
function ssPad(ID,intPlaces) {
    //assumes that places >= length
    var str = String(ID);
    var intLength = str.length;
    var intDifference = intPlaces-intLength;
    while (intDifference>0) {
        str = "0"+str;
        intDifference--;
    }
    return str;
}
//Add trim() to String object
String.prototype.trim = function() {
    return this.replace(/^\s*(\b.*\b|)\s*$/, "$1");
}
