// JavaScript Document
onload="initExpMenu( )"
/**********************************
          Global Variables
***********************************/
// precache art files and sizes for widget styles and spacers
// (all images must have same height/width)
var collapsedWidget = new Image(20, 16);
collapsedWidget.src="./images/oplus.gif";
var collapsedWidgetStart = new Image(20, 16);
collapsedWidgetStart.src="./images/oplusStart.gif";
var collapsedWidgetEnd = new Image(20, 16);
collapsedWidgetEnd.src="./images/oplusEnd.gif";
var expandedWidget = new Image(20, 16);
expandedWidget.src="./images/ominus.gif";
var expandedWidgetStart = new Image(20, 16);
expandedWidgetStart.src="./images/ominusStart.gif";
var expandedWidgetEnd = new Image(20, 16);
expandedWidgetEnd.src="./images/ominusEnd.gif";
var nodeWidget = new Image(20, 16);
nodeWidget.src="./images/onode.gif";
var nodeWidgetEnd = new Image(20, 16);
nodeWidgetEnd.src="./images/onodeEnd.gif";
var emptySpace = new Image(20, 16);
emptySpace.src="./images/oempty.gif";
var chainSpace = new Image(20, 16);
chainSpace.src="./images/ochain.gif";
  
// miscellaneous globals
var widgetWidth = "20";
var widgetHeight = "16";
var currState = "";
//var displayTarget = "contentFrame";
var displayTarget = "mainContent";
  
/**********************************
           Data Collections
***********************************/
var expansionState = "";
// constructor for outline item objects
function outlineItem(nr, level, index, text, uri) {
	this.nr = nr;
	this.level = level;
	this.index = index;
    this.text = text;
    this.uri = uri;
}

var olDataDE = {
	childNodes:[
		{item:new outlineItem("1", "0", "00", "Bildungssystem", "http://xpertum.germakon.de/100.html")},
        {item:new outlineItem("2", "0", "00", "Leistungen", "http://xpertum.germakon.de/200.html")},
		{item:new outlineItem("3", "0", "00", "Unsere Vorteile", "http://xpertum.germakon.de/300.html")},
		{item:new outlineItem("4", "0", "00", "Team", "http://xpertum.germakon.de/400.html")},
		{item:new outlineItem("5", "0", "00", "Veranstaltungen", "http://xpertum.germakon.de/500.html")},
		{item:new outlineItem("6", "0", "00", "Kooperationen", "http://xpertum.germakon.de/600.html")},
		{item:new outlineItem("7", "0", "00", "Download", "http://xpertum.germakon.de/700.html")},
		{item:new outlineItem("8", "0", "00", "Anfragen", "http://xpertum.germakon.de/800.html")},
	//	{item:new outlineItem("sc\/", "0", "contact\.php", "Anfragen", "http://xpertum.germakon.de/800.html")},
		{item:new outlineItem("9", "0", "00", "Impressum", "http://xpertum.germakon.de/900.html")}
	]
};

var olDataEN = {
	childNodes:[
		{item:new outlineItem("1", "0", "00", "Education System", "http://xpertum.germakon.de/en/100.html")},
        {item:new outlineItem("2", "0", "00", "Services", "http://xpertum.germakon.de/en/200.html")},
		{item:new outlineItem("3", "0", "00", "Key Benefits", "http://xpertum.germakon.de/en/300.html")},
		{item:new outlineItem("4", "0", "00", "Team", "http://xpertum.germakon.de/en/400.html")},
		{item:new outlineItem("5", "0", "00", "Events", "http://xpertum.germakon.de/en/500.html")},
		{item:new outlineItem("6", "0", "00", "Cooperatives", "http://xpertum.germakon.de/en/600.html")},
		{item:new outlineItem("7", "0", "00", "Download", "http://xpertum.germakon.de/en/700.html")},
		{item:new outlineItem("8", "0", "00", "Inquiries", "http://xpertum.germakon.de/en/800.html")},
		{item:new outlineItem("9", "0", "00", "Imprint", "http://xpertum.germakon.de/en/900.html")}
	]
};

var lang = "de";

