// ***** ROOM TYPE DHTML ***********************************************

function RoomTypeTabs( tabId, altDivId, newDivId ) {
    var logger = LogFactory.getLog("RoomTypeTabs.js");


    var tabs;
    var altDiv;
    var nodes;
    var parentDiv;
    var displayedDiv;

    // The javascript reservation object
    var reservation;
    this.setReservation = function(r) {
        reservation = r;
    }

    var allNodes = new Array();
    var tabNodes = new Array();
    
    this.init = function() {
        logger.debug("Enter init()");


        // Find the tabs
        tabs = document.getElementById( tabId );
        nodes = tabs.getElementsByTagName("a")

        // Find the container that holds all the content
        altDiv = document.getElementById("altContent");
        parentDiv = altDiv.parentNode;
        allNodes[ altDiv.id ] = altDiv;

        displayedDiv = altDiv;
        for( var i=0; i<nodes.length; i++ ) {
            //nodes[i].onmouseover = click;
            nodes[i].onmouseover = mouseoverStatus;
            nodes[i].onmouseout = mouseoutStatus;
            nodes[i].onclick = click;

            // Find the div that this points to
            var curDiv = getDivFromLinkId( nodes[i] );
            tabNodes[ curDiv.id ] = nodes[i];
            allNodes[ curDiv.id ] = curDiv;

            // Find if a radio button is checked - if so, this 
            // becomes the displayed div.
            var radios = curDiv.getElementsByTagName("input");
            for( var j=0; j<radios.length; j++ ) {
                if( radios[j].type != "radio" ) {
                    continue;
                }
                if( radios[j].checked ) {
                    displayedDiv = curDiv;
                }
            }
        }

        // Now remove all but the displayed div from the DOM
        for( var tmpDiv in allNodes ) {
            allNodes[tmpDiv].style.display = "block";
            if( displayedDiv == allNodes[tmpDiv] ) {
                if( tabNodes[displayedDiv.id] ) {
                    tabNodes[displayedDiv.id].className = "ON";
                }
            } else {
                parentDiv.removeChild( allNodes[tmpDiv] );
            }
        }

        // Set up the clear link
        var clearLink = document.getElementById( "clearRoomTypes" );
        clearLink.onclick = clearRoomTypes;

        logger.debug("Exit init()");
    }

    var clearRoomTypes = function() {
        logger.debug("Enter clearRoomTypes()");

        for( var tmpDiv in allNodes ) {
            if( displayedDiv == allNodes[tmpDiv] ) {
                parentDiv.removeChild( allNodes[tmpDiv] );
            }
        }

        if( tabNodes[displayedDiv.id] ) {
            tabNodes[displayedDiv.id].className = "";
        }

        parentDiv.appendChild( altDiv );
        displayedDiv = altDiv;

        reservation.handleRoomTypeChange( "" );

        logger.debug("Exit clearRoomTypes()");
        return false;
    }


    var mouseoverStatus = function(e) {
        var elem = getEventSource(e);
        var msg;
        if( elem.innerText ) {
            msg = "ROOM TYPE: " + elem.innerText;
        } else {
            msg = "ROOM TYPE: " + elem.text;
        }

        window.status = msg;
        return true;
    }

    var mouseoutStatus = function(e) {
        window.status = "";
        return true;
    }

    var mouseover = function(e) {
    /*
        var div = getDivFromLinkId( getEventSource(e) );
        altDiv.style.display = "none";
        div.style.display = "block";
    */
    }

    var mouseout = function(e) {
    /*
        var div = getDivFromLinkId( getEventSource(e) );
        div.style.display = "none";
        altDiv.style.display = "block";
    */
    }

    var click = function(e) {

        var divId = getDivIdFromLinkId( getEventSource(e) );
        parentDiv.removeChild( displayedDiv );
        parentDiv.appendChild( allNodes[divId] );
        displayedDiv = allNodes[divId];
        highlightNav(e);

        var radios = displayedDiv.getElementsByTagName("input");
        var onClickFired = false;
        for( var j=0; j<radios.length; j++ ) {
            if( radios[j].type != "radio" ) {
                continue;
            }
            if( radios[j].checked ) {
                reservation.handleRoomTypeChange( radios[j].alt );
                onClickFired = true;
            }
        }
        if( ! onClickFired ) {
            radios[0].checked = true;
            reservation.handleRoomTypeChange( radios[0].alt );
        }


        return false; // return false if this is an onclick
    }

    function highlightNav(e) {
        for( var i=0; i<nodes.length; i++ ) {
            nodes[i].className = "";
        }
        var curNav = getEventSource(e);
        curNav.className = "ON";
    }

    function getDivIdFromLinkId( elem ) {
        var num = elem.id.substr( 2, 1 );
        var divId = newDivId + num;
        return divId;
    }
    function getDivFromLinkId( elem ) {
        var divId = getDivIdFromLinkId( elem );
        return document.getElementById( divId );
    }

}
