

espn = typeof(espn) == 'undefined' ? {} : espn;


espn.addLoadEvent = function(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	}
	else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

espn.inArray = function (array,value) {
	if(!array){ return false; }
	var i;
	for (i=0; i < array.length; i++) {
		if (array[i] === value) {
			return true;
		}
	}
	return false;
};

espn.hasClassName = function(el,value)
{
	return (el.className && (el.className == value || espn.inArray(el.className.split(' '),value)));
}

espn.Login = function(instanceName, appRedirect, isStouted, username, firstname, loginState, serverNow)
{
	if(username.indexOf('<InLineReplace') != -1)  { username = ''; }
	if(firstname.indexOf('<InLineReplace') != -1)  { firstname = ''; }
	if((loginState+'').indexOf('<InLineReplace') != -1){ loginState = ''; }
	if(!loginState && loginState != 0){ loginState = ''; }
	
	/*private:*/
	var cookies = document.cookie.split("; ");
	var pLoginState = false;
	var sLoginState = false;
	var regReq = null;
	var regURL = 'http://r.espn.go.com/espn/preferences/passiveLogin?appRedirect=http%3A%2F%2Fespn-ak.starwave.com%2Fi%2Fblank.gif';
	var returnURL = document.location.href;
	var xmlURL = 'http://' + document.location.hostname + '/espn/unilogin/loggedIn';
	var unilinks = document.getElementById('unilinks');
	var loginwrapper = document.getElementById('login-wrapper');
	var akattState = (returnURL.indexOf('sports-ak')>-1 || returnURL.indexOf('sports-att')>-1);
	var IN_STATE = 1;
	var PASSIVE_STATE = 0;
	var mCount = -1;
	var mUnread = -1;
	var mSWID = null;
	
	if (appRedirect != '' && appRedirect != 'null')
	{
		returnURL = appRedirect;
	}
	
	/*if (returnURL.indexOf("univLogin02") == -1)
	{
		if (returnURL.indexOf("?") == -1)
		{
			returnURL = returnURL + "?univLogin02=stateChanged";
		} 
		else
		{
			returnURL = returnURL + "&univLogin02=stateChanged";
		}
	}*/
	
	
	function getCookie(name)
	{
  		for (var i=0; i < cookies.length; i++)
  		{
  			var cookie = cookies[i].split("=");
  			if (cookie[0] == name)
  				return cookie[1];
  		}
  		return null;
  	}

	function doLoginCheck()
	{
		var myImage = new Image();
		myImage.onload = checkLoginState;
		myImage.src = regURL;
	}

	function callLoginCheck(evt)
	{
		setTimeout(function(){ doLoginCheck(); }, 1500);
	}

	function checkLoginState()
	{
		/*THIS WONT WORK AND IT DOESNT LOOK LIKE ITS BEING USED
		if (akattState)
		{
			xmlURL = 'http://sports.espn.go.com/espn/unilogin/loggedIn';
		}
		*/
		
		regReq = null;
		try
		{
			regReq = new XMLHttpRequest();
			regReq.onreadystatechange = processRegResp;
			regReq.open("GET", xmlURL, true);
			regReq.send(null);
		}
		catch (e)
		{
			try
			{
				regReq = new ActiveXObject("Microsoft.XMLHTTP");
				regReq.onreadystatechange = processRegResp;
				regReq.open("GET", xmlURL, true);
				regReq.send();
			} catch(err) { window.status = err.message; }
		}
	}


	function processRegResp()
	{
		if (regReq.readyState == 4)
		{
			if (regReq.status == 200 && regReq.responseXML != null)
			{
				var markup = null;
				debug = regReq.responseXML;
				var fN = regReq.responseXML.getElementsByTagName("FirstName");
				var lN = regReq.responseXML.getElementsByTagName("LastName");
				var uN = regReq.responseXML.getElementsByTagName("Username");
				var lG = regReq.responseXML.getElementsByTagName("Active");
				getMarkup(uN[0].childNodes[0].nodeValue, fN[0].childNodes[0].nodeValue, lG[0].childNodes[0].nodeValue);
			}
			else
			{
				getLGScript();
			}
		}
	}

	function getLGScript() 
	{
		var lgScript = document.createElement("script");
		lgScript.type = 'text/javascript';
		lgScript.src = 'http://sports.espn.go.com/espn/js/unilogin?cb=' + instanceName + '.getMarkup';

		var headObj = document.getElementsByTagName("head").item(0);
		headObj.appendChild( lgScript );
	}
	
	function init()
	{
		swid = getCookie("SWID");
		green = getCookie("GREEN");
		
		requestInboxCounts();
		
		//green = null;
		//loginState = '';
		//akattState = true;
		
		convertRedirects();
		
		if(!isStouted){ return; }
	

		if (green != null && green != "" && (loginState != "" || akattState))
		{
			if (akattState)
			{
				getLGScript();
			}
			else
			{
				getMarkup(username, firstname, loginState);
			}
		}
		else if (((green == null || green == "") && (swid != null && swid != "")) || (green != null && green != "" && loginState == ""))
		{
			if (swid.indexOf("{")==0 && swid.indexOf("}")==swid.length-1)
			{
				if (document.location.hostname == "insider.espn.go.com")
				{
					document.location.href = "http://r.espn.go.com/espn/preferences/passiveLogin?appRedirect=" + encodeURIComponent(returnURL);
				}
				else
				{
					if (window.attachEvent)
					{
						window.attachEvent("onload", callLoginCheck);
					}
					else
					{
						doLoginCheck();
					}
				}
			}
			else
			{
				getMarkup(null,null, null);
			}
		}
		else
		{
			getMarkup(null,null, null);
		}
	}
	
	function convertRedirects()
	{
		
		if(!document.getElementById('login')) { return; }
		var nodes = document.getElementById('login').getElementsByTagName('*');
		var url = 'http://espn.go.com';
		var encodedUrl = encodeURIComponent(url);
		
		var redirect = location.href;
		var encodedRedirect = encodeURIComponent(redirect);
		for(var i = 0; i < nodes.length; i++)
		{
			var node = nodes[i];
			if(espn.hasClassName(node,'return'))
			{
				if(node.href)
				{
					node.href = node.href.replace('appRedirect=' + url,'appRedirect=' + redirect);
					node.href = node.href.replace('appRedirect=' + encodedUrl,'appRedirect=' + encodedRedirect);
				}
				else if(node.value)
				{
					node.value = node.value.replace('appRedirect=' + url,'appRedirect=' + redirect);
					node.value = node.value.replace('appRedirect=' + encodedUrl,'appRedirect=' + encodedRedirect);
				}
			}
			delete(node);
		}
		try{ document.getElementById('login-field-redirect').value = redirect;} catch(e){} 
	}
	
	function iterateNodes(nodes,className)
	{
		for(var i = 0; i < nodes.length; i++)
		{
			var node = nodes[i];
			
			if(espn.hasClassName(node,className))
			{
				node.style.display = 'inline';
			}
			else if(espn.hasClassName(node,'in') || espn.hasClassName(node,'out') || espn.hasClassName(node,'passive'))
			{
				node.style.display = 'none';
			}
			delete(node);
		}
	}
	
	function populateLogin(uN,fN,lG)
	{
		if(!document.getElementById('login')) { return; }
		var elLogin = document.getElementById('login');
		var nodes = elLogin.getElementsByTagName('*');
		var field;
		var className = lG == IN_STATE ? 'in' : (lG == PASSIVE_STATE) ? 'passive' : 'out';
		var linkNode =  document.getElementById('login-link-name');
		
		if(parseInt(lG) == IN_STATE)          { document.getElementById('login-label-signout').className += ' login-in-label'; }
		else if(parseInt(lG) == PASSIVE_STATE){ linkNode.innerHTML = linkNode.innerHTML.replace('null',fN); }
		
		
		if(parseInt(lG) == IN_STATE || parseInt(lG) == PASSIVE_STATE)
		{
			field = document.getElementById('login-field-membername');
			field.value = uN;
			field.type = 'hidden';
			document.getElementById('login-label-firstname').innerHTML = fN;
			iterateNodes(nodes,className);
		}
		else
		{
			field = document.getElementById('login-field-membername');
			field.value = '';
			field.type = 'text';
			iterateNodes(nodes,'out');
		}
		document.getElementById('login-right').style.visibility = 'visible';
		delete(elLogin);
		delete(field);
	}
	
	function getMarkup(uN,fN,lG)
	{
		populateLogin(uN,fN,lG);
		//alert(lG);
		/*var loginFormMarkup = getLoginFormMarkUp(uN, fN, lG);
		var links = getLinksMarkUp(uN, fN, lG);

		loginwrapper.innerHTML = loginFormMarkup;
		unilinks.innerHTML = links;*/
	}
	
	
	function getIBX()
	{
		var svrnow = serverNow;
		var clientnow = (new Date()).getTime();
		var diff = clientnow - svrnow;
		var result = false;
		var ibx = getCookie( "ibx" );
		
		if( mSWID == null ) { mSWID = getMemberSWID(); }
		if( mSWID != null )
		{
			if( ibx == null || ibx == '' )
			{
				result = true;
			}
			else if( ibx != null )
			{
				var ti = ibx.indexOf( "|" );
				if( ti > 0 )
				{
					var tiSWID = ibx.substring(0,ti);
					if( tiSWID == mSWID )
					{
						var dateObject = new Date();
						var ibx = ibx.substring(ti+1);
						var ibxi = parseInt(ibx) - dateObject.getTime();
						if( ibxi > 60000000 ) { result = true; } //10 min
					}
					else 
					{ 
						clearIBX();
						result = true;
					}
				}
			}
		}
		return result;
	}

	function clearIBX() { document.cookie = "ibx="; }

	function getMemberSWID()
	{
		var result = getCookie( "SWID" );
		if( result == null || result.indexOf( "{" ) != 0 ) { result = null; }
		return result;
	}
	
	function setInboxDiv(count, unread) 
	{ 
		if(!unread || !document.getElementById('login')) { return; }
		if( mCount >= 0 ) 
		{
			var inboxDiv = document.getElementById("inbox");
			try{ inboxDiv.innerHTML = ' (' + unread + ')'; } catch(e){} 		    
		}
	}

	function requestInboxCounts()
	{
		if( getIBX() ) 
		{
			var newScript = document.createElement( "script" );
			newScript.setAttribute( "src", "/profile/inboxcount?SWID=" + mSWID );
			var head = document.getElementsByTagName("head")[0];
			head.appendChild(newScript);
		}
	}

	
	/*public:*/
	this.getMarkup = getMarkup;
	
	this.inbox = function( count, unread )
	{
		mCount = count;
		mUnread = unread;
		setInboxDiv(count,unread);
	}
	
	/*Start App*/
	espn.addLoadEvent(function(){ init(); });
};