/****************************************************************************
START - HELPER FUNCTIONS 
****************************************************************************/


var helper = {
	
	//XMLHTTPREQUEST SETUP
	setXMLHttpRequest : function() {
		
		var xmlhttp;
		
		if (window.XMLHttpRequest) {
			xmlhttp = new XMLHttpRequest();
		}
		else if (window.ActiveXObject) {
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		
		return xmlhttp;
		
	},
	
	//BROWSER ID HANDLE CHECK
	htmlElement : function(passed) {
		
		try {	
			if (document.getElementById) {
				return document.getElementById(passed);
			}
			if (document.all) {
				return document.all[passed];
			}
		}
		catch (e) {
			this.errorLogger("Helper class error", "htmlElement", "passed="+passed, e.message, "Element ID definition error");
		}
		
	},
	
	//GET ELEMENT ATTRIBUTE
	getAttrib : function(nodeName, attribute) {
		
		try {
			var result = "";
			if (nodeName.getAttribute(attribute) != null)
				result = nodeName.getAttribute(attribute);
		
			return result;
		}
		catch (e) {
			this.errorLogger("Helper class error", "getAttrib", "nodeName="+nodeName+",attribute="+attribute, e.message, "Attribute definition error");
		}
		
	},
	
	//CHECK NODE TYPES
	chkNType : function(elemPassed) {
		
		try {
			if (typeof elemPassed == undefined)
				return 0;
			else {
				var nType = 0;
				nType = elemPassed.nodeType;
				return nType;
			}
		}
		catch (e) {
			this.errorLogger("Helper class error", "chkNType", "elemPassed="+elemPassed, e.message, "Node Check Error");
		}
		
	},
	
	
	//NAME DISPLAY TYPES
	nameFix : function(empName, fixOption) {
		
		try {
			var fName = ""; 
			var lName = "";
			var returnThis = "";
			
			if (empName.indexOf(",") < 0)
				return empName;
		
			switch (fixOption) {
		
				case 1: {
					//option 1 ex : Duncan, Tim -> T.Duncan
					for (var x = 0; x < empName.indexOf(","); x++) { 
						lName += empName.charAt(x);
					}
					fName = empName.charAt(empName.indexOf(",")+2);
					returnThis = fName + ". " + lName;
					break;
				}
				case 2: {
					//option 2 ex : Duncan, Tim -> Duncan
					for (var x = 0; x < empName.indexOf(","); x++) {
						lName += empName.charAt(x);
					}
					returnThis = lName;
					break;
				}
				case 3: {
					//option 3 ex : Duncan, Tim -> Tim Duncan
					for (var x = 0; x < empName.indexOf(","); x++) { 
						lName += empName.charAt(x);
					}
					fName = empName.substring(empName.indexOf(",")+2,empName.length);
					returnThis = fName + " " + lName;
					break;
				}
		
			}
			
		
			return returnThis;
		}
		catch (e) {
			this.errorLogger("Helper class error", "nameFix", "empName="+empName+",fixOption="+fixOption, e.message);
		}
		
	},
	
	//IF YOU WANT TO TRIM (RIGHT AND LEFT) THE STRING
	trimString : function(dString) {
		
		try {
			while (dString.substring(0,1) == ' ') {
				dString = dString.substring(1, dString.length);
			}
			while (dString.substring(dString.length-1, dString.length) == ' ') {
				dString = dString.substring(0,dString.length-1);
			}
		
			return dString;
		}
		catch (e) {
			this.errorLogger("Helper class error", "trimString", "dString="+dString, e.message);
		}
		
	},
	
	// MILITARY TIME to 12 HR
	setStrTime : function(passTime) {
	
		if (passTime == undefined) 
			return;

		var timeStr = "";
		var tAMPM = "";
		var tHR = "";
		var tMIN = "";
	
		var MilitaryTime = this.trimString(passTime);
	
		if (MilitaryTime.length == 4) {
			tAMPM = "am";
			tHR = MilitaryTime.charAt(0) + MilitaryTime.charAt(1);
			tMIN = MilitaryTime.charAt(2) + MilitaryTime.charAt(3);
			tHR = parseInt(tHR);
	
			if (tHR > 12) {
				tHR = tHR - 12; // 12-hr
				tHR = "" + tHR; // convert to string
				tAMPM = "pm"; // set as pm
			}
		
			if (tHR == 0) 
				tHR = "" + 12; // set as hr of 12 and set to string
			
			timeStr = tHR + ":" + tMIN + " " + tAMPM;
		}
	
		if (MilitaryTime.length == 3) {
			tAMPM = "am";
			tHR = MilitaryTime.charAt(0);
			tMIN = MilitaryTime.charAt(1) + MilitaryTime.charAt(2);
			tHR = parseInt(tHR);
	
		if (tHR == 0) 
			tHR = "" + 12; // set as hr of 12 and set to string
	
			timeStr = tHR + ":" + tMIN + " " + tAMPM;
		}
		
	return timeStr;
		
	},
	
	//ELEMENT NODE COUNTER
	nodeCounter : function(node) {
		
		try {
			var numOfNodes = 0;
			for (var x = 0; x < node.length; x++) {
				if (helper.chkNType(node[x]) == 1) {
					numOfNodes++;
				}
			}
		
			return numOfNodes;
		}
		catch (e) {
			this.errorLogger("Helper class error", "nodeCounter", "node="+node, e.message, "Node Counter Error");
		}
		
	},
	
	//ATTRIBUTE COUNTER
	attribCounter : function(node) {
		return node.attribute.length;
	},
	
	//ERROR LOGGING FOR DEVELOPMENT
	errorLogger : function(eType, eCode, eValue, eMsg, eCom) {
		
		var err = "";
		
		window.status = "Error/s Encountered. Please check logs.";
		err = '<br><br><b>' + eType + ' [' + eCode + ']</b>'
						 + '<br>value/s passed : ' + eValue
						 + '<br>js error message: ' + eMsg
		if (eCom != undefined)
			err += "<br>comment: " + eCom;
		
		//make sure the latest error log is on top
		tempErr = errorLogs;
		errorLogs = err + tempErr;
	
		//logger box 
		var logBox = this.getLoggerVar("logger");
		if (logBox == "true") {
			thisID = this.htmlElement("errorLogWindow");
			thisID.style.display = "block";
			thisID = this.htmlElement("errorLogDisplay");
			this.checkElementExist(thisID, errorLogs, "innerHTML");
		}
		
	},
	
	open_window_ex : function(url, title, height, width, options) {
		
		var path = url;
		if( url.search(/^http:/) == -1 ) {
			path = "/popups/" + url;
		} else {
			var wnbaDomain = new RegExp("/^http:\/\/www.wnba.com\/([.*]*)/");
			var result = url.match(wnbaDomain);
			if( result != null ) {
				path = "/popups/" + result[1];
			} else {
				path = url;
			}
		}
		var opts = '';
		if(options == null || options == "null")
			opts = 'toolbar=0, location=0, directories=0, status=0, menubar=0, scrollbars=yes, resizable=yes';
		else
			opts = options;
		
		opts += ',width=' + width;
		opts += ',height=' + height;
		mywin=window.open(path,title,opts);
		
	},
	
	//modulo checker for odd or even number
	isEven : function(num) {
		try {
			var mod = num%2;
			return (mod == 0) ? true : false;
		}
		catch (e) {
			this.errorLogger("Helper class error", "isEven", "num="+num, e.message);
		}
	},
	
	getLoggerVar : function(pvar) {
		
		var getVar = new Array(); 
		var sGet = window.location.search; 
		if (sGet) { 
			sGet = sGet.substr(1); 
			var sNVPairs = sGet.split("&"); 
			for	(var i = 0; i < sNVPairs.length; i++) { 
				var sNV = sNVPairs[i].split("="); 
				var sName = sNV[0]; var sValue = sNV[1]; getVar[sName] = sValue; 
			} 
			return getVar[pvar];
		}
		
	},
	
	
	// ********************** BELOW THIS ARE DISPLAY FUNCTION HELPERS **********************
	
	// LEADERS - grab the first one only if 2 or more leaders (design purposes for now)
	checkLeadersForLiveStats : function(dSplit) {
		try {
			var leadArr = new Array ();
			var dArray = null;
			var splitLead = dSplit.split("^");
			var thisLead = dSplit;
	
			if (splitLead.length > 1) 
				thisLead = splitLead[0];
	
			dArray = thisLead.split("|");
	
			for (var x=0; x < dArray.length; x++) {
				leadArr[x] = dArray[x];
			}
		
			return leadArr;
		}
		catch (e) {
			this.errorLogger("Helper class error", "checkLeadersForLiveStats", "dSplit="+dSplit, e.message); 
		}
	},
	
	//percentage display
	pctDisplayConverter : function(pct, dispOption) {
		
		try {
			var str = "";
			pct = "" + pct;
			// ex. 35.5 -> .355
			if (dispOption == 1) {
				str = ".";
				for (var x = 0; x < pct.length; x++) {
					if (pct.charAt(x) != '.')
						str += pct.charAt(x);
				}
			}
		
			if (dispOption == 2) {
				var c = 0;
				for (var x = pct.indexOf('.')+1; x < pct.length; x++) {
					str += pct.charAt(x)
					c++;
					if (c == 2) str += ".";
				}
			}
		
			return str;
		}
		catch (e) {
			this.errorLogger("Helper class error", "pctDisplayConverter", "pct="+pct+",dispOption="+dispOption, e.message);
		}
		
	},
	
	helperLiveGameText : function(gsText, pcTime) {
	
		try {
			var pText = "";
			var vTime = "";
			var qtr = 0;
			var flag = 0;
			var x = 0;
			var l = gsText.length;
		
			if (gsText.indexOf("End")>-1 || gsText.indexOf("end")>-1)
				vTime = "End ";
		
			if (gsText.indexOf("Start")>-1 || gsText.indexOf("start")>-1)
				vTime = "Start ";
			
			if (gsText.indexOf("1")>-1)
				pText = vTime + "1st ";
			
			if (gsText.indexOf("2")>-1)
				pText = vTime + "2nd ";
			
			if (gsText.indexOf("3")>-1)
				pText = vTime + "3rd ";
			
			if (gsText.indexOf("4")>-1)
				pText = vTime + "4th ";
		
			if (gsText.indexOf("ot")>-1 || gsText.indexOf("OT")>-1)
				pText = pText + "OT ";
			
			pText = pText + pcTime;
			
			if (gsText.indexOf("Halftime")>-1 || gsText.indexOf("halftime")>-1)
				pText = "Halftime";
		
			return (pText);
		}
		catch (e) {
			this.errorLogger("Helper class error", "helperLiveGameText", "gsText="+gsText+",pcTime="+pcTime, e.message);
		}
		
	},
	
	// PLAY-BY-PLAY HELPER TO GET HOME/VISITOR TEAM
	pbpTeamSpec : function(gamecode, team) {
		
		try {
			var str = gamecode.split("/");
			var returnThis = "";
		
			var getThis = (team == "visitor") ? str[1].substring(0,3) : str[1].substring(3,6);
		
			returnThis = this.teamNameConvert(getThis, 0, 3);
		
			return returnThis;
		}
		catch(e) {
			this.errorLogger("Helper class error", "pbpTeamSpec", "gamecode="+gamecode+",team="+team, e.message);
		}
		
	},
	
	//CONVERT TEAM NAME DATA
	teamNameConvert : function (team, type, option) {
	
		var tempTeam = new Array ();
	
		/* 
		TYPE/OPTION:
		0 - abbreviation
		1 - city
		2 - nickname
		3 - teamcode
		4 - name
		5 - team color
		*/
	
		//just to make sure its all uppercase/lowercase
		if (type == 0) 
			team = team.toUpperCase();
	
		if (type == 3)
			team = team.toLowerCase();
	
		tempTeam[0] = new Array ("", "", "", "", "");
				
		tempTeam[1] = new Array ("HOU", "Houston", "Comets", "comets", "Houston Comets", "#AE021C");
		tempTeam[2] = new Array ("NYL", "New York", "Liberty", "liberty", "New York Liberty", "#00349C");
		tempTeam[3] = new Array ("CHA", "Charlotte", "Sting", "sting", "Charlotte Sting", "#F26530");
		tempTeam[4] = new Array ("PHO", "Phoenix", "Mercury", "mercury", "Phoenix Mercury", "#D70A09");
		tempTeam[5] = new Array ("SAC", "Sacramento", "Monarchs", "monarchs", "Sacramento Monarchs", "#3A2068");
		tempTeam[6] = new Array ("SAN", "San Antonio", "Silver Stars", "silver stars", "San Antonio Silver Stars", "#B2BBC5");
		tempTeam[7] = new Array ("LAS", "Los Angeles", "Sparks", "sparks", "Los Angeles Sparks", "#FFCC00");
		tempTeam[8] = new Array ("DET", "Detroit", "Shock", "shock", "Detroit Shock", "#FB3E5C");
		tempTeam[9] = new Array ("WAS", "Washington", "Mystics", "mystics", "Washington Mystics", "#143664");
		tempTeam[10] = new Array ("CON", "Connecticut", "Sun", "sun", "Connecticut Sun", "#C72E32");
		tempTeam[11] = new Array ("MIN", "Minnesota", "Lynx", "lynx", "Minnesota Lynx", "#10693B");
		tempTeam[12] = new Array ("IND", "Indiana", "Fever", "fever", "Indiana Fever", "#FF0000");
		tempTeam[13] = new Array ("CHI", "Chicago", "Sky", "sky", "Chicago Sky", "#588CBE");
		tempTeam[14] = new Array ("SEA", "Seattle", "Storm", "storm", "Seattle Storm", "#014123");
		
		tempTeam[15] = new Array ("EST", "East", "All-Stars", "east", "East All-Stars", "#006BB7");
		tempTeam[16] = new Array ("WST", "West", "All-Stars", "west", "West All-Stars", "#F86F1D");
		tempTeam[17] = new Array ("ATL", "Atlanta", "Dream", "dream", "Atlanta Dream", "#268DCF");
	
		var x = 1;
	
		//check
		while (x <= tempTeam.length) {
			if (tempTeam[x][type] == team)
				return tempTeam[x][option];
			x++;
		}
	
		//return what was passed if no comparison was made
		if (option == 5)
				return "#FFFFFF";
		else
			return team;
		
	},
	
	// PLAY-BY-PLAY HELPER FOR TEXT MANIPULATION
	pbpTextData : function(str, option) {
		
		try {
			var returnThis = "";
	
			switch (option) {
		
				case 1: {
					for (x = 0; x <= str.indexOf(")"); x++) {
						returnThis += str.charAt(x);
					}
				
					break;
				}
		
				case 2: {
					var len = ((str.indexOf("]") - str.indexOf("[")) > 4) ? str.indexOf("[") : str.indexOf("]")+1;
					for (var x = len; x <= str.length; x++) {
						returnThis += str.charAt(x);
					}
					break;
				}
		
				case 3: {
					var len = str.indexOf(")") + 1;
					for (var x = len; x <= str.length; x++) {
						returnThis += str.charAt(x);
					}
				}
		
			}
		
			return returnThis;
		}
		catch (e) { 
			this.errorLogger("Helper class error", "pbpTextData", "str="+str+",option="+option, e.message);
		}
		
	},
	
	XML2JS : function(xmlDoc, containerTag) {
		
		var output = new Array();
		var rawData = xmlDoc.getElementsByTagName(containerTag)[0];
		var i, j, oneRecord, oneObject;
		for(i=0; i< rawData.childNodes.length; i++){
			if (chkNType(rawData.childNodes[i])==1){
			
				oneRecord = rawData.childNodes[i];
				oneObject = output[output.length] = new Object;
				for (j=0; j<oneRecord.childNodes.length;j++){
					
					if (chkNType(oneRecord.childNodes[j])==1)
						oneObject[oneRecord.childNodes[j].tagName]= oneRecord.childNodes[j].firstChild.nodeValue;
				
				} 
			} 
		}	
		
	},
	
	//CHECK STRING FOR UNDEFINED
	checkStrUDF : function(str) {
		
		if (str == undefined || str == null)
			return true;
		else
			return false;
		
	},
	
	
	//get sibling element of given element
	getNextElement: function(node){
		if(node.nodeType==1){
			return node;
		}
		if(node.nextSibling){
			return helper.getNextElement(node.nextSibling);
		}
		return null;
	},
	
	//PLAYER'S POSITION CONVERSION
	convertPosition : function(pos) {
		
		var str = "";
		switch (pos) {
			case ("G1") : str = "G"; break;
			case ("G2") : str = "G"; break;
			case ("F1") : str = "F"; break;
			case ("F2") : str = "F"; break;
			case ("C") : str = "C"; break;
		}
	
		return str;
	},
	
	convertPORound : function(rnd) {
		
		var str = "";
		switch (rnd) {
			
			case("1") : str = "First Round"; break;
			case("2") : str = "Conference Semi-Finals"; break;
			case("3") : str = "Conference Finals"; break;
			case("4") : str = "Finals"; break;
			
		}
		
		return str;
		
	},
	
	 insertAfter: function(newElement,targetElement) {
  		var parent = targetElement.parentNode;
  			if (parent.lastChild == targetElement){
    			parent.appendChild(newElement);
  			}
  			else{
    			parent.insertBefore(newElement,targetElement.nextSibling);
  			}
	},		
	
	// GAME DATE BUILD FOR THE BOXSCORE
	boxGameDate : function(gDate) {
		
		var gameDate = new Array(2) ; 
		var gD = ""; 
		var d;
						
		//initialize gamedate array
		for (x = 0; x <= 2; x++) { gameDate[x] = ""; }
		for (x = 0; x < 4; x++) { gD += gDate.charAt(x); }
		
		gameDate[2] = gD;
		gD = "";
	
		for (x = 0; x < 2; x++) { gD += gDate.charAt(x+4); }
		gameDate[0] = gD;
		gD = "";
	
		for (x = 0; x < 2; x++) { gD += gDate.charAt(x+6); }
		gameDate[1] = gD;
		gD = "";
	
		gD = gameDate[0]; 
		d = parseInt(gD);
		switch (d) {
			case 1: gameDate[0] = "January";break;
			case 2: gameDate[0] = "February";break;
			case 3: gameDate[0] = "March";break;
			case 4: gameDate[0] = "April";break;
			case 5: gameDate[0] = "May";break;
			case 6: gameDate[0] = "June";break;
			case 7: gameDate[0] = "July";break;
			case 8: gameDate[0] = "August";break;
			case 9: gameDate[0] = "September";break;
			case 10: gameDate[0] = "October";break;
			case 11: gameDate[0] = "November";break;
			case 12: gameDate[0] = "December";break;
		}
		
		var returnThis = gameDate[0] + " " + gameDate[1] + ", " + gameDate[2];
		return returnThis;
		
	},
	
	checkElementExist : function(elementID, str, elementProp) {
		
		if (elementID == undefined || elementID == null)
			return; //do nothing or we could log all the missing
		else
			elementID[elementProp] = str;
		
	},
	
	getStyle : function(el) {
		if(el.currentStyle){
			return el.currentStyle.backgroundColor;
		}
		if(document.defaultView){
			return document.defaultView.getComputedStyle(el, '').getPropertyValue("background-color");
		}
		return null;
	},
	
	//ADD COMMAS TO NUMBERS
	addNumComma : function(num) {
		
		var regEx = new RegExp('(-?[0-9]+)([0-9]{3})');
		while (regEx.test(num)) {
			num = num.replace(regEx, '$1,$2');
		}
		
		return num;
		
	}
		
	
}


/* ********************** LAMBO **********************   */


// @name      The Fade Anything Technique
// @namespace http://www.axentric.com/aside/fat/
// @version   1.0-RC1
// @author    Adam Michela

var Fat = {
	make_hex : function (r,g,b) 
	{
		r = r.toString(16); if (r.length == 1) r = '0' + r;
		g = g.toString(16); if (g.length == 1) g = '0' + g;
		b = b.toString(16); if (b.length == 1) b = '0' + b;
		return "#" + r + g + b;
	},

	fade_all : function ()
	{
		var a = document.getElementsByTagName("*");
		for (var i = 0; i < a.length; i++) 
		{
			var o = a[i];
			var r = /fade-?(\w{3,6})?/.exec(o.className);
			if (r)
			{
				if (!r[1]) r[1] = "";
				if (o.id) Fat.fade_element(o.id,null,null,"#"+r[1]);
			}
		}
	},
	
	fade_element : function (id, from, fps, duration, to) 
	{
		if (!fps) fps = 20;
		if (!duration) duration = 2000;
		if (!from || from=="#") 
			from = "#FFFF33";
		else
			from = helper.teamNameConvert(from, 3, 5);
		
		if (!to) to = "#FFFFFF"; //this.get_bgcolor(id);
		
		var frames = Math.round(fps * (duration / 1000));
		var interval = duration / frames;
		var delay = interval;
		var frame = 0;
		
		if (from.length < 7) from += from.substr(1,3);
		if (to.length < 7) to += to.substr(1,3);
		
		var rf = parseInt(from.substr(1,2),16);
		var gf = parseInt(from.substr(3,2),16);
		var bf = parseInt(from.substr(5,2),16);
		var rt = parseInt(to.substr(1,2),16);
		var gt = parseInt(to.substr(3,2),16);
		var bt = parseInt(to.substr(5,2),16);
		
		var r,g,b,h;
		while (frame < frames)
		{
			r = Math.floor(rf * ((frames-frame)/frames) + rt * (frame/frames));
			g = Math.floor(gf * ((frames-frame)/frames) + gt * (frame/frames));
			b = Math.floor(bf * ((frames-frame)/frames) + bt * (frame/frames));
			h = this.make_hex(r,g,b);
			setTimeout("Fat.set_bgcolor('"+id+"','"+h+"')", delay);

			frame++;
			delay = interval * frame; 
		}
		setTimeout("Fat.set_bgcolor('"+id+"','"+to+"')", delay);
	},
	set_bgcolor : function (id, c)
	{
		var o = document.getElementById(id);
		if( o != undefined){
			o.style.backgroundColor = c;
		}
	},
	get_bgcolor : function (id)
	{
		var o = document.getElementById(id);
		if( o != undefined){
		while(o)
		{
			var c;
			/*
			if (window.getComputedStyle) c = window.getComputedStyle(o,null).getPropertyValue("background-color");
			if (o.currentStyle) c = o.currentStyle.backgroundColor;
			if ((c != "" && c != "transparent") || o.tagName == "BODY") { break; }
			o = o.parentNode;
			*/
			var got_style = getStyle(o);
			if(got_style != null && ! got_style.match(/rgba\s*\(0\s*,\s*0\s*,\s*0\s*,\s*0\)/)){
				
				c = got_style;
			}
			
			if (o.currentStyle) {
				c = o.currentStyle.backgroundColor; 
			} 
			if ((c != "" && c != "transparent" && !(c===undefined)) || o.tagName == "BODY") { 
				//alert("breaking: " + c);
				break; 
			}
			o = o.parentNode;
		}
		
		}
		if (c == undefined || c == "" || c == "transparent") {
			c = "#FFFFFF";
		}
		var rgb = c.match(/rgb\s*\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)/);
		
		if (rgb) {
			c = this.make_hex(parseInt(rgb[1]),parseInt(rgb[2]),parseInt(rgb[3]));
		} else {
			var rgba = c.match(/rgba\s*\((\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\)/);
			if (rgba){
				c = this.make_hex(parseInt(rgba[1]),parseInt(rgba[2]),parseInt(rgba[3]));
			}
		}
		return c;
	}
}



function openCourtSideNew(gamecode){
	window.open('/csl/index.html?gamecode='+gamecode,'CourtsideLive','toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,screenX=12,screenY=12,top=12,left=12,copyhistory=0,width=760,height=643');
}

/****************************************************************************
END - HELPER FUNCTIONS 
****************************************************************************/