//Format a date
var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
function LZ(x){return(x<0||x>9?"":"0")+x}
function formatDate(date, format) {
    format = format + "";
    var result = "";
    var i_format = 0;
    var c = "";
    var token = "";
    var y = date.getYear() + "";
    var M = date.getMonth() + 1;
    var d = date.getDate();
    var E = date.getDay();
    var H = date.getHours();
    var m = date.getMinutes();
    var s = date.getSeconds();
    var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
    var value = new Object();
    if (y.length < 4) {
        y = "" + (y - 0 + 1900);
    }
    value["y"] = "" + y;
    value["yyyy"] = y;
    value["yy"] = y.substring(2, 4);
    value["M"] = M;
    value["MM"] = LZ(M);
    value["MMM"] = MONTH_NAMES[M - 1];
    value["NNN"] = MONTH_NAMES[M + 11];
    value["d"] = d;
    value["dd"] = LZ(d);
    value["E"] = DAY_NAMES[E + 7];
    value["EE"] = DAY_NAMES[E];
    value["H"] = H;
    value["HH"] = LZ(H);
    if (H == 0) {
        value["h"] = 12;
    } else if (H > 12) {
        value["h"] = H - 12;
    } else {
        value["h"] = H;
    }
    value["hh"] = LZ(value["h"]);
    if (H > 11) {
        value["K"] = H - 12;
    } else {
        value["K"] = H;
    }
    value["k"] = H + 1;
    value["KK"] = LZ(value["K"]);
    value["kk"] = LZ(value["k"]);
    if (H > 11) {
        value["a"] = "PM";
    } else {
        value["a"] = "AM";
    }
    value["m"] = m;
    value["mm"] = LZ(m);
    value["s"] = s;
    value["ss"] = LZ(s);
    while (i_format < format.length) {
        c = format.charAt(i_format);
        token = "";
        while ((format.charAt(i_format) == c) && (i_format < format.length)) {
            token += format.charAt(i_format++);
        }
        if (value[token] != null) {
            result = result + value[token];
        } else {
            result = result + token;
        }
    }
    return result;
}

//calendar
function showCalendar(obj, dateFormat) {
    if (self.gfPop) {
        var numberOfDateFormat = getNumberOfDateFormat(dateFormat);
        gfPop.showPopCalendar(dateFormat, numberOfDateFormat, obj);
    }
    return false;
}
/* This method gets the right parameter for the user selected date format for showing the calendar
 * based on the selected date format by the user.
 *
 */
function getNumberOfDateFormat(dateFormat) {
    var numberOfDateFormat = 0;
    var dayStart, monthStart, yearStart;
    //determine the positions of "dd", "MM" and "YY" strings
    //maybe some error checking and message should be used; get *End also and if dayEnd != dayStart + 1
    dayStart = dateFormat.indexOf("d");
    monthStart = dateFormat.indexOf("M");
    yearStart = dateFormat.indexOf("y");

    //check to order in which "dd", "MM" and "yy" appear
    if (dayStart < monthStart && monthStart < yearStart) {
        numberOfDateFormat = 0; // ddMMyy format
    } else if (monthStart < dayStart && dayStart < yearStart) {
        numberOfDateFormat = 1; // MMddyy format
    } else if (yearStart < monthStart && monthStart < dayStart) {
        numberOfDateFormat = 2; // yyMMdd format
    } // else use the default value of 0 = ddMMyy format (see variable declaration)

    return numberOfDateFormat;
}
/*
 * This method adjustes the indate select fields to the nearest corect date and the outdate to be next to indate.
 */
function populateDateFields(form, inDateElement, outDateElement, userDateFormat) {
    populateDateFieldsWithVariableNumberOfDays(form, inDateElement, outDateElement, userDateFormat, 1);
}

/*
 * This method is used to construct the correct inDate and outDate for the date fields input.
 */
function populateDateFieldsWithVariableNumberOfDays(form, inDateElement, outDateElement, userDateFormat, nrOfDays) {
    var inDateFromForm = form.elements[inDateElement].value;
    var inDateElementAsString, outDateElementAsString;

    var dayStart, dayEnd, monthStart, monthEnd, yearStart, yearEnd;
    var numberOfDateFormat = getNumberOfDateFormat(userDateFormat);

    dayStart = userDateFormat.indexOf("d");
    dayEnd = userDateFormat.lastIndexOf("d") + 1;
    monthStart = userDateFormat.indexOf("M");
    monthEnd = userDateFormat.lastIndexOf("M") + 1;
    yearStart = userDateFormat.indexOf("y");
    yearEnd = userDateFormat.lastIndexOf("y") + 1;
    var inDateMonthAsNumber = parseInt(inDateFromForm.substring(monthStart, monthEnd), 10) - 1;

    var inDate = new Date(1970, 0, 1);
    inDate.setYear(inDateFromForm.substring(yearStart, yearEnd));
    inDate.setMonth(inDateMonthAsNumber.toString());
    inDate.setDate(inDateFromForm.substring(dayStart, dayEnd));

    var outDate = new Date(1970, 0, 1);
    outDate.setYear(inDate.getYear());
    outDate.setMonth(inDate.getMonth());
    outDate.setDate(inDate.getDate() + nrOfDays);

    var inDateYear, inDateMonth, inDateDay, outDateYear, outDateMonth, outDateDay;
    inDateYear = "" + inDate.getYear();
    if (inDateYear.length == 1) {
        inDateYear = "0" + inDateYear;
    }

    inDateMonth = "" + (inDate.getMonth() + 1);
    if (inDateMonth.length == 1) {
        inDateMonth = "0" + inDateMonth;
    }

    inDateDay = "" + inDate.getDate();
    if (inDateDay.length == 1) {
        inDateDay = "0" + inDateDay;
    }

    outDateYear = "" + outDate.getYear();
    if (outDateYear.length == 1) {
        outDateYear = "0" + outDateYear;
    }

    outDateMonth = "" + (outDate.getMonth() + 1);
    if (outDateMonth.length == 1) {
        outDateMonth = "0" + outDateMonth;
    }

    outDateDay = "" + outDate.getDate();
    if (outDateDay.length == 1) {
        outDateDay = "0" + outDateDay;
    }

    switch (numberOfDateFormat) {
        case 0: // ddMMyy format
            inDateElementAsString = inDateDay + inDateMonth + inDateYear;
            outDateElementAsString = outDateDay + outDateMonth + outDateYear;
            break;
        case 1: // MMddyy format
            inDateElementAsString = inDateMonth + inDateDay + inDateYear;
            outDateElementAsString = outDateMonth + outDateDay + outDateYear;
            break;
        case 2: // yyMMdd format
            inDateElementAsString = inDateYear + inDateMonth + inDateDay;
            outDateElementAsString = outDateYear + outDateMonth + outDateDay;
            break;
    }

    form.elements[inDateElement].value = inDateElementAsString;
    form.elements[outDateElement].value = outDateElementAsString;
}




