
function MsnimUtils(showErrorFrameInTopWindow){
	var msnimUtils = this;
	this.lastLinkState = "complete";
	this.lastClickedElement;
	this.showErrorFrameInTopWindow = showErrorFrameInTopWindow || true;
	
	this.onMsnimClickProxy = function(hrefObject){
		this.lastClickedElement = hrefObject;
		this.onMsnimClick(hrefObject);
	}
	
	this.onClickProxy = function(hrefObject){
		this.lastClickedElement = hrefObject;
		this.onClick(hrefObject);
	}
	
	this.onMsnimClick = function(hrefObject){
		alert("[function MsnimUtils.onMsnimClick]\r\nid = "+hrefObject.id + " ,href = " + hrefObject.href+"\r\n\r\n" +
				"::Overwrite this function for specific use:)");
	}
	
	this.onClick = function(hrefObject){
		
	}
	
	MsnimUtils.requestAjax = function(url){
		if (url == null || url.length==0 || url.indexOf("http://") < 0)  return;
		if (!this.ajaxInited) MsnimUtils.initAjax();
		
		if ("?" != url.substring(url.length-1,"?")) url = url + "?";
		
		var msnimajaxform = document.getElementById("msnimajaxform");
		msnimajaxform.action = url;
		msnimajaxform.method = "post";
		var innerHTMLBuffer = "";
		for(var i=1;i<arguments.length;i=i+2){
			innerHTMLBuffer += "<input type=hidden name='"+arguments[i]+"' value='"+arguments[i+1]+"'>";
		}
		msnimajaxform.innerHTML = innerHTMLBuffer;
		msnimajaxform.submit();//no callback :P
	}
	MsnimUtils.ajaxInited = false;
	MsnimUtils.initAjax = function(){
		this.ajaxInited = true;
		//init iframe-based ajax
		div = document.createElement("DIV");
		div.innerHTML = '<form id="msnimajaxform" name="msnimajaxform" target="msnimajaxiframe" method="post" action="">' +
				'<input type="hidden" name="info" value="">' +
				'</form>';
		div.style.display = "none";
		document.body.appendChild(div);
		
		div = document.createElement("DIV");
		div.innerHTML = '<iframe id="msnimajaxiframe" src="blank.htm" name="msnimajaxiframe" style="display:none" onload="msnimajaxiframe_onload()"></iframe>';
		div.style.display = "none";
		document.body.appendChild(div);
	}
	this.noSupportedClient = function(){
		alert("[function MsnimUtils.noSupportedClient]\r\nNo Supported Live Messenger Client!!!\r\n\r\n" +
				"::Overwrite this function for specific use:)");
	}
	
	this.init = function(){
		var lnk = document.createElement("link");
		lnk.id = "link4msnim" ;
		lnk.rel = "stylesheet";
//		lnk.type = "text/css";
		document.getElementsByTagName("head")[0].appendChild(lnk);
		lnk.onreadystatechange = function(){
//			debugAlert("state",this.readyState);
			if ("complete" == this.readyState && msnimUtils.lastLinkState != "loading"){
				msnimUtils.noSupportedClient(msnimUtils.lastClickedElement);
			}
			msnimUtils.lastLinkState = this.readyState;
		};
	};
	this.patch = function(){
		var trefs = document.getElementsByTagName("A");
		if (trefs == null ||trefs.length == 0) return;
		
		for(var i=0;i<trefs.length;i++){
			var h = trefs[i];
			if (h.href.indexOf("msnim:")!=-1){
				h.rawhref = h.href;
				h.href = "javascript:void(0);";
				h.onclick = function(){
					if (navigator.appName == "Microsoft Internet Explorer"){
						document.getElementById("link4msnim").href = this.rawhref ;
						msnimUtils.onMsnimClickProxy(this);
					}else{
						msnimUtils.noSupportedClient(this);					;
					}
				};
			}
			
			else if (h.href.indexOf("group")!=-1){
				h.rawhref = h.href;
				//h.href = "javascript:void(0);";
				h.onclick = function(){
					//document.getElementById("link4msnim").href = this.rawhref ;
					msnimUtils.onClickProxy(this);
				};
			}
		}
		
		var areas = document.getElementsByTagName("area");
		if (areas == null ||areas.length == 0) return;
		
		for(var i=0;i<areas.length;i++){
			var hh = areas[i];
			if (hh.href.indexOf("groupadmin")!=-1){
				var xx;
				if(hh.href.indexOf("'")!=-1){
					xx = hh.href.split("'");
				}
				var yy = "";
				for(var j=0;j<xx.length;j++){
					yy += xx[j];
				}
				hh.rawhref = yy;
				//h.href = "javascript:void(0);";
				hh.onclick = function(){
					//document.getElementById("link4msnim").href = this.rawhref ;
					msnimUtils.onClickProxy(this);
				};
			}
		}
		
		var inputs = document.getElementsByTagName("input");
		if (inputs == null ||inputs.length == 0) return;
		
		for(var i=0;i<inputs.length;i++){
			var input = inputs[i];
			if (!input.onclick) continue;
			var onclickFunc = input.onclick.toString();
			var msnim = getMsnimString(onclickFunc);
			if (msnim){
				input.rawhref = msnim.all;
				input.onclick = function(){
					if (navigator.appName == "Microsoft Internet Explorer"){
						document.getElementById("link4msnim").href = this.rawhref ;
						msnimUtils.onMsnimClickProxy(this);
					}else{
						msnimUtils.noSupportedClient(this);					;
					}
				};
			}
		}
	}
	
	this.init();
	this.patch();
}
function msnimajaxiframe_onload(){
	var msnimajaxiframe = document.getElementById("msnimajaxiframe");
	try{
		if (msnimajaxiframe.contentWindow.location.href.indexOf("blank.htm") == -1) throw "avoid refreshing";
	}catch(e){
		history.back();
	}
}

