function getMonthArray() {
  return new Array("January","February","March","April","May","June","July","August","September","October","November","December");
}

function getMonthDays(year) {
  var monthDays = new Array("31","28","31","30","31","30","31","31","30","31","30","31");
  if(year%4 == 0) { monthDays[1] = "29"; }
  if(year%100 == 0 && year%400 != 0) { monthDays[1] = "28"; }
  return monthDays;
}

function getGMTTime() {
  var time = new Date();
  var gmtMS = time.getTime() + (time.getTimezoneOffset() * 60 * 1000);
  return new Date(gmtMS);
}

function getDateHour(zone, dst) {
  var gmtTime = getGMTTime();
  var dateHour = new Array();
  dateHour["day"] = gmtTime.getDate();
  dateHour["month"] = gmtTime.getMonth();
  dateHour["year"] = gmtTime.getYear();
  dateHour["hour"] = gmtTime.getHours() + zone;
  
  if(dst == true) {
    dateHour["hour"] += 1;
  }
  
  var monthDays = getMonthDays(dateHour["year"]);

  if(dateHour["year"] < 1000) {
    dateHour["year"] += 1900;
  }

  if (dateHour["hour"] >= 24) {
    dateHour["hour"] = dateHour["hour"]-24;
    dateHour["day"] += 1;
  }
  
  if (dateHour["hour"] < 0) {
    dateHour["hour"] -= -24
    dateHour["day"] -= 1
  }
  
  if (dateHour["hour"] < 10) {
    dateHour["hour"] = " " + dateHour["hour"];
  }
  
  if (dateHour["day"] <= 0) {
    if (dateHour["month"] == 0) {
      dateHour["month"] = 11;
      dateHour["year"] -= 1;
    } else {
      dateHour["month"] -= 1;
    }
    dateHour["day"] = monthDays[dateHour["month"]];
  }

  if(dateHour["day"] > monthDays[dateHour["month"]]) {
    dateHour["day"] = 1;
    if(dateHour["month"] == 11) {
      dateHour["month"] = 0;
      dateHour["year"] += 1;
    } else {
      dateHour["month"] += 1;
    }
  }
  
  return dateHour
}

function getMinutes() {
  var min = getGMTTime().getMinutes()
  return ( (min < 10) ? "0" : "" ) + min ;
}

function getSeconds() {
  var sec = getGMTTime().getSeconds()
  return ( (sec < 10) ? "0" : "" ) + sec ;
}

function createNewDate(month, hours, date) {
  var newDate = new Date()
  
  newDate.setMonth(month)
  newDate.setHours(hours)
  newDate.setDate(date)
  
  return newDate
}

function dateTimeNonDST(day, month, year, hr, min, sec, dst) {
  var datetime = new Array()
  datetime["dst"] = (dst==true) ? 1 : 0;
  datetime["day"] = day
  datetime["month"] = month
  datetime["year"] = year
  datetime["hour"] = hr
  datetime["min"] = min
  datetime["sec"] = sec
  
  return datetime
}

function defaultTemplate(datetime) {
/*  var monthArray = getMonthArray()
  return monthArray[datetime["month"]] + " " +
    datetime["day"] + ", " + datetime["year"] + "<br/>" +
	datetime["hour"] + ":" + datetime["min"] + ":" +
	datetime["sec"] + ( (datetime["dst"] == 1) ? " DST" : "" )*/
	var output = (datetime.day < 10 ? "0" : "") + datetime.day + "." +
	((datetime.month+1) < 10 ? "0" : "") + (datetime.month+1) + "." + datetime.year + " " +
	datetime.hour + ":" + datetime.min + ":" + datetime.sec;
	return output;
}

function worldClock(zone, dst) {
  var dateHour = getDateHour(zone, dst)
  var day = dateHour["day"]
  var month = dateHour["month"]
  var year = dateHour["year"]
  var hr = dateHour["hour"]
  var min = getMinutes()
  var sec = getSeconds()
  
  datetime = dateTimeNonDST(day, month, year, hr, min, sec, dst)
  
  return defaultTemplate(datetime)
}