function setReturnTime(){
    //Only set return time if rtnTime field is currently blank
    if (document.forms[0].rtnTime.value == '') {
        var outHour = parseFloat(document.forms[0].outTime.value.substring(0,2)) + 1;
        if(outHour > 23)
            outHour = 23;
        var outMins = parseFloat(document.forms[0].outTime.value.substring(3,5));
        document.forms[0].rtnTime.value = (outHour < 10 ? '0' + outHour : outHour) + ":"
            + (outMins < 10 ? '0' + outMins : outMins);
    }
}

//Validate the various fields have data.
function validateFields(maxPass) {
    var d = new Date();
    var today = new Date(d.getFullYear(), d.getMonth(), d.getDate());
    var errorMessage = '';

    if (document.forms[0].outFrom.value == ''){
        alert("Please fill in an origin to travel from.");

        if (document.all.startAll == undefined || document.all.startAll.style.display == "none") {
            document.forms[0].outFrom.focus();
        }
        return false;
    }
    if (document.forms[0].outTo.value == '' ){
        alert("Please fill in a destination to travel to.");

        if (document.all.destinationAll == undefined || document.all.destinationAll.style.display == "none") {
            document.forms[0].outTo.focus();
        }
        return false;
    }
    if (document.forms[0].outDate.value == '' ){
        alert("Please fill in an outward departure date.");
        document.forms[0].outDate.focus();
        return false;
    }
    else if(!(CheckOutwardDate(document.forms[0].outDate.value))) {
        return false;
    }

    if (document.forms[0].outTime.value == '' ){
        document.forms[0].outTime.value = '00:00';
        alert("Please fill in a departure time.");
        document.forms[0].outTime.focus();
        return false;
    }

    //if (document.forms[0].noPassengers.value == '' ){

        //document.forms[0].noPassengers.value = "1";

        //alert("Please fill in the number of passengers travelling.");
        //document.forms[0].noPassengers.focus();
        //return false;
    //}

    if(document.forms[0].noOfPaxStandard.value != '' && isNaN(document.forms[0].noOfPaxStandard.value)){
        alert('Please enter a valid number of standard passengers');
        document.forms[0].noOfPaxStandard.focus();
        return false;
    }

    if(document.forms[0].noOfPaxChild.value != '' && isNaN(document.forms[0].noOfPaxChild.value)){
        alert('Please enter a valid number of child passengers');
        document.forms[0].noOfPaxChild.focus();
        return false;
    }

    if(document.forms[0].noOfPaxDiscount.value != '' && isNaN(document.forms[0].noOfPaxDiscount.value)){
        alert('Please enter a valid number of discount passengers');
        document.forms[0].noOfPaxDiscount.focus();
        return false;
    }

    if(document.forms[0].noOfPaxYoung.value != '' && isNaN(document.forms[0].noOfPaxYoung.value)){
        alert('Please enter a valid number of Young Person Entitlement Card Holder passengers');
        document.forms[0].noOfPaxYoung.focus();
        return false;
    }

    if(document.forms[0].noOfPaxElderly.value != '' && isNaN(document.forms[0].noOfPaxElderly.value)){
        alert('Please enter a valid number of Elderly/Disabled Entitlement Card Holder passengers');
        document.forms[0].noOfPaxElderly.focus();
        return false;
    }

    if(document.forms[0].noOfPaxStandard.value == 0 &&
       document.forms[0].noOfPaxChild.value == 0 &&
       document.forms[0].noOfPaxDiscount.value == 0 &&
       document.forms[0].noOfPaxYoung.value == 0 &&
       document.forms[0].noOfPaxElderly.value == 0){
        alert('Please enter a non-zero value for travelling passengers');
        document.forms[0].noOfPaxStandard.focus();
        return false;
    }


    if(document.forms[0].journeyType.value != 'single' && document.forms[0].journeyType.value != 'openReturn'){
        if (document.forms[0].rtnDate.value == '' ){
            alert("Please fill in a return departure date.");
            document.forms[0].rtnDate.focus();
            return false;
        }
        else {
            if(!(CheckReturnDate())) {
                return false;
            }
            var oValue = document.forms[0].outDate.value;
            var rValue = document.forms[0].rtnDate.value;
            var OutDate = new Date(oValue.substring(6,10), oValue.substring(3,5) - 1, oValue.substring(0,2));// eg YYYY/MM/DD
            var rtnDate = new Date(rValue.substring(6,10), rValue.substring(3,5) - 1, rValue.substring(0,2));// eg YYYY/MM/DD

            var validReturn = true;
            var yearDifference = rtnDate.getYear() - OutDate.getYear();
            var monthDifference = rtnDate.getMonth() - OutDate.getMonth();
            var dayDifference = rtnDate.getDate() - OutDate.getDate();


            if(yearDifference > 1) { validReturn = false; }
            else if(yearDifference == 1 && monthDifference != -11) { validReturn = false; }
            else if(monthDifference > 0) {
                if(dayDifference >= 0) {
                    validReturn = false;
                }
                else {
                    validReturn = true;
                }
            }
            else {
                validReturn = true;
            }

            if(!validReturn){
                alert("The return journey must be within a month of the outward journey.");
                document.forms[0].outDate.focus();
                return false;
            }
        }

        if (document.forms[0].rtnTime.value == '' ){
            if(document.forms[0].rtnDate.value == document.forms[0].outDate.value){
                alert("Return Time Must Be After Outward Time.");
                document.forms[0].rtnTime.focus();
                return false;
            }
            else {
                setReturnTime();
            }
        }
        else{
            //Check that return time is different when on same date.
            var oTime = document.forms[0].outTime.value;
            var rTime = document.forms[0].rtnTime.value;
            outHour = oTime.substring(0,2);
            rtnHour = rTime.substring(0,2);
            outMin = oTime.substring(3,5);
            rtnMin = rTime.substring(3,5);

            if(document.forms[0].outDate.value == document.forms[0].rtnDate.value){
                if(outHour > rtnHour){
                    alert("Return Time must be after Outward Time.");
                    document.forms[0].outTime.focus();
                    return false;
                }

                if(outHour == rtnHour){
                    if(outMin == rtnMin || outMin > rtnMin){
                        alert("Return Time must be after Outward Time.");
                        document.forms[0].outTime.focus();
                        return false;
                    }
                }
            }
        }
    }

    if(!check_pass(document.forms[0].noPassengers, maxPass)){
        return false;
    }

    if(isFirstSubmit()) {
        return(true);
    }
    else {
        return false;
    }
}

