// This is an exact copy of isodatetime.js xeceopt it does not have the script tags

function checkForISOTimeOffset(strHref) {

    var ISOTimeoffset=escape(isoTimeOffset());
    var svrISOTimeoffset=escape(svrisoTimeOffset);  /* variable created by server side script */
    var newLoc;
    ISOTimeOffset=ISOTimeoffset.replace("+","%2B"); /* required because of an apparent bug whereby
                                                    // escape does not encode + and the .href appears to 
                                                    // remove it
                                                    */

    svrISOTimeOffset=svrISOTimeoffset.replace("+","%2B"); 

    // See if URL already contains a ? - AScii Hex code 3F
    // needs double \\ in front of x3F otherwise throws an error when found !!

    if(strHref.search('\\x3F') == -1) {
        newLoc = strHref + "?ISOTimeOffset=" + ISOTimeOffset ;
    }
    else
    {
        newLoc = strHref + "&ISOTimeOffset=" + ISOTimeOffset;
    }

// Just replace ?& with ? rather than faffing about
//    newLoc = strHref + "&ISOTimeOffset=" + ISOTimeOffset;

    newLoc+="&svrISOTimeOffset=" + svrISOTimeOffset;
    newLoc=newLoc.replace('?&','?');
    newLoc=newLoc.replace('?&','?');
    document.location.href = newLoc;
}

function isoTimeOffset() {

var today = new Date();

// GMT date parts
var hourGMT = today.getHours();
var minuteGMT = today.getMinutes();

// UTC date parts
var hourUTC = today.getUTCHours();
var minuteUTC = today.getUTCMinutes();

// Calculate client side differences from GMT
var hourdiff = hourGMT - hourUTC;
var hourdifference = Math.abs(hourdiff);

var minutediff = minuteGMT - minuteUTC;
var minutedifference = ":00";
if (minutediff != 0) minutedifference = ":30";

var timezone="00:00";

if (minutediff != 0 || hourdiff !=0 ){
    if (minutediff !=0 && hourdiff < 0) hourdifference -=1; 
    if (hourdifference < 10) hourdifference = "0" + hourdifference;
    timezone=hourdifference + minutedifference;
    if (hourdiff < 0) {
        timezone = "-" + timezone;
    }
    else {
        timezone = "+" + timezone;
    }
    timezone = "(GMT " + timezone + ")";
}

return timezone;

}

function isodatetime2(gmtDateIn) {
// gmt date parts
var gmtdate = new Date(gmtDateIn);
var gmtyear = gmtdate.getYear();
var gmtmonth = gmtdate.getMonth();
var gmtday = gmtdate.getDate();
var gmthour = gmtdate.getHours();
var gmtminute = gmtdate.getMinutes();

// Calculate client side differences from GMT
var today = new Date();
var year  = today.getYear();
if (year < 2000) year = year + 1900; 
var month = today.getMonth() + 1;
var day  = today.getDate();
var hour = today.getHours();
var hourUTC = today.getUTCHours();
var hourdiff = hour - hourUTC;
var hourdifference = Math.abs(hourdiff);
var minute = today.getMinutes();
var minuteUTC = today.getUTCMinutes();
var minutediff = minute - minuteUTC;
var minutedifference;
var second = today.getSeconds();
var timezone;

//if (minute != minuteUTC && minuteUTC < 30 && diff < 0) { hourdifference--; }
//if (minute != minuteUTC && minuteUTC > 30 && diff > 0) { hourdifference--; }

if (minutediff != 0) {
minutedifference = ":30";
}
else {
minutedifference = ":00";
}


// iso date parts
var isoyear = gmtyear;
var isomonth = gmtmonth;
var isoday = gmtday;
var isohour = gmthour + hourdiff;
var isominute = gmtminute + minutediff;

if (isominute < 0 ){
    isominute +=60;
    isohour -=1;
}
if (isominute >59 ){
    isominute -= 60;
    isohour +=1;
}

if (isohour < 0 ){
    isohour +=24;
    isoday -=1;
}
if (isohour > 23 ){
    isohour -=24;
    isoday +=1;
}

if (isoday < 1 ){
    isomonth -=1;
    isoday = lastDayOfMonth(isomonth,isoyear);
}
if (isoday > lastDayOfMonth(isomonth,isoyear)) {
    isoday = 1;
    isomonth +=1;
}

if (isomonth < 1 ){
    isomonth = 11;
    isoday = 31;
}
if (isomonth > 11 ){
    isomonth = 0;
    isoyear +=1;
}

timezone="";

if (minutediff != 0 || hourdiff !=0 ){
    if (minutediff !=0 && hourdiff < 0) hourdifference -=1; 
    if (hourdifference < 10) hourdifference = "0" + hourdifference;
    timezone=hourdifference + minutedifference;
    if (hourdiff < 0) {
        timezone = "-" + timezone;
    }
    else {
        timezone = "+" + timezone;
    }
    timezone = "(GMT " + timezone + ")";
}

//if(hourdifference != 0 ) alert("Hour diff=" + hourdiff);
//if(minutedifference != 0 ) alert("Minute diff=" + minutediff);

if (month <= 9) month = "0" + month;
if (day <= 9) day = "0" + day;
if (hour <= 9) hour = "0" + hour;
if (minute <= 9) minute = "0" + minute;
if (second <= 9) second = "0" + second;

return isoday + " " + monthName(isomonth) + " " + isoyear + " " + isohour + ":" + isominute + " " + timezone;

}

function lastDayOfMonth(month,year){
    var remainder = 0;
    var arrDaysPerMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    remainder = year % 4 ; // Mod 4 - leap year check
    if (remainder == 0) arrDaysPerMonth[1] = 29;
    return arrDaysPerMonth[month];
}

function monthName(n){
var arrMonth=new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
return arrMonth[n];
}

