Date.now = function (fmt){
            fmt = fmt || 'MM/DD/YYYY';
            
            var ct    = new Date();
            var newDt = ct.dateFormat(fmt);
            
            return newDt;
          };
          
Date.config = {  
                     version : '1.0',
                daysInMonths : [ 31,28,31,30,31,30,31,31,30,31,30,31 ],
              daysInQuarters : [ 90,91,92,92 ],
                          ms : {
                                 Y : 31557600000,
                                 W : 604800000,
                                 D : 86400000,
                                 H : 3600000,
                                 M : 60000,
                                 S : 1000
                               }, 
                        lang : 'en',
                        text : {
                                en : {    
                                           monthName : [ 'January','February','March','April','May','June','July','August','September','October','November','December' ],
                                        monthNameAbr : [ 'Jan'    ,'Feb'     ,'Mar'  ,'Apr'  ,'May','Jun' ,'Jul' ,'Aug'   ,'Sept'     ,'Oct'    ,'Nov'     ,'Dec' ],
                                             dayName : [ 'Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday' ],
                                          dayNameAbr : [ 'Sun'   ,'Mon'   ,'Tue'    ,'Wed'      ,'Thu'     ,'Fri'   ,'Sat' ]
                                     },                                      
                                es : {
                                           monthName : [ 'enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre' ],
                                        monthNameAbr : [ 'enero','feb'    ,'marzo','abr'  ,'mayo','jun'  ,'jul'  ,'agosto','sept'      ,'oct'    ,'nov'      ,'dic'],
                                             dayName : [ 'domingo','lunes','martes','mi\u00E9rcoles','jueves','viernes','s\u00E1bado' ],
                                          dayNameAbr : [ 'dom'    ,'lun'  ,'mar'   ,'mi\u00E9'      ,'jue'   ,'vie'    ,'s\u00E1b' ]
                                     },
                                it : {
                                           monthName : [ 'Jennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre' ],
                                        monthNameAbr : [ 'Genn'   ,'Febbr'   ,'Mar'  ,'Apr'   ,'Magg'  ,'Giugno','Lugio' ,'Ag'    ,'Sett'     ,'Ott'    ,'Nov'     ,'Dic' ],
                                             dayName : [ 'Domenica','Lunedi','Martedi','Mercoledi','Giovedi','Venerdi','Sabato' ],
                                          dayNameAbr : [ 'dom'     ,'lun'   ,'mar'    ,'mer'      ,'gio'    ,'ven'    ,'sab' ]
                                     },
                                fr : {
                                           monthName : [ 'Janvier','F\u00E9vrier','Mars','Avril','Mai','Juin','Juillet','Aout','Septembre','Octobre','Novembre','D\u00E9cembre' ],
                                        monthNameAbr : [ 'Janv'   ,'F\u00E9vr'   ,'Mars','Avril','Mai','Juin','Juil'   ,'Aout','Sept'     ,'Oct'    ,'Nov'     ,'D\u00E9c' ],
                                             dayName : [ 'Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi' ],
                                          dayNameAbr : [ 'dim'     ,'lun'  ,'mar'  ,'mer'     ,'jeu'  ,'ven'     ,'sam' ]
                                     },
                                de : {
                                           monthName : [ 'Januar','Februar','M\u00E4rz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember' ],
                                        monthNameAbr : [ 'Jan'   ,'Feb'    ,'M\u00E4rz','Apr'  ,'Mai','Juni','Juli','Aug'   ,'Sept'     ,'Okt'    ,'Nov'     ,'Dez' ],
                                             dayName : [ 'Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag' ],
                                          dayNameAbr : [ 'Son'    ,'Mon'   ,'Die'     ,'Mit'     ,'Don'       ,'Fre'    ,'Sam' ]
                                     },
                                nl : {
                                           monthName : [ 'januari','februari','maart','april','mei','juni','juli','augustus','september','oktober','november','december' ],
                                        monthNameAbr : [ 'jan'    ,'feb'     ,'mrt'  ,'apr'  ,'mei','jun' ,'jul' ,'aug'     ,'sep'      ,'okt'    ,'nov'     ,'dec'      ],
                                             dayName : [ 'zondag','maandag','dinsdag','woensdag','donderdag','vrijdag','zaterdag'],
                                          dayNameAbr : [ 'zo'    ,'ma'     ,'di'     ,'wo'      ,'do'       ,'vr'     ,'za'      ]
                                     },
                                pt : {
                                           monthName : [ 'Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro' ],
                                        monthNameAbr : [ 'Jan'    ,'Fev'      ,'Mar'  ,'Abr'  ,'Mai' ,'Jun'  ,'Jul'  ,'Ago'   ,'Set'     ,'Out'    ,'Nov'     ,'Dez'      ],
                                             dayName : [ 'Domigo','Segunda','Terça','Quarta','Quinta','Sexta','S\u00E1bado' ],
                                          dayNameAbr : [ 'Dom'   ,'Seg'    ,'Ter'  ,'Qua'   ,'Qui'   ,'Sex'  ,'S\u00E1b'    ]
                                     },
                                sv : {
                                           monthName : [ 'januari','februari','mars','april','maj','juni','juli','augusti','september','oktober','november','december' ],
                                        monthNameAbr : [ 'jan'    ,'feb'     ,'mar' ,'apr'  ,'maj','jun' ,'jul' ,'aug'    ,'sept'     ,'okt'    ,'nov'     ,'dec'     ],
                                             dayName : [ 's\u00F6ndag','m\u00E5ndag','tisdag','onsdag','torsdag','fredag','i\u00F6rdag' ],
                                          dayNameAbr : [ 's\u00F6n'   ,'m\u00E5n'   ,'tis'   ,'ons'   ,'tors'   ,'fre'   ,'i\u00F6r'   ]
                                     },
                                tl : {
                                           monthName : [ 'Enero','Pebrero','Marso','Abril','Mayo','Hunyo','Hulyo','Agosto','Setyembre','Oktubre','Nobyembre','Disyembre' ],
                                        monthNameAbr : [ 'Ene'  ,'Peb'    ,'Mar'  ,'Abr'  ,'May' ,'Hun'  ,'Hul'  ,'Ago'   ,'Set'      ,'Okt'    ,'Nob'      ,'Dis'       ],  
                                             dayName : [ 'Linggo','Lunes','Martes','Miyerkules','Huwebes','Biyernes','Sabado' ],
                                          dayNameAbr : [ 'Lin'   ,'Lun'  ,'Mar'   ,'Mye'       ,'Huw'    ,'Bye'     ,'Sab'    ]
                                     },

                               },
                    timeZone : {  // English Only, Not Translated //
                                'GMT-0100' : [
                                                { abr : 'N',     name : 'November Time Zone' },
                                                { abr : 'AZOST', name : 'Azores Standard Time' },
                                                { abr : 'CVT',   name : 'Cape Verde Time' },
                                                { abr : 'EGT',   name : 'Eastern Greenland Time' }
                                             ],
                                'GMT-0200' : [
                                                { abr : 'O',     name : 'Oscar Time Zone' },
                                                { abr : 'ARDT',  name : 'Argentina Daylight Time' },
                                                { abr : 'BEST',  name : 'Brazil Eastern Standard Time' },
                                                { abr : 'BRST',  name : 'Brazilia Summer Time' },
                                                { abr : 'CGST',  name : 'Central Greenland Summer Time' },
                                                { abr : 'GST',   name : 'South Georgia and the South Sandwich Islands' },
                                                { abr : 'PMDT',  name : 'Pierre & Miquelon Daylight Time' },
                                                { abr : 'UYST',  name : 'Uruguay Summer Time' }
                                             ],
                                'GMT-0230' : [
                                                { abr : 'O',     name : 'Oscar Time Zone' },
                                                { abr : 'NDT',   name : 'Newfoundland Daylight Time' }
                                             ],
                                'GMT-0300' : [
                                                { abr : 'P',     name : 'Papa Time Zone' },
                                                { abr : 'ADT',   name : 'Atlantic Daylight Time' },
                                                { abr : 'ART',   name : 'Argentina Time' },
                                                { abr : 'BRT',   name : 'Brazilia Time' },
                                                { abr : 'BWDT',  name : 'Brazil Western Daylight Time' },
                                                { abr : 'CGT',   name : 'Central Greenland Time' },
                                                { abr : 'CLDT',  name : 'Chile Daylight Time' },
                                                { abr : 'FKDT',  name : 'Falkland Island Daylight Time' },
                                                { abr : 'GFT',   name : 'French Guiana Time' },
                                                { abr : 'JFDT',  name : 'Juan Fernandez Islands Daylight Time' },
                                                { abr : 'PMST',  name : 'Pierre & Miquelon Standard Time' },
                                                { abr : 'PYST',  name : 'Paraguay Summer Time' },
                                                { abr : 'ROTT',  name : 'Rothera Time' },
                                                { abr : 'SLST',  name : 'San Luis Summer Time' },
                                                { abr : 'SRT',   name : 'Suriname Time' },
                                                { abr : 'UYT',   name : 'Uruguay Standard Time' }
                                             ],
                                'GMT-0330' : [
                                                { abr : 'P',     name : 'Papa Time Zone' },
                                                { abr : 'NST',   name : 'Newfoundland Standard Time' }
                                             ],
                                'GMT-0400' : [
                                                { abr : 'Q',     name : 'Quebec Time Zone' },
                                                { abr : 'AST',   name : 'Atlantic Standard Time' },
                                                { abr : 'BOT',   name : 'Bolivia Time' },
                                                { abr : 'BWST',  name : 'Brazil Western Standard Time' },
                                                { abr : 'CLST',  name : 'Chile Standard Time' },
                                                { abr : 'EDT',   name : 'Eastern Daylight Time' },
                                                { abr : 'FKST',  name : 'Falkland Island Standard Time' },
                                                { abr : 'GYT',   name : 'Guyana Time' },
                                                { abr : 'JFST',  name : 'Juan Fernandez Islands Standard Time' },
                                                { abr : 'PYT',   name : 'Paraguay Time' },
                                                { abr : 'SLT',   name : 'San Luis Time' }
                                             ],
                                'GMT-0430' : [
                                                { abr : 'Q',     name : 'Quebec Time Zone' },
                                                { abr : 'VST',   name : 'Venezuela Standard Time' }
                                             ],
                                'GMT-0500' : [
                                                { abr : 'R',     name : 'Romeo Time Zone' },
                                                { abr : 'ACT',   name : 'Acre Time' },
                                                { abr : 'CDT',   name : 'Central Daylight Time' },
                                                { abr : 'COT',   name : 'Colombia Time' },
                                                { abr : 'EADT',  name : 'Easter Island Daylight Time' },
                                                { abr : 'ECT',   name : 'Ecuador Time' },
                                                { abr : 'EST',   name : 'Eastern Standard Time' },
                                                { abr : 'PET',   name : 'Peru Time' }
                                             ],
                                'GMT-0600' : [
                                                { abr : 'S',     name : 'Sierra Time Zone' },
                                                { abr : 'CST',   name : 'Central Standard Time' },
                                                { abr : 'EAST',  name : 'Easter Island Standard Time' },
                                                { abr : 'GALT',  name : 'Galapagos Time' },
                                                { abr : 'MDT',   name : 'Mountain Daylight Time' },
                                                { abr : 'PIT',   name : 'Peter Island Time' }
                                             ],
                                'GMT-0700' : [
                                                { abr : 'T',     name : 'Tango Time Zone' },
                                                { abr : 'MST',   name : 'Mountain Standard Time' },
                                                { abr : 'PDT',   name : 'Pacific Daylight Time' }
                                             ],
                                'GMT-0800' : [
                                                { abr : 'U',     name : 'Uniform Time Zone' },
                                                { abr : 'AKDT',  name : 'Alaska Daylight Time' },
                                                { abr : 'CIST',  name : 'Clipperton Island Standard Time' },
                                                { abr : 'PST',   name : 'Pacific Standard Time' },
                                                { abr : 'PST',   name : 'Pitcairn Standard Time' }
                                             ],
                                'GMT-0900' : [
                                                { abr : 'V',     name : 'Victor Time Zone' },
                                                { abr : 'AKST',  name : 'Alaska Standard Time' },
                                                { abr : 'GIT',   name : 'Gambier Island Time' },
                                                { abr : 'HADT',  name : 'Hawaii - Aleutian Daylight Time' }
                                             ],
                                'GMT-0930' : [
                                                { abr : 'V',     name : 'Victor Time Zone' },
                                                { abr : 'MIT',   name : 'Marquesas Islands Time' }
                                             ],
                                'GMT-1000' : [
                                                { abr : 'W',     name : 'Whiskey Time Zone' },
                                                { abr : 'CKT',   name : 'Cook Island Time' },
                                                { abr : 'HAST',  name : 'Hawaii - Aleutian Standard Time' },
                                                { abr : 'TAHT',  name : 'Tahiti Time' },
                                                { abr : 'TKT',   name : 'Tokelau Time' }
                                             ],
                                'GMT-1100' : [
                                                { abr : 'X',     name : 'X-ray Time Zone' },
                                                { abr : 'NUT',   name : 'Niue Time' },
                                                { abr : 'SST',   name : 'Samoa Standard Time' }
                                             ],
                                'GMT-1200' : [
                                                { abr : 'Y',     name : 'Yankee Time Zone' },
                                                { abr : 'BIT',   name : 'Baker Island Time' }
                                             ],
                                'GMT+0000' : [
                                                { abr : 'Z',     name : 'Zulu Time Zone' },
                                                { abr : 'AZODT', name : 'Azores Daylight Time' },
                                                { abr : 'EGST',  name : 'Eastern Greenland Summer Time' },
                                                { abr : 'GMT',   name : 'Greenwich Meantime' },
                                                { abr : 'IST',   name : 'Ireland Standard Time' },
                                                { abr : 'SLT',   name : 'Sierra Leone Time' },
                                                { abr : 'UTC',   name : 'Universal Coordinated Time' },
                                                { abr : 'WET',   name : 'Western Europe Time' }
                                             ],
                                'GMT+0100' : [
                                                { abr : 'A',     name : 'Alpha Time Zone' },
                                                { abr : 'BST',   name : 'British Summer Time' },
                                                { abr : 'CET',   name : 'Central Europe Time' },
                                                { abr : 'IDT',   name : 'Ireland Daylight Time' },
                                                { abr : 'WAT',   name : 'Western Africa Time' },
                                                { abr : 'WEST',  name : 'Western Europe Summer Time' }
                                             ],
                                'GMT+0200' : [
                                                { abr : 'B',     name : 'Bravo Time Zone' },
                                                { abr : 'CAT',   name : 'Central Africa Time' },
                                                { abr : 'CEST',  name : 'Central Europe Summer Time' },
                                                { abr : 'EET',   name : 'Eastern Europe Time' },
                                                { abr : 'IST',   name : 'Israel Standard Time' },
                                                { abr : 'SAST',  name : 'South Africa Standard Time' },
                                                { abr : 'SYT',   name : 'Syrian Standard Time' },
                                                { abr : 'WAST',  name : 'Western Africa Summer Time' }
                                             ],
                                'GMT+0300' : [
                                                { abr : 'C',     name : 'Charlie Time Zone' },
                                                { abr : 'AST',   name : 'Al Manamah Standard Time' },
                                                { abr : 'AST',   name : 'Arabia Standard Time' },
                                                { abr : 'AST',   name : 'Arabic Standard Time' },
                                                { abr : 'EAT',   name : 'East Africa Time' },
                                                { abr : 'EEST',  name : 'Eastern Europe Summer Time' },
                                                { abr : 'IDT',   name : 'Israel Daylight Time' },
                                                { abr : 'MSK',   name : 'Moscow Standard Time' },
                                                { abr : 'SYST',  name : 'Syrian Summer Time' }
                                             ],
                                'GMT+0330' : [
                                                { abr : 'C',     name : 'Charlie Time Zone' },
                                                { abr : 'IRST',  name : '\u00CEran Standard Time' }
                                             ],
                                'GMT+0400' : [
                                                { abr : 'D',     name : 'Delta Time Zone' },
                                                { abr : 'ADT',   name : 'Arabia Daylight Time' },
                                                { abr : 'AMST',  name : 'Armenia Standard Time' },
                                                { abr : 'AZT',   name : 'Azerbaijan Time' },
                                                { abr : 'GET',   name : 'Georgia Standard Time' },
                                                { abr : 'GST',   name : 'Gulf Standard Time' },
                                                { abr : 'ICT',   name : '\u00CEles Crozet Time' },
                                                { abr : 'MSD',   name : 'Moscow Summer Time' },
                                                { abr : 'MUT',   name : 'Mauritius Time' },
                                                { abr : 'RET',   name : 'R\u00E9union Time' },
                                                { abr : 'SAMT',  name : 'Samara Time' },
                                                { abr : 'SCT',   name : 'Seychelles Time' }
                                             ],
                                'GMT+0430' : [
                                                { abr : 'D',     name : 'Delta Time Zone' },
                                                { abr : 'AFT',   name : 'Afghanistan Time' },
                                                { abr : 'IRDT',  name : '\u00CEran Daylight Time' }
                                             ],
                                'GMT+0500' : [                                
                                                { abr : 'E',     name : 'Echo Time Zone' },
                                                { abr : 'AMDT',  name : 'Armenia Daylight Time' },
                                                { abr : 'AZST',  name : 'Azerbaijan Summer Time' },
                                                { abr : 'CAST',  name : 'Chinese Antarctic Standard Time' },
                                                { abr : 'HMT',   name : 'Heard and McDonald Islands Time' },
                                                { abr : 'KGT',   name : 'Kyrgyzstan Time' },
                                                { abr : 'MVT',   name : 'Maldives Time' },
                                                { abr : 'PKT',   name : 'Pakistan Time' },
                                                { abr : 'SAMST', name : 'Samara Summer Time' },
                                                { abr : 'TFT',   name : 'French Southern and Antarctic Time' },
                                                { abr : 'TJT',   name : 'Tajikistan Time' },
                                                { abr : 'TMT',   name : 'Turkmenistan Time' },
                                                { abr : 'UZT',   name : 'Uzbekistan Time' },
                                                { abr : 'WKST',  name : 'West Kazakhstan Standard Time' },
                                                { abr : 'YEKT',  name : 'Yekaterinburg Time' }
                                             ],
                                'GMT+0530' : [
                                                { abr : 'E',     name : 'Echo Time Zone' },
                                                { abr : 'IST',   name : 'Indian Standard Time' }
                                             ],
                                'GMT+0545' : [
                                                { abr : 'E',     name : 'Echo Time Zone' },
                                                { abr : 'NPT',   name : 'Nepal Time' }
                                             ],
                                'GMT+0600' : [
                                                { abr : 'F',     name : 'Foxtrot Time Zone' },
                                                { abr : 'BDT',   name : 'Bangladesh Standard Time' },
                                                { abr : 'BIOT',  name : 'British Indian Ocean Time' },
                                                { abr : 'BTT',   name : 'Bhutan Time' },
                                                { abr : 'EKST',  name : 'East Kazakhstan Standard Time' },
                                                { abr : 'KGST',  name : 'Kyrgyzstan Summer Time' },
                                                { abr : 'LKT',   name : 'Sri Lanka Time' },
                                                { abr : 'MAWT',  name : 'Mawson Time' },
                                                { abr : 'NOVT',  name : 'Novosibirsk Time' },
                                                { abr : 'OMST',  name : 'Omsk Standard Time' },
                                                { abr : 'PKST',  name : 'Pakistan Summer Time' },
                                                { abr : 'VOST',  name : 'Vostok Time' },
                                                { abr : 'YEKST', name : 'Yekaterinburg Summer Time' }
                                             ],
                                'GMT+0630' : [
                                                { abr : 'F',     name : 'Foxtrot Time Zone' },
                                                { abr : 'CCT',   name : 'Cocos Islands Time' },
                                                { abr : 'MMT',   name : 'Myanmar Time' }
                                             ],
                                'GMT+0700' : [
                                                { abr : 'G',     name : 'Golf Time Zone' },
                                                { abr : 'BST',   name : 'Bangladesh Summer Time' },
                                                { abr : 'CXT',   name : 'Christmas Island Time' },
                                                { abr : 'DAVT',  name : 'Davis Time' },
                                                { abr : 'ICT',   name : 'Indochina Time' },
                                                { abr : 'KRAT',  name : 'Krasnoyarsk Time' },
                                                { abr : 'KOVT',  name : 'Khovd Time' },
                                                { abr : 'NOVST', name : 'Novosibirsk Summer Time' },
                                                { abr : 'OMSK',  name : 'Omsk Summer Time' },
                                                { abr : 'WIB',   name : 'Waktu Indonesia Bagian Barat' }
                                             ],
                                'GMT+0800' : [
                                                { abr : 'H',     name : 'Hotel Time Zone' },
                                                { abr : 'ACIT',  name : 'Ashmore and Cartier Islands Time' },
                                                { abr : 'AWST',  name : 'Australian Western Standard Time' },
                                                { abr : 'BDT',   name : 'Brunei Time' },
                                                { abr : 'CST',   name : 'China Standard Time' },
                                                { abr : 'HKST',  name : 'Hong Kong Standard Time' },
                                                { abr : 'IRKT',  name : 'Irkutsk Time' },
                                                { abr : 'KRAST', name : 'Krasnoyarsk Summer Time' },
                                                { abr : 'KOVST', name : 'Khovd Summer Time' },
                                                { abr : 'MBT',   name : 'Macclesfield Bank Time' },
                                                { abr : 'MNT',   name : 'Mongolia Time' },
                                                { abr : 'MYT',   name : 'Malaysia Time' },
                                                { abr : 'PHT',   name : 'Philippines Time' },
                                                { abr : 'PIT',   name : 'Paracel Islands Time' },
                                                { abr : 'PIT',   name : 'Pratas Islands' },
                                                { abr : 'SGT',   name : 'Singapore Time' },
                                                { abr : 'SIT',   name : 'Spratly Islands Time' },
                                                { abr : 'SST',   name : 'Scarborough Shoal Time' },
                                                { abr : 'TWT',   name : 'Taiwan Time' },
                                                { abr : 'WITA',  name : 'Waktu Indonesia Bagian Tengah' }
                                             ],
                                'GMT+0815' : [
                                                { abr : 'H',     name : 'Hotel Time Zone' },
                                                { abr : 'APO',   name : 'Apo Island Time' }
                                             ],
                                'GMT+0845' : [
                                                { abr : 'H',     name : 'Hotel Time Zone' },
                                                { abr : 'ACWST', name : 'Australian Central Western Standard Time' }
                                             ],
                                'GMT+0900' : [
                                                { abr : 'I',     name : 'India Time Zone' },
                                                { abr : 'IRKST', name : 'Irkutsk Summer Time' },
                                                { abr : 'JST',   name : 'Japan Standard Time' },
                                                { abr : 'KST',   name : 'Korea Standard Time' },
                                                { abr : 'MNST',  name : 'Mongolia Summer Time' },
                                                { abr : 'PWT',   name : 'Palau Time' },
                                                { abr : 'TPT',   name : 'East Timor Time' },
                                                { abr : 'WIT',   name : 'Waktu Indonesia Bagian Timur' },
                                                { abr : 'YAKT',  name : 'Yakutsk Time' }
                                             ],
                                'GMT+0930' : [
                                                { abr : 'I',     name : 'India Time Zone' },
                                                { abr : 'ACST',  name : 'Australian Central Standard Time' }
                                             ],
                                'GMT+1000' : [
                                                { abr : 'K',     name : 'Kilo Time Zone' },
                                                { abr : 'AEST',  name : 'Australian Eastern Standard Time' },
                                                { abr : 'ChST',  name : 'Chamorro Standard Time' },
                                                { abr : 'DTAT',  name : 'District de Terre Ad\u00E9lie Time' },
                                                { abr : 'PGT',   name : 'Papua New Guinea Time' },
                                                { abr : 'TRUT',  name : 'Truk Time' },
                                                { abr : 'VLAT',  name : 'Vladivostok Time' },
                                                { abr : 'YAKST', name : 'Yakutsk Summer Time' },
                                                { abr : 'YAPT',  name : 'Yap Time' }
                                             ],
                                'GMT+1030' : [
                                                { abr : 'K',     name : 'Kilo Time Zone' },
                                                { abr : 'ACDT ', name : 'Australian Central Daylight Time ' },
                                                { abr : 'LHST',  name : 'Lord Howe Standard Time' }
                                             ],
                                'GMT+1100' : [
                                                { abr : 'L',     name : 'Lima Time Zone' },
                                                { abr : 'AEDT',  name : 'Australian Eastern Daylight Time' },
                                                { abr : 'KOST',  name : 'Kosrae Standard Time' },
                                                { abr : 'LHDT',  name : 'Lord Howe Daylight Time' },
                                                { abr : 'MAGT',  name : 'Magadan Island Time' },
                                                { abr : 'NCT',   name : 'New Caledonia Time' },
                                                { abr : 'PONT',  name : 'Pohnpei Standard Time' },
                                                { abr : 'SBT',   name : 'Solomon Island Time' },
                                                { abr : 'VLAST', name : 'Vladivostok Summer Time' },
                                                { abr : 'VUT',   name : 'Vanuatu Time' }
                                             ],
                                'GMT+1130' : [
                                                { abr : 'L',     name : 'Lima Time Zone' },
                                                { abr : 'NFT',   name : 'Norfolk Time' }
                                             ],
                                'GMT+1200' : [
                                                { abr : 'M',     name : 'Mike Time Zone' },
                                                { abr : 'ANAT',  name : 'Anadyr\u2019 Time' },
                                                { abr : 'FJT',   name : 'Fiji Time' },
                                                { abr : 'GILT',  name : 'Gilbert Island Time' },
                                                { abr : 'MAGST', name : 'Magadan Island Summer Time' },
                                                { abr : 'MHT',   name : 'Marshall Islands Time' },
                                                { abr : 'NRT',   name : 'Nauru Time' },
                                                { abr : 'NZST',  name : 'New Zealand Standard Time' },
                                                { abr : 'PETT',  name : 'Petropavlovsk Time' },
                                                { abr : 'SCST',  name : 'Santa Claus Standard Time' },
                                                { abr : 'TVT',   name : 'Tuvalu Time' },
                                                { abr : 'WFT',   name : 'Wallis and Futuna Time' },
                                                { abr : 'MAGST', name : 'Magadan Island Summer Time' }
                                             ],
                                'GMT+1245' : [
                                                { abr : 'M',     name : 'Mike Time Zone' },
                                                { abr : 'CHAST', name : 'Chatham Island Standard Time' }
                                             ],
                                'GMT+1300' : [
                                                { abr : 'Z',     name : 'Zulu Time Zone' },
                                                { abr : 'ANAST', name : 'Anadyr\u2019 Summer Time' },
                                                { abr : 'NZDT',  name : 'New Zealand Daylight Time' },
                                                { abr : 'PETST', name : 'Petropavlovsk Summer Time' },
                                                { abr : 'PHOT',  name : 'Phoenix Island Time' },
                                                { abr : 'SCDT',  name : 'Santa Claus Delivery Time' },
                                                { abr : 'TOT',   name : 'Tonga Time' }
                                             ],
                                'GMT+1345' : [
                                                { abr : 'Z',     name : 'Zulu Time Zone' },
                                                { abr : 'CHADT', name : 'Chatham Island Daylight Time' }
                                             ],
                                'GMT+1400' : [
                                                { abr : 'Y',     name : 'Yankee Time Zone' },
                                                { abr : 'LINT',  name : 'Line Island Time' }
                                             ]
                             },
                        fn : {                                                            
                                zeroPadding : function(n,nLen){
                                                n     = n    || 0;
                                                nLen   = nLen || 0;
                                                
                                                var nStr    = n.toString();
                                                var zeros   = nLen - nStr.length;
                                                var zeroPad = '';
                                                
                                                var z, result;
                                                
                                                // Pad zeros to number
                                                for(z=0; z < zeros; z++){
                                                  zeroPad += '0';
                                                }
                                                
                                                // Build string
                                                result = zeroPad + nStr;  
                                                
                                                return result;  
                                              },
                                     suffix : function(n){                                                                    
                                                var re = /(\d?(\d))$/
                                                var ld = re.exec(n);    
                                                var sd = parseInt(ld[1],10);
                                                
                                                var selection, suffix, result;
                                                
                                                // Check second digit for 11-13  
                                                if(sd > 10 && sd < 14){
                                                  ld[2] = 4;
                                                }
                                                
                                                // Select suffix
                                                selection = parseInt(ld[2],10);
                                                switch (selection){
                                                  case 1:
                                                    suffix = 'st';
                                                  break;
                                                  
                                                  case 2:
                                                    suffix = 'nd';
                                                  break;
                                                  
                                                  case 3:
                                                    suffix = 'rd';
                                                  break;
                                                  
                                                  default:
                                                    suffix = 'th';
                                                  break;
                                                }
                                                
                                                // Build string
                                                result = n + suffix;
                                                
                                                return result;
                                              }
                             }
            };

