﻿if (!LOCNS)
  var LOCNS = {};

if (!LOCNS.LocMap)
{
    LOCNS.LocMap = function () {
        var _strings = {};
        
        function _registerResource (r_key, r_value) { 
            _strings [r_key] = r_value;
        }
        
        function _getResource (r_key) {
            return _strings [r_key];
        }
        
        return {
            RegRes : function (r_keyprefix, r_key, r_value) 
            { 
              var key=arguments[0], val=arguments[1];
              if (arguments.length == 3)
              {
                key = arguments[0]+arguments[1];
                val = r_value;
              }
              return _registerResource (key, val); 
            },
            GetRes : function (r_keyprefix, r_key) 
            { 
              var key=arguments[0];
              if (arguments.length == 2)
                key = arguments[0] + arguments[1]; 
              return _getResource (key); 
            }
        };
    }();
    
  LOCNS.Format = function()
  {
    if( arguments.length == 0 || typeof(arguments[0]) == 'undefined' )
        return null;
        
    var str = arguments[0];
 
    for(var i=1;i<arguments.length;i++)
    {
        var re = new RegExp('\\{' + (i-1) + '\\}','gm');
        str = str.replace(re, arguments[i]);
    }
 
    return str;
  }
}

// ===================================================================
// Author: Matt Kruse <matt@mattkruse.com>
// WWW: http://www.mattkruse.com/
// Updated version at: http://www.javascripttoolbox.com/lib/date/index.php
// ------------------------------------------------------------------
// These functions use the same 'format' strings as the 
// java.text.SimpleDateFormat class, with minor exceptions.
// The format string consists of the following abbreviations:
//
// HISTORY
// ------------------------------------------------------------------
// 8/30/08: AAL - added ability to pass in localized words associative array
//                and setup ttam/ttpm handling.  Changed "a" to "tt" for .NET
//                format string compatibility
// May 17, 2003: Fixed bug in parseDate() for dates <1970
// March 11, 2003: Added parseDate() function
// March 11, 2003: Added "NNN" formatting option. Doesn't match up
//                 perfectly with SimpleDateFormat formats, but 
//                 backwards-compatability was required.
//
// 
// Field        | Full Form          | Short Form
// -------------+--------------------+-----------------------
// Year         | yyyy (4 digits)    | yy (2 digits), y (2 or 4 digits)
// Month        | MMM (name or abbr.)| MM (2 digits), M (1 or 2 digits)
//              | NNN (abbr.)        |
// Day of Month | dd (2 digits)      | d (1 or 2 digits)
// Day of Week  | EE (name)          | E (abbr)
// Hour (1-12)  | hh (2 digits)      | h (1 or 2 digits)
// Hour (0-23)  | HH (2 digits)      | H (1 or 2 digits)
// Hour (0-11)  | KK (2 digits)      | K (1 or 2 digits)
// Hour (1-24)  | kk (2 digits)      | k (1 or 2 digits)
// Minute       | mm (2 digits)      | m (1 or 2 digits)
// Second       | ss (2 digits)      | s (1 or 2 digits)
// AM/PM        | tt                 |
//
// NOTE THE DIFFERENCE BETWEEN MM and mm! Month=MM, not mm!
// Examples:
//  "MMM d, y" matches: January 01, 2000
//                      Dec 1, 1900
//                      Nov 20, 00
//  "M/d/yy"   matches: 01/20/00
//                      9/2/00
//  "MMM dd, yyyy hh:mm:ssa" matches: "January 01, 2000 12:30:45AM"
// ------------------------------------------------------------------

var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
function LZ(x) {return(x<0||x>9?"":"0")+x}

function formatLocalDate(date,format) {
    // defined in IntelliPage
	if (typeof(LocDateParts)=="undefined")
	    throw 'js: Missing Localizing Strings';
	    
	return formatDate(date,format,LocDateParts);
}

// ------------------------------------------------------------------
// formatDate (date_object, format)
// Returns a date in the output format specified.
// The format string uses the same abbreviations as in getDateFromFormat()
// ------------------------------------------------------------------
function formatDate(date,format,localizedWords) {
	format=format+"";
	var result="";
	var i_format=0;
	var c="";
	var token="";
	var y=date.getYear()+"";
	var M=date.getMonth()+1;
	var d=date.getDate();
	var E=date.getDay();
	var H=date.getHours();
	var m=date.getMinutes();
	var s=date.getSeconds();
	var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
	
	// Convert real date parts into formatted versions
	var value=new Object();
	if (y.length < 4) {y=""+(y-0+1900);}
	value["y"]=""+y;
	value["yyyy"]=y;
	value["yy"]=y.substring(2,4);
	value["M"]=M;
	value["MM"]=LZ(M);
	value["MMM"]=MONTH_NAMES[M-1];
	value["NNN"]=MONTH_NAMES[M+11];
	value["d"]=d;
	value["dd"]=LZ(d);
	value["E"]=DAY_NAMES[E+7];
	value["EE"]=DAY_NAMES[E];
	value["H"]=H;
	value["HH"]=LZ(H);
	if (H==0){value["h"]=12;}
	else if (H>12){value["h"]=H-12;}
	else {value["h"]=H;}
	value["hh"]=LZ(value["h"]);
	if (H>11){value["K"]=H-12;} else {value["K"]=H;}
	value["k"]=H+1;
	value["KK"]=LZ(value["K"]);
	value["kk"]=LZ(value["k"]);
	if (H > 11) { value["tt"]="PM"; }
	else { value["tt"]="AM"; }
	value["m"]=m;
	value["mm"]=LZ(m);
	value["s"]=s;
	value["ss"]=LZ(s);
	
	if (!(typeof(localizedWords)=="undefined"))
	{
	  for (akey in localizedWords)
	  {
	    if ((akey=="ttam" && value["tt"]=="AM") || (akey=="ttpm" && value["tt"]=="PM"))
	      value["tt"] = localizedWords[akey]
	  }
	}
	
	while (i_format < format.length) {
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		if (value[token] != null) { result=result + value[token]; }
		else { result=result + token; }
		}
	return result;
	}
	
/*
LOCNS.LocMap.RegisterResource("Hello","Hello World");
alert(LOCNS.LocMap.GRes("Hello"));

LOCNS.LocMap.RegisterResource("formtracker.js","Hello2","Hello2 World");
alert(LOCNS.LocMap.GRes("formtracker.js","Hello2"));
*/

function LRes(key) { // helper assumes vpath is defined
    return LOCNS.LocMap.GetRes(vpath, key);
}
