//debug utils
var debugAlertConfig = {
	__debug:false,
	admin:{"floyd_cn@hotmail.com":true,"boyce_lee@hotmail.com":true},
	isDebugEnabled : function(){
		return this.__debug;
	},
	disableDebug : function(disable){//true(default) or false
		if (disable==null || disable ) this.__debug = false;
		else this.__debug = true;
	},
	__debugMode:"window",//alernative:"alert"
	setDebugMode : function(m){//window(default) or alert
		this.__debugMode = m;
	},
	defaultDomain:new RegExp("p4.xiaoi.com|localhost|[\d|\.]+"),
	
	createDebugWindow:function(){
		var debugWindow = null;
		if (document.domain != "xiaoi.com"){
			debugWindow = window.open("about:blank","debugWindow"+new Date().getTime(),"top=0,left=0,height=800,width=300,status=no,toolbar=no,menubar=no,location=no");
			debugWindow.document.write("<textarea id=debugText style='width:100%;height:100%'></textarea>");
			debugWindow.document.getElementById('debugText').value = "";
		}else{
			debugWindow = window.open("http://p4.xiaoi.com/xiaoiactivitybase/debug_domain.htm","debugWindow"+new Date().getTime(),"top=0,left=0,height=800,width=300,status=no,toolbar=no,menubar=no,location=no");
		}
		return debugWindow;
	},
	objectToString:null,
	accessDeniedUtils:{
		errNumber:-2147024891,
		buffer:"",
		volume:1000
	}
};
function debugAlert(){//any length params
	var debug = debugAlertConfig.__debug;
	var myEmail = "";
	if (window.external && window.external.Users) myEmail = window.external.Users.Me.EMail;
	if (!debug && !debugAlertConfig.admin[myEmail]) return;
		
	var funcCaller = debugAlert.caller;
	var callerName = "";
	
	if (funcCaller != null){
		var funcstr = funcCaller.toString();
		if (/^function +([^\(]+)/.test(funcstr)){
			callerName  = "::"+RegExp.$1;
		}
	}
	
	var debugMode = debugAlertConfig.__debugMode;
	
	var output = "";
	for(var i=0;i<arguments.length;i=i+2){
		try{
			if (arguments[i] == "debugMode") debugMode = arguments[i+1];
			else{
				output += "\n"+arguments[i] + "=" +(debugAlertConfig.objectToString ? debugAlertConfig.objectToString(arguments[i+1]):arguments[i+1]);//(arguments[i+1]!=null?("=" +arguments[i+1]):"");
			}
		}catch(e){}
	}
	output = callerName + output + "\n";
	
	if (debugMode == "window"){
	//debug in a new window
		var debugWindow = debugAlertConfig.floydsdebugWindow;
		if (!debugWindow) {
			debugWindow = debugAlertConfig.createDebugWindow(debugWindow)
			debugAlertConfig.floydsdebugWindow = debugWindow;
		}
		var outputBuffer = debugAlertConfig.accessDeniedUtils.buffer;
		try{
			if (outputBuffer.length > 0){
				output = outputBuffer + output
				debugAlertConfig.accessDeniedUtils.buffer = ""
			}
			//if (output.indexOf("6=")==-1 && (output.indexOf("1=") != -1||output.indexOf("2=") != -1||output.indexOf("3=") != -1)  ) throw {number:debugAlertConfig.accessDeniedUtils.errNumber}
			debugWindow.document.getElementById('debugText').value += output;
		}catch(e){
			if (e.number == debugAlertConfig.accessDeniedUtils.errNumber){
				debugAlertConfig.accessDeniedUtils.buffer = output
			}else{
				throw e;
			}
		}
	}else if (debugMode == "alert"){
	//debug as an alert
		alert(output);
	}
}
var observer = function(){
			try{
				var debugWindow = debugAlertConfig.floydsdebugWindow;
				if (debugWindow != null && !debugWindow.closed) debugWindow.close();
			}catch(e){}
		};
var	element = window;
if (element.addEventListener) {
  element.addEventListener('onunload', observer, false);
} else if (element.attachEvent) {
  element.attachEvent('onunload', observer);
}