/**
 * This file includes JavaScript functions for the navigation elements.
 */
var /*HashMap*/ ms_corenav_elementsLoaded = new Object();
var /*HashMap*/ ms_corenav_elementsSelected = new Object();
var /*AJAXConnector*/ ajaxConnector = new AJAXConnector( );

function /*void*/ ms_corenav_handleRequest(status, data, param, type, statusmsg) {
	if(status == AJAXConnector.SUCCID_LOAD && type == AJAXConnector.RESPONSE_XML) {
		ms_corenav_printFlyout(param, data);
	}
}

function /*void*/ ms_corenav_loadFlyoutData(/*String*/ elementId, /*String*/ handle) {
	// Return, if no handle was given
	if (!handle || handle == "") {
		return;
	}
	
	// Process Ajax, if element has not been loaded yet
	if (ms_corenav_elementsLoaded[elementId] == undefined) {
		// Send Ajax request
		ajaxConnector.registerDataHandler(ms_corenav_handleRequest);
		ajaxConnector.setMaxRequestTime(10000);
		ajaxConnector.sendRequest(handle + ".ajax.xml", "", AJAXConnector.REQUEST_GET, elementId);
	}
}

function /*void*/ ms_corenav_printFlyout(/*String*/ elementId, /*String*/ data) {
	// Read data
	var /*Flyout2Bean*/ bean = new Flyout2Bean();
	bean.readData(data);
	
	// Print to Layer
	ms_corenav_elementsLoaded[elementId] = bean.links.length;
	if (getLayer(elementId) != undefined) {
		// Start building Content
		var content = '<iframe></iframe>'
			+ '<h2>';

		if (bean.headlineSrc != undefined) {
			content += '<img src="' + bean.headlineSrc + '"';
			if (bean.headlineAlt != undefined) {
				content += ' alt="' + bean.headlineAlt + '"';
			}
			content += '/>';
		}

		content += '</h2>'
			+ '<div class="ms-navi-main-fly-v1-2-left">'
			+ '<dl class="ms-navi ms-navi-main-fly-v1-navi-d">'
			+ '<dt>';
		
		if (bean.subHeadline != undefined) {
			content += bean.subHeadline;
		}
		
		content += '</dt>'
			+ '<dd>'
			+ '<ul class="ms-navi">';
	
		// Temp variable for flyout divs
		var /*String*/ tempFlyoutDivs = "";				
		
		// Process single Items
		for (var i = 0; i < bean.links.length; i++) {
			// Append Content
			content += '<li>';
			
			if (bean.links[i][Flyout2Bean.REFERENCE_TAG + "_href"] != undefined) {
				content += '<a href="'
					+ bean.links[i][Flyout2Bean.REFERENCE_TAG + "_href"]
					+ '"';
				if (bean.links[i][Flyout2Bean.REFERENCE_TAG + "_onclick"] != undefined) {
					content += ' onclick="'
						+ bean.links[i][Flyout2Bean.REFERENCE_TAG + "_onclick"]
						+ '"';
				}

				content += ' onmouseover="ms_corenav_changeFlyout(this, \'' + elementId + '\', ' + i + ')"'
					+ ' onmouseout="ms_corenav_resetFlyout(this, \'' + elementId + '\', ' + i + ')">' 
					+ bean.links[i][Flyout2Bean.REFERENCE_TAG + "_text"]
					+ '</a>';
				
			}
			
			content += '</li>';
			        
			// Build Flyout Divs
			var /*String*/ style = (i==0) ? "style=\"display:block\"" : "style=\"display:none\"";
			tempFlyoutDivs += '<div id="' + elementId + '-r' + i + '" class="ms-navi-main-fly-v1-2-right" ' + style + '>'
				+ '<h3>';
				
			if (bean.links[i][Flyout2Bean.HEADLINE_TAG] != undefined) {
				tempFlyoutDivs += bean.links[i][Flyout2Bean.HEADLINE_TAG];
			}
			
			tempFlyoutDivs += '</h3>'
				+ '<p class="ms-text">';
				
			if (bean.links[i][Flyout2Bean.PARAGRAPH_TAG] != undefined) {
				 tempFlyoutDivs += bean.links[i][Flyout2Bean.PARAGRAPH_TAG];
			}
			
			tempFlyoutDivs += '</p>'
				+ '</div>'
				+ '<div id="' + elementId + '-b' + i + '" class="ms-navi-main-fly-v1-2-bottom" ' + style + '>'
				+ '<p class="ms-image">';
				
			if (bean.links[i][Flyout2Bean.IMAGE_TAG + "_src"] != undefined) {
				tempFlyoutDivs += '<img src="' + bean.links[i][Flyout2Bean.IMAGE_TAG + "_src"];
				
				if (bean.links[i][Flyout2Bean.IMAGE_TAG + "_alt"] != undefined) {
					tempFlyoutDivs += '" alt="' + bean.links[i][Flyout2Bean.IMAGE_TAG + "_alt"];
					
				}
				
				tempFlyoutDivs += '"/>';
			}
			
			tempFlyoutDivs += '</p>'
				+ '</div>';
		}
			
		// Finish Content and append tempFlyoutDivs to the end
		content += '</ul>'
				+ '</dd>'
				+ '</dl>'
				+ '</div>'
				+ tempFlyoutDivs;

		// Paste response to layer
		getLayer(elementId).innerHTML = content;
		
		// Init first list entry
		var /*List*/ links = getLayer(elementId).getElementsByTagName("li");
		if (links[0].firstChild) {
			ms_corenav_changeFlyout(links[0].firstChild, elementId, 0);
			ms_corenav_resetFlyout(links[0].firstChild, elementId, 0);
		}
	}
}