//--[Public Date Methods]-----------------------//

//--[Date Differance]-------------------------------------------------//
Date.prototype.dateDiff = function(type,dateBegin,dateEnd,rndOff){
  type      = type      || 'D';
  dateBegin = dateBegin || this;
  dateEnd   = dateEnd   || this;
  rndOff    = rndOff    || 0;

  type      = type.toUpperCase();
  dateBegin = new Date( Date.parse(dateBegin) );
  dateEnd   = new Date( Date.parse(dateEnd) );
  
  var milDB  = dateBegin.valueOf();
  var milDE  = dateEnd.valueOf();
  var result = ( milDE - milDB ) / Date.config.ms[type];  // Compare dates  
  
  if(!rndOff){
    result = Math.round(result);
  }
  
  return result;
}

//--[Date Calculation]---------------------------------------------//
Date.prototype.dateCal = function(type,n,date,lang){
  type = type || 'D';
  n    = n    || 0;
  date = date || this;
  lang = lang || Date.config.lang;

  type = type.toUpperCase();
  date = Date.parse(date);

  var dmil   = date.valueOf() + (n * Date.config.ms[type]);
  var newDt  = new Date(dmil); 
  var dIDX   = newDt.getDay();  
  var result = {  
                YYYY : newDt.getFullYear(),
                   M : newDt.getMonth() + 1,
                   D : newDt.getDate(),
                DDDD : Date.config.text[lang].dayName[dIDX], 
                 DDD : Date.config.text[lang].dayNameAbr[dIDX],
                   H : newDt.getHours(),
                   m : newDt.getMinutes(),
                   s : newDt.getSeconds(),
                 val : newDt.valueOf(),
                 raw : newDt
               };
                 
  return result; 
}

