<!-- Begin
// called from trackcalc.html
// $Id$
// rahulkumar 2008-08-27 14:32 
// License: GPL, freeware
var FORMAT_LONG="%H:%M:%S";
var FORMAT_SHORT="%M:%S";
var use_long_format = false;
function padout(number) { return (number < 10) ? '0' + number : number;}

function isValidTime(timeStr) {

    var junkchars=/[^\d:.]/;
    if (junkchars.test(timeStr) === true){
        alert("Only 0-9 : and . allowed");
        return false;
    }
    var hrre=/(\d+):(\d+):(\d+)/;
    var mire=/(\d+):(\d+)/;
    var sere=/(\d+)/;
    var hour = -1;
    var minute = -1;
    var second = 0;
    //var matchArray = timeStr.match(timePat);
    var matchArray = timeStr.match(hrre);
    //var matchArray = hrre.match(timeStr);
    if (matchArray != null) {
        hour = matchArray[1];
        minute = matchArray[2];
        second = matchArray[3];
        second = second + RegExp.rightContext;
        second = parseFloat(second);
        //alert("1 Got "+ hour + " hr  "+ minute + " min "+ second + " sec ");
    }
    else {
        matchArray = timeStr.match(mire);
        if (matchArray != null) {
            hour = 0;
            minute = matchArray[1];
            second = matchArray[2];
            second = second + RegExp.rightContext;
            second = parseFloat(second);
            //alert("2 Got "+ hour + " hr  "+ minute + " min "+ second + " sec ");
        }
        else {
            matchArray = timeStr.match(sere);
            if (matchArray != null) {
                hour = 0;
                minute = 0;
                second = matchArray[1];
                second = second + RegExp.rightContext;
                second = parseFloat(second);
                //alert("3 Got "+ hour + " hr  "+ minute + " min "+ second + " sec ");
            }
            else {
                alert("Incorrect format for time. Please use numbers in HH:MM:SS format");
                return false;
            }
        }
    }


    if (hour < 0  || hour > 23) {
        alert("Hour must be a number.");
        return false;
    }
    if (minute < 0 || minute > 99) {
        alert ("Minute must be between 0 and 99.");
        return false;
    }
    if (second != null && (second < 0 || second > 99)) {
        alert ("Second must be between 0 and 99.");
        return false;
    }
    //alert("4 Got "+ hour + " hr  "+ minute + " min "+ second + " sec ");
    return true;
}

function parseme(timeStr) {

    var junkchars=/[^\d:.]/;
    if (junkchars.test(timeStr) === true){
        alert("Only 0-9 : and . allowed");
        return false;
    }
    var hrre=/(\d+):(\d+):(\d+)/;
    var mire=/(\d+):(\d+)/;
    var sere=/(\d+)/;
    var hour = 0;
    var minute = 0;
    var second = 0;
    //var matchArray = timeStr.match(timePat);
    var matchArray = timeStr.match(hrre);
    //var matchArray = hrre.match(timeStr);
    if (matchArray != null) {
        hour = matchArray[1];
        minute = matchArray[2];
        second = matchArray[3];
        second = second + RegExp.rightContext;
        second = parseFloat(second);
        //alert("1 Got "+ hour + " hr  "+ minute + " min "+ second + " sec ");
    }
    else {
        matchArray = timeStr.match(mire);
        if (matchArray != null) {
            minute = matchArray[1];
            second = matchArray[2];
            second = second + RegExp.rightContext;
            second = parseFloat(second);
            //alert("2 Got "+ hour + " hr  "+ minute + " min "+ second + " sec ");
        }
        else {
            matchArray = timeStr.match(sere);
            if (matchArray != null) {
                second = matchArray[1];
                second = second + RegExp.rightContext;
                second = parseFloat(second);
                //alert("3 Got "+ hour + " hr  "+ minute + " min "+ second + " sec ");
            }
        }
    }
    //alert("4 Got "+ hour + " hr  "+ minute + " min "+ second + " sec ");

    if (second=="") { second = 0; }
    //if (millis=="") { millis = 0; }

    //millis = millis * 1;
    //var secms = ((second * 100) + millis)/100;
    //alert("Got "+ hour + " hr  "+ minute + " min "+ secms + " sec "+ millis + " ms")
    var myArray = new Array(hour, minute, second);
    return myArray;
}

