/*
 * @author Shachi Bista
 * Copyright Shachi Bista
 * July 21, 2008
 */

function removeAnchor(str){
	if(str.indexOf('#') > -1){
       		return str.substring(0, str.indexOf('#'));
	} else {
		return str;
	}
}

var PageManager = 
{
    initialized : false,
    init : function (frameName)
    {
        this.frame = 
        {
            name : frameName, obj : get(frameName), document : get(frameName).contentDocument, window : get(frameName).contentWindow
        };
        this.initialized = false;
        if (get(frameName).contentWindow.$)
        {
            this.pages = this.frame.window.$('.page').length; // for most browsers
            this.page_num = 0;
            if (this.pages > 1) {
                $('#next').removeClass('nextdisabled')
            }
	    this.initialized = true;
	this.checkLinks();
        }
    },
    checkLinks : function ()
    {
	if(this.pages == 0) this.pages = this.frame.window.$('.page').length; // for opera
        if (this.pages <= 1) {
            $('#prev').addClass('prevdisabled');
            $('#next').addClass('nextdisabled');
        }
        if (this.page_num == 0) {
            $('#prev').addClass('prevdisabled');
        }
        else {
            $('#prev').removeClass('prevdisabled')
        }
        if (this.page_num == (this.pages - 1)) {
            $('#prev').removeClass('prevdisabled');
            $('#next').addClass('nextdisabled');
        }
        else {
            $('#next').removeClass('nextdisabled');
        }
    },
    calculateLinks : function(minval, maxval, currentval){
    	if(minval == maxval){
	    this.prevButton('disabled');
	    this.nextButton('disabled');
	    return;
	}
    	if(currentval <= minval){
	    this.prevButton('disabled');
	    this.nextButton('enabled');
	} else if(currentval >= maxval){
	    this.nextButton('disabled');
	    this.prevButton('enabled');
	} else if(currentval < maxval && currentval > minval){
	    this.nextButton('enabled');
	    this.prevButton('enabled');
	}
    },
    prevButton : function(state){
    	if(!state) state = 'enabled';
	switch(state){
	    case 'enabled':
	    	$('#prev').removeClass('prevdisabled');
	    break;
	    case 'disabled':
	    	$('#prev').addClass('prevdisabled');
	    break;
	}
    },
    nextButton : function(state){
    	if(!state) state = 'enabled';
	switch(state){
	    case 'enabled':
	    	$('#next').removeClass('nextdisabled');
	    break;
	    case 'disabled':
	    	$('#next').addClass('nextdisabled');
	    break;
	}
    },
    moveTo : function (pg, chcklinks)
    {
    	if(chcklinks == null) chcklinks = true;
	if(this.pages == 0) this.pages = this.frame.window.$('.page').length; // for opera
        if (this.initialized) {
            this.frame.window.$.scrollTo('#page_' + pg, 800, {
                axis : 'x' 
            });
        }
	if(chcklinks) this.checkLinks();
    },
    moveToAnchor : function (name)
    {
	if(this.pages == 0) this.pages = this.frame.window.$('.page').length; // for opera
        var el = get('loadFrame').contentWindow.$('a[name=' + name + ']')[0];
        var elpar = $(el).parents('.page');
        var elparid = elpar[0].id;
        var elparpnum = (elparid.split('_'))[1];
        this.page_num = parseInt(elparpnum);
        this.moveTo(elparpnum);
	this.checkLinks();
    },
    moveToEl : function (el)
    {
	if(this.pages == 0) this.pages = this.frame.window.$('.page').length; // for opera
        var el = get('loadFrame').contentWindow.$(el);
        var elpar = get('loadFrame').contentWindow.$(el).parent('.page');
        var elparid = elpar[0].id;
        var elparpnum = (elparid.split('_'))[1];
        this.page_num = parseInt(elparpnum);
        this.moveTo(elparpnum);
	this.checkLinks();
    },
    move : function (steps)
    {
	if(this.pages == 0) this.pages = this.frame.window.$('.page').length; // for opera
        if (this.initialized)
        {
            var precalculation = this.page_num + steps;
            if (precalculation >= this.pages || precalculation < 0) {
                return false;
            }
            this.page_num += steps;
            this.moveTo(this.page_num);
            this.checkLinks()
        }
	this.checkLinks();
    }
};

