﻿
//Returns true if the array contains the object
Array.prototype.contains = function(obj) {
  var i = this.length;
  while (i--) {
    if (this[i] === obj) {
      return true;
    }
  }
  return false;
};

Date.prototype.getWeekNumber = function() {
  var date = this;
  date = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
  var IsoDayOfWeek = date.getDay() == 0 ? 7 : date.getDay(); // Søndag = 7
  date.setDate(date.getDate() + 4 - IsoDayOfWeek); // Ændre til nærmeste torsdag
  var DayOfYear = (date.getTime() - Date.UTC(date.getFullYear(), 0, 1)) / 864e5;
  var week = Math.floor(DayOfYear / 7) + 1;
  return week;
};

//Returns true if the array contains the object
Array.prototype.contains = function(obj) {
  var i = this.length;
  while (i--) {
    if (this[i] === obj) {
      return true;
    }
  }
  return false;
};
Date.prototype.getDayName = function(language) {
  var days = [], supportetLanguages = ["da-DK", "en-US"];
  //Dansk som standard
  //Denne linie benytter en containsmetode på Arrayobjektet, som ikke er med i native koden.
  language = language && supportetLanguages.contains(language) ? language : "da-DK";

  //dansk
  days["da-DK"] = [];
  days["da-DK"][0] = "Søndag";
  days["da-DK"][1] = "Mandag";
  days["da-DK"][2] = "Tirsdag";
  days["da-DK"][3] = "Onsdag";
  days["da-DK"][4] = "Torsdag";
  days["da-DK"][5] = "Fredag";
  days["da-DK"][6] = "Lørdag";
  //Engelsk
  days["en-US"] = [];
  days["en-US"][0] = "Sunday";
  days["en-US"][1] = "Monday";
  days["en-US"][2] = "Tuesday";
  days["en-US"][3] = "Wedensday";
  days["en-US"][4] = "Thursday";
  days["en-US"][5] = "Friday";
  days["en-US"][6] = "Saturday";

  return days[language][this.getDay()];
};

Date.prototype.getMonthName = function(language) {
  var months = [], supportetLanguages = ["da-DK", "en-US"];

  //Dansk som standard
  //Denne linie benytter en containsmetode på Arrayobjektet, som ikke er med i native koden.
  language = language && supportetLanguages.contains(language) ? language : "da-DK";

  //Dansk
  months["da-DK"] = [];
  months["da-DK"][0] = "Januar";
  months["da-DK"][1] = "Februar";
  months["da-DK"][2] = "Marts";
  months["da-DK"][3] = "April";
  months["da-DK"][4] = "Maj";
  months["da-DK"][5] = "Juni";
  months["da-DK"][6] = "Juli";
  months["da-DK"][7] = "August";
  months["da-DK"][8] = "September";
  months["da-DK"][9] = "Oktober";
  months["da-DK"][10] = "November";
  months["da-DK"][11] = "December";
  //Engelsk
  months["en-US"] = [];
  months["en-US"][0] = "January";
  months["en-US"][1] = "February";
  months["en-US"][2] = "March";
  months["en-US"][3] = "April";
  months["en-US"][4] = "May";
  months["en-US"][5] = "June";
  months["en-US"][6] = "Juli";
  months["en-US"][7] = "August";
  months["en-US"][8] = "September";
  months["en-US"][9] = "Oktober";
  months["en-US"][10] = "November";
  months["en-US"][11] = "December";
  return months[language][this.getMonth()];
};

/*
* Date Format 1.2.3
* (c) 2007-2009 Steven Levithan <stevenlevithan.com>
* MIT license
*
* Includes enhancements by Scott Trenda <scott.trenda.net>
* and Kris Kowal <cixar.com/~kris.kowal/>
*
* Accepts a date, a mask, or a date and a mask.
* Returns a formatted version of the given date.
* The date defaults to the current date/time.
* The mask defaults to dateFormat.masks.default.
*/