//--[Date Format]--------------------------------------------------//
Date.prototype.dateFormat = function(fmt,lang){
  fmt       = fmt   || 'MM/DD/YY';
  lang      = lang  || Date.config.lang;
  
  var y     = this.getFullYear().toString();
  var d     = this.getDate();
  var mIDX  = this.getMonth();
  var dIDX  = this.getDay();
  var q     = this.getQuarter() + 1;
  var h     = this.getHours();
  var m     = this.getMinutes();
  var s     = this.getSeconds();
  var z     = parseInt( this.getTimezoneOffset() / 60, 10 );
  
  if(z < 0){
    z = Math.abs(z) + 12;
  }
  
  var IDX    = 0;
  var result = '';
  var fmtLen = fmt.length;
  var tmz    = this.getTimeZoneMiltary();    
  var value  = {    
                YYYY : y,
                  YY : y.substr(2,2),
                   Q : q,
                   q : Date.config.fn.suffix(q),
                MMMM : Date.config.text[lang].monthName[mIDX],
                 MMM : Date.config.text[lang].monthNameAbr[mIDX],
                  MM : Date.config.fn.zeroPadding(mIDX+1,2),
                   M : mIDX+1,
                DDDD : Date.config.text[lang].dayName[dIDX],
                 DDD : Date.config.text[lang].dayNameAbr[dIDX],
                  DD : Date.config.fn.zeroPadding(d,2),      
                   D : d,
                   d : Date.config.fn.suffix(d),
                  HH : Date.config.fn.zeroPadding(h,2),
                   H : h,
                  hh : Date.config.fn.zeroPadding( ( h > 12? ( h - 12 ) : ( h == 0 ? 12 : h ) ), 2),
                   h : h > 12? ( h - 12 ) : ( h == 0 ? 12 : h ),
                  mm : Date.config.fn.zeroPadding(m,2),
                   m : m,
                  ss : Date.config.fn.zeroPadding(s,2),
                   s : s,
                  TT : h > 11 ? 'PM' : 'AM',
                   T : h > 11 ? 'P'  : 'A',
                  tt : h > 11 ? 'pm' : 'am',
                   t : h > 11 ? 'p'  : 'a',  
                zzzz : tmz.name,
                 zzz : tmz.abr,
                  ZZ : tmz.gmtStr,
                   Z : tmz.offset
               };
  
  var chr, token;
  
  // Loop through format to format string
  while (IDX < fmtLen) {
    // Reset for next loop
    chr   = fmt.charAt(IDX);
    token = '';
    
    // Collect formatting
    while ( (fmt.charAt(IDX) == chr) && (IDX < fmt.length) ) {
      token += fmt.charAt(IDX++);
    }
    
    // Check if we have a format to use
    if (value[token] != null) {
      // Use formated value 
      result = result + value[token]; 
    }else{ 
      // No format add charater
      result = result + token;
    }
  }
    
  return result;
}
  