//Copy From contents into To return field
function copy_From_To(){
    // Do not need to update the RTN TO field for an 'Open Jaw' journey
    if(document.forms[0].appState.value != "4" && document.forms[0].appState.value != "8"){
        if(document.forms[0].outFrom.type == "select-one"){
            if(document.forms[0].rtnTo.type == "select-one"){
                document.forms[0].rtnTo.value = document.forms[0].outFrom.value;
            }
            else {
                document.forms[0].rtnTo.value = document.forms[0].outFrom.options[document.forms[0].outFrom.selectedIndex].text;
            }
        }
        else if(document.forms[0].outFromDesc){
            document.forms[0].rtnTo.value = document.forms[0].outFromDesc.value;
        }
        else {
            document.forms[0].rtnTo.value = document.forms[0].outFrom.value;
        }
    }
}

//Copy To contents into From return field
function copy_To_From(){
    if(document.forms[0].outTo.type == "select-one"){
        if(document.forms[0].rtnFrom.type == "select-one"){
            document.forms[0].rtnFrom.value = document.forms[0].outTo.value;
        }
        else {
            document.forms[0].rtnFrom.value = document.forms[0].outTo.options[document.forms[0].outTo.selectedIndex].text;
        }
    }
    else if(document.forms[0].outToDesc){
        document.forms[0].rtnFrom.value = document.forms[0].outToDesc.value;
    }
    else {
        document.forms[0].rtnFrom.value = document.forms[0].outTo.value;
    }
}

