// Object Prototype Extensions
String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/gi,"") }; 
String.prototype.overwrite = function(sTextToOverWrite,sNewText) { sTextToOverWrite = String(sTextToOverWrite).trim();	sNewText = String(sNewText).trim(); return this.replace(sTextToOverWrite,sNewText); };
Array.prototype.find = function(sWhat,bReturnIndex) { sWhat = String(sWhat).trim(); for(var iAPF = 0; iAPF < this.length; iAPF++) { if(String(this[iAPF]).trim() == sWhat) { if(bReturnIndex) { return iAPF; } else { return true; } } } if(bReturnIndex) { return NaN; } else { return false; } };

// Set browser vars as different code needs to handle different browsers
var bIE, bIE8, bIE7, bIE6, bSafari, bChrome, bFireFox, bFireFox3_0_10; 
setBrowser(); // Needed...set's the above vars accordingly

var myXML, aMyNodes, rawXML;

var sWhichPage = new String();
var aLinkSections = new Array();
var aLinkData = new Array();
	
function loadQuickLinks(sContainer) {
	if(typeof sMP_Static_Page_For_Links == "undefined") { return false; }
	
	if(typeof sContainer == "string") {
		sMP_Static_Page_For_Links = sContainer;
	} else {
		sContainer = false;
	}
	myXML = loadArticle('/article/1,,63511,00.html','XML','<!--=====|START|=====-->','<!--=====|END|=====-->');
	
	aMyNodes = myXML.getElementsByTagName('PageQuickLinks');
	
	for(var pN = 0; pN < aMyNodes.length; pN++) {
		if(bIE) {
			if(aMyNodes[pN].hasChildNodes() != false) {
				for(var cN = 0; cN < aMyNodes[pN].childNodes.length; cN++) {
					switch(String(getTagNameFromXMLNode(aMyNodes[pN].childNodes[cN]))) {
						case "sWhichPage":
							sWhichPage = getTextFromXMLNode(aMyNodes[pN].childNodes[cN]);
						break;
						
						case "links":
							aLinkSections[aLinkSections.length] = new Array();
							
							// go deeper
							for(var gN = 0; gN < aMyNodes[pN].childNodes[cN].childNodes.length; gN++) {
								switch(String(getTagNameFromXMLNode(aMyNodes[pN].childNodes[cN].childNodes[gN]))) {
									case "sQuickLinksTitle":
										aLinkSections[aLinkSections.length-1][0] = getTextFromXMLNode(aMyNodes[pN].childNodes[cN].childNodes[gN]);
									break;
									
									case "aLink":
										aLinkData[aLinkData.length] = new Array();
										
										// go deeper
										for(var ggcN = 0; ggcN < aMyNodes[pN].childNodes[cN].childNodes[gN].childNodes.length; ggcN++) {
											switch(String(getTagNameFromXMLNode(aMyNodes[pN].childNodes[cN].childNodes[gN].childNodes[ggcN]))) {
												case "sLinkText":
													aLinkData[aLinkData.length-1][0] = fixSpecialChars(String(getTextFromXMLNode(aMyNodes[pN].childNodes[cN].childNodes[gN].childNodes[ggcN])),false);
												break;
												
												case "sLinkHREF":
													if(getTextFromXMLNode(aMyNodes[pN].childNodes[cN].childNodes[gN].childNodes[ggcN]) == "none") {
														aLinkData[aLinkData.length-1][1] = null;
													} else {
														aLinkData[aLinkData.length-1][1] = fixSpecialChars(String(getTextFromXMLNode(aMyNodes[pN].childNodes[cN].childNodes[gN].childNodes[ggcN])),false);
													}
												break;
												
												case "sLinkTarget":
													if(getTextFromXMLNode(aMyNodes[pN].childNodes[cN].childNodes[gN].childNodes[ggcN]) == "none") {
														aLinkData[aLinkData.length-1][2] = null;
													}
													aLinkData[aLinkData.length-1][2] = "_"+getTextFromXMLNode(aMyNodes[pN].childNodes[cN].childNodes[gN].childNodes[ggcN]);
												break;
											}
										}
									break;
								}
								aLinkSections[aLinkSections.length-1][2] = aLinkData;
							}
						break;
					}
					
					if(sWhichPage != sMP_Static_Page_For_Links) { break; }
				}
			}
		} else if(bSafari || bChrome) {
			var sCurTag, sCurData = new String();
			
			if(aMyNodes[pN].hasChildNodes() != false) {
				for(var cN = 0; cN < aMyNodes[pN].childNodes.length; cN++) {
					sCurTag = getTagNameFromXMLNode(aMyNodes[pN].childNodes[cN]);
					if(sCurTag != "#text") { 
						switch(sCurTag) {
							case "sWhichPage":
								sCurData = getTextFromXMLNode(aMyNodes[pN].childNodes[cN]);;
								sWhichPage = sCurData;
							break;
							
							case "links":
								aLinkSections[aLinkSections.length] = new Array();
								
								// go deeper
								for(var gN = 0; gN < aMyNodes[pN].childNodes[cN].childNodes.length; gN++) {
									sCurTag2 = getTagNameFromXMLNode(aMyNodes[pN].childNodes[cN].childNodes[gN]);
									switch(sCurTag2) {
										case "sQuickLinksTitle":
											sCurData2 = getTextFromXMLNode(aMyNodes[pN].childNodes[cN].childNodes[gN]);
											aLinkSections[aLinkSections.length-1][0] = sCurData2;
										break;
										
										case "aLink":
											aLinkData[aLinkData.length] = new Array();
											
											// go deeper
											for(var ggcN = 0; ggcN < aMyNodes[pN].childNodes[cN].childNodes[gN].childNodes.length; ggcN++) {
												sCurTag3 = getTagNameFromXMLNode(aMyNodes[pN].childNodes[cN].childNodes[gN].childNodes[ggcN]);
												switch(sCurTag3) {
													case "sLinkText":
														sCurTag3 = fixSpecialChars(String(getTextFromXMLNode(aMyNodes[pN].childNodes[cN].childNodes[gN].childNodes[ggcN])),false);
														aLinkData[aLinkData.length-1][0] = sCurTag3;
													break;
													
													case "sLinkHREF":
														sCurData3 = getTextFromXMLNode(aMyNodes[pN].childNodes[cN].childNodes[gN].childNodes[ggcN]);
														if(sCurData3 == "none") {
															aLinkData[aLinkData.length-1][1] = null;
														} else {
															sCurData3 = fixSpecialChars(String(getTextFromXMLNode(aMyNodes[pN].childNodes[cN].childNodes[gN].childNodes[ggcN])),false);
															aLinkData[aLinkData.length-1][1] = sCurData3;
														}
													break;
													
													case "sLinkTarget":
														sCurData3 = getTextFromXMLNode(aMyNodes[pN].childNodes[cN].childNodes[gN].childNodes[ggcN]);
														if(sCurData3 == "none") {
															aLinkData[aLinkData.length-1][2] = null;
														} else {													
															sCurData3 = getTextFromXMLNode(aMyNodes[pN].childNodes[cN].childNodes[gN].childNodes[ggcN]);
															aLinkData[aLinkData.length-1][2] = "_"+sCurData3;
														}
													break;
												}
											}
										break;
									}
									aLinkSections[aLinkSections.length-1][2] = aLinkData;
								}
							break;
						}
						
						if(sWhichPage != sMP_Static_Page_For_Links) { break; }
					}
				}
			}
		} else { // Firefox
			if(aMyNodes[pN].hasChildNodes() != false) {
				for(var cN = 0; cN < aMyNodes[pN].children.length; cN++) {
					switch(String(getTagNameFromXMLNode(aMyNodes[pN].children[cN]))) {
						case "sWhichPage":
							sWhichPage = getTextFromXMLNode(aMyNodes[pN].children[cN]);
						break;
						
						case "links":
							aLinkSections[aLinkSections.length] = new Array();
							
							// go deeper
							for(var gN = 0; gN < aMyNodes[pN].children[cN].children.length; gN++) {
								switch(String(getTagNameFromXMLNode(aMyNodes[pN].children[cN].children[gN]))) {
									case "sQuickLinksTitle":
										aLinkSections[aLinkSections.length-1][0] = getTextFromXMLNode(aMyNodes[pN].children[cN].children[gN]);
									break;
									
									case "aLink":
										aLinkData[aLinkData.length] = new Array();
										
										// go deeper
										for(var ggcN = 0; ggcN < aMyNodes[pN].children[cN].children[gN].children.length; ggcN++) {
											switch(String(getTagNameFromXMLNode(aMyNodes[pN].children[cN].children[gN].children[ggcN]))) {
												case "sLinkText":
													aLinkData[aLinkData.length-1][0] = fixSpecialChars(String(getTextFromXMLNode(aMyNodes[pN].children[cN].children[gN].children[ggcN])),false);
												break;
												
												case "sLinkHREF":
													if(getTextFromXMLNode(aMyNodes[pN].children[cN].children[gN].children[ggcN]) == "none") {
														aLinkData[aLinkData.length-1][1] = null;
													} else {
														aLinkData[aLinkData.length-1][1] = fixSpecialChars(String(getTextFromXMLNode(aMyNodes[pN].children[cN].children[gN].children[ggcN])),false);
													}
												break;
												
												case "sLinkTarget":
													if(getTextFromXMLNode(aMyNodes[pN].children[cN].children[gN].children[ggcN]) == "none") {
														aLinkData[aLinkData.length-1][2] = null;
													}
													aLinkData[aLinkData.length-1][2] = "_"+getTextFromXMLNode(aMyNodes[pN].children[cN].children[gN].children[ggcN]);
												break;
											}
										}
									break;
								}
								aLinkSections[aLinkSections.length-1][2] = aLinkData;
							}
						break;
					}
					
					if(sWhichPage != sMP_Static_Page_For_Links) { break; }
				}
			}
		}
	}
	buildQuickLinks(sContainer);
}