//--[Week Number]-----------------------------------------------------//
Date.prototype.weekNumber = function(){
  var y = this.getFullYear();
  var m = this.getMonth() + 1;
  var d = this.getDate();
    
  result = this.dateDiff('W',( '1/1/' + y + ' 00:00:00' ),( m + '/' + d + '/' + y + ' 23:59:59' ) );

  return result;
}

//--[Days in Month]-------------------------------------------------//
Date.prototype.daysInMonth = function(){
  var mIDX   = this.getMonth();
  var result = Date.config.daysInMonths[mIDX];
  
  // Check if we need to add a day, if this is February and is a leap year
  if( mIDX == 1 && this.isLeapYear() ){
    result++;
  }
  
  return result;
}

//--[Days in Quarter]-----------------------------------------------//
Date.prototype.daysInQuarter = function(){  
  var qIDX   = this.getQuarter();
  var result = Date.config.daysInQuarters[qIDX];
  
  // Check if we need to add a day, if this is the 1st quarter and is a leap year
  if( qIDX == 1 && this.isLeapYear() ){
    result++;
  }
  
  return result;
}

//--[Day of Year]-----------------------------------------------------//
Date.prototype.dayOfYear = function(){
  var y    = this.getFullYear();
  var m    = this.getMonth();
  var d    = this.getDate();      
  var days = 0;
  
  var mIDX, nd, result;
  
  // Add days of months that already elasped this year 
  for(mIDX = 0; mIDX < m; mIDX++){
    nd    = new Date(y,mIDX,1);
    days += nd.daysInMonth();
  }
  
  // Build number
  result = d + days; 
  
  return result;
}