// converts hms to seconds
function to_seconds(hh,mm,ss){
    return hh*60*60+mm*60+ss;
}
function to_components(speedseconds) {
    var mm = 0;
    var rem1 = 0;
    var hh=speedseconds/3600;
    hh=Math.floor(hh);
    var rem=speedseconds-(hh*3600);
    if (rem > 60) { 
        mm=rem/60;
        mm=Math.floor(mm);
        rem1=rem-(mm*60);
    }

    var myArray = new Array(hh, mm, rem1);
    return myArray;
}
function format_hms(hh,mm,ss){
    hh = padout(hh);
    mm = padout(mm);

    ss = ss.toFixed(2);
    if (ss < 10) { ss = '0' + ss;}
    ssfloor = Math.floor(ss);
    //var str = hh + ":" + mm + ":" + ss;
    var str = "";
    if (use_long_format == true) {
        str = new String(FORMAT_LONG);
    } else {
        str = new String(FORMAT_SHORT);
    }
    str = str.replace("%H", hh);
    str = str.replace("%M", mm);
    str = str.replace("%S", ss);
    str = str.replace("%s", ssfloor);
    return str;
}
function calc_splits(speedseconds, splits, base, target){
    var splitsArray = new Array();
    var distArray = new Array();
    if (splits > 0) { 
        var rate = speedseconds * (splits*1.000/base);
        var multiplier = target/splits;
        // if the final answer is more than one hour then use long format
        if (multiplier * rate >= 3600){
            use_long_format = true;
        } else {
            use_long_format = false;
        }
        var i = 1;
        for (i=1 ;i<= multiplier ;i++){
            var result = rate * i;
            //  hh,mm,ss=to_components(result);
            var timearr = to_components(result);
            var hh = timearr[0];
            var mm = timearr[1];
            var ss = timearr[2];
            splitsArray.push(format_hms(hh,mm,ss));
        }
        // this is those cases where there is some distance left over.
        // the total distance is not perfectly divisible by the split
        // e.g 400 splits for 3000m or 5000m give 7.5 or 12.5 laps
        multiplier=Math.floor(multiplier);
        if (multiplier != target*1.000/splits){
            var result = rate * (target*1.000/splits);
            var timearr = to_components(result);
            var hh = timearr[0];
            var mm = timearr[1];
            var ss = timearr[2];
            splitsArray.push(format_hms(hh,mm,ss));
        }
    } // if splits
    return splitsArray;
}

// form submit reaches here MAIN XXX 
function doSubmit(d1,t1,d2,t2) {

    var speed = document.getElementById(t1).value;
    //alert("Speed:"+ speed);
    if (isValidTime(speed)) { // Validates first date 
    }
    else { return false; } // otherwise exits

    var base = document.getElementById(d1).value; 
    //alert("base:"+ base);
    var target = document.getElementById(d2).value;  
    //alert("Target:"+ target);
    //var splits = dateform.splits.value;
    var splits = document.getElementById("splits").value;  
    //alert("splits:"+ splits);
    if (target == 0) {
        target = base;
    }
    var timearr = parseme(speed);
    var hh = timearr[0];
    var mm = timearr[1];
    var ss = timearr[2];
    var speedseconds = to_seconds(hh,mm,ss);

    var diff=(target*1.000/base);
    var result=speedseconds*diff;
    //hh,mm,ss=to_components(result);
    timearr = to_components(result);
    hh = timearr[0];
    mm = timearr[1];
    ss = timearr[2];
    var final = format_hms(hh,mm,ss);
    //dateform.secondtime.value = final;
    //    alert("final: "+ final);
    document.getElementById(t2).value = final; 

    document.getElementById("splitresult").value = "";  
    //dateform.splitresult.value = "";
    if (splits > 0) {

        var splitsArray = calc_splits(speedseconds, splits, base, target);
        //var splitstr = splitsArray.join("\n");
        var splitstr = "";
        var printnumbers = document.getElementById("numbering").checked;
        var printdistances = document.getElementById("distances").checked;
        for (i=0;i<splitsArray.length;i++){
            if (printnumbers === true){
                splitstr = splitstr + (i+1) + "\t" ;
            }
            if (printdistances === true){
                splitstr = splitstr + (splits * (i+1)) + "\t" ;
            }
            splitstr = splitstr + splitsArray[i] + "\n";
        }

        //dateform.splitresult.value = splitstr;
        document.getElementById("splitresult").value = splitstr;
    }


    //dateform.secondtime.value = hh + " h " + mm + " m " + ss + " s " ;

    return false; // form should never submit, returns false
}


//  End -->