/**********************************
  Toggle Display and Icons
***********************************/
// invert item state (expanded to/from collapsed)
function swapState(currState, currVal, n) {
    var newState = currState.substring(0,n);
    newState += currVal ^ 1 // Bitwise XOR item n;
    newState += currState.substring(n+1,currState.length);
    return newState;
}
  
// retrieve matching version of 'minus' images
function getExpandedWidgetState(imgURL) {
    if (imgURL.indexOf("Start") != -1) {
        return expandedWidgetStart.src;
    }
    if (imgURL.indexOf("End") != -1) {
        return expandedWidgetEnd.src;
    }
    return expandedWidget.src;
}
  
// retrieve matching version of 'plus' images
function getCollapsedWidgetState(imgURL) {
    if (imgURL.indexOf("Start") != -1) {
        return collapsedWidgetStart.src;
    }
    if (imgURL.indexOf("End") != -1) {
        return collapsedWidgetEnd.src;
    }
    return collapsedWidget.src;
}
  
// toggle an outline mother entry, storing new state value;
// invoked by onclick event handlers of widget image elements
function toggle(img, blockNum) {
    var newString = "";
    var expanded, n;
    // modify state string based on parameters from IMG
    expanded = currState.charAt(blockNum);
    currState = swapState(currState, expanded, blockNum);
    // dynamically change display style
    if (expanded == "0") {
        document.getElementById("OLBlock" + blockNum).style.display = "block";
        img.src = getExpandedWidgetState(img.src);
		document.getElementById("sidebar2").style.height = "920";
		//window.status = "Click to expand";
    } else {
        document.getElementById("OLBlock" + blockNum).style.display = "none";
        img.src = getCollapsedWidgetState(img.src);
		document.getElementById("sidebar1").style.height = "600";
    }
	//updateMainContent(100);
}
  
function expandAll( ) {
    var newState = "";
    while (newState.length < currState.length) {
        newState += "1";
    }
    currState = newState;
    initExpand( );
}
  
function collapseAll( ) {
    var newState = "";
    while (newState.length < currState.length) {
        newState += "0";
    }
    currState = newState;
    initExpand( );
}
  
/*********************************
   Outline HTML Generation
**********************************/
// apply default expansion state from outline's header
// info to the expanded state for one element to help 
// initialize currState variable
function calcBlockState(n) {
    // get default expansionState data
    var expandedData = (expansionState.length > 0) ? expansionState.split(",") : null;
    if (expandedData) {
        for (var j = 0; j < expandedData.length; j++) {
            if (n == expandedData[j] - 1) {
                return "1";
            }
        }
    }
    return "0";
}
  
// counters for reflexive calls to drawOutline( )
var currID = 0;
var blockID = 0;
var menuLevel = 0;