var shown = false;
var searching = false;
var currentIndex = 1;
function array_unique(array)
{
    var p, i, j, tmp_arr = array;
    for (i = tmp_arr.length; i; )
    {
        for (p =--i; p > 0; )
        {
            if (tmp_arr[i] === tmp_arr[--p]) {
                for (j = p; --p && tmp_arr[i] === tmp_arr[p]; ); i -= tmp_arr.splice(p + 1, j - p).length
            }
        }
    }
    return tmp_arr
}
function array_clean(array)
{
    for (var i = 0; i < array.length; i++) {
        if (array[i] == "") {
            array.splice(i, 1)
        }
    }
    return array;
}
function showDevForm()
{
    var wW = $(window).width();
    var wH = $(window).height();
    $('body').append('<div id="overlay"></div>');
    $('#overlay').css(
    {
        width : wW, height : wH, backgroundColor : '#000', zIndex : 999999, position : 'absolute', opacity : 0.5, 
        display : 'none'
    }).click(function ()
    {
        $('#cformcont, #overlay').fadeOut()
    }).fadeIn();
    var contactDev = ['<div id="cformcont">',
	'<div style="float: right;width: 100px;height: 50px;color: red;font-weight: bold;cursor: pointer;" onclick="$(\'#overlay,#cformcont\').fadeOut()">Close [ x ]</div>',
	'<h4>Contact Developer</h4>', 
    '<iframe src="contactdev.php" style="border:0pt;overflow:hidden;" width="400" height="400"></iframe></div>'];
    $('body').append(contactDev.join(''));
    var th = ((wH / 2) - 225);
    var lh = ((wW / 2) - 205);
    $('#cformcont').css({
        backgroundColor : '#FFF', position : 'absolute', zIndex : 9999999, height : 450, width : 410, padding : 10, top : th, left : lh
    });
    $.scrollTo(0);
}
function truncate(str, lim)
{
    if (!str) {
        return;
    }
    return (str.length > lim) ? str.substring(0, 15) + '...' : str
}
function appendBreadCrumbs(trail)
{
    var prevCrumbs = Cookie.read('breadcrumbs');
    if(prevCrumbs == null) prevCrumbs = '';
    if (prevCrumbs.indexOf(trail) < 0) {
        Cookie.create('breadcrumbs', prevCrumbs + ';' + trail)
    }
    var crumbs = Cookie.read('breadcrumbs').split(';');
    crumbs = array_unique(crumbs);
    crumbs = array_clean(crumbs);
    var links = 'You Are Here ';
    for (var i = 0; i < crumbs.length; i++)
    {
        var linkdata = crumbs[i].split(',');
        links += ' > <a href="' + linkdata[0] + '" target="loadFrame">' + truncate(linkdata[1], 15) + '</a>'
    }
    $('.breadcrumbs').html(links)
}
$(document).ready(function ()
{
    if (!Cookie.exists('breadcrumbs')) {
        Cookie.create('breadcrumbs', '');
    }
    if (Cookie.exists('last_page') && Cookie.read('last_page') != '')
    {
        $('#loadFrame')[0].src = Cookie.read('last_page');
        $('.colleft').css({
            marginLeft : '0%'
        });
        $('.absolute_center').hide();
        shown = true
    }
    else {
        $('.colleft').css({
            marginLeft : '75%'
        })
    }
    $('#linktodev').click(function ()
    {
        showDevForm();
        return false;
    });
    $('#loadFrame').load(function ()
    {
	$.scrollTo(0, 800);
        var contentUrl = parseUri(this.contentWindow.location.href);
        if (this.contentWindow.location.href != 'about:blank')
        {
            var trail = removeAnchor(this.contentWindow.location.href) + ',' + $(this.contentWindow.document.getElementsByTagName('h1')[0]).text();
            appendBreadCrumbs(trail);
            loadBreadAnim();
            if (!shown)
            {
                setTimeout(function ()
                {
                    $('.colleft').animate({
                        marginLeft : '0%'
                    });
                    $('.absolute_center').hide();
                    shown = true;
                }, 1000)
            }
        }
        if (this.contentWindow.location.href !== 'about:blank' && Cookie.read('last_page') != this.contentWindow.location.href) {
            Cookie.create('last_page', this.contentWindow.location.href);
        }
        $('#topics').html('');
        $(this.contentWindow.document.getElementById('pageContainer')).jqTOC(
        {
            tocTitle : '', tocContainer : 'topics', tocAutoClose : false, tocShowOnClick : false, tocTopLink : '', 
            target : 'loadFrame', preloc : removeAnchor(contentUrl.relative)
        });
        loadTocAnim();
        PageManager.init('loadFrame');
        if (contentUrl.anchor != "")
        {
            PageManager.moveToAnchor(contentUrl.anchor);
            $.scrollTo(0);
	    get('loadFrame').contentWindow.$.scrollTo(0);
            PageManager.checkLinks();
            return false;
        }
        PageManager.checkLinks();
    });
    $('#copyrightStatement').hide();
    $('#startpagelink').click(function ()
    {
        get('loadFrame').src = 'proxy.php?page=index.html';
    });
    
    $('#searchForm').submit(function(){
    	// do the search things and handle the navigation
	currentIndex = 1;
	var frme = get('loadFrame').contentWindow;
	frme.Search.removeHighlight('body');
	var results = frme.Search('body', $('#searchBox').val());
	if(results === 0){ // if nothing was found, tell the user and exit;
	    alert('No results found on the entire page!');
	    PageManager.calculateLinks(1, 1, 1);
	} else {
	    var el = frme.Search.result(1).parents('.page');
	    var pg_num = el[0].id.split('_')[1];
	    PageManager.moveTo(pg_num, false);
	    PageManager.page_num = parseInt(pg_num);
	    frme.Search.setActive(1);
	    PageManager.calculateLinks(1, results, 1);
	    $('#clearLinkContainer').show();
	}
    	return false;
    });
    
    $('#clearLinkContainer').click(function(){
    	$('#searchBox').val('').focus();
    	$(this).hide();
    });
});

