/**
 * AQ Site - support scripts for AQ websites
 *
 * Last Updated:	Apr 21, 2010
 */

if (typeof AQ == "undefined" || !AQ) { var AQ = {}; };
AQ.addLoadEvent = function(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		}
	}
}

AQ.Site = {
	createMenu: function() {
		var DOM = YAHOO.util.Dom;
		if (DOM.hasClass('nav-main', 'yuimenubar')) {
			var oMenu = new YAHOO.widget.MenuBar('nav-main', { autosubmenudisplay: true, hidedelay: 750, lazyload: true });
		} else {
			var oMenu = new YAHOO.widget.Menu('nav-main', { position: 'static', autosubmenudisplay: true, hidedelay: 750, lazyload: true });
		}
		oMenu.render();
	},
	setLinks: function() {
		var url = location.href;
		if (url.substr(url.length - 8, 8) == '?preview') {
			var domain = AQ.Site.getDomain(url);
			var a = document.getElementsByTagName('a');
			// search for local links and append the preview string
			for (var i = 0, len = a.length; i < len; i++) {
				if (a[i].href.indexOf(domain) != -1 && a[i].href.indexOf('#') == -1) {
					var temp = a[i].innerHTML;
					a[i].href = (a[i].href.indexOf('?') == -1) ? a[i].href+'?preview' : a[i].href+'&preview';
					// Ridiculous code to compensate for IE8
					//  - if the a's text contains an @ symbol, IE8 changes the text to match the updated href
					//  - so, detect and reset to avoid IE8 helpful "feature"(?)
					if (a[i].innerHTML != temp) {
						a[i].innerHTML = temp;
					}
				}
			}
		}
		
		var url = location.href;
		if (url.substr(url.length - 12, 12) == '?contentonly') {
			var domain = AQ.Site.getDomain(url);
			var a = document.getElementsByTagName('a');
			// search for local links and append the contentonly string
			for (var i = 0, len = a.length; i < len; i++) {
				if (a[i].href.indexOf(domain) != -1 && a[i].href.indexOf('#') == -1) {
					var temp = a[i].innerHTML;
					a[i].href = (a[i].href.indexOf('?') == -1) ? a[i].href+'?contentonly' : a[i].href+'&contentonly';
					// Ridiculous code to compensate for IE8
					//  - if the a's text contains an @ symbol, IE8 changes the text to match the updated href
					//  - so, detect and reset to avoid IE8 helpful "feature"(?)
					if (a[i].innerHTML != temp) {
						a[i].innerHTML = temp;
					}
				}
			}
		}

		if (url.indexOf('id=') != -1) {
			var domain = AQ.Site.getDomain(url);
			var id = AQ.Site.getParameter(url, 'id');
			var a = document.getElementsByTagName('a');
			// search for local links and append the preview string
			for (var i = 0, len = a.length; i < len; i++) {
				if (a[i].href.indexOf(domain) != -1 && a[i].href.indexOf('#') == -1) {
					a[i].href = (a[i].href.indexOf('?') == -1) ? a[i].href+'?id='+id : a[i].href+'&id='+id;
				}
			}
		}
	},
	getDomain: function(str) {
		// regular expression processing
		var re = new RegExp('^(?:[^/]+://)?([^/:]+)');
		var m = re.exec(str);
		if (m == null) {
			return false;
		} else {
			for (i = 0; i < m.length; i++) {
				s = m[i];
			}
		}
		return s;	
	},
	getParameter: function(url, name) {
		name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
		var regexS = "[\\?&]"+name+"=([^&#]*)";
		var regex = new RegExp(regexS);
		var results = regex.exec(url);
		var result = (results == null) ? "" : results[1];
		return result;
	},
	menuToggle: function(id) {
		var nav = document.getElementById('mn_nav');
		if (nav) {
			// close any open menus
			var menu = nav.getElementsByTagName('ul');
			for (var i = 0; i < menu.length; i++) {
				if (menu[i].id != id) {
					menu[i].style.display = 'none';
				}
			}
			
			// toggle clicked menu
			var el = document.getElementById(id);
			if (el) {
				if (el.style.display == 'none') {
					el.style.display = 'block';
				} else {
					el.style.display = 'none';
				}
			}
		}
	},
	treeToggle: function(id) {
		var nav = document.getElementById('aq_tree');
		if (nav) {
			// close any open nodes
			var menu = nav.getElementsByTagName('ul');
			for (var i = 0; i < menu.length; i++) {
				if (menu[i].id != id) {
					menu[i].style.display = 'none';
				}
			}
			
			// toggle clicked node
			var el = document.getElementById(id);
			if (el) {
				if (el.style.display == 'none') {
					el.style.display = 'block';
				} else {
					el.style.display = 'none';
				}
			}
		}
		
		return false;
	}
}

AQ.addLoadEvent(AQ.Site.createMenu);
AQ.addLoadEvent(AQ.Site.setLinks);

