
// Find the X Position from the browser or from a specified element
function findPosX(object,oReferenceElement) {
	if(!oReferenceElement)
		oReferenceElement = null;
	var currentLeft = 0;
	if (object.offsetParent )
	{
		while (object.offsetParent && object != oReferenceElement)
		{
			currentLeft += object.offsetLeft
			object = object.offsetParent;
		}
	}
	else if (object.x)
		currentLeft += object.x;
	return currentLeft;
}

// Find the Y Position from the browser or from a specified element
function findPosY(object,oReferenceElement) {
	if (!object) return 0;
	if(!oReferenceElement)
		oReferenceElement = null;
	var currentTop = 0;
	if (object.offsetParent)
	{
		while (object.offsetParent)
		{
			currentTop += object.offsetTop
			object = object.offsetParent;
			if(object == oReferenceElement)
				break;
		}
	}
	else if (object.y)
		currentTop += object.y;
	return currentTop;
}

// Obtain innertext of the element specified
function getInnerText(oElement) {
	var _innerText = oElement.innerText;
	if (_innerText == undefined) {
  		_innerText = oElement.innerHTML.replace(/<[^>]+>/g,"");
	}
	return _innerText;
}
// Show or hide an element by either ID or referencing the object (This function toggles the show hide)
function showHide(element) {
	for (var i=0; i<arguments.length; i++) {
		if (typeof(arguments[i]) == 'string') {
			var object = document.getElementById(arguments[i]);
		} else {
			var object = element;
		}

		if(object.style.display == 'none') {
			object.style.display = '';
		} else {
			object.style.display = 'none';
		}
	}
}

// Show or hide an element (use this function if you need the logic to not toggle)
function showHide2(element, action) {
	if (typeof(arguments[0]) == 'string') {
		var object = document.getElementById(arguments[0]);
	} else {
		var object = element;
	}
	if (action == "show") {
		object.style.display = "";
	} else if (action == "hide") {
		object.style.display = "none";
	}
}

// show or hide an element by visible method (not display)
function showHide3(element, action) {
	if (typeof(arguments[0]) == 'string') {
		var object = document.getElementById(arguments[0]);
	} else {
		var object = element;
	}
	if (action == "show") {
		object.style.visibility = "visible";
	} else if (action == "hide") {
		object.style.visibility = "hidden";
	} 
}

//cross browser. gets child html elements as opposed to childNodes[] which returns textnodes/whitespace in FF but not in IE.
function getChildElements(object){
	var arrChildElements = [];
	for(var i=0;i<object.childNodes.length;i++){
		try{
			if(object.childNodes[i].nodeType == 1){
				arrChildElements.push(object.childNodes[i]);
			}
		}catch(e){}
	}
	return arrChildElements;
}

//Proves true if the oNeedleElement is in the oHaystackElement function
function inParent(oNeedleElement,oHaystackElement){
	while(oNeedleElement.parentNode){
		if(oNeedleElement==oHaystackElement){
			return true;
		}
		oNeedleElement=oNeedleElement.parentNode
	}
	return false;
}

function showHideAllElements(cParentID,nOffSet){
	if(!nOffSet) nOffSet = 0;
	var oParent = document.getElementById(cParentID);
	var arrChildNodes = oParent.childNodes;
	for(var i=nOffSet;i<arrChildNodes.length;i++){
		try{
			if(arrChildNodes[i].style.display == '')
				arrChildNodes[i].style.display = 'none';
			else
				arrChildNodes[i].style.display = '';
		}catch(e){}
	}
}

function populateStdDynamicInfoBox(cAnchorID, cURL, nDivWidth , nDivHeight, cUrlNameValuePairs , fnOnComplete){
	if(!nDivWidth)	var nDivWidth = null;
	if(!nDivHeight)	var nDivHeight = null;
	if(!cUrlNameValuePairs)	var cUrlNameValuePairs = null;	
	if(!fnOnComplete) var fnOnComplete = null;
	if(!isSSL()){
		var cProtocol = "http://"
	}else{
		var cProtocol = "https://"
	}
	Ajax.ContentOnDemand(cAnchorID, cURL, nDivWidth , nDivHeight, cUrlNameValuePairs , fnOnComplete);
}

function fillAvailableHeight(oArgs){
	if(document.getElementById(oArgs['ElementID'])){
		var oElement = document.getElementById(oArgs['ElementID']);
		var oParent = oArgs['ParentObj'];
		if(oParent.height == '100%'){oParent.removeAttribute('height');}
		var nParentHeight =  oParent.offsetHeight;
		var oSpan = document.createElement('SPAN');
		var oElementParent = oElement.parentNode;
		oElementParent.insertBefore(oSpan , oElement);
		var oPositionRef = (typeof(oArgs['PositionRef']) == 'undefined' ?  oParent : oArgs['PositionRef']);
		var nElementPositionY = findPosY(oSpan , oPositionRef);
		var nNewHeight = nParentHeight - nElementPositionY + (typeof(oArgs['HeightOffset']) != 'undefined' ? oArgs['HeightOffset'] : 0);
		oElement.style.height = (nNewHeight) + 'px';
		oElement.style.position = 'relative';
		if(typeof(oArgs['onResizeFn']) != 'undefined')
			oArgs['onResizeFn'](oElement,nNewHeight);
	}
}