function registerDocumentLoadEventCallback(loadfunc){
	if (window.attachEvent)
	{
		window.attachEvent("onload",loadfunc);
	}else if (window.addEventListener)
	{
		window.addEventListener("load",loadfunc,false)
	}
}
function getMsnimString(text){
	var msnimPattern = /(msnim:.+=([a-zA-Z0-9][-.\w]+@[\w-.]+))/;
	if (msnimPattern.test(text)){
		return {all:RegExp.$1,contact:RegExp.$2};
	}
	return null;
}

function getCookie(name){
	//??Cookie????
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen){
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg){
			return GetCookieVal (j);
		}
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) break;
	}
	return null;
}
function GetCookieVal(offset){
	//??Cookie?????
	var endstr = document.cookie.indexOf (";", offset);
	if (endstr == -1)
	endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}
var msnimCheckloaded = false;
var msnimUtils;
function msnimCheck(){
		if (msnimCheckloaded ) return;
		msnimCheckloaded =true;
		var isChildWindow = false;
		if (window.top != self){
			isChildWindow = true;
		}else{
			var div = document.createElement("DIV");
			div.id = "msnimerroriframe_div";
			div.style.position = "absolute";
			div.style.display= "none";
			div.innerHTML = '<iframe id="msnimerroriframe" name="msnimerroriframe" src="" border="0" height="230" width="600" frameBorder=0 scrolling="no"></iframe>';
			document.body.appendChild(div);
		}

		msnimUtils = new MsnimUtils();
		msnimUtils.onMsnimClick = function(hrefObject){
			var test = getCookie('from');
			if(test!=null&&test.length>0){
				if(hrefObject.rawhref){
					MsnimUtils.requestAjax("http://wpa.qq.com/msgrd?V=1&Uin=122405265&Site=威力在线咨询&Menu=no","id",window.location,"url" ,hrefObject.rawhref, "from" ,test);
				}
				else if(hrefObject.parentElement && hrefObject.parentElement.rawhref){
					MsnimUtils.requestAjax("http://wpa.qq.com/msgrd?V=1&Uin=122405265&Site=威力在线咨询&Menu=no","id",window.location,"url" ,hrefObject.parentElement.rawhref, "from" ,test);
				}
			}
			else{
				if(hrefObject.rawhref){
					MsnimUtils.requestAjax("http://wpa.qq.com/msgrd?V=1&Uin=122405265&Site=威力在线咨询&Menu=no","id",window.location,"url" ,hrefObject.rawhref);
				}
				else if(hrefObject.parentElement && hrefObject.parentElement.rawhref){
					MsnimUtils.requestAjax("http://wpa.qq.com/msgrd?V=1&Uin=122405265&Site=威力在线咨询&Menu=no","id",window.location,"url" ,hrefObject.parentElement.rawhref);
				}
			}
		}
		
		msnimUtils.onClick = function(hrefObject){
			var test = getCookie('from');
			if(test!=null&&test.length>0){
				if(hrefObject.rawhref){
					MsnimUtils.requestAjax("http://wpa.qq.com/msgrd?V=1&Uin=122405265&Site=威力在线咨询&Menu=no","id",window.location,"url" ,hrefObject.rawhref, "from" ,test);
				}
				else if(hrefObject.parentElement && hrefObject.parentElement.rawhref){
					MsnimUtils.requestAjax("http://wpa.qq.com/msgrd?V=1&Uin=122405265&Site=威力在线咨询&Menu=no","id",window.location,"url" ,hrefObject.parentElement.rawhref, "from" ,test);
				}
			}
			else{
				if(hrefObject.rawhref){
					MsnimUtils.requestAjax("http://wpa.qq.com/msgrd?V=1&Uin=122405265&Site=威力在线咨询&Menu=no","id",window.location,"url" ,hrefObject.rawhref);
				}
				else if(hrefObject.parentElement && hrefObject.parentElement.rawhref){
					MsnimUtils.requestAjax("http://wpa.qq.com/msgrd?V=1&Uin=122405265&Site=威力在线咨询&Menu=no","id",window.location,"url" ,hrefObject.parentElement.rawhref);
				}
			}
		}
		
		msnimUtils.noSupportedClient = function(hrefObject){
			var test = getCookie('from');
			if(test!=null&&test.length>0){
				if(hrefObject.rawhref){
					MsnimUtils.requestAjax("http://wpa.qq.com/msgrd?V=1&Uin=122405265&Site=威力在线咨询&Menu=no","id",window.location,"url" ,hrefObject.rawhref, "from" ,test);
				}
				else if(hrefObject.parentElement && hrefObject.parentElement.rawhref){
					MsnimUtils.requestAjax("http://wpa.qq.com/msgrd?V=1&Uin=122405265&Site=威力在线咨询&Menu=no","id",window.location,"url" ,hrefObject.parentElement.rawhref, "from" ,test);
				}
			}
			else{
				if(hrefObject.rawhref){
					MsnimUtils.requestAjax("http://wpa.qq.com/msgrd?V=1&Uin=122405265&Site=威力在线咨询&Menu=no","id",window.location,"url" ,hrefObject.rawhref);
				}
				else if(hrefObject.parentElement && hrefObject.parentElement.rawhref){
					MsnimUtils.requestAjax("http://wpa.qq.com/msgrd?V=1&Uin=122405265&Site=威力在线咨询&Menu=no","id",window.location,"url" ,hrefObject.parentElement.rawhref);
				}
			}
			
			var x;
			if(hrefObject.rawhref){
				x = hrefObject.rawhref;
			}
			else if(hrefObject.parentElement && hrefObject.parentElement.rawhref){
				x = hrefObject.parentElement.rawhref;
			}
			else return;
			var y = x.indexOf('=');
			var z = x.substring(y+1);
			
			var msnimerroriframe_div ;
			var msnimerroriframe ;
			var myDocument = document;
			if (isChildWindow && msnimUtils.showErrorFrameInTopWindow){
				if (top.msnimUtils.noSupportedClient) top.msnimUtils.noSupportedClient(hrefObject);
				return;
			}else{
				msnimerroriframe_div = myDocument.getElementById("msnimerroriframe_div");
				msnimerroriframe = myDocument.getElementById("msnimerroriframe");
			}
			if (!msnimerroriframe.src || msnimerroriframe.src.indexOf("msn/msnhelp.html") == -1 ){
				msnimerroriframe.src = "msn/msnhelp.html?"+z;
			}else{
				msnimerroriframe.contentWindow.refreshCopyPanel(z);
			}
			msnimerroriframe_div.style.display = "block";
			msnimerroriframe_div.style.top  = myDocument.body.clientHeight/2 - msnimerroriframe_div.clientHeight/2 + document.body.scrollTop;
			msnimerroriframe_div.style.left  = myDocument.body.clientWidth/2 - msnimerroriframe_div.clientWidth/2;
		}
	}

registerDocumentLoadEventCallback(msnimCheck);
//window.attachEvent('onload',function(){document.__msnimUtils = new MsnimUtils();});
//function getMsnimUtils(){return document.__msnimUtils;}