var domObjQuickLinksContainer;
function buildQuickLinks(bSpecificContainer) {
	if(bSpecificContainer != false) {
		if(typeof document.getElementById('mpQuickLinks2') != "undefined") {
			domObjQuickLinksContainer = document.getElementById('mpQuickLinks2');
		} 
		else if(typeof document.getElementById('mpQuickLinks3') != "undefined") {
			domObjQuickLinksContainer = document.getElementById('mpQuickLinks2');
		}else {
			return false;
		}
	} else {
		if(typeof document.getElementById('mpQuickLinks') != "undefined") {
			domObjQuickLinksContainer = document.getElementById('mpQuickLinks');
		} else {
			return false;
		}
	}

	for(var q = 0; q < aLinkSections.length; q++) {
		var domObjQuickLinksTitle = document.createElement('div');
		domObjQuickLinksTitle.setAttribute('class','mpStaticQuickLinksTitle');
		domObjQuickLinksTitle.setAttribute('className','mpStaticQuickLinksTitle');
		
		domObjQuickLinksTitle.innerHTML = aLinkSections[q][0];
		domObjQuickLinksContainer.appendChild(domObjQuickLinksTitle);
	
		for(var l = 0; l < aLinkSections[q][2].length; l++) {
			var domObjQuickLinksWrapper = document.createElement('div');
			domObjQuickLinksWrapper.setAttribute('class','mpStaticQuickLinksWrapper');
			domObjQuickLinksWrapper.setAttribute('className','mpStaticQuickLinksWrapper');
		
			var domObjQuickLinkAtag = document.createElement('a');
			domObjQuickLinkAtag.setAttribute('class','mpStaticQuickLink');
			domObjQuickLinkAtag.setAttribute('className','mpStaticQuickLink');
			
			if(aLinkSections[q][2][l][1] == null) {
				domObjQuickLinksWrapper.innerHTML = aLinkSections[q][2][l][0];
				domObjQuickLinksContainer.appendChild(domObjQuickLinksWrapper);
			} else {
				domObjQuickLinkAtag.innerHTML = aLinkSections[q][2][l][0];
				domObjQuickLinkAtag.setAttribute('href',aLinkSections[q][2][l][1]);
				domObjQuickLinkAtag.setAttribute('target',aLinkSections[q][2][l][2]);
				domObjQuickLinksWrapper.appendChild(domObjQuickLinkAtag);
				domObjQuickLinksContainer.appendChild(domObjQuickLinksWrapper);
			}
		}
	}
	sWhichPage = null;
	aLinkSections = null; aLinkSections = new Array();
	aLinkData = null; aLinkData = new Array();
}