//Set todays date and time as defaults
function todaysDate(){
    //todays date variables
    var d = new Date();
    var today = d.getDate();
    var month = d.getMonth() + 1;
    var time = '';
    var mins = '';
    var hrs = '';
    hrs += d.getHours();
    mins += d.getMinutes();

    //todays date + 1hr variables (for return journey)
    var dPlusHr = new Date();
    //add 1 hour
    tempHrs = dPlusHr.getHours() + 1;
    dPlusHr.setHours(tempHrs);
    var rtntoday = dPlusHr.getDate();
    var rtnmonth = dPlusHr.getMonth() + 1;
    var rtntime = '';
    var rtnmins = '';
    var rtnhrs = '';
    rtnhrs += dPlusHr.getHours();
    rtnmins += dPlusHr.getMinutes();

    //Validate Hours
    if(hrs.substring(1,2) == ''){
        time = '0' + hrs;
    }
    else {
        time = hrs;
    }

    time += ':';

    //Validate rtn Hours
    if(rtnhrs.substring(1,2) == ''){
        rtntime = '0' + rtnhrs;
    }
    else {
        rtntime = rtnhrs;
    }

    rtntime += ':';

    //Validate Minutes
    if(mins.substring(1,2) == ''){
        time += '0' + mins;
    }
    else {
        time += mins;
    }

    //Validate rtn Minutes
    if(rtnmins.substring(1,2) == ''){
        rtntime += '0' + rtnmins;
    }
    else {
        rtntime += rtnmins;
    }

     //Validate Date
    if(today < 10 )
        today = '0' + d.getDate();

    if(month < 10 )
        today += '/0';
    else
        today += '/';

    today += d.getMonth() + 1;
    today += '/' + d.getFullYear();

    //Validate rtn Date
    if(rtntoday < 10 )
        rtntoday = '0' + dPlusHr.getDate();

    if(rtnmonth < 10 )
        rtntoday += '/0';
    else
        rtntoday += '/';

    rtntoday += dPlusHr.getMonth() + 1;
    rtntoday += '/' + dPlusHr.getFullYear();

    //set dates
    document.forms[0].outDate.value = today;
    document.forms[0].rtnDate.value = rtntoday;
    //set times
    document.forms[0].outTime.value = time;
    document.forms[0].rtnTime.value = rtntime;
}

//Validate the time
function check_time(field, type){
   var outTimeField = field;
   var outTime = field.value;

    numFirst = 0;
    numSecond = 0;
    var displayFirst = '0';
    var displaySecond = ':';

    //Validate the first two digits
    if(outTime.substring(0,1) == 0){
        numFirst = parseInt(outTime.substring(1,2));
        displayFirst = '0' + outTime.substring(1,2);
    }
    else {
        numFirst = parseInt(outTime.substring(0,2));
        displayFirst = outTime.substring(0,2);
    }

    //Validate second two digits
    if(outTime.length == 4){
        if(outTime.substring(2,3) == 0){
            numSecond = parseInt(outTime.substring(3,4));
            displaySecond += '0' + outTime.substring(3,4);
        }
        else {
            numSecond = parseInt(outTime.substring(2,4));
            displaySecond += outTime.substring(2,4);
        }
    }
    else {
        if(outTime.substring(3,4) == 0){
            numSecond = parseInt(outTime.substring(4,5));
            displaySecond += '0' + outTime.substring(4,5);
        }
        else {
            numSecond = parseInt(outTime.substring(3,5));
            displaySecond += outTime.substring(3,5);
        }
    }

    if(outTimeField.value == ''){
        outTimeField.value = '00:00';
    }
    else if((isNaN(numFirst) || isNaN(numSecond)) || (numFirst >= 24 || numSecond >= 60)){
        alert('You have not entered a correct time format.  Please fill in the Time field before proceeding.');
        outTimeField.focus();
    }
    else {
        outTimeField.value = displayFirst + displaySecond;
    }
}

