function getGMThoursOffset (dt1) {
  var temp = dt1.toGMTString();
  var dt2 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
  return Math.round(2*((dt1 - dt2) / (1000 * 60 * 60)))/2;
}

function timezoneDropdownHTML (ignoreDST, defaultZone) {

  var tHTML = '<select id="loca_shabbatTZ" name="shabbatTZ">';

  var rightNow = new Date();
  var hoursDiffJanTime = getGMThoursOffset(new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0));
  var hoursDiffJulyTime = getGMThoursOffset(new Date(rightNow.getFullYear(), 6, 1, 0, 0, 0, 0));
  var hoursDiffNow = getGMThoursOffset(rightNow);

  var systemDST = (hoursDiffJanTime != hoursDiffJulyTime);

  var UTCzone = Math.min(hoursDiffJanTime, hoursDiffJulyTime);

  var arTZ = new Array(-11, -10, -9, -8, -7, -6, -5, -4, -3.5, -3, -2.5, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9.5, 10, 10.5, 11, 11.5, 12);

  var iHours = (rightNow.getHours() - hoursDiffNow + 48) % 24;
  var iMinutes = rightNow.getMinutes()

  if (systemDST && ignoreDST) {
    hoursDiffNow = UTCzone;
  }
  if (defaultZone == null) {
    defaultZone = UTCzone;
  }

  for (var loop = 0; loop < arTZ.length; loop++) {
    var iHoursTZ = iHours + Math.floor(arTZ[loop]) + (hoursDiffNow - UTCzone);
    var iMinutesTZ = iMinutes;
    if (arTZ[loop] != Math.floor(arTZ[loop])) {
      iMinutesTZ += 30;
    }
    if (iMinutesTZ > 59) {
      iHoursTZ++;
      iMinutesTZ = iMinutesTZ % 60;
    }

    iHoursTZ = (iHoursTZ + 48) % 24;

    var bPmTZ = iHoursTZ > 11;
    iHoursTZ = iHoursTZ % 12;
    if (iHoursTZ == 0) {
      iHoursTZ = 12;
    }

    tHTML += '<option value="' + arTZ[loop] + '"' + (defaultZone == arTZ[loop] ? ' selected' : '') + '>It is ' + iHoursTZ + ':' + (iMinutesTZ < 10 ? '0' : '') + iMinutesTZ + (bPmTZ ? ' pm' : ' am');
    tHTML += '</option>';
  }

  tHTML += '</select>';

  var objDiv = document.getElementById('shabbatTZ');
  if (objDiv != null) {
    objDiv.innerHTML = tHTML;
  }

  return tHTML;
}

function set_timezone_default(tz, dst, objForm) {
	var oE = objForm.shabbatTZ;

	for (var loop = 1; loop < oE.options.length; loop++) {
		if (oE.options[loop].value == tz) {
			oE.selectedIndex = loop;
		}
	}
}

function timezoneOffset() {

   var rightNow = new Date();
   var date1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);
   var date2 = new Date(rightNow.getFullYear(), 6, 1, 0, 0, 0, 0);
   var temp = date1.toGMTString();
   var date3 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
   var temp = date2.toGMTString();
   var date4 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
   var hoursDiffStdTime = (date1 - date3) / (1000 * 60 * 60);
   var hoursDiffDaylightTime = (date2 - date4) / (1000 * 60 * 60);

   return hoursDiffStdTime;
}

function observesDST () {

   var rightNow = new Date();
   var date1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);
   var date2 = new Date(rightNow.getFullYear(), 6, 1, 0, 0, 0, 0);

   var temp = date1.toGMTString();
   var date3 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));

   var temp = date2.toGMTString();
   var date4 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));

   var hoursDiffStdTime = (date1 - date3) / (1000 * 60 * 60);
   var hoursDiffDaylightTime = (date2 - date4) / (1000 * 60 * 60);

   return (hoursDiffDaylightTime != hoursDiffStdTime);
}

function displayTimezone( countryID, stateID, city ) {
	if ( city && city != "" && city != " " && city != "0") {
		document.getElementById('shabbatDST').style.display = "block";
		document.getElementById('timezone').style.display = "block";
		var url = "/ajax_geolocation.html?t=5&country="+countryID+"&state="+stateID+"&city="+city;
		var div = document.getElementById('shabbatDST');
		var ajax = newAjax();
		if (ajax){
			ajax.open("GET",url,true);
			ajax.onreadystatechange = function() {
				if (ajax.readyState < 4) {
					div.innerHTML = "<div align=\"center\" style=\"text-decoration: blink;\">Loading...</div>";
				}
				if (ajax.readyState == 4) {
					if (ajax.responseText == "DB ERROR")
						div.innerHTML = "An error occurred while loading the Daylight Saving Time. Please try again later.";
					else
						div.innerHTML = ajax.responseText;
				}
				fixfooter();
			}
			ajax.send("");
		}
		else {
			alert("Error");
		}

		return true;
	}

	document.getElementById('shabbatDST').style.display = "none";
	document.getElementById('timezone').style.display = "none";

	return false;
}