//--[Days Left in Year]-----------------------------------------------//
Date.prototype.daysLeftInYear = function(){      
  var totalDays   = this.daysInYear();
  var currentDay  = this.dayOfYear();
  var result      = totalDays - currentDay;
     
  return result;
}

//--[Days in a Year]--------------------------------------------------//
Date.prototype.daysInYear = function(){  
  var y  = this.getFullYear();  
  result = this.dateDiff('D',( '1/1/' + y + ' 00:00:00' ),( '12/31/' + y + ' 23:59:59' ) );
  
  return result;
}

//--[Is Leap Year]---------------------------------------------------//
Date.prototype.isLeapYear = function(){   
  var days    = this.daysInYear();    
  var result  = days == 366? 1 : 0;
    
  return result;
}

//--[Julian Date]---------------------------------------------------//
Date.prototype.julianDate = function(){   
  var y = this.getFullYear(); 
  var d = this.getDate();
  var m = this.getMonth() + 1;
  
  var A, B, C, D, result;             
         
  if(m == 1 || m == 2){
    y--;
    m += 12;
  }         
        
  // Check if date is in the Gregorian Calendar.  Gregorian calendar started 10/15/1582 by Pope Gregory XIII
  if( y > 1582 || (y == 1582 && m > 10) || (y == 1582 && m == 10 && d >= 15) ){
    A = y / 100;
    B = 2 - A + A / 4;
  }
    
  C = 365.25 * y;
  D = 30.6001 * (m + 1);
  
  // Build result  
  result = B + C + D + d + 1720994;
    
  return result;
}

