// script by Josh Fraser (http://www.onlineaspect.com)

function setTZ(select_id) {
   var rightNow = new Date();
   var jan1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);  // jan 1st
   var june1 = new Date(rightNow.getFullYear(), 6, 1, 0, 0, 0, 0); // june 1st
   var temp = jan1.toGMTString();
   var jan2 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
   temp = june1.toGMTString();
   var june2 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
   var std_time_offset = (jan1 - jan2) / (1000 * 60 * 60);
   var daylight_time_offset = (june1 - june2) / (1000 * 60 * 60);
   var dst;
   if (std_time_offset == daylight_time_offset) {
		dst = "0"; // daylight savings time is NOT observed
   } else {
   		// positive is southern, negative is northern hemisphere
		var hemisphere = std_time_offset - daylight_time_offset;
		if (hemisphere >= 0)
			std_time_offset = daylight_time_offset;
		dst = "1"; // daylight savings time is observed
   }
   var i;
   for (i = 0; i < document.getElementById(select_id).options.length; i++) {
		if (document.getElementById(select_id).options[i].id == tzconvert(std_time_offset)+","+dst) {
			document.getElementById(select_id).selectedIndex = i;
            return true;
		}
   }
   return false;
}

// toogles between world and us timezone the form can be choosen but that Containing div must be the id of the 
// select div followed by "_container"
function toggleZonePicker(showID,hideID,formname){
         var showDiv = document.getElementById(showID+"Container");
         var hideDiv = document.getElementById(hideID+"Container");
         var showSel = document.getElementById(showID);         
         var hideSel = document.getElementById(hideID);
         showDiv.style.display = "block";
         hideDiv.style.display = "none";
         showSel.name = formname;
         hideSel.name = formname + "_unselected";
         setTZ(showID);
}

function tzconvert(value) {
	var hours = parseInt(value);
   	value -= parseInt(value);
	value *= 60;
	var mins = parseInt(value);
   	value -= parseInt(value);
	value *= 60;
	var secs = parseInt(value);
	var display_hours = hours;
	display_hours = (hours < 10 && hours > 0) ? "+0"+hours : "+"+hours; // positive
	display_hours = (hours == 0) ? "0"+hours : display_hours; // handle GMT case (00:00)
	display_hours = (hours < 0 && hours > -10) ? "-0"+Math.abs(hours) : display_hours; // neg
    mins = (mins < 10) ? "0"+mins : mins;
	return display_hours+":"+mins;
}

function tzDisplay(editOffset,tzdesc,prefixtext,show){
     var d = new Date();
     var strDate = d.toString();
     var offset = d.getTimezoneOffset();
     var tzdisplay = document.getElementById("tzdisplay");
     if(tzdesc!="" && (show || parseInt(offset)!=parseInt(-1*editOffset)))
     {
         tzdisplay.innerHTML=prefixtext + tzdesc;
     }
}

/**
 * Converts a unix-timestamp (seconds since epoch, to local time string)
 */
function serverToLocalTime(serverTime,withTime){
    var d = new Date();
    /*1000* added since javascript uses milliseconds since epoch*/
    
    var localOffset = d.getTimezoneOffset() * 60000;

    d.setTime(1000*serverTime);
    if(withTime){
    return dateTimeFormatMDY(d) + " " + dateTimeFormat2(d);
    }else{
        return dateTimeFormatMDY(d);
    }
}

/**
 * CONVERTS UNIX-TIMESTAMP TO LOCAL BY CLASS
 * OPTIONALLY DISPLAYS TIME IN ADDITION TO DATE
 */
function convertUnixToLocalByClass(className,displayTime){
   var x;
   var times = getElementsByClass(className);
   for(x in times){
       if(times[x].innerHTML == ""){
           times[x].innerHTML="&nbsp;";
       }else if(times[x].innerHTML != "none"){
       times[x].innerHTML = serverToLocalTime(times[x].innerHTML,displayTime);
       }
   }
}
