/* Note to site visitors viewing this file: this is not the typical means of setting up the code. 
See the download file for demonstration of implementation. */

dw_Util.inArray = function(val, ar) {
    for (var i=0; ar[i]; i++) {
        if ( ar[i] == val ) {
            return true;
        }
    }
    return false;
}

// object detection from http://benalman.com/projects/jquery-hashchange-plugin/
dw_Util.supportsHashchange = function() {
    return 'onhashchange' in window && ( !document.documentMode || document.documentMode > 7 );
}


// ajax to get scroll init
// hidden iframe loader to get scroll area div's
dw_ScrollDemo = {
    iframeSupported: 0, // set by pages loaded into iframe
    request: null, timer: 0, initStr: '', 
    current: null,

    setupLinks: function(id) {
        if ( dw_Util.supportsHashchange() ) { return; } // use onhashchange instead of function call onlick
        var links = document.getElementById(id).getElementsByTagName('a');
        for (var i=0; links[i]; i++) {
            if (links[i].className.indexOf('scrolldemo_') !== -1) {
                links[i].onclick = dw_ScrollDemo.getContent;
            }
        }
    },
    
    doOnHashChange: function() {
        var _this = dw_ScrollDemo;
        var demo, hash = location.hash.length > 1? location.hash.slice(1): '';
        if ( hash && dw_Util.inArray(hash, DEMOS_AR) ) {
            demo = hash;
        } else if ( _this.current && !location.search ) {
            demo = _this.current;
        } else {
            demo = STARTING_DEMO;
        }
        if ( _this.iframeSupported ) {
            _this.getContent(demo);
        }
    },
    
    // called when page loads or onclick of demo links
    getContent: function (demo) {
        var _this = dw_ScrollDemo;
        if ( typeof demo != 'string' && this.className ) { // link clicked
            demo = this.className.slice(11); // 'scrolldemo_' length
        }
        // encodeURIComponent
        var url = 'demos/includes/data.php?demo=' + demo + '&i=' + new Date().getTime();
        if ( _this.request ) {
            _this.request.abort();
        }
        var req = _this.request = dw_XHR.makeRequest(url, _this.callback );
        if (req) {
            _this.initStr = ''; dw_scrollObj.col = {}; dw_scrollObj.ids = [];
            dw_Slidebar.col = {}; dw_Slidebar.ids = [];
            var pg = 'demos/' + demo + '.html';
            dw_Loader.load(pg);
            _this.toggleNotes(demo);
        } else {
            var el = document.getElementById('demo');
            el.innerHTML = '<h2>Problem Retrieving Demo</h2><p>Your browser was unable to retrieve data via ajax for the demo.</p>';
        }
        return false; // may be link onclick
    },
    
    toggleNotes: function (id) {
        if (this.current) {
            document.getElementById(this.current).style.display = 'none';
        }
        document.getElementById(id).style.display = 'block';
        this.current = id;
    },
    
    handleData: function () {
        var _this = dw_ScrollDemo;
        var req = _this.request;
        var str = req.responseText;
        _this.initStr = str;
    },
    
    // called by iframed doc's onload
    // coordinate with ajax response, which sets initStr
    initScroll: function () {
        var _this = dw_ScrollDemo;
        if ( !arguments.callee.ctr ) {
            arguments.callee.ctr = 0;
        }
        if ( _this.timer ) {
            clearTimeout(_this.timer); _this.timer = 0;
        }
        var el = document.getElementById('demo');
        var len = el.innerHTML.length, len2 = dw_Loader.loadMsg.length;
        if ( _this.initStr && len > len2 ) { // initStr set, content in demo div
            eval(dw_ScrollDemo.initStr);
        } else { // try again
            if ( ++arguments.callee.ctr < 20 ) {
                _this.timer = setTimeout(dw_ScrollDemo.initScroll, 500);            
            } else {
                var el = document.getElementById('demo');
                el.innerHTML = '<h2>Problem Retrieving Demo</h2><p>Your browser was unable to retrieve the demo.</p>';
            }
        }
    },
    
    handleFailure: function() {
        var el = document.getElementById('demo');
        el.innerHTML = '<h2>Problem Retrieving Demo</h2><p>Your browser was unable to retrieve data via ajax for the demo.</p>';
    }
}

dw_ScrollDemo.callback = {
    success: dw_ScrollDemo.handleData,
    failure: dw_ScrollDemo.handleFailure
}



/////////////////////////////////////////////////////////////////////
// ajax demo in refresh.html 

dw_scrollObj.request = null;
dw_scrollObj.ajaxCallback = {
    success: handleScrollRequest
}

// links for ajax demo call this function
function get_content(url) {
    url = 'demos/' + url;
    // Place the content in lyr4 for our demo 
    var el = document.getElementById('lyr4');
    
    if ( dw_scrollObj.request ) {
        dw_scrollObj.request.abort();
    }
    var req = dw_scrollObj.request = dw_XHR.makeRequest(url, dw_scrollObj.ajaxCallback );
    
    if (req) {
        dw_scrollObj.loadLayer('wn','lyr4');
        el.innerHTML = 'Retrieving data ... ';
    } else {
        
    }
}

function handleScrollRequest() {
    var el = document.getElementById('lyr4');
    var req = dw_scrollObj.request;

    try {
        var msg = req.responseText;
        el.innerHTML = msg;
        dw_scrollObj.loadLayer('wn','lyr4');
    } catch (e) {
    }
}

dw_scrollObj.loadLayer = function(wndoId, lyrId, horizId) {
    if ( dw_scrollObj.col[wndoId] ) dw_scrollObj.col[wndoId].load(lyrId, horizId);
}

// end ajax demo code
/////////////////////////////////////////////////////////////////////

// Adds content to whichever layer is active and updates the dimensions and scrollbar
function add_content() {  
    var wndo = dw_scrollObj.col['wn'];
    var el = document.getElementById(wndo.lyrId);
    el.innerHTML += '<p>More content for the scroll area. Adding a bit more content for our demo.</p>';
    
    wndo.updateDims();
}

// another demo for updating scroll values
function toggleDisplay(id) {
    var el = document.getElementById(id);
    if ( el.style.display == 'block' ) {
        el.style.display = 'none';
    } else {
        el.style.display = 'block';
    }
    
    var wndo = dw_scrollObj.col['wn'];
    wndo.updateDims();
}