// generate HTML for outline
function drawOutline(ol, prefix) {
    var output = "";
    var nestCount, link, nestPrefix, lastInnerNode;
	
	output += "\n<ul>"
    for (var i = 0; i < ol.childNodes.length ; i++) {
        nestCount =(ol.childNodes[i].childNodes) ? ol.childNodes[i].childNodes.length : 0;
        output += "<div class='OLRow' id='line" + currID++ + "'>\n";
		
		var menuItem = ol.childNodes[i].item.text;
		var menuTarget = ol.childNodes[i].item.nr + ol.childNodes[i].item.index;
		
        if (nestCount > 0) {
			menuLevel++;
            link =  (ol.childNodes[i].item.uri) ? ol.childNodes[i].item.uri : "";
            if (link) {
				output += "<a href='javascript:updateMainContent(\"" + ol.childNodes[i].item.nr + "\", \"" + ol.childNodes[i].item.level + "\", \"" + ol.childNodes[i].item.index + "\")' class='itemTitle' title='" + menuItem + "' onClick = " + "'toggle(this," + blockID + "); return false'>";
            } else {
                output += "<a class='itemTitle' title='" + link + "'>";
            }
			output += "\n<span id='menuCell" + menuTarget + "' style='vertical-align:middle'>\n<li id='list" + menuTarget + "' style='line-height:32px'>" +
                ol.childNodes[i].item.text + "</li>\n</span>\n</a>";		
            currState += calcBlockState(currID-1);
            output += "\n<span class='OLBlock' blocknum='" + blockID + "' id='OLBlock" + 
                blockID++ + "'>";
            nestPrefix = prefix;
            output += drawOutline(ol.childNodes[i], nestPrefix);
            output += "\n</span>\n</div>\n";
        } else {
            link =  (ol.childNodes[i].item.uri) ? ol.childNodes[i].item.uri : "";
						
            if (link) {
				output += "<a href='" + link + "' class='itemTitle' title='" + 
				menuItem + "' onClick = 'updateMainContent(\"" + ol.childNodes[i].item.nr + "\", \"" + ol.childNodes[i].item.level + "\", \"" + ol.childNodes[i].item.index + "\"); return false'> ";
            } else {
                output += "<a class='itemTitle' title='" + link + "'>";
            }
			
			if (ol.childNodes[i].item.text.length > 31) {
			output += "\n<span id='menuCell" + menuTarget + "' onmouseover='this.style.color=\"red\"' onmouseout='this.style.color=\"#063\"'> \n<li id='list" + menuTarget + "' style='line-height:14px; height:32px; padding-top:4px'>" +
                ol.childNodes[i].item.text + "</li>\n</span>\n</a>";
			} else {
			output += "\n<span id='menuCell" + menuTarget + "' onmouseover='this.style.color=\"red\"' onmouseout='this.style.color=\"#063\"'> \n<li id='list" + menuTarget + "' style='line-height:28px; height:28px'>" +
                ol.childNodes[i].item.text + "</li>\n</span>\n</a>";
			}
            output += "\n</div>\n";
        }
    }
	output += "</ul>"
	updateNavbar("0", "0", "0");
    return output;
}

/*********************************
     Outline Initializations
**********************************/
// expand items set in expansionState var, if any
function initExpand( ) {
    for (var i = 0; i < currState.length; i++) {
        if (currState.charAt(i) == 1) {
            document.getElementById("OLBlock" + i).style.display = "block";
        } else {
            document.getElementById("OLBlock" + i).style.display = "none";
        }
    }
}
  
// initialize first time -- invoked onload
function initExpMenu(xFile) {
	switch (lang) {
		case "en": {
			var olHTML = "\n<span id='renderedOL'>\n" + drawOutline(olDataEN) + "\n</span>";
			break;
		}
		case "id": {
			var olHTML = "\n<span id='renderedOL'>\n" + drawOutline(olDataID) + "\n</span>";
			break;
		}
		default: {
			var olHTML = "\n<span id='renderedOL'>\n" + drawOutline(olDataDE) + "\n</span>";
		}
	}
    document.getElementById("navLayer").innerHTML = olHTML;
    initExpand();
}

function updateNavbar(nr, level, index) {
	/*
		if (lang != "de") {
			var navHTML = "<div id='navLink'><a href='" + lang + "/index.html' onmouseover='this.style.color=\"red\"' onmouseout='this.style.color=\"black\"'>Home</a>"
		} else {
			var navHTML = "<div id='navLink'><a href='./index.html' onmouseover='this.style.color=\"red\"' onmouseout='this.style.color=\"black\"'>Home</a>"
		}
		*/
		
		navHTML = "<div id='navLink'><a href='./' onmouseover='this.style.color=\"red\"' onmouseout='this.style.color=\"#063\"'>Home</a>";
		
	if (nr >= 1) {
	
		switch (lang) {
			case "en": {
				navHTML += " <img src='../images/pfeil.gif' style='line-height:20px'> " + olDataEN.childNodes[nr -1].item.text;
				break;
			}
			case "id": {
				navHTML += " <img src='../images/pfeil.gif' style='line-height:20px'> " + olDataID.childNodes[nr -1].item.text;
				break;
			}
			default: {
				navHTML += " <img src='./images/pfeil.gif' style='line-height:20px'> " + olDataDE.childNodes[nr -1].item.text;		
			}
		}
		navHTML += "</div>"
    	document.getElementById("navbarLeft").innerHTML = navHTML;
	}
}