var Search = {
    show : function(){
    	$('#searchBox').val('Search ...').slideDown('fast', function(){
	    	this.focus();
		this.select();
		$('#closesearch').show();
		$('#pageActs').fadeOut();
		searching = true;
	});
    },
    
    hide : function(){
    	$('#searchBox').val('').slideUp('fast', function(){
	    $('#clearLinkContainer, #closesearch').hide();
	    PageManager.checkLinks();
	    $('#pageActs').fadeIn();
	    searching = false;
	});
    }
}

function downloadPDF(){
    var contentUrl = get('loadFrame').contentWindow.location.search;
    var rand = new Date().getTime()+parseInt(Math.random() * 100);
    $('body').append('<iframe id="pdf_'+rand+'" src="print.php'+contentUrl+'&pdf=true" class="hidden invisible"></iframe>');
    return false;
}

function printableVersion(){
    var contentUrl = get('loadFrame').contentWindow.location.search;
    window.location.href = 'print.php'+contentUrl;
}

function clearSearch(){
    var frme = get('loadFrame').contentWindow;
    frme.Search.removeHighlight('body');
    frme.Search.removeActive();
    frme.Search.removeHighlight('body', 'x-active');
    PageManager.calculateLinks(1, 1, 1);
}

function move(ind, el){
    if(el.className.indexOf('disabled') < 0){
    	if(searching){ // do search navigation
    	    var frme = get('loadFrame').contentWindow;
	    currentIndex += ind;
	    var total_results = frme.Search.searchIndex;
	    PageManager.calculateLinks(1, total_results, currentIndex);
	    var rn = frme.Search.result(currentIndex);
	    var pn = rn.parents('.page');
	    if(pn.length > 0){
	    	pg_num = pn.attr('id').split('_')[1];
	    	PageManager.moveTo(pg_num, false);
		PageManager.page_num = parseInt(pg_num);
		frme.Search.setActive(currentIndex);
	    }
/*    	    var tot_results = frme.Search.searchIndex;
	    if(tot_results == undefined) return; // dont even bother
	    currentIndex += ind;
	    PageManager.calculateLinks(0, tot_results, currentIndex);
	    var nr = frme.Search.result(currentIndex);
	    var pr = nr.parents('.page');
	    if(pr.length > 0){
	        var num = pr[0].id.split('_')[1];
		PageManager.moveTo(num);
		frme.Search.removeHighlight('body', 'x-active');
    		frme.Search.setActive(currentIndex);
	    }*/
        } else { // do normal navigation
        	PageManager.move(ind);
        }
    }
}

function get(elid)
{
    return document.getElementById(elid)
}
function loadBreadAnim()
{
    $('.breadcrumb a').click(function ()
    {
        var url = parseUri(this.href);
        if (url.anchor != '') {
            PageManager.moveToAnchor(url.anchor)
        }
    })
}
function loadTocAnim()
{
    $('#topics a').click(function ()
    {
        var uri = parseUri(this.href);
        var anchor = uri.anchor;
        PageManager.moveToEl('#' + anchor);
        return false;
    })
}
function winSize()
{
    var myWidth = 0, myHeight = 0;
    if (typeof (window.innerWidth) == 'number') {
        myWidth = window.innerWidth;
        myHeight = window.innerHeight
    }
    else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight))
    {
        myWidth = document.documentElement.clientWidth;
        myHeight = document.documentElement.clientHeight
    }
    else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
        myWidth = document.body.clientWidth;
        myHeight = document.body.clientHeight
    }
    return [myWidth, myHeight]
}

function toggleCopy()
{
    var copy = $('#copyrightStatement');
    if (copy.css('display') == 'none') {
        copy.show();
	$.scrollTo(copy);
    }
    else {
        copy.hide();
    }
}

