// JavaScript Document

// Window load callback
$(document).ready(loadIndex);

// Globals
var activeMenuIndex = -1;
var root = ".";
var pageCallBack = NULL;

// XML object structure
function XMLObject(XMLSrc, callback){
    this.XMLDoc = null;
    this.XMLHTTP = null;
    this.callback = callback;
    this.XMLSrc = XMLSrc;
    this.CreateXMLFileParser = CreateXMLFileParser;
    this.onStateChange = onStateChange;
}

// load indexfile - main navigation menu
function loadIndex(){
    try {
        selectActiveMenu();
        setParams();
        var menu = new XMLObject('menu.xml', drawMenu);
        menu.CreateXMLFileParser();
        addNews();
        
    } 
    catch (err) {
        alert(err.message);
    }
}

// XML File parser
function CreateXMLFileParser(){
    var Error = "CreateXMLFileParser:\n";
    try {
        this.XMLDoc = document.implementation.createDocument("", "", null);
        this.XMLDoc.addEventListener("load", this.callback, false);
        this.XMLDoc.load(this.XMLSrc);
    } 
    catch (Err) {
        Error += Err.message + "\n";
        try {
            this.XMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");
            if (!this.XMLHTTP) {
                this.XMLHTTP = new window.XMLHttpRequest();
            }
            this.XMLHTTP.open("GET", this.XMLSrc, false);
            this.XMLHTTP.onreadystatechange = function(obj){
                return function(){
                    XMLGet(obj);
                }
            }(this);
            
            this.XMLHTTP.send();
        } 
        catch (Err) {
            Error += Err.message;
            try {
                this.XMLHTTP = new window.XMLHttpRequest();
                this.XMLHTTP.open("GET", this.XMLSrc, false);
                this.XMLHTTP.onreadystatechange = function(obj){
                    return function(){
                        XMLGet(obj);
                    }
                }(this);
                
                this.XMLHTTP.send();
            } 
            catch (Err) {
                alert(Error + Err.message);
            }
        }
    }
    return this.XMLDoc;
}

function XMLGet(parent){
    try {
        if (parent.XMLHTTP.readyState == 4) {
            if (parent.XMLHTTP.status == 200) {
                parent.XMLDoc = parent.XMLHTTP.responseXML.documentElement;
                parent.callback();
            }
            else 
                alert("Unable to Parse XML file: " + parent.XMLHTTP.status);
        }
    } 
    catch (Err) {
        alert(Err.message);
    }
}

function getXMLDocument(object){
    try {
        // We may have callbacks from different routines
        // find the valid XMLDocument object
        var XMLDoc = null;
        if (!object.XMLDoc) { // its not a XMLObject class
            if (object.getElementsByTagName) // should be XMLDocument object then
                XMLDoc = object;
            else {
                alert('XML document not found :' + object);
                return;
            }
        }
        else 
            XMLDoc = object.XMLDoc;
        return XMLDoc;
    } 
    catch (Err) {
        alert(Err.message);
    }
}

function onStateChange(parent){
    try {
        if (parent.XMLDoc.readyState == 4) 
            parent.callback();
    } 
    catch (Err) {
        alert(Err.message);
    }
}

function drawMenu(){
    try {
        var XMLDoc = getXMLDocument(this);
        var menuItems = XMLDoc.getElementsByTagName("name");
        var menuUrls = XMLDoc.getElementsByTagName("url");
        var menuDiv = document.getElementById("nav");
        addMenuItems(menuDiv, menuItems, menuUrls);
    } 
    catch (Err) {
        alert(Err.message);
    }
}

function addNews(){
    try {
        var news = null;
        if (pageCallBack) {
            news = new XMLObject(root + '/news.xml', pageCallBack);
        }
        else 
            news = new XMLObject(root + '/news.xml', addNewsItems);
        news.CreateXMLFileParser();
    } 
    catch (Err) {
        alert('addNews:' + Err.message);
    }
}

function addNewsItems(){
    try {
        var NewsDiv = $("#news-box");
        if (NewsDiv) {
            var XMLDoc = getXMLDocument(this);
            var items = XMLDoc.getElementsByTagName("item");
            
            for (var i = 0; i < items.length && i < 4; i++) {
                var date = $('<h3></h3>');
                var title = $('<p></p>');
                var fullText = $('<div></div>');
                var link = $('<a></a>');
                
                title.html(items[i].getAttribute('title'));
                fullText.attr('id', "news" + i);
                fullText.html(items[i].lastChild.nodeValue);
                fullText.addClass("fullText");
                
				date.html("<" + items[i].getAttribute('date') + ">");
                
                link.html('...');
                link.attr('href', "#");
                link.click(function(id){
                    return function(){
                        showFullText(id);
                    }
                }(i));
                
                title.append(link);
                title.append(fullText);
                NewsDiv.append(date);
                NewsDiv.append(title);
            }
            $('div.fullText').hide();
            
            var morePara = $('<p></p>');
            morePara.html("<a href='news.html'>&lt;more&gt;</a>");
            morePara.addClass('more');
            NewsDiv.append(morePara);
        }
    } 
    catch (Err) {
        alert('addNewItems:'+Err.message);
    }
}

function showFullText(id){
    try {
		if ($('#news' + id).is(':hidden')) {
			$('#news' + id + ':hidden').slideDown('slow');
		}
		else {
			$('#news' + id + ':visible').slideUp('slow');
		}
	} 
	catch (err) {
		alert(err.message);
	}
}

function parseNews(){
    try {
        var XMLDoc = getXMLDocument(this);
        var bodyLeft = document.getElementById('body-left');
        var items = XMLDoc.getElementsByTagName('item');
        for (var i = 0; i < items.length; i++) {
            var title = document.createElement('h2');
            var body = document.createElement('p');
            
            title.innerHTML = items[i].getAttribute('title') + ' ( ' +
            items[i].getAttribute('date') +
            ' ) ';
            
            body.innerHTML = items[i].lastChild.nodeValue + '<br/><br/>';
            
            bodyLeft.appendChild(title);
            bodyLeft.appendChild(body);
        }
    } 
    catch (err) {
        alert('parseNews:' + err.message);
    }
}

function addMenuItems(menu, items, itemUrl){
    try {
        var list = document.createElement("ul");
        menu.appendChild(list);
        for (var i = 0; i < items.length; i++) {
            // first element border
            if (i == 0) {
                var listItem = document.createElement("li");
                var img = document.createElement("img");
                img.setAttribute('src', root + "/images/border-left.jpg");
                listItem.appendChild(img);
                list.appendChild(listItem);
            }
            var listItem = document.createElement("li");
            var link = document.createElement("a");
            link.setAttribute('href', itemUrl[i].lastChild.nodeValue);
            
            link.innerHTML = items[i].lastChild.nodeValue;
            
            // active menu item
            if (i == activeMenuIndex) 
                link.setAttribute("id", "active");
            
            listItem.appendChild(link);
            list.appendChild(listItem);
            // add separators
            {
                var listItem = document.createElement("li");
                var img = document.createElement("img");
                if (i != items.length - 1) 
                    img.setAttribute('src', root + "/images/separator.jpg");
                else 
                    img.setAttribute('src', root + "/images/border-right.jpg");
                listItem.appendChild(img);
                list.appendChild(listItem);
            }
        }
    } 
    catch (Err) {
        alert(Err.message);
    }
    
}