function chooseLang() {
	varHTML = "<ul id='langList'>";
	switch (lang) {
		case "en": {
			varHTML += "<li><a href='./de/' onClick='rewritePage(\"de\"); return false'>Deutsch</a></li>";
			break;
		}
		case "id": {
			varHTML += "<li><a href='./en/' onClick='rewritePage(\"en\"); return false'>Inggris</a></li>";
			varHTML += "<li><a href='./de/' onClick='rewritePage(\"de\"); return false'>Jerman</a></li>";
			break;
		}
		default: {
			varHTML += "<li><a href='./en/' onClick='rewritePage(\"en\"); return false'>English</a></li>";
		}
	}
    varHTML += "</ul>";
	document.getElementById("navbarRight").innerHTML = varHTML;	
}

function updateFooter(lang) {
	switch (lang) {
		case "en": {
			varHTML = "<p>Copyright &copy;2009 CV. Germakon Indonesia. All Rights reserved.</p>";
			break;
		}
		case "id": {
			varHTML = "<p>Copyright &copy;2009 CV. Germakon Indonesia. All Rights reserved.</p>";
			break;
		}
		default:
			varHTML = "<p>Copyright &copy;2009 CV. Germakon Indonesia. Alle Rechte vorbehalten.</p>";
	}
	document.getElementById("footer").innerHTML = varHTML;
}

var myTarget = "";
var menuTarget = "";
function updateMainContent(nr, level, index) {
	menuTarget = nr + index;
	if (myTarget != "") {
		document.getElementById("list" + myTarget).style.backgroundColor = "#FEFEFE";
		document.getElementById("list" + myTarget).style.color = "#063";
	}
	document.getElementById("list" + menuTarget).style.backgroundColor = "#063";
	document.getElementById("list" + menuTarget).style.color = "#FEFEFE";
	if (lang != "de") {
		if (menuTarget == "800") {
			document.getElementById("mainFrame").src = "./sc/contact.php?lang=" + lang;
		} else {
		document.getElementById("mainFrame").src = "./" + lang + "/" + menuTarget + ".html";
		}
	} else {
		if (menuTarget == "800") {
			document.getElementById("mainFrame").src = "./sc/contact.php";
		} else {
		document.getElementById("mainFrame").src = "./" + menuTarget + ".html";
		}
	}
	myTarget = menuTarget;
	updateNavbar(nr, level, index);
}

function rewritePage(newLang) {
	lang = newLang;
	//updateNavbar("0", "0", "00");
	document.getElementById("navbarLeft").innerHTML = "<div id='navLink'>Home</div>";
	
	if (lang != "de") {
		document.getElementById("mainFrame").src = "./" + lang + "/000.html";
	} else {
		document.getElementById("mainFrame").src = "./000.html";
	}
	initExpMenu();
	updateFooter(lang);
	chooseLang();
}

// Initialize upon load to let all browsers establish content objects
function initDHTMLAPI( ) {
    if (document.images) {
        isCSS = (document.body && document.body.style) ? true : false;
        isW3C = (isCSS && document.getElementById) ? true : false;
        isIE4 = (isCSS && document.all) ? true : false;
        isNN4 = (document.layers) ? true : false;
        isIE6CSS = (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) ? 
            true : false;
    }
}

// Set event handler to initialize API
window.onload = initDHTMLAPI;

// Seek nested NN4 layer from string name
function seekLayer(doc, name) {
    var theObj;
    for (var i = 0; i < doc.layers.length; i++) {
        if (doc.layers[i].name == name) {
            theObj = doc.layers[i];
            break;
        }
        // dive into nested layers if necessary
        if (doc.layers[i].document.layers.length > 0) {
            theObj = seekLayer(document.layers[i].document, name);
        }
    }
    return theObj;
}

// Convert object name string or object reference
// into a valid element object reference
function getRawObject(obj) {
    var theObj;
    if (typeof obj == "string") {
        if (isW3C) {
            theObj = document.getElementById(obj);
        } else if (isIE4) {
            theObj = document.all(obj);
        } else if (isNN4) {
            theObj = seekLayer(document, obj);
        }
    } else {
        // pass through object reference
        theObj = obj;
    }
    return theObj;
}

