// UX main.js  20071016.2 mnorrish 
window.onerror = function() { return true; };

var UX = {
	myAppPath:'js/BizListing',
	myCfgName:'domain_superpages',
	libraries:['mbox'],
	scriptOff:false,
	showDebug:false
};

UX.getArgs = function() {
 var args = new Object();
 var query = location.search.substring(1);
 var pairs = query.split(",");
 for(var i=0; i<pairs.length; i++) {
	var pos = pairs[i].indexOf('=');
	if(pos == -1) continue;
	var argname = pairs[i].substring(0,pos);
	var value = pairs[i].substring(pos+1);
	args[argname] = unescape(value);
 }
 return args;
}

UX.onDOMLoadRun = function(func) {
	// Run function 'func' when DOM tree is available (ie. prior to window.onload).
	// Parse function name (IE6 doesn't get func.name)
	if(typeof func != 'function') return;
	var z = func.toString();
	var ss = z.substring(z.indexOf("function ")+9, z.indexOf("{"));
	var funcName='',z='';
	for(var k=0; k < ss.length; k++) {
		z = ss.charAt(k);
		funcName += ((z != " ") && (z != "(") && (z != ")")) ? z : '';
	}
	
	var handled = false;
	_timer = null; // Set global var

	/* for Mozilla */
	if (document.addEventListener) {
		document.addEventListener("DOMContentLoaded", func, false);
		handled = true;
	}

	/* for Internet Explorer */
	/*@cc_on @*/
	/*@if (@_win32)
		if(location.protocol == 'https:') {
			// Prevent non-secure content warning on https pgs
			document.write("<script id=__ie_onload defer src='" + UX.myAppPath + '/lib/void.js' + "'><\/script>");
		} else {
			document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
		}
		var script = document.getElementById("__ie_onload");
		if(script) {
			script.onreadystatechange = function() {
				if (this.readyState == "complete") {
					func(); // call the onload handler
				}
			};
			handled = true;
		}
	/*@end @*/

	/* for Safari */
	if (/WebKit/i.test(navigator.userAgent)) { // sniff
		_timer = setInterval(function() {
			if (/loaded|complete/.test(document.readyState)) {
				func(); // call the onload handler
			}
		}, 10);
		handled = true;
	}
	
	/* for other browsers */
	if(!handled) UX.onWindowLoadRun(func);
}

UX.onWindowLoadRun = function(func) {
	// Run function 'func' at window.onload after other (previously set) handlers have fired. 
	if(typeof window.addEventListener != 'undefined') {
		// moz, saf1.2, ow5b6.1
		window.addEventListener('load', func, false);
	} else if (typeof document.addEventListener != 'undefined') {
		// MSN/OSX, op7.50, saf1.2, ow5b6.1
		document.addEventListener('load', func, false);
	} else if (typeof window.attachEvent != 'undefined') {
		// ie5.0w, ie5.5w, ie6w
		window.attachEvent('onload', func);
	} else {
		if (typeof window.onload == 'function') {
			// Add 'func' to existing handlers
			var oldonload = window.onload;
			window.onload = function() {
				oldonload();
				func();
			};
		} else {
			window.onload = func;
		}
	}
}

UX.trackClicks = function() {
	if(typeof window.addEventListener != 'undefined') { // moz, saf1.2, ow5b6.1
		window.addEventListener("click", UX.handleClick, false); // Event listener
	} else if (typeof document.addEventListener != 'undefined') { // MSN/OSX, op7.50, saf1.2, ow5b6.1
		document.addEventListener("click", UX.handleClick, false); // Event listener
	} else if(typeof window.attachEvent != 'undefined') { // ie5.0w, ie5.5w, ie6w
		window.document.body.attachEvent("onclick", UX.handleClick); // Event listener
	}
}

UX.handleClick = function(evt) {
	evt = (evt) ? evt : (window.event) ? window.event : "";
	if(evt) {
		// Click detected. Determine target.
		var elem = (evt.target) ? evt.target : evt.srcElement;
		if(elem.nodeName == 'A') {
			// Anchor node was clicked.				
			if(elem.href) UX.runLinkHandlers(elem,evt);
		} else if(elem.parentNode.nodeName == 'A') {
			// Inspect parent element to see if it is linked. (e.g. IMG or B tag)
			if(elem.parentNode.href) UX.runLinkHandlers(elem.parentNode,evt);
		} else if((elem.nodeName.toLowerCase() == 'input') && (elem.type.toLowerCase() == 'submit')) {
			// Form submit button was clicked
			UX.runButtonHandlers(elem,evt);
		}
	}
}

UX.isLink = function(convertName,parentMbox,expression,anchorNode,evt,isTest) {
	var regex = new RegExp(expression);
	return UX.trackLinkClick(regex.test(unescape(anchorNode.href)), convertName, parentMbox, anchorNode, evt, isTest);
}

