
function adjustHeight (iframe) {
  iframe.height = iframe.contentWindow.document.body.scrollHeight + 50;
}

function fidoEmbed() {
    var script = document.getElementById ('fidoSubscriberForm');
    if ( ! script ) {
        alert ('Fido embed.js requires id="fidoSubscriberForm" on the <script> element.');
    }

    // fidoParams is a variable defined in the embedding page.
    //
    if (fidoParams == undefined) fidoParams = {};
    var fidoResource =
        fidoParams.resource ? fidoParams.resource : 'subscribe'
    var iframeWidth =
        fidoParams.iframeWidth ? fidoParams.iframeWidth : '500' ;
    var iframeCssUrl = fidoParams.iframeCSS;

    function domainOf (uri) {
        var path = uri.substring (uri.indexOf ('//') + 2);
        return path.substring (0, path.indexOf ('/'));
    }

    var clientDomain = domainOf (document.URL);
    var baseDomainComponents = clientDomain.split ('.');
    var baseDomain =
            baseDomainComponents [baseDomainComponents.length - 2]
            + '.'
            + baseDomainComponents [baseDomainComponents.length - 1]
        ;
    document.domain = baseDomain;
    var fidoUri = 'http://' + domainOf (script.src) + '/subscriber/';
    fidoUri += fidoResource;
    fidoUri += '?clientDomain=' + clientDomain;

    if (fidoParams.pubId) {
        fidoUri += '&pubId=' + fidoParams.pubId;
    }

    var queryString = null;
    var queryIndex = document.URL.indexOf ('?');
    if (queryIndex != -1) {
        fidoUri += '&' + 
        document.URL.substring (queryIndex + 1);
    }
    queryIndex = script.src.indexOf ('?');
    if (queryIndex != -1) {
        fidoUri += '&' + 
        script.src.substring (queryIndex + 1);
    }

    if (iframeCssUrl) fidoUri += '&fidoCSS=' + iframeCssUrl;

    var iframe;
    try {
        // For brain-dead IE...
        iframe =
            document.createElement (
                '<iframe'
                + " id='fidoIframe'"
                + " onload='adjustHeight(this)'"
                + " width='" + iframeWidth + "'"
                + " frameborder='0'"
                + " scrolling='no'"
                + '>'
            );
    } catch (e) {
        iframe = document.createElement ('iframe');
        iframe.onload = function() { adjustHeight (iframe) };
        iframe.setAttribute ('id', 'fidoIframe');
        iframe.setAttribute ('style', 'border: none');
        iframe.setAttribute ('width', iframeWidth + 'px');
    }
    iframe.setAttribute (
            'src',
            fidoUri
        );

    script.parentNode.replaceChild (iframe, script);
};

fidoEmbed();
