var g_init = null;
var g_myBodyInstance = null;
var g_myBodyInstanceString = null;
var isMinNS4 = null;
var isMinNS5 = null;
var isMinIE4 = null;
var isMinIE5 = null;
var isMacIE = null;
var getFFVersion = null;
var FFextraHeight = null;
var isOpera = null;

var encjs = "http://qzone.qq.com/js/ps.js";
var dflt_css = "http://qzone.qq.com/js/login.css";
var css_obj = null;
var css_rel = null;
var login_window = null;
var drag_div = null;
var timer = null;

function exchange_form(aid)
{
	if ( !g_init )
	{
		// initialize global variables
		g_myBodyInstance = document.body;
		g_myBodyInstanceString = "document.body";
		isMinNS4 = (navigator.appName.indexOf("Netscape") >= 0 && parseFloat(navigator.appVersion) >= 4) ? 1 : 0;
		isMinNS5 = (navigator.appName.indexOf("Netscape") >= 0 && parseFloat(navigator.appVersion) >= 5) ? 1 : 0;
		isMinIE4 = (document.all) ? 1 : 0;
		isMinIE5 = (isMinIE4 && navigator.appVersion.indexOf("5.") >= 0) ? 1 : 0;
		isMacIE = (isMinIE4 && navigator.userAgent.indexOf("Mac") >= 0) ? 1 : 0;
		getFFVersion = navigator.userAgent.substring(navigator.userAgent.indexOf("Firefox")).split("/")[1];
		FFextraHeight = getFFVersion < 1.5 ? 16 : 0;
		isOpera = (navigator.appName.indexOf("Opera") >= 0) ? 1 : 0;
		
		if ( document.compatMode != "BackCompat" && !isOpera )
		{
		    g_myBodyInstance = document.documentElement;
		    g_myBodyInstanceString = "document.documentElement";
		}
		
		g_init = true;
		// initialize done
	}
	

	// get all arguments
	var argv = exchange_form.arguments;
	redirect_url = window.location;
	target_win = "_self";
	css_url = dflt_css;
	
	var surl, ftype, RtnUrl_Value;
	//处理用户默认情况参数 
	if (argv[1])
	{
		surl = argv[1];
	}
	else
	{
		surl = "";
	}
	if (argv[2])
	{
		ftype = argv[2];
	}
	else
	{
		ftype = "";
	}
	if (argv[3])
	{
		fvalue=argv[3];
	}
	else
	{
		fvalue = "";
	}		
	if(argv[4])
	{
		RtnUrl_Value = argv[4];
	}
	else
	{
		RtnUrl_Value = "";
	}
	

	if ( !css_obj || (css_rel != css_url) )
	{
		css_obj = document.getElementById('login_css');
		
		if ( !css_obj )
		{
			// add login css
			var login_css = document.createElement('link');
			login_css.id = 'login_css';
			login_css.rel = 'stylesheet';
			login_css.type = 'text/css';
			login_css.media = 'screen';
			login_css.href = css_url;
			document.body.appendChild(login_css);
			
			css_obj = login_css;
		}
		else
		{
			css_obj.href = css_url;
		}
		
		css_rel = css_url;
	}
	
	if ( !login_window )
	{
		// add encrypt js
		var encScript = document.createElement('script');
		encScript.src = encjs;
		encScript.type = "text/javascript";
		document.body.appendChild(encScript);
		
		// add div element
		var divE = document.createElement('div');
		divE.id = 'login_container';
		divE.style.visibility = 'hidden';
		divE.style.opacity = 0;
		
		var login_HTML = "";
		
		if ( navigator.userAgent.indexOf('MSIE') != -1 )
		{
			login_HTML += "<iframe id=\"mask_iframe\" src=\"\"></iframe>";
		}
		
		login_HTML += "	<div id=\"login_header\">";
		login_HTML += "	<h4>验证</h4>";
		login_HTML += "		<span id=\"close\" onclick=\"javascript:setLoginFormVisible('hide');\"><span class=\"none\">关闭</span></span>";
		login_HTML += "	</div>";
		login_HTML += "	<div id=\"login_form\">";
		login_HTML += "	<form id=\"user_login\" name=\"user_login\" action=\"" + surl +  "\"method=\"post\" enctype=\"application/x-www-form-urlencoded\" target=\"" + target_win + "\" autocomplete=\"off\" onSubmit=\"javascript:return process(user_login);\">";
		login_HTML += "		<input type=\"hidden\" name=\"FAwardType\" value=\""  + ftype + "\" />";
		login_HTML += "		<input type=\"hidden\" name=\"FValue\" value=\""  + fvalue + "\" />";
		login_HTML += "		<input type=\"hidden\" name=\"RtnUrl_Value\" value=\""  + RtnUrl_Value + "\" />";
		login_HTML += "		<ul>";
		login_HTML += "			<li>";
		login_HTML += "				<span class=\"code_span\">验证图片：</span>";
		login_HTML += "				<img id=\"loginVerifyImg\" src=\"http://ptlogin2.qq.com/getimage?aid=" + aid + "&" + Math.random() + "\" />";
		login_HTML += "				<p><a href=\"javascript:_nchangeImg(" + aid + ");\" tabindex=\"-1\">看不清,换一张</a></p>";
		login_HTML += "			</li>";
		login_HTML += "			<li>";
		login_HTML += "				<span>附加字符：</span>";
		login_HTML += "				<label accesskey=\"v\" for=\"vrfycode\">";
		login_HTML += "					<input id=\"vrfycode\" name=\"verifycode\" type=\"text\" class=\"verifycode\" maxlength=\"4\" style=\"ime-mode:disabled;\" />*";
		login_HTML += "				</label>";
		login_HTML += "				<p>请输入上图中字符，大小写忽略</p>";
		login_HTML += "			</li>";
		login_HTML += "			<li>";
		login_HTML += "				<input name=\"imageField\" type=\"submit\" class=\"bt_login\" value=\"确	认\" border=\"0\">";
		login_HTML += "			</li>";
		login_HTML += "		</ul>";
		login_HTML += "	</form>";
		login_HTML += "	</div>";
		
		divE.innerHTML = login_HTML;
    	
    document.body.appendChild(divE);
		
		login_window = document.getElementById('login_container');
		
		timer = setTimeout("setLoginFormVisible('show')", 500);
	}
	else
	{
		_nchangeImg(aid);
		timer = null;
	}	
		
	drag_div = true;
		
	if ( !timer )
	{
		setLoginFormVisible('show');
	}
	
	document.user_login.verifycode.value = '';
	document.user_login.imageField.disabled = false;
	
	var l_h = document.getElementById("login_header");
	
	if ( drag_div )
	{
		l_h.onmousedown = startMove;
	}
	else
	{
		l_h.onmousedown = null;
	}
}