function setBrowser() { // COMPLETE
	var sUserAgent = String(navigator.userAgent).trim();
	bIE = bIE8 = bIE7 = bIE6 = bSafari = bChrome = bFireFox = bFireFox3_0_10 = false; // These are our supported browsers as of 01/13/10 @ 10am
	if(sUserAgent.indexOf('MSIE 8.') > -1) { bIE8 = true; bIE = true;
	} else if(sUserAgent.indexOf('MSIE 7.') > -1) { bIE7 = true; bIE = true;
	} else if(sUserAgent.indexOf('MSIE 6.') > -1) { bIE6 = true; bIE = true;
	} else if(sUserAgent.indexOf('Firefox/3.0.10') > -1) { bFireFox3_0_10 = true;	
	} else if(sUserAgent.indexOf('Firefox') > -1) { bFireFox = true;		
	}	else if(sUserAgent.indexOf('WebKit') > -1) { bSafari = true; bChrome = true; }
}

window.addEvent = function(ev,func) {	 // COMPLETE
	if(this.addEventListener){ //DOM
		var ffEv = ev.substring(2,ev.length); this.addEventListener(ffEv,func,false);
  } else if(this.attachEvent) { //IE
		this.attachEvent(ev,func);
	} else {
		if(!window[ev+'arr']) { window[ev+'arr'] = new Array(); if(window[ev]){ window[ev+'arr'][window[ev+'arr'].length] = window[ev]}; }
    window[ev+'arr'][window[ev+'arr'].length] = func; window[ev] = function(){for(var x=0; x<window[ev+'arr'].length; x++){ window[ev+'arr'][x]()}};
  }
}

