﻿function convertDate(date){
	var myDate = new Date(date.substring(5,22));
	
	var dst = DstDetect();
	
	if(myDate >= dst[0] && myDate <= dst[1]){
		myDate.setHours(myDate.getHours()-5);
	}else {
		myDate.setHours(myDate.getHours()-6);
	}
	
	var day = new Array("Sun", "Mon", "Tue",
	"Wed", "Thu", "Fri", "Sat");
	
	var month = new Array("Jan", "Feb", "Mar", 
	"Apr", "May", "June", "July", "Aug", "Sept", 
	"Oct", "Nov", "Dec");
	
	var result = "" + day[myDate.getDay()] + ". " + month[myDate.getMonth()] + " " + myDate.getDate() + ", " + myDate.getFullYear() + " - " ;
	if(myDate.getMinutes()<10){
    	if(myDate.getHours()>12){
        	result = result + (myDate.getHours()-12) + ":0" + myDate.getMinutes() + " PM";
        }else if(myDate.getHours()==12){
        	result = result + myDate.getHours() + ":0" + myDate.getMinutes() + " PM";
        }else if(myDate.getHours()==0){
        	result = result + "12:0" + myDate.getMinutes() + " AM";
        }else {
        	result = result + myDate.getHours() + ":0" + myDate.getMinutes() + " AM";
        }
    }else {
    	if(myDate.getHours()>12){
        	result = result + (myDate.getHours()-12) + ":" + myDate.getMinutes() + " PM";
        }else if(myDate.getHours()==12){
        	result = result + myDate.getHours() + ":" + myDate.getMinutes() + " PM";
        }else if(myDate.getHours()==12){
        	result = result + "12:" + myDate.getMinutes() + " AM";
        }else {
        	result = result + myDate.getHours() + ":" + myDate.getMinutes() + " AM";
        }
    }
	return result;
}

//Find start and end of DST
function DstDetect(){
    var dtDstDetect = new Date();
    var dtDstStart = '';
    var dtDstEnd = '';
    var dtDstStartHold = ''; //Temp date hold
    var intYearDayCount = 732; //366 (include leap year) * 2 (for two years)
    var intHourOfYear = 1;
    var intDayOfYear;
    var intOffset = TimezoneDetect(); //Custom function. Make sure you include it.

    //Start from a year ago to make sure we include any previously starting DST
    dtDstDetect = new Date()
    dtDstDetect.setUTCFullYear(dtDstDetect.getUTCFullYear() - 1);
    dtDstDetect.setUTCHours(0,0,0,0);

    //Going hour by hour through the year will detect DST with shorter code but that could result in 8760
    //FOR loops and several seconds of script execution time. Longer code narrows this down a little.
    //Go one day at a time and find out approx time of DST and if there even is DST on this computer.
    //Also need to make sure we catch the most current start and end cycle.
    for(intDayOfYear = 1; intDayOfYear <= intYearDayCount; intDayOfYear++){
        dtDstDetect.setUTCDate(dtDstDetect.getUTCDate() + 1);

        if ((dtDstDetect.getTimezoneOffset() * (-1)) != intOffset && dtDstStartHold == ''){
            dtDstStartHold = new Date(dtDstDetect);
        }
        if ((dtDstDetect.getTimezoneOffset() * (-1)) == intOffset && dtDstStartHold != ''){
            dtDstStart = new Date(dtDstStartHold);
            dtDstEnd = new Date(dtDstDetect);
            dtDstStartHold = '';

            //DST is being used in this timezone. Narrow the time down to the exact hour the change happens
            //Remove 48 hours (a few extra to be on safe side) from the start/end date and find the exact change point
            //Go hour by hour until a change in the timezone offset is detected.
            dtDstStart.setUTCHours(dtDstStart.getUTCHours() - 48);
            dtDstEnd.setUTCHours(dtDstEnd.getUTCHours() - 48);

            //First find when DST starts
            for(intHourOfYear=1; intHourOfYear <= 48; intHourOfYear++){
                dtDstStart.setUTCHours(dtDstStart.getUTCHours() + 1);

                //If we found it then exit the loop. dtDstStart will have the correct value left in it.
                if ((dtDstStart.getTimezoneOffset() * (-1)) != intOffset){
                    break;
                }
            }

            //Now find out when DST ends
            for(intHourOfYear=1; intHourOfYear <= 48; intHourOfYear++){
                dtDstEnd.setUTCHours(dtDstEnd.getUTCHours() + 1);

                //If we found it then exit the loop. dtDstEnd will have the correct value left in it.
                if ((dtDstEnd.getTimezoneOffset() * (-1)) != (intOffset + 60)){
                    break;
                }
            }

            //Check if DST is currently on for this time frame. If it is then return these values.
            //If not then keep going. The function will either return the last values collected
            //or another value that is currently in effect
            if ((new Date()).getTime() >= dtDstStart.getTime() && (new Date()).getTime() <= dtDstEnd.getTime()){
                return new Array(dtDstStart,dtDstEnd);
            }

        }
    }
    return new Array(dtDstStart,dtDstEnd);
}

function TimezoneDetect(){
    var dtDate = new Date('1/1/' + (new Date()).getUTCFullYear());
    var intOffset = 100; //set initial offset high so it is adjusted on the first attempt
    var intMonth;
    var intHoursUtc;
    var intHours;
    var intDaysMultiplyBy;

    //go through each month to find the lowest offset to account for DST
    for (intMonth=0;intMonth < 12;intMonth++){
        //go to the next month
        dtDate.setUTCMonth(dtDate.getUTCMonth() + 1);

        //To ignore daylight saving time look for the lowest offset.
        //Since, during DST, the clock moves forward, it'll be a bigger number.
        if (intOffset > (dtDate.getTimezoneOffset() * (-1))){
            intOffset = (dtDate.getTimezoneOffset() * (-1));
        }
    }

    return intOffset;
}