//Validate the passenger field on input
function check_pass(field,numPaxParam){
    passenger = 0;
    passenger = parseInt(field.value);

    if(isNaN(passenger)){
        alert('You have not entered a valid Passenger Number.  Please fill in the Passenger No. field before proceeding.');
        field.focus();
        field.value = '';
        return false;
    }

    if(passenger == 0){
        alert('You have not entered a valid Passenger Number.  Please enter a whole number between 1 and '+numPaxParam+'.');
        field.focus();
        field.value = '';
        return false;
    }

    if(passenger > numPaxParam) {
        alert('You have exceeded the maximum number of Passengers allowed. The maximum allowed is ' + numPaxParam);
        field.focus();
        return false;
    }

    field.value = Math.round(field.value);

    return true;
}

//Function to load date data.
function jsDatePicker( szField, szDate, szAction){
    var form = document.forms[0];
    var field = form.elements[szField];
    if(szAction == "1"){
        field.value=szDate;
    }
    return field.value;

}

//Function to load return section
function showhidediv(field, isOnload){
    var jType = document.getElementById("journeyType").value;
    var applState = document.forms[0].appState.value;

    if(jType == 'openReturn'){
        document.getElementById("rtnDepArrDiv").style.display = "none";
        document.getElementById("rtnDateDIV").style.display = "none";
        document.getElementById("rtnCalendarDIV").style.display = "none";
        document.getElementById("rtnTimeDiv").style.display = "none";
        document.getElementById("rtnDateTxtDiv").style.display = "none";
        document.getElementById("rtnDateSpacer").style.display = 'none';
        document.getElementById("rtnTimeTxtDiv").style.display = "none";
        document.getElementById("rtnTimeSpacer").style.display = 'none';
        //document.getElementById("DIV2").style.display= '';
        document.forms[0].rtnTo.disabled = true;
        document.forms[0].rtnFrom.disabled = true;

/*
        // Check to see if the  field is a select object
        if(document.forms[0].outFrom.type == "select-one"){
            if(document.forms[0].rtnTo.type == "select-one"){
                document.forms[0].rtnTo.value = document.forms[0].outFrom.value;
            }
            else {
                document.forms[0].rtnTo.value = document.forms[0].outFrom.options[document.forms[0].outFrom.selectedIndex].text;
            }
        }
        else {
            document.forms[0].rtnTo.value = document.forms[0].outFrom.value;
        }

        // Check to see if the  field is a select object
        if(document.forms[0].outTo.type == "select-one"){
            if(document.forms[0].rtnFrom.type == "select-one"){
                document.forms[0].rtnFrom.value = document.forms[0].outTo.value;
            }
            else {
                document.forms[0].rtnFrom.value = document.forms[0].outTo.options[document.forms[0].outTo.selectedIndex].text;
            }
        }
        else {
            document.forms[0].rtnFrom.value = document.forms[0].outTo.value;
        }
*/

        if(applState == "1" || applState == "2" || applState == "4"){
            document.forms[0].appState.value = "3";
        }
        else {
            document.forms[0].appState.value = "7";
        }
    }
    else if(jType == 'return'){
        //document.getElementById("DIV2").style.display= '';
        document.getElementById("rtnDepArrDiv").style.display = '';
        document.getElementById("rtnDateDIV").style.display = '';
        document.getElementById("rtnCalendarDIV").style.display = '';
        document.getElementById("rtnTimeDiv").style.display = '';
        document.getElementById("rtnDateTxtDiv").style.display = '';
        document.getElementById("rtnDateSpacer").style.display = '';
        document.getElementById("rtnTimeTxtDiv").style.display = '';
        document.getElementById("rtnTimeSpacer").style.display = '';
        document.forms[0].rtnTo.disabled = true;
        document.forms[0].rtnFrom.disabled = true;
        // Check to see if the  field is a select object

        if(document.forms[0].rtnTime.value == ''){
            setReturnTime();
        }

/*
        if(document.forms[0].outFrom.type == "select-one"){
            if(document.forms[0].rtnTo.type == "select-one"){
                document.forms[0].rtnTo.value = document.forms[0].outFrom.value;
            }
            else {
                document.forms[0].rtnTo.value = document.forms[0].outFrom.options[document.forms[0].outFrom.selectedIndex].text;
            }
        }
        else {
            document.forms[0].rtnTo.value = document.forms[0].outFrom.value;
        }

        // Check to see if the  field is a select object
        if(document.forms[0].outTo.type == "select-one"){
            if(document.forms[0].rtnFrom.type == "select-one"){
                document.forms[0].rtnFrom.value = document.forms[0].outTo.value;
            }
            else {
                document.forms[0].rtnFrom.value = document.forms[0].outTo.options[document.forms[0].outTo.selectedIndex].text;
            }
        }
        else {
            document.forms[0].rtnFrom.value = document.forms[0].outTo.value;
        }
*/

        if(!isOnload){
        //ie. only set this value when showing div1 for first time, otherwise use stored value
            if(document.forms[0].outDepArr[0].checked == true){
                document.forms[0].rtnDepArr[0].checked = true;
                document.forms[0].rtnDepArr[1].checked = false;
            }
            else {
                document.forms[0].rtnDepArr[0].checked = false;
                document.forms[0].rtnDepArr[1].checked = true;
            }
        }

        if(document.getElementById("rtnDate").value == ''){
            document.getElementById("rtnDate").value = document.all.outDate.value;
        }

        if(applState == "1" || applState == "3" || applState == "4"){
            document.forms[0].appState.value = "2";
        }
        else {
            document.forms[0].appState.value = "6";
        }
    }
    else if(jType == 'openJaw'){
        document.forms[0].rtnFrom.disabled = true;
        //document.getElementById("DIV2").style.display= '';
        document.getElementById("rtnDepArrDiv").style.display = '';
        document.getElementById("rtnDateDIV").style.display = '';
        document.getElementById("rtnCalendarDIV").style.display = '';
        document.getElementById("rtnTimeDiv").style.display = '';
        document.getElementById("rtnDateTxtDiv").style.display = '';
        document.getElementById("rtnDateTxtspacer").style.display = '';
        document.getElementById("rtnTimeTxtDiv").style.display = '';
        document.getElementById("rtnTimeTxtspacer").style.display = '';
        document.forms[0].rtnTo.disabled = false;
        if(document.forms[0].rtnTo.type != "select-one"){
            document.forms[0].rtnTo.value = '';
        }

/*
        // Check to see if the field is a select object
        if(document.forms[0].outTo.type == "select-one"){
            if(document.forms[0].rtnFrom.type == "select-one"){
                document.forms[0].rtnFrom.value = document.forms[0].outTo.value;
            }
            else {
                document.forms[0].rtnFrom.value = document.forms[0].outTo.options[document.forms[0].outTo.selectedIndex].text;
            }
        }
        else {
            document.forms[0].rtnFrom.value = document.forms[0].outTo.value;
        }
*/

        if(document.forms[0].outDepArr[0].checked == true){
            document.forms[0].rtnDepArr[0].checked = true;
            document.forms[0].rtnDepArr[1].checked = false;
        }
        else {
            document.forms[0].rtnDepArr[0].checked = false;
            document.forms[0].rtnDepArr[1].checked = true;
        }

        if(document.getElementById("rtnDate").value == ''){
            document.getElementById("rtnDate").value = document.all.outDate.value;
        }

        if(applState == "1" || applState == "2" || applState == "3"){
            document.forms[0].appState.value = "4";
        }
        else {
            document.forms[0].appState.value = "8";
        }
    }
    else {
        //document.getElementById("DIV2").style.display= "none";
        document.getElementById("rtnDateDIV").style.display = "none";
        document.getElementById("rtnCalendarDIV").style.display = "none";
        document.getElementById("rtnTimeDiv").style.display = "none";
        document.getElementById("rtnDateTxtDiv").style.display = "none";
        document.getElementById("rtnDateSpacer").style.display = 'none';
        document.getElementById("rtnTimeTxtDiv").style.display = "none";
        document.getElementById("rtnTimeSpacer").style.display = 'none';

        if(applState == "2" || applState == "3" || applState == "4"){
            document.forms[0].appState.value = "1";
        }
        else {
            document.forms[0].appState.value = "5";
        }
    }

    copy_From_To();
    copy_To_From();
}