function _nchangeImg(aid)
{
	var img = document.getElementById("loginVerifyImg");
	img.src = "http://ptlogin2.qq.com/getimage?aid=" + aid + "&" + Math.random();
	var ctrl = document.getElementById("code");
	if (ctrl != null)
	{
		ctrl.focus();
	}
}


function CheckForm()
{
	var vcode = document.getElementById('vrfycode');
	if (vcode.value.length != 4)
	{
		alert("请正确填写验证字符！");
		vcode.focus();
		vcode.select();
		return false;
	}
	return true;
}

function process(form)
{
	if (!CheckForm())
	{
		return false;
	}
	document.user_login.imageField.disabled = true;
	return true;
}

function setLoginFormVisible(vis)
{
	if (vis != 'hide')
	{
		login_window.style.display = '';
		login_window.style.visibility = 'visible';
		login_window.style.opacity = 1;
		
		if ( getWindowWidth() != getWidth(login_window) )
		{
			moveLayerTo(login_window,(getWindowWidth()-getWidth(login_window))/2,getPageScrollY()+(getWindowHeight()-getHeight(login_window))/2);
		}
		
	}
	else
	{
		login_window.style.display = 'none';

	}
}

// drag functions
function startMove(evt)
{
	evt = getCurrentEvent(evt);
		
	if ( !isLeftKeyDown(evt) )
		return;
	
	var alertDlg = document.getElementById("login_header");
	var loginCtnr = document.getElementById("login_container");
	setEventCapture(alertDlg);
	stopEventTransfer(evt);
	loginCtnr.$clientX = evt.clientX;
	loginCtnr.$clientY = evt.clientY;
	alertDlg.onmousemove = MoveIt;
	alertDlg.onmouseup = stopMove;
}

function MoveIt(evt)
{
	evt = getCurrentEvent(evt);

	if ( !isLeftKeyDown(evt) )
		return;
	
	var alertDlg = document.getElementById("login_container");//login_container
	
	var w_wid = document.body.scrollWidth;
	var w_hgt = document.body.scrollHeight;
	var xoffset = alertDlg.offsetLeft + (evt.clientX - alertDlg.$clientX);
	var yoffset = alertDlg.offsetTop + (evt.clientY - alertDlg.$clientY);
	
	if ( xoffset + getWidth(alertDlg) > w_wid )
	{
		alertDlg.style.left = w_wid - getWidth(alertDlg) - 4 + 'px';
		return;
	}
	else if ( yoffset + getHeight(alertDlg) > w_hgt )
	{
		alertDlg.style.top = w_hgt - getHeight(alertDlg) - 4 + 'px';
		return;
	}
	
	alertDlg.style.left = xoffset + "px";
	alertDlg.style.top = yoffset + "px";
	alertDlg.$clientX = evt.clientX;
	alertDlg.$clientY = evt.clientY;
}