//--[Time Zone Military]-----------------------//
Date.prototype.getTimeZoneMiltary = function(){
  var tz     = this.getTimeZone();  
  var result = {
                offset : tz.offset,
                gmtStr : tz.gmtStr,
                  name : tz.timeZones[0].name,
                   abr : tz.timeZones[0].abr

  }
  
  return result;
}

//--[Time Zone]-----------------------//
Date.prototype.getTimeZone = function(){
  var offset    = parseFloat( this.getTimezoneOffset() / 60 );
  var h         = Math.abs( parseInt(offset) );
  var m         = Math.abs( this.getTimezoneOffset() % 60 );   
  var indicator = '+';
  
  if(offset > 0){
   indicator = '-';
  }   
  
  offset   = indicator +  Date.config.fn.zeroPadding(h,2) + '' + Date.config.fn.zeroPadding(m,2);
  gmtStr   = 'GMT' + offset;

  tzObj    = Date.config.timeZone[gmtStr];
  tzObjLen = Date.config.timeZone[gmtStr].length;
  
  return { offset : offset, gmtStr : gmtStr, timeZones : tzObj, timeZonesLen : tzObjLen };
}

//--[Quarter (0 index)]---------------------------------------------------------//
Date.prototype.getQuarter = function(){      
  var tdy    = this.dayOfYear();
  var qtr    = Date.config.daysInQuarters[0] + this.isLeapYear();
  var result = 0;
  
  var i;
  
  for(i = 1; i < 4; i++){
    if(tdy > qtr){
      result++;    
    }  
    qtr += Date.config.daysInQuarters[i];                 
  }
  
  return result;
}