(function() {
    
document.write('<style> html{display: none;}</style>');

var animateX = -30,
    animateInterval = 24,
    currentPage = null,
    currentHash = location.hash,
//    hashPrefix = "#_", //filr and iPrint use this
    hashPrefix = "#",
    tocId = "help_toc",
    pageHistory = [],
    isIOS = ( navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false ),
    isAndroid = navigator.userAgent.toLowerCase().indexOf("android") > -1;

function addEvent(obj,evt,fn) {
	if (obj.addEventListener)
		obj.addEventListener(evt,fn,false);
	else if (obj.attachEvent)
		obj.attachEvent('on'+evt,fn);
}

function addOnClick(obj,fn) { addEvent(obj,'click',fn); }

function internalLinkClicked(event) {
    var link = event.target,
        page = document.getElementById(link.hash.substr(1));
        
    event.preventDefault();
    showPage(page, link.hash == (hashPrefix + tocId) );
}

function openExternalLink(e,url) {
    e.preventDefault(); 
    navigator.app.loadUrl(url, { openExternal:true });
} 

function docLoaded(event) {
    var i,
        span,
        hasNavApp = typeof navigator.app != 'undefined',
        h2s = document.getElementsByTagName('h2'),
        tocDiv = document.getElementById(tocId);
        
    document.documentElement.className = isAndroid ? 'android' : isIOS ? 'ios' : 'other';
    
    for (i = 0, links = document.links; i < links.length; i++) {
        
        if ((' ' + links[i].className + ' ').indexOf(' ulink ') > -1) {
            links[i].target = '_blank';
            hasNavApp && addOnClick(links[i],function(e) { openExternalLink(e,links[i].href); });
        }
        else {
            addOnClick(links[i],internalLinkClicked);
        }
    }
    
    for (i = 0; i < h2s.length; i++) {
        span = h2s[i].getElementsByTagName('span')[0];
    
        if(span && span.className == 'number') {
            span.className = 'home';
            span.innerHTML = '';
            
            h2s[i].style.cursor = 'pointer';
            
            addOnClick(h2s[i],function(e) {
                e.stopPropagation();
                showPage(document.getElementById(tocId),true);
            });
        }
    }
    
    tocDiv.insertBefore(document.getElementsByTagName("h1")[0],tocDiv.childNodes[0]);
    
    var pageId = currentHash.substr(hashPrefix.length),
        page = document.getElementById(pageId) || document.getElementById(tocId);

    if (page) {
        tocDiv.setAttribute("selected", "false");
        page.setAttribute("selected", "true");
        showPage(page);
    }
  
    setInterval(checkHashLocation, 300);
    setTimeout(scrollTo, 0, 0, 1);
    document.documentElement.style.display = 'block';
}

function checkHashLocation() {
    if(location.hash != currentHash) {
        currentHash = location.hash || (hashPrefix + tocId);
        var pageId = currentHash.substr(hashPrefix.length),
            page = document.getElementById(pageId);
    
        if(page) {
            var index = pageHistory.indexOf(pageId),
                backwards = index != -1;
            
            backwards && pageHistory.splice(index, pageHistory.length);
            showPage(page, backwards);
        }
    }
}
    
function showPage(page, backwards) {
    var fromPage = currentPage;
    location.href = currentHash = hashPrefix + page.id;
    pageHistory.push(page.id);
    currentPage = page;
    fromPage && setTimeout(swipePage, 0, fromPage, page, backwards);
}

function swipePage(fromPage, toPage, backwards) {        
    var percent = 100;
    toPage.style.left = "100%";
    toPage.setAttribute("selected", "true");
    scrollTo(0,1);
    
    var timer = setInterval(function() {
        percent += animateX;
        
        if (percent <= 0) {
            percent = 0;
            fromPage.removeAttribute("selected");
            clearInterval(timer);
        }
        
        fromPage.style.left = (backwards ? (100-percent) : (percent-100)) + "%"; 
        toPage.style.left = (backwards ? -percent : percent) + "%"; 
    }, animateInterval);
}

addEvent(window,'load',docLoaded);
})();