// Convert object name string or object reference
// into a valid style (or NN4 layer) reference
function getObject(obj) {
    var theObj = getRawObject(obj);
    if (theObj && isCSS) {
        theObj = theObj.style;
    }
    return theObj;
}
   
// Position an object at a specific pixel coordinate
function shiftTo(obj, x, y) {
    var theObj = getObject(obj);
    if (theObj) {
        if (isCSS) {
            // equalize incorrect numeric value type
            var units = (typeof theObj.left == "string") ? "px" : 0;
            theObj.left = x + units;
            theObj.top = y + units;
        } else if (isNN4) {
            theObj.moveTo(x,y)
        }
    }
}

// Retrieve the x coordinate of a positionable object
function getObjectLeft(obj)  {
    var elem = getRawObject(obj);
    var result = 0;
    if (document.defaultView) {
        var style = document.defaultView;
        var cssDecl = style.getComputedStyle(elem, "");
        result = cssDecl.getPropertyValue("left");
    } else if (elem.currentStyle) {
        result = elem.currentStyle.left;
    } else if (elem.style) {
        result = elem.style.left;
    } else if (isNN4) {
        result = elem.left;
    }
    return parseInt(result);
}
   
// Retrieve the y coordinate of a positionable object
function getObjectTop(obj)  {
    var elem = getRawObject(obj);
    var result = 0;
    if (document.defaultView) {
        var style = document.defaultView;
        var cssDecl = style.getComputedStyle(elem, "");
        result = cssDecl.getPropertyValue("top");
    } else if (elem.currentStyle) {
        result = elem.currentStyle.top;
    } else if (elem.style) {
        result = elem.style.top;
    } else if (isNN4) {
        result = elem.top;
    }
    return parseInt(result);
}

// Move an object by x and/or y pixels
function shiftBy(obj, deltaX, deltaY) {
    var theObj = getObject(obj);
    if (theObj) {
        if (isCSS) {
            // equalize incorrect numeric value type
            var units = (typeof theObj.left == "string") ? "px" : 0;
            theObj.left = getObjectLeft(obj) + deltaX + units;
            theObj.top = getObjectTop(obj) + deltaY + units;
        } else if (isNN4) {
            theObj.moveBy(deltaX, deltaY);
        }
    }
}

// Set the visibility of an object to visible
function show(obj) {
    var theObj = getObject(obj);
    if (theObj) {
        theObj.visibility = "visible";
    }
}
   
// Set the visibility of an object to hidden
function hide(obj) {
    var theObj = getObject(obj);
    if (theObj) {
        theObj.visibility = "hidden";
    }
}

function moveOnWindow(elemID) {
    // 'obj' is the positionable object
    var obj = getRawObject(elemID);
    // window scroll factors
    var scrollX = 0, scrollY = 0;
    if (document.body && typeof document.body.scrollTop != "undefined") {
        scrollX += document.body.scrollLeft;
        scrollY += document.body.scrollTop;
        if (document.body.parentNode && 
            typeof document.body.parentNode.scrollTop != "undefined") {
            scrollX += document.body.parentNode.scrollLeft;
            scrollY += document.body.parentNode.scrollTop;
        }
    } else if (typeof window.pageXOffset != "undefined") {
        scrollX += window.pageXOffset;
        scrollY += window.pageYOffset;
    }
    var x = Math.round((getInsideWindowWidth( )/2) - 
        (getObjectWidth(obj)/2)) + scrollX;
    var y = Math.round((getInsideWindowHeight( )/2) - 
        (getObjectHeight(obj)/2)) + scrollY;
    shiftTo(obj, x, y);
    show(obj);
}

// Return the available content height space in browser window
function getInsideWindowHeight( ) {
    if (window.innerHeight) {
        return window.innerHeight;
    } else if (isIE6CSS) {
        // measure the html element's clientHeight
        return document.body.parentElement.clientHeight;
    } else if (document.body && document.body.clientHeight) {
        return document.body.clientHeight;
    }
    return 0;
}

