function EventReg_addToCalendar( eventID ) {
    var url = core_getContextPath() + "/servlet/event.ics?";
    var a = [ "eventID=" + eventID ];
    for( var i = 1; i < arguments.length; i++ ) {
        a.push( "sessionID=" + arguments[i] );
    }
    if( core_getQueryArg( "preview" ) == "1" ) {
        a.push( "preview=1" );
    }
    window.open( url + a.join( "&" ) );
}

function EventReg_onLoad( eventID, isStandalone, isThankYou ) {

    function goToRegistrationForm() {
        document.location = core_getContextPath() + "/servlet/event/view" + document.location.search;
    }

    function onSuccess( request, isStandalone, isThankYou ) {

        var xml;
        if( navigator.appName == "Netscape" ) {
            // 2007-09-05 (JK): See https://bugzilla.mozilla.org/show_bug.cgi?id=326337
            xml = (new DOMParser()).parseFromString( request.responseText, "text/xml" );
        } else {
            xml = request.responseXML;
        }
        var nodes = xml.getElementsByTagName( "reg" );
        if( nodes.length < 1 ) {
            return;
        }

        var regNode = nodes[0];
        if( isStandalone ) {
            // Redirect if we're not on the right page.
            if( isThankYou && regNode.getAttribute( "registered" ) == "false" ) {
                // Not registered; redirect to registration form
                goToRegistrationForm();
                return;
            } else if( ! isThankYou && regNode.getAttribute( "registered" ) == "true" ) {
                // Already registered; redirect to thank you page
                document.location = core_getContextPath() + "/servlet/event/viewtyp" + document.location.search;
            }
        }

        nodes = regNode.getElementsByTagName( "session" );
        var select = document.getElementById( "id-session-select" );
        if( select ) {
            for( var i = 0; i < nodes.length; i++ ) {
                var node = nodes[i];
                var registered = node.getAttribute("registered");
                if( registered == "false" ) {
                    // Unselect the checkbox and hidden value
                    var id = node.getAttribute("id");
                    core_selectOption(select, id, false);
                    var checkbox = document.getElementById("id-session-checkbox" + id);
                    if( checkbox ) {
                        checkbox.checked = false;
                    }
                }
            }
        }

        if( isStandalone && isThankYou ) {
            EventReg_showSessions();
        }

    }

    var cookieElement = document.getElementById( "id-vis-cookie" );
    if( ! cookieElement ) {
        return;
    }
    var cookieName = cookieElement.value;
    if( ! core_getCookie( cookieName ) ) {
        // No visitor info yet, so they can't have registerd.
        if( isStandalone && isThankYou ) {
            goToRegistrationForm();
        }
        return;
    }

    var url = core_getContextPath() + "/servlet/event/regdata.xml";

    var parameters = new Array();
    parameters.push( "eventID=" + eventID );

    new Ajax.Request(
        url,
        {
            method: 'get',
            parameters: parameters.join( "&" ),
            onComplete: function( r ) { onSuccess( r, isStandalone, isThankYou ) },
            onFailure: function( r ) { core_ajaxOnFailure( r, url, parameters ) },
            onException: core_ajaxOnException
        }
    );

}

function EventReg_openSession( img, num ) {
    var div = document.getElementById( "id-session-" + num );
    if( ! div ) {
        return;
    }
    var a = img.src.split( "/" );
    a[a.length - 1] = div.style.display == "none" ? "hc2_opened.gif" : "hc2_closed.gif";
    img.src = a.join( "/" );
    div.style.display = div.style.display == "none" ? "" : "none";
}

function EventReg_registerForMoreSessions( f ) {
    var a = core_getSelectedElementValues( f.session );
    if( a.length == 0 ) {
        alert( "A session has not been selected." );
        return false;
    }
    return true;
}

function EventReg_selectSession( e ) {
    var select = document.getElementById( "id-session-select" );
    if( select ) {
        core_selectOption(select, e.value, e.checked);
    }
}

function EventReg_showSessions() {

    function onSuccess( request ) {

        function displaySessions( xml ) {

            var nodes = xml.getElementsByTagName( "sessions" );
            if( ! nodes || nodes.length == 0 ) {
                return;
            }

            var node = nodes[0];
            var div = document.getElementById( "id-div-sessions-reg" );
            if( div ) {
                div.innerHTML = node.getAttribute("html-registered");
                div.style.display = "";
            }

            var html = node.getAttribute( "html-not-registered" );
            if( html ) {
                div = document.getElementById( "id-div-sessions-notreg" );
                if( div ) {
                    div.innerHTML = html;
                    div.style.display = "";
                }

            }

        }

        var xml = request.responseXML;
        displaySessions( xml );

    }

    var url = core_getContextPath() + "/servlet/oc/offer/typ/eventstatus.xml?id="
            + document.getElementById( "id-event" ).value + "&siteID=" + cda_getSiteID();
    new Ajax.Request(
        url,
        {
            method: 'get',
            onComplete: onSuccess,
            onFailure: function( r ) { core_ajaxOnFailure( r, url, parameters ) },
            onException: core_ajaxOnException
        }
    );
}

function EventReg_validateForm() {

    // Are there any sessions?
    var select = document.getElementById( "id-session-select" );
    if( ! select ) {
        // No sessions.
        return true;
    }

    var a = core_getSelectedElementValues( select );
    if( a.length > 0 ) {
        return true;
    }

    alert( WamForm_getTranslation( "session-required" ) );
    return false;
}