function stopMove(evt)
{
	evt = getCurrentEvent(evt);

	if ( !isLeftKeyDown(evt) )
		return;

	var alertDlg = document.getElementById("login_header");
	alertDlg.onmousemove = null;
	alertDlg.onmouseup = null;
	releaseEventCapture(alertDlg);
}

function getElementPageOffset(x,y)
{
	return {x: x + document.body.scrollLeft - 2, y: y + document.body.scrollTop - 2};
}

function getPageOffset(element)
{
	var left = 0,top = 0;

	do {
		top += element.offsetTop || 0;
		left += element.offsetLeft || 0;
		element = element.offsetParent;
	} while(element);

	return {x: left, y: top};
}

function getCurrentEvent(evt)
{
	return (!evt) ? window.event : evt;
}

function getEventTarget(evt)
{
	evt = ( (!evt) ? window.event : evt );
	return evt.target || event.srcElement;
}

function isLeftKeyDown(evt)
{
	return ( ( (evt.which) && (evt.which==1) ) || ( (evt.button) && (evt.button==1) ) );
}

function stopEventTransfer(evt)
{
	if (evt.preventDefault)
	{
		evt.preventDefault();
		evt.stopPropagation();
	}
	else
	{
		evt.returnValue = false;
		evt.cancelBubble = true;
	}
}

function setEventCapture(target)
{
	if (target.setCapture)
		target.setCapture();
	else if (window.captureEvents)
		window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP|Event.MOUSEDOWN);
}

function releaseEventCapture(target)
{
	if (target.releaseCapture)
		target.releaseCapture();
	else if (window.releaseEvents)
		window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP|Event.MOUSEDOWN);
}

function isNULL(e)
{
	if (e==undefined || e==null)
		return true;

	return false;
}


function moveLayerTo(layer, x, y)
{
	if (isMinIE4)
	{
		layer.style.left = x;
		layer.style.top  = y;
	}
	else if (isMinNS5)
	{
		layer.style.left = x+'px';
		layer.style.top  = y+'px';
	}
	else if (isMinNS4)
    	layer.moveTo(x, y);
}

function getPageLeft(layer)
{
	if (isMinIE4||isMinNS5)
		return (layer.offsetLeft);
	else if (isMinNS4)
		return (layer.pageX);
	
	return (-1);
}

function getPageTop(layer)
{
	if (isMinIE4||isMinNS5)
		return (layer.offsetTop);
	else if (isMinNS4)
		return (layer.pageY);
	
	return (-1);
}

function getPageScrollX()
{
	if (isMinIE4||isMinNS5)
		return (g_myBodyInstance.scrollLeft);
	else if (isMinNS4)
		return (window.pageXOffset);
	
	return (-1);
}

function getPageScrollY()
{
	if (isMinIE4||isMinNS5)
		return (g_myBodyInstance.scrollTop);
	else if (isMinNS4)
		return (window.pageYOffset);
	
	return (-1);
}

function getWidth(layer)
{
	if (isMinIE4||isMinNS5)
	{
		if (layer.style.pixelWidth)
			return (layer.style.pixelWidth);
		else
			return (layer.clientWidth);
	}
	else if (isMinNS4)
	{
		if (layer.document.width)
			return (layer.document.width);
		else
			return (layer.clip.right - layer.clip.left);
	}
	
	return (-1);
}

function getHeight(layer)
{
	if (isMinIE4||isMinNS5)
	{
		if (false && layer.style.pixelHeight)
			return (layer.style.pixelHeight);
		else
			return (layer.clientHeight);
	}
	else if (isMinNS4)
	{
		if (layer.document.height)
			return (layer.document.height);
		else
			return (layer.clip.bottom - layer.clip.top);
	}
	
	return(-1);
}

function getWindowWidth()
{
	if (isMinIE4||isMinNS5)
		return (g_myBodyInstance.clientWidth);
	else if (isMinNS4)
		return (window.innerWidth);
	
	return (-1);
}

function getWindowHeight()
{
	if (isMinIE4||isMinNS5)
		return (g_myBodyInstance.clientHeight);
	else if (isMinNS4)
		return(window.innerHeight);
	
	return(-1);
}