UX.isGroupLink = function(convertName,parentMbox,expression,anchorNode,evt,linkType,isTest) {
	var regex = new RegExp(expression);
	var currNode = anchorNode;
	var found = false;
	var stopped = false;
	var i = 0;
	var rgx = new RegExp(location.host);
	var linkTarget = rgx.test(currNode.href) ? 'internal' : 'external';
	if((linkType == '') || (linkTarget == linkType)) {
		// Bubble up until an ID (or stop value) is found
		while(!found && !stopped && (i < 15)) {
			if(currNode.parentNode) {
				currNode = currNode.parentNode;
				if(currNode.id && (currNode.id != "")) {
					if(regex.test(currNode.id)) {
						found = true;
					}
				}
			} else {
				stopped = true;
			}
		}
	}
	return UX.trackLinkClick(found, convertName, parentMbox, anchorNode, evt, isTest);
}

UX.getRank = function(href){
    return String(href).replace(/.*(\?|\&)rank=([^\&]*).*/i,"$2");
}

UX.validateInt = function(str){
    return String(str) == String(parseInt(str));
}

UX.trackLinkClick = function(isConversion, convertName, parentMbox, elem, evt, isTest) {
	if(isConversion) {
	    var rank = UX.getRank(elem.href);	 
		// Handle the link target
		if(elem.target != '_blank') {
			// Link opens in current window. Delay the default action with a timeout.
			UX.cancelDefaultAction(evt);
			UX.transmitConversion(convertName,parentMbox,isTest,rank);
			window.setTimeout("window.location.href='" + elem.href + "'", 600);
			return true;
		} else {
			// Link opens in new window. No timeout required.
			UX.transmitConversion(convertName,parentMbox,isTest,rank);
			return true;
		}
	}
	return false;
}

UX.cancelDefaultAction = function(evt) {
	if(evt) {
		if(typeof window.addEventListener != 'undefined') { // moz, saf1.2, ow5b6.1
			evt.preventDefault();
		} else if (typeof document.addEventListener != 'undefined') { // MSN/OSX, op7.50, saf1.2, ow5b6.1
			evt.preventDefault();
		} else if (typeof window.attachEvent != 'undefined') { // ie5.0w, ie5.5w, ie6w
			evt.returnValue = false;
		}
	}
}

UX.transmitConversion = function(convertName,parentMbox,isTest,rank) {
	var mboxConvertName = parentMbox + '_convert' + convertName;
	if(isTest || UX.showDebug) { alert(mboxConvertName); return true; }
	var url = mboxFactoryDefault.get(parentMbox).getURL();
	url = url.replace("mbox=" + parentMbox,"mbox=" + mboxConvertName);
	url = url.replace("mboxPage=" + mboxFactoryDefault.getPageId(),"mboxPage=" + mboxGenerateId());
	url += "&rank="+(rank ? (UX.validateInt(rank) ? rank : "no_rank") : "no_rank");
	setTimeout("(new Image()).src = " + "\"" + url + "\"",0);
}

UX.pathMatches = function(regx) {
	var s = new RegExp(regx);
	return s.test(location);
}

UX.buildParameter = function(keyName,defaultVal) {
	try { return (typeof pg[keyName] == 'undefined') ? keyName+'='+defaultVal : keyName+'='+pg[keyName]; }
	catch(e) { return keyName+'='+defaultVal; }
}

UX.includeScript = function(src) {
	if(!UX.scriptOff) document.write('<sc' + 'ript src="' + src + '" type="text/javascript"></sc' + 'ript>');
}

UX.include = function(lib) {
	var o =document.getElementsByTagName('HEAD')[0];
	if(o) {
		var e = document.createElement('SCRIPT');
		e.setAttribute('type','text/javascript');
		e.setAttribute('src',UX.myAppPath + '/lib/' + lib + '.js');
		o.appendChild(e);
	}
}

UX.cloak = function() {
	if(document.getElementsByTagName) {
		document.write('<style type="text/css">body { display:none; }</style>');
	}
}

UX.uncloak = function() {
	var x = UX.t('body')[0];
	if(x) x.style.display = 'block';
}

UX.init = function() {
	// Initialize global vars
	UX.ctr = 0;
	UX.parentMboxName = '';
	
	// Get querystring arguments
	UX.args = UX.getArgs();
	UX.previewNum = parseInt(UX.args.design);
	if(isNaN(UX.previewNum)) UX.previewNum = 0;

	// Load libraries
	if(UX.libraries.length) {
		for(var i=0; i<UX.libraries.length; i++) {
			UX.includeScript(UX.myAppPath + '/lib/' + UX.libraries[i] + '.js');
		}
	}
	
	// Load site configuration file
	UX.includeScript(UX.myAppPath + '/cfg/' + UX.myCfgName + '.js');	
}

UX.init();