function resizePromoElements(){
	if(document.getElementById('MainNewLayout')){
		var oGroupedContentParentReference = document.getElementById('GroupedNewLayout');
		var oMainContentParentReference = document.getElementById('MainContentParentNewLayout');
		var oLeftRailParentReference = document.getElementById('LeftNewLayout');	
		var oPositionRefRight = document.getElementById('RightRailNewLayout_Content');
		var oPositionRefLeft = document.getElementById('LeftNewLayout_Content');
		var oPositionRefFooter = document.getElementById('MainNewLayout_Content');
		if(document.getElementById('LeftNewLayout')){
			fillAvailableHeight({ElementID: 'divPromoModuleFooter',PositionRef: oPositionRefFooter, ParentObj: oGroupedContentParentReference});
			fillAvailableHeight({ElementID:'divLiveNowSpecialEventsParent',PositionRef: oPositionRefRight, ParentObj: oGroupedContentParentReference , onResizeFn: function(oElement ,nHeight){oElement.getElementsByTagName('DIV')[0].style.height=nHeight+'px';} });
			fillAvailableHeight({ElementID:'divSiteLeftRailAdModule', PositionRef: oPositionRefLeft ,ParentObj:oMainContentParentReference , onResizeFn: function(oElement ,nHeight){document.getElementById('divSiteLeftRailAdModule').style.position='';document.getElementById('divSiteLeftRailAdModule').style.visibility = '';}});
		}else{
			if(document.getElementById('FeatureHeaderParent')){
				var nOffset = document.getElementById('FeatureHeaderParent').offsetHeight;
				nOffset = nOffset + document.getElementById('SiteStatusBarNewLayout').offsetHeight;
				fillAvailableHeight({ElementID: 'divLiveNowNewLayout',PositionRef:  oPositionRefRight, ParentObj: oPositionRefFooter, HeightOffset: nOffset });
			}
		}
	}else{
		if( document.getElementById('tblSiteLeftRail')){
			var oLeftRailTable = document.getElementById('tblSiteLeftRail');
			var oMainContentTableRow = getParentNodeByTagName(oLeftRailTable , 'TR');
			var arrMainTableCells = getFirstLevelElementsByTagName(oMainContentTableRow , 'TD');
			var oLeftRailParentReference = arrMainTableCells[0];
			if(getChildElements(arrMainTableCells[1]).length > 0){
				var oMainContentParentReference = arrMainTableCells[1];
			}else{
				var oMainContentParentReference = arrMainTableCells[2];
			}
			var nMainContentHeight = oMainContentParentReference.offsetHeight;
			fillAvailableHeight({ElementID:'divPromoModuleFooter', ParentObj:oMainContentParentReference , ContentHeight: nMainContentHeight});
			fillAvailableHeight({ElementID:'divSiteLeftRailAdModule', ParentObj:oLeftRailParentReference , ContentHeight: nMainContentHeight , onResizeFn: function(oElement ,nHeight){document.getElementById('divSiteLeftRailAdModule').style.visibility = '';if(nHeight<85){var oParent=oElement.parentNode; oParent.removeChild(oElement);} }});
			fillAvailableHeight({ElementID:'divLiveNowSpecialEventsParent' , ParentObj: oMainContentParentReference , ContentHeight: nMainContentHeight , onResizeFn: function(oElement ,nHeight){oElement.getElementsByTagName('DIV')[0].style.height=nHeight+'px';} });		
		}
	}
}


function removeElement(cElementID){
	if(document.getElementById(cElementID)){
		var oElement = document.getElementById(cElementID);
		oElement.style.display = 'none';
		var oParent = oElement.parentNode;
		oParent.removeChild(oElement);
	}
}
function getParentNodeByTagName(oElement, cTagName){
	var oElementParent = oElement.parentNode
	while(oElementParent.tagName.toUpperCase() != cTagName.toUpperCase()){
		oElementParent = oElementParent.parentNode;
		if(typeof(oElementParent.tagName) == 'undefined')
			break;		
	}
	return oElementParent
}
function getFirstLevelElementsByTagName(oElement, cTagName){
	cTagName = cTagName.toUpperCase();
	var arrElements = [];
	for (var i=0; i<oElement.childNodes.length; i++) {
		node = oElement.childNodes[i];
		if (node.nodeName==cTagName) {
			arrElements.push(node);
		}
	}
	return arrElements
}
function revealElements(cElementType){
	var arrElements = document.getElementsByTagName(cElementType);
	for(var i=0;i<arrElements.length;i++){
		arrElements[i].style.visibility = '';
	}
}

function getObject(obj){
	return obj;
}

function addEvent( obj, type, fn ) {
  if ( obj.attachEvent ) {
    obj['e'+type+fn] = fn;
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
    obj.attachEvent( 'on'+type, obj[type+fn] );
  } else
    obj.addEventListener( type, fn, false );
}
function removeEvent( obj, type, fn ) {
  if ( obj.detachEvent ) {
    obj.detachEvent( 'on'+type, obj[type+fn] );
    obj[type+fn] = null;
  } else
    obj.removeEventListener( type, fn, false );
}

function showCurrentDateMMDDYY (targetElement, seperator) {
	var today = new Date();
	
	var todayMonth = today.getMonth();
	var todayDay = today.getDate();
	var todayYear = today.getFullYear();
	
	document.getElementById(targetElement).innerHTML = (todayMonth+1)+seperator+todayDay+seperator+todayYear;
}

// Function to strip characters and add ellipsis (or whatever user specifies) to long strings
function jsEllipsis(targetID, numCharsAllowed, ellipsisToShow) {
	// PARAMETERS
	// targetID = ID of the object that holds the text which will be stripped
	// numCharsAllowed = numerical value that specifies how many characters the string can be before it is stripped
	// ellipsisToShow = What to display as the ellipsis if the string is stripped.

	var targetText = document.getElementById(targetID).innerHTML;
	var textLength = targetText.length;
	
	if (textLength > numCharsAllowed) {
		targetText = targetText.substr(0, numCharsAllowed);
		targetText = targetText+ellipsisToShow;
	}
	
	document.getElementById(targetID).innerHTML = targetText;
}