// Empties/resets the fields on the form
function resetForm(){
    document.forms[0].outFrom.value = "";
    document.forms[0].outTo.value = "";
    document.forms[0].outDate.value = "";
    document.forms[0].outTime.value = "";
    document.forms[0].outDepArr[0].checked = true;
    document.forms[0].outDepArr[1].checked = false;
    document.forms[0].rtnFrom.value = "";
    document.forms[0].rtnTo.value = "";
    document.forms[0].rtnDate.value = "";
    document.forms[0].rtnTime.value = "";
    document.forms[0].rtnDepArr[0].checked = true;
    document.forms[0].rtnDepArr[1].checked = false;
    document.forms[0].noPassengers.value = "1";
    document.getElementById("journeyType").value = 'single';
    showhidediv(document.getElementById("journeyType"));
    document.forms[0].appState.value = "1";

    document.forms[0].noOfPaxElderly.value = "0";
    document.forms[0].noOfPaxYoung.value = "0";
    document.forms[0].noOfPaxDiscount.value = "0";
    document.forms[0].noOfPaxChild.value = "0";
    document.forms[0].noOfPaxStandard.value = "0";

}

// Set the App State to go back to screen 1
function backToScreen1(){
    if(document.forms[0].appState.value == "1"){
        document.forms[0].appState.value = "13";
    }
    else if(document.forms[0].appState.value == "2"){
        document.forms[0].appState.value = "14";
    }
    else if(document.forms[0].appState.value == "3"){
        document.forms[0].appState.value = "15";
    }
    else if(document.forms[0].appState.value == "4"){
        document.forms[0].appState.value = "16";
    }
    document.forms[0].submit();
}