window.removeEvent = function(ev,func){ // COMPLETE
	if(this.removeEventListener) { //DOM
		var ffEv = ev.substring(2,ev.length); this.removeEventListener(ffEv,func,false);
	} else if(this.detachEvent) { //IE
		this.detachEvent(ev,func);
	} else { if(window[ev+'arr']) { for(var x=window[ev+'arr'].length-1; x>=0; x--) { if(window[ev+'arr'][x] == func) { window[ev+'arr'].splice(x,1); } } } }
}


function getTagNameFromXMLNode(objXMLNode) {
	var sReturnString = new String();
	if(bIE) {
		sReturnString = String(objXMLNode.nodeName).trim();
	} else if(bFireFox) {
		sReturnString = String(objXMLNode.nodeName).trim();
	} else if(bSafari || bChrome) {
		sReturnString = String(objXMLNode.nodeName).trim();
	} else {
		sReturnString = "NON-SUPPORTED BROWSER";
	}
	
	return sReturnString;
}

function getTextFromXMLNode(objXMLNode) {
	var sReturnString = new String();
	if(bIE) {
		sReturnString = String(objXMLNode.text).trim();
	} else if(bFireFox) {
		sReturnString = String(objXMLNode.textContent).trim();
	} else if(bSafari || bChrome) {
		sReturnString = String(objXMLNode.firstChild.nodeValue).trim();
	} else {
		sReturnString = "NON-SUPPORTED BROWSER";
	}
	
	return sReturnString;
}
var objXMLdoc;
function loadArticle(sURL, sReturnType, sContentStart, sContentEnd) { // COMPLETE
	var returnObj;
	try {
		if(window.XMLHttpRequest) {
			xhttp=new XMLHttpRequest();
		} else { // Internet Explorer
			xhttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
	} catch(e) {
		//did not work due to security settings...
	}
	
	try {
		var xmlobject;
		if(window.DOMParser) {
			xhttp.open("GET",sURL,false);
			xhttp.send("");
			xmlDoc=String(xhttp.responseText).trim();
			if(sContentStart) {
				iPositionOfXML = xmlDoc.indexOf(sContentStart) + sContentStart.length;
			} else {
				iPositionOfXML = xmlDoc.indexOf("<?");
			}
			if(sContentEnd) {
				iEndPositionOfXML = xmlDoc.indexOf(sContentEnd);
			} else {
				iEndPositionOfXML = xmlDoc.length;
			}
			objXMLdoc = xmlDoc.substring(iPositionOfXML,iEndPositionOfXML);
			
			if(sReturnType=="XML") {
				xmlobject = (new DOMParser()).parseFromString(objXMLdoc, "text/xml");
				returnObj = xmlobject;
			} else {
				returnObj = objXMLdoc;
			}
		} else { // Internet Explorer
			xhttp.open("GET",sURL,false);
			xhttp.send("");
			xmlDoc=String(xhttp.responseText).trim();
			if(sContentStart) {
				iPositionOfXML = xmlDoc.indexOf(sContentStart) + sContentStart.length;
			} else {
				iPositionOfXML = xmlDoc.indexOf("<?");
			}
			if(sContentEnd) {
				iEndPositionOfXML = xmlDoc.indexOf(sContentEnd);
			} else {
				iEndPositionOfXML = xmlDoc.length;
			}
			objXMLdoc = xmlDoc.substring(iPositionOfXML,iEndPositionOfXML);
			if(sReturnType=="XML") {
				xmlobject=new ActiveXObject("Microsoft.XMLDOM");
				xmlobject.async="false";
				xmlobject.loadXML(objXMLdoc);
				returnObj = xmlobject;
			} else {
				returnObj = objXMLdoc;
			}
		}
		return returnObj;
	} catch(e) {
		// could not get XML from responseText
	}
}

var sRegMark = "&reg;";
var sRegMarkInSelect = "®";
var sTrademark = "&#x2122;";
var sServiceMark = "&#8480;";
var sAndSign = "&";
var sBreak = "<br\/>";
var sDoubleQuote = '"';
var sSingleQuote = "'";
var sBackSlash = "\\";
var sForwardSlash = "\/";
var sNew = "<span style='font-style:italic !IMPORTANT;font-weight:bold !IMPORTANT;color:#00AEEF; !IMPORTANT;font-size:11px !IMPORTANT;_font-size:13px !IMPORTANT;clear:all !IMPORTANT;padding-left:2px !IMPORTANT;'>&#9830;<\/span>";
function fixSpecialChars(sStringToFix, bSelect) {
	var sReturnString = new String(sStringToFix);

	while((sReturnString.indexOf("[reg]") > -1) || (sReturnString.indexOf("[trademark]") > -1) || (sReturnString.indexOf("[servicemark]") > -1)) {
		if(bSelect) {
			sReturnString = String(sReturnString).replace("[reg]",sRegMarkInSelect); // ® Registered Trademark in the Select Dropdown
		} else {
			sReturnString = String(sReturnString).replace("[reg]",sRegMark); // ® Registered Trademark
		}
		sReturnString = String(sReturnString).replace("[trademark]",sTrademark); // TM TradeMark
		sReturnString = String(sReturnString).replace("[servicemark]",sServiceMark); // SM Service Mark
	}
	while((sReturnString.indexOf("[sQuote]") > -1) || (sReturnString.indexOf("[sDoubleQuote]") > -1)) {
		sReturnString = String(sReturnString).replace("[sQuote]",sSingleQuote); // Single quote or apostraphe
		sReturnString = String(sReturnString).replace("[sDoubleQuote]",sDoubleQuote); // Double quite
	}
	while((sReturnString.indexOf("[amp]") > -1) || (sReturnString.indexOf("[br]") > -1) || (sReturnString.indexOf("[new]") > -1)) {
		sReturnString = String(sReturnString).replace("[amp]",sAndSign); // And sign
		sReturnString = String(sReturnString).replace("[br]",sBreak); // Line Break
		sReturnString = String(sReturnString).replace("[new]",sNew); // Blue Diamond
	}
	while((sReturnString.indexOf("[forwardslash]") > -1) || (sReturnString.indexOf("[backslash]") > -1)) {
		sReturnString = String(sReturnString).replace("[forwardslash]",sForwardSlash); // /
		sReturnString = String(sReturnString).replace("[backslash]",sBackSlash); // \
	}
		
	return String(sReturnString).trim();
}

window.addEvent('onload',loadQuickLinks);
