// JavaScript Document

jQuery().ready(function(){

    // Enable the accordion
    jQuery('.js-accordion').accordion({
        autoheight: false,
        header: 'a.js-accordionLink',
        active: '.js-current',
        alwaysOpen: false
    });

    // Reload accordion in the appropriate places
    if ( jQuery('.js-accordion-reload').size() ) {
        jQuery('body').oneTime(3 * 60 * 1000, function () {
            tab.reloadAccordion();
        })
    }

    // Enable the clock if present
    if ( jQuery('.js-clock').size() ) {
        tab.startClock();
    }


    jQuery('.js-toggle-meetings-panel').click(function () {
        // Toggle the meeting panel
        try {
            if ( parent.document.getElementById('rightframe').clientWidth ) {
                parent.document.getElementById('middleframe').cols='215,*,0';
                $(this).html('Show');
            }
            else {
                parent.document.getElementById('middleframe').cols='215,*,260';
                $(this).html('Hide');
            }
        }
        catch (error) {}

        return false;
    });

    // Whole row clickable (on first link found)
    jQuery('.js-rowclick .odd, .js-rowclick .even')
        .mouseover(function () { document.body.style.cursor = 'pointer' } )
        .mouseout(function () { document.body.style.cursor = '' } )
        .click(function () {
            document.location = jQuery(this).find('a').get(0).href;
        });
});

tab = {
    windows: {}
};

// Function to simulate back button in the browser
tab.back = function () {
    try {
        history.go(-1);
    }
    catch(e) {
        back();
    }
}

// Function to reload accordions while preserving open tabs
tab.reloadAccordion = function () {
    var code;

    jQuery('.js-accordion .selected').each(function() {
        var match;
        if ( match = jQuery(this).attr('id').match(/accordion-(.*)/) ) {
            code = match[1];
        }
    });

    var url;

    try {
        url = location.pathname + '?';
    }
    catch (e) {
        url = '?';
    };

    if ( code ) {
        url += '&code=' + code;
    }

    if ( document.location.href.match(/page=date/)) {
        url += '&page=date';
    }

    document.location.href = url;
};

// Operate the clock
tab.startClock = function () {
    var f = function (x) { if ( x < 10 ) return '0' + x; return x };

    jQuery('.js-clock').each(function () {
        var time = new Date();

        if ( match = jQuery(this).html().match(/([0-9]+):([0-9]+):([0-9]+)/) ) {
            time.setHours(match[1]);
            time.setMinutes(match[2]);
            time.setSeconds(match[3]);
        }

        jQuery(this).everyTime(1000, function () {
            time.setTime(time.getTime() + 1000);
            $(this).html(f(time.getHours()) + ':' + f(time.getMinutes()) + ':' + f(time.getSeconds()));
        });
    });
};

// Open a URL in a frame
tab.frameOpen = function (frame, url) {
    // If we're a frame of the main frameset
    if ( parent.main ) {
        try {
            parent.frames[frame].location.href = url;
        }
        catch(error) {
            parent.document.getElementsByName(frame)[0].src = url;
        }
    }
    // If we're an infopanel
    else {
        if( !window.opener || window.opener.closed ) {
          alert("Reference to TAB website window not found (www.mtab.abelard.wgtn.cat-it.co.nz)\nPlease close the Infopanel and re-load the Tab website in a new browser window");
        } else {
            try {
                window.opener.parent.frames[frame].location.href = url;
            }
            catch(error) {
                window.opener.parent.document.getElementsByName(frame)[0].src = url;
            }
        }
    }
};

// Displays a odds/betslip for a given option
tab.sportBetslip = function(date, optionno) {
    tab.frameOpen('main', tabConfig.ebeturl + '/sbs/' + date + optionno + '.html');
    tab.frameOpen('odds', '/sport/options.html?optno=' + optionno);
};

// Open an infopage
tab.ipOpen = function(page) {
    if ( !tab.windows.infowindow || tab.windows.infowindow.closed ) {
        tab.windows.infowindow = window.open(
            page,
            'info',
            'location=no,status=yes,scrollbars=yes,resizable=yes,width=726,height=581,alwaysRaised=yes'
        );
    }
    else {
        tab.windows.infowindow.location.href = page;
    }
    tab.windows.infowindow.focus();
};

// Open multibet
tab.multibetOpen = function() {
    if ( !tab.windows.multibetwin || tab.windows.multibetwin.closed ) {
        tab.windows.multibetwin = window.open(
            tabConfig.ebeturl + '/sports_multi/sports_list.jsp?firstTime=1',
            'multibet',
            'location=no,status=yes,scrollbars=yes,resizable=yes,width=1020,height=600,alwaysRaised=yes'
        );
    }
    tab.windows.multibetwin.focus();
};

// Open batchbet
tab.batchbetOpen = function() {
    if ( !tab.windows.batchbetwin || tab.windows.batchbetwin.closed ) {
        tab.windows.batchbetwin = window.open(
            tabConfig.ebeturl + '/batchbet/',
            'batchbet',
            'location=no,status=yes,scrollbars=yes,resizable=yes,width=900,height=700,alwaysRaised=yes'
        );
    }
    tab.windows.batchbetwin.focus();
};

// Displays a odds/betslip for a given race
tab.racingBetslip = function(date, code, raceno, btype) {
    tab.frameOpen('odds', tabConfig.ebeturl + '/odds/' + date + code + raceno + '.html');
    tab.frameOpen('main', tabConfig.ebeturl + '/rbs/' + date + code + raceno + btype + '.html');
};

// Open futures
tab.racingFutures = function(date, code, meetno, raceno, odds) {
    tab.frameOpen('main', '/racing/race.html?date=' + date + '&code=' + code + '&meetno=' + meetno + '&raceno=' + raceno);
    if ( odds ) {
        console.error("Pretty sure we shouldn't get here");
    } else {
        tab.frameOpen('odds', '/racing/next10.html');
    }
};

// Open meetings page
tab.racingMeeting = function(date, meetno) {
    tab.frameOpen('main', '/racing/meeting.html?date=' + date + '&meetno=' + meetno);
    tab.frameOpen('odds', '/racing/next10.html');
};

// Open sixpack
tab.racingSixPack = function(date, meetcode, raceno, btype, sourcemeetcode, sourceraceno) {
    tab.frameOpen('main', tabConfig.ebeturl + '/rbs/' + date + meetcode + '1' + btype + '.html') ;
    tab.frameOpen('odds', tabConfig.ebeturl + '/odds/' + date + sourcemeetcode + sourceraceno + '.html');
};

// Open picksix
tab.racingPickSix = function(date, meetcode, btype, sourcemeetcode, sourceraceno) {
    tab.frameOpen('main', tabConfig.ebeturl + '/rbs/' + date + meetcode + '1' + btype + '.html') ;
    tab.frameOpen('odds', tabConfig.ebeturl + '/odds/' + date + sourcemeetcode + sourceraceno + '.html');
};