function newSearch(){
    document.forms[0].action="JourneyPlannerController?mn=1&op=6";
    document.forms[0].submit();
}

function resetAppState(){
    if(document.forms[0].appState.value == "13" || document.forms[0].appState.value == "5"){
        document.forms[0].appState.value = "1";
    }
    else if(document.forms[0].appState.value == "14" || document.forms[0].appState.value == "6"){
        document.forms[0].appState.value = "2";
    }
    else if(document.forms[0].appState.value == "15" || document.forms[0].appState.value == "7"){
        document.forms[0].appState.value = "3";
    }
    else if(document.forms[0].appState.value == "16" || document.forms[0].appState.value == "8"){
        document.forms[0].appState.value = "4";
    }
}

function CheckReturnDate(){
    var outValue = document.forms[0].outDate.value
    var rtnValue = document.forms[0].rtnDate.value

    var ODate = new Date(outValue.substring(6,10), outValue.substring(3,5) - 1,outValue.substring(0,2));// eg YYYY/MM/DD
    var RtnDate = new Date(rtnValue.substring(6,10), rtnValue.substring(3,5) - 1,rtnValue.substring(0,2));// eg YYYY/MM/DD
    var differenceRtn = RtnDate.getTime() - ODate.getTime();
    var daysDifferenceRtn = Math.floor(differenceRtn/1000/60/60/24);

    if(parseInt(differenceRtn) < 0){
        alert('Return Date Must be Equal or After Outward Date.');
         document.forms[0].rtnDate.focus();
         return false;
    }
    return true;
}

function CheckOutwardDate(field){
    var fValue = document.forms[0].outDate.value;
    var d = new Date();
    var today = new Date(d.getFullYear(), d.getMonth(), d.getDate());
    var OutDate = new Date(fValue.substring(6,10),fValue.substring(3,5) - 1, fValue.substring(0,2));// eg YYYY/MM/DD

    var difference = OutDate.getTime() - today.getTime();
    var daysDifference = Math.floor(difference/1000/60/60/24);

    if (daysDifference < 0) {
        alert("You have not entered a valid date, date cannot be in the past.\nPlease amend the Date field before proceeding.");
        document.forms[0].outDate.focus();
        return false;
    }

    return true;
}

//Used with quickroutes
function fillFields(origin, destination){
    document.forms[0].outFrom.value = origin;
    document.forms[0].outTo.value = destination;
    copy_From_To(document.forms[0].outFrom);
    copy_To_From(document.forms[0].outTo);

    document.forms[0].outDate.focus();
}

function checkDateNotEmpty(field) {
    if(field.value != '') {
        return check_date(field);
    }
    return false;
}