var dateFormat = function() {
  var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
		timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
		timezoneClip = /[^-+\dA-Z]/g,
		pad = function(val, len) {
		  val = String(val);
		  len = len || 2;
		  while (val.length < len) val = "0" + val;
		  return val;
		};

  // Regexes and supporting functions are cached through closure
  return function(date, mask, utc) {
    var dF = dateFormat;

    // You can't provide utc if you skip other args (use the "UTC:" mask prefix)
    if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
      mask = date;
      date = undefined;
    }

    // Passing date through Date applies Date.parse, if necessary
    date = date ? new Date(date) : new Date;
    if (isNaN(date)) { throw SyntaxError("invalid date"); }

    mask = String(dF.masks[mask] || mask || dF.masks["default"]);

    // Allow setting the utc argument via the mask
    if (mask.slice(0, 4) == "UTC:") {
      mask = mask.slice(4);
      utc = true;
    }

    var _ = utc ? "getUTC" : "get",
			d = date[_ + "Date"](),
			D = date[_ + "Day"](),
			m = date[_ + "Month"](),
			y = date[_ + "FullYear"](),
			H = date[_ + "Hours"](),
			M = date[_ + "Minutes"](),
			s = date[_ + "Seconds"](),
			L = date[_ + "Milliseconds"](),
			o = utc ? 0 : date.getTimezoneOffset(),
			flags = {
			  d: d,
			  dd: pad(d),
			  ddd: dF.i18n.dayNames[D],
			  dddd: dF.i18n.dayNames[D + 7],
			  m: m + 1,
			  mm: pad(m + 1),
			  mmm: dF.i18n.monthNames[m],
			  mmmm: dF.i18n.monthNames[m + 12],
			  yy: String(y).slice(2),
			  yyyy: y,
			  h: H % 12 || 12,
			  hh: pad(H % 12 || 12),
			  H: H,
			  HH: pad(H),
			  M: M,
			  MM: pad(M),
			  s: s,
			  ss: pad(s),
			  l: pad(L, 3),
			  L: pad(L > 99 ? Math.round(L / 10) : L),
			  t: H < 12 ? "a" : "p",
			  tt: H < 12 ? "am" : "pm",
			  T: H < 12 ? "A" : "P",
			  TT: H < 12 ? "AM" : "PM",
			  Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
			  o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
			  S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
			};

    return mask.replace(token, function($0) {
      return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
    });
  };
} ();

// Some common format strings
dateFormat.masks = {
  "default": "ddd mmm dd yyyy HH:MM:ss",
  shortDate: "m/d/yy",
  mediumDate: "mmm d, yyyy",
  longDate: "mmmm d, yyyy",
  fullDate: "dddd, mmmm d, yyyy",
  shortTime: "h:MM TT",
  mediumTime: "h:MM:ss TT",
  longTime: "h:MM:ss TT Z",
  isoDate: "yyyy-mm-dd",
  isoTime: "HH:MM:ss",
  isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
  isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};

// Internationalization strings
dateFormat.i18n = {
  dayNames: [
		"Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør",
		"Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"
	],
  monthNames: [
		"Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec",
		"Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"
	]
};

// For convenience...
Date.prototype.format = function(mask, utc) {
  return dateFormat(this, mask, utc);
};


jQuery(function() {

  var date = new Date();
  //getWeekNumber ekesmpel
  jQuery("#UgeTest").html("Denne uges nummer: " + date.getWeekNumber());

  //getDayName ekesmpel
  jQuery("#UgedagTest").html(date.getDayName());

  //getMonthName ekesmpel
  jQuery("#MaanedNavnTest").html(date.getMonthName());

  var now = new Date();
  var testTxt = "";
  testTxt += '<br /><br />now.format("m/dd/yy"):<br />' + now.format("m/dd/yy");

  //Kan også benyttes som en selvstændig metode
  testTxt += '<br /><br />dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT")<br />' + dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");

  // Du kan benytte een af flere navngivne masker
  testTxt += '<br /><br />now.format("isoDateTime")<br />' + now.format("isoDateTime");

  // ...Eller tilføje dine egne
  dateFormat.masks.hammerTime = 'HH:MM! "Can\'t touch this!"';
  testTxt += '<br /><br />now.format("hammerTime")<br />' + now.format("hammerTime");

  // Når man benytter den selvstændige dateFormat metode
  // kan du også sende en dato med som string, smart
  testTxt += '<br /><br />dateFormat("Jun 9 2007", "fullDate")<br />' + dateFormat("Jun 9 2007", "fullDate");

  // Bemærk at hvis du ikke inkludere masken, som parameter,
  // vil dateFormat.masks.default blive benyttet
  testTxt += '<br /><br />now.format()<br />' + now.format();

  // Og hvis du ikke inkluderer en dato som parameter,
  // bliver dags dato og tid brugt
  testTxt += '<br /><br />dateFormat()<br />' + dateFormat();

  // Du kan også springe over dato objektet (så længe din maske ikke
  // indeholder tal), hvor dags dato og tid igen vil blive benyttet
  testTxt += '<br /><br />dateFormat("longTime")<br />' + dateFormat("longTime");

  // Du kan også konvertere en lokal tid til UTC tid. For at gøre dette
  // kan du sende true med som parameter (her er det ikke lovligt at springe parametre over):
  dateFormat(now, "longTime", true);
  testTxt += '<br /><br />now.format("longTime", true)<br />' + now.format("longTime", true);

  // ...Eller du kan prefixe UTC: til din maske
  testTxt += '<br /><br />now.format("UTC:h:MM:ss TT Z")<br />' + now.format("UTC:h:MM:ss TT Z");
  jQuery("#StevenLevithan").html(testTxt);

});