function ms_corenav_resetFlyout(/*XMLNode*/ callerObj, /*String*/ elementId, /*int*/ item) {
	// Get current marked node
	var /*XMLNode*/ current = ms_corenav_elementsSelected[elementId];
	
	// Reset the current class for IE
	if (document.all) {
		current.className = "ms-hover";
	}
}

function ms_corenav_changeFlyout(/*XMLNode*/ callerObj, /*String*/ elementId, /*int*/ item) {
	// Get current marked node
	var /*XMLNode*/ current = ms_corenav_elementsSelected[elementId];
	
	// IllegalArgumentException
	if (item < 0) {
		return;
	}

	// Check if current element has changed
	if (current == callerObj) {
		return;
	}

	// Reset previous marked element
	if (current != undefined) {
		if (current.className) {
			current.className = '';
		} else {
			current.removeAttribute("class");
		}
	}
	
	// Set current marked element
	if (callerObj.className) {
		callerObj.className = 'ms-hover';
	} else {
		callerObj.setAttribute("class", "ms-hover");
	}
	ms_corenav_elementsSelected[elementId] = callerObj;
	
	// Set all display:none
	for (var /*int*/ i = 0; i < ms_corenav_elementsLoaded[elementId]; i++) {
		getLayer(elementId + "-r" + i).style.display = "none";
		getLayer(elementId + "-b" + i).style.display = "none";
	}
	
	// Set specified number display:block
	getLayer(elementId + "-r" + item).style.display = "block";
	getLayer(elementId + "-b" + item).style.display = "block";
}

var /*Boolean*/ ms_setIFrameHeight_stopper = false;
function ms_setIFrameHeight(/*String*/flyoutId) {
	// Only IE6
	if (!window.attachEvent || window.opera || window.XMLHttpRequest) return;
	// Get IFrame and FlyOut element
	if (flyoutId == '') return;
	// Only CORE NAV Flyout Type 2
	
	var flyout = document.getElementById(flyoutId);
	var /*XMLNode*/ iframe = flyout.getElementsByTagName("IFRAME")[0];
	if (!iframe) return;
	var /*XMLNode*/ list = flyout.getElementsByTagName("UL")[0];
	if (!list) return;
			
	flyout.style.display = "";
	var /*int*/ height = list.offsetHeight;
	if (!ms_setIFrameHeight_stopper) {
		// Sometimes IE needs some time to render the hidden
		// elements, so we give it 25 additional milliseconds.
		ms_setIFrameHeight_stopper = true;
		setTimeout("ms_setIFrameHeight('" + flyoutId + "')", 25);
		return;
	} else if (ms_setIFrameHeight_stopper) {
		ms_setIFrameHeight_stopper = false;
	}
	
	// Set height on IFrame. In some cases the height of the iframe must be
	// larger than that of the list because the whole flyout is larger.
	if(iframe.parentNode.className == 'ms-navi-main-fly-v2-1'){
		iframe.style.height = (height + 18) + "px";
	}
	else if(iframe.parentNode.className == 'ms-navi-main-fly-v1-1'){
		iframe.style.height = 390 + "px";
	}
	else{
		iframe.style.height = height + "px";
	}
}