//------------------------------------------------------------------------------------------
// Common RHP JS  (c) netAdapt Ltd.
//------------------------------------------------------------------------------------------

function ToggleBlock( elementId)
{
	var element = document.getElementById( elementId )
	if( element.style.display == 'block' )
	{
		element.style.display = 'none';
		element.style.position = 'relative';
	}
	else
	{
		element.style.display = 'block';
		element.style.position = 'relative';
	}
}

function GetPagePosArray( ev  )
{
	var posArray = new Array( );
	if ( ev.pageX && ! window.opera )
	{
		posArray['x'] = ev.pageX;
		posArray['y'] = ev.pageY;
	}
	else
	{
		posArray['x'] = ev.clientX + document.body.scrollLeft;
		posArray['y'] = ev.clientY + document.body.scrollTop; 		
	}
	return posArray;
}

function XViewPop( ev, divId, isPosAnchoredParam, offSetXP, offSetYP )
{				
	var offSetX = offSetXP || 10;
	var offSetY = offSetYP || -10;
	
	var isPosAnchored = isPosAnchoredParam || false;
	
	var popUpEl = document.getElementById( divId );
	var popupStyle = popUpEl.style;
	
//    if (ev != null)
//    {
//	    var posArray = GetPagePosArray( ev );
//	    var xPos = posArray['x'];
//	    var yPos = posArray['y'];
        //alert (xPos + ',' + yPos);
//    }
//    else
//    {
//        var xPos = document.body.clientWidth / 2 + 150;
//        var yPos = document.body.clientHeight / 2 - 250 + document.body.scrollTop;
        //yPos = document.getElementById('cardFilters').style.top;
        //xPos = document.getElementById('cardFilters').style.left;
//    }

    if (ev != null)
    {
        var posArray = GetPagePosArray( ev );
        var xPos = posArray['x'];
        var yPos = posArray['y'];
        //alert (xPos + ',' + yPos);
    }
    else
    {
        var divWidth = popupStyle.width.substring(0,popupStyle.width.length - 2);
        var xPos = document.body.clientWidth / 2 - (divWidth / 2);
        var yPos = document.body.clientHeight / 2 - 200 + document.body.scrollTop;
        //yPos = document.getElementById('cardFilters').style.top;
        //xPos = document.getElementById('cardFilters').style.left;
    }
    	
	xPos += offSetX;
	yPos += offSetY;

	if ( ! isPosAnchored )
	{					
		var elWidth =  popUpEl.scrollWidth;
		var elHeight =  popUpEl.scrollHeight;
		var clWidth = document.body.clientWidth + document.body.scrollLeft;
		var clHeight = document.body.clientHeight + document.body.scrollTop;
		
		if ((xPos + elWidth) > clWidth)
		{				
			xPos -= ((xPos + elWidth+20)-clWidth); //correction		
		}
		if ((yPos + elHeight) > clHeight)
		{				
			yPos -= ((yPos + elHeight+20)-clHeight); //correction		
		}	
	}
	
	popupStyle.zIndex = 200;
	popupStyle.top = yPos;
	popupStyle.left = xPos;
	popupStyle.visibility = 'visible';	
}

function XKillPop( divId )
{
	document.getElementById( divId ).style.visibility = 'hidden';
}

function XViewPopTip( ev, toolTopText, offSetXP, offSetYP  )
{
	var offSetX = offSetXP || 0;
	var offSetY = offSetYP || 0;
	document.getElementById( 'xpoptooltip' ).innerHTML = toolTopText;
	XViewPop( ev, 'xpoptooltip', true, offSetX, offSetY );	
}

function XKillPopTip( )
{	
	XKillPop( 'xpoptooltip' );
}

function PopFullWin( url )
{
	var newWindow = window.open( url );
	newWindow.focus();
}

function PopAppWin( popUrl, popWidth, popHeight )
{
	var winParams='toolbar=no,status=no,width=' + popWidth + ',height=' + popHeight + ',resizable=yes,scrollbars=yes';	
	var newWindow = window.open( popUrl, 2, winParams );
	newWindow.focus( );
}

function SelectAllCheckBoxes( formId, elNamefilter, isToggle )
{
	var checkBoxForm = document.getElementById( formId );
	var numFormEls = checkBoxForm.length;	
	//Traverse form and get all selected options.
	for (var i=0; i<numFormEls; i++ )
	{
		//is actual or target
		var formEl = checkBoxForm[i];		
		if ( formEl.type == 'checkbox') //a select element
		{									
			var elName =  formEl.name;	
			if ( elName.indexOf( elNamefilter ) >= 0 ) //is a substr
			{				
				if ( isToggle )
				{
					formEl.checked  = !formEl.checked;
				}
				else
				{
					formEl.checked  = true;
				}
			}			
		}
	}
}

//------------------------------------------------------------------------------------------
// Mini Boards - (c) netAdapt Ltd.
//------------------------------------------------------------------------------------------

var g_pcSize;
var g_pcSet;
var g_board;

function GetImgStyle( pcCode, tileSize )
{
	var offSet = 0;
	var scalar = -tileSize;
	var isWhite = true;
	switch ( pcCode )
	{
		case 'q':isWhite=false;
		case 'Q':offSet = 1;break;
		case 'b':isWhite=false;
		case 'B':offSet = 2;break;
		case 'n':isWhite=false;
		case 'N':offSet = 3;break;
		case 'r':isWhite=false;
		case 'R':offSet = 4;break;
		case 'p':isWhite=false;
		case 'P':offSet = 5;break;						
		case 'k':isWhite=false;
		case 'K':offSet = 0;break;						
	}
	var xOffset = offSet*scalar;
	var yOffset = ((isWhite) ? 0 : -tileSize);	
	return (xOffset) + 'px ' +  (yOffset) + 'px ';		
}

function DestroyElement( elId )
{	
	var el = document.getElementById( elId );
	if ( el && el.parentNode)
	{		
		el.parentNode.removeChild( el );
	}	
}

//------------------------------------------------------------------------------------------
// DAD (c) netAdapt Ltd.
//------------------------------------------------------------------------------------------
var g_currentDragDivEl = null;
var g_dragOffsetX	= 0;
var g_dragOffsetY	= 0;
var g_topZindex		= 100;

function DAD_StartDrag( evt, dragElId )
{		
	if ( ! g_currentDragDivEl )
	{			
		var evt = evt || window.event;	
		var posArray  = GetPagePosArray( evt );
							
		g_currentDragDivEl = document.getElementById( dragElId );		
						
		g_dragOffsetX = posArray['x']-parseInt( g_currentDragDivEl.style.left );
		g_dragOffsetY = posArray['y']-parseInt( g_currentDragDivEl.style.top );	
		if ( document.addEventListener ) 
		{
			document.addEventListener("mousemove", DAD_Drag, false); 
		} 
		else if ( document.attachEvent ) 
		{			
			document.attachEvent("onmousemove", DAD_Drag ); 
		}	
		DAD_SetZIndex( g_currentDragDivEl );			
		return false;
	}	
}

function DAD_Drag( evt )
{	
	if (  g_currentDragDivEl )
	{
		var evt = evt || window.event;	
		var posArray  = GetPagePosArray( evt );
			
		g_currentDragDivEl.style.left = posArray['x']-g_dragOffsetX;  
		g_currentDragDivEl.style.top =  posArray['y']-g_dragOffsetY;
	}	
	return false;
}

function DAD_EndDrag( )
{
	g_currentDragDivEl = null;	
	if ( document.addEventListener ) 
	{
		document.removeEventListener("mousemove", DAD_Drag, false); 
	}
	else if ( document.detachEvent ) 
	{			
		document.detachEvent("onmousemove", DAD_Drag ); 
	}	
}

function DAD_SetZIndex( el )
{
	el.style.zIndex = ++g_topZindex;	
}


function GetXMLHttpRequest( )
{
	var xmlDoc;
	if (window.XMLHttpRequest) 
	{
		xmlDoc = new XMLHttpRequest();
	}
	else
	{
		xmlDoc = new ActiveXObject('Microsoft.XMLHTTP');	
	}	
	return xmlDoc;
}

function LoadXmlDoc( rootElId, url )
{						
	g_rootElId = rootElId;
	
	if (window.XMLHttpRequest) 
	{
		g_xmlDoc = new XMLHttpRequest();	
	}
	else
	{
		g_xmlDoc = new ActiveXObject('Microsoft.XMLHTTP');	
	}	
}


function GetCssClassFromNode( itemNode )
{
	return itemNode.getAttribute('cssclass');	
}

//------------------------------------------------------------------------------------------
// Pop Win class (c) netAdapt Ltd.
//------------------------------------------------------------------------------------------

var g_popWin;

function CPopWin( ev, elId, width, isPosAnchoredParam, offSetXP, offSetYP ) 
{
	this.m_ev = ev;
	this.m_elId = elId;	
	this.m_isPosAnchoredParam = isPosAnchoredParam;
	this.m_offSetXP = offSetXP || 0;
	this.m_offSetYP = offSetYP || 0;
	
	this.m_containerEl = document.createElement('DIV');		
	this.m_containerEl.className = 'xmenu';
	this.m_containerEl.style.zIndex = 30;		
	this.m_containerEl.style.position='absolute'
	this.m_containerEl.style.width = width;			
	this.m_containerEl.id = this.m_elId;	
	this.m_containerEl.onclick = Focus;
	
	this.m_scrollingContainerEl = document.createElement('DIV');		
	this.m_scrollingContainerEl.style.overflow = 'auto';	
	
	this.m_xmlDoc = null;
	
	this.Render = Render;
	this.SetHeight = SetHeight;
	this.AddContentItem = AddContentItem;
	this.AddTitleBar = AddTitleBar;	
	
	this.PopulateFromXml = PopulateFromXml;
	this.BuildContentFromDoc = BuildContentFromDoc;
	this.ProcessReqChange = ProcessReqChange;
	this.SetIOMessage = SetIOMessage;
	this.AddNewCol = AddNewCol;
	this.AddTextFromNode = AddTextFromNode;
	this.AddImageFromNode = AddImageFromNode;
	this.AddLabeledValueFromNode = AddLabeledValueFromNode;
	this.AddLinkFromNode = AddLinkFromNode;
	this.AddJsLinkFromNode = AddJsLinkFromNode;
	this.AddTitleFromNode = AddTitleFromNode;
	this.AddBarFromNode = AddBarFromNode;
	this.AddSubTitleFromNode = AddSubTitleFromNode;
	this.Launch = Launch;
	g_popWin = this;
	this.m_activeEl = null;	
	DAD_SetZIndex( this.m_containerEl );
}

function Focus( )
{
	 DAD_SetZIndex( this );
}

function Launch( title, url )
{	
	this.AddTitleBar( title );	
	this.Render( );	
	this.PopulateFromXml( url );	
}

function SetHeight( height )
{
	this.m_scrollingContainerEl.style.height= height;
}

function AddTitleBar( title )
{	
	var barDiv = document.createElement('DIV');					
	barDiv.style.width = this.m_containerEl.style.width;		
	var innerHtml = '<div class="xmenutitlebar" onmousedown="return DAD_StartDrag( event, \'' + this.m_elId + '\' );"  onmouseup="return DAD_EndDrag( );" ><img src="/img/uix/popclose.gif" style="cursor: pointer;float:right;padding-right:4px;" width="18px" height="18px" border="0" onclick="DestroyElement(\'' + this.m_elId + '\');"><div class="xmenutitlebartitle" style="padding:3px">' + title + '</div></div>';	
	barDiv.innerHTML = innerHtml;		
	this.m_containerEl.appendChild( barDiv );	
}

function AddContentItem( itemDiv )
{
	this.m_scrollingContainerEl.appendChild( itemDiv );	
}

function Render( )
{
	this.m_containerEl.appendChild( this.m_scrollingContainerEl );	
	document.body.appendChild( this.m_containerEl );	
	XViewPop( this.m_ev, this.m_containerEl.id, this.m_isPosAnchoredParam, this.m_offSetXP, this.m_offSetYP );	
}

function PopulateFromXml( url )
{		
	this.SetIOMessage('<img src="/img/uix/iobar.gif" class="xiobar">');	
	
	var isQueryString = (url.indexOf('?') > 0);
				
	url += (isQueryString)?'&':'?';
	url += 'cachebuster=' + (Math.floor(Math.random( )*999999));
			
	this.m_xmlDoc = GetXMLHttpRequest( );
	this.m_xmlDoc.onreadystatechange = this.ProcessReqChange;			
	this.m_xmlDoc.open('GET', url, true);	
	this.m_xmlDoc.send( null );
}

function SetIOMessage( ioMessage )
{
	if (ioMessage != '')
	{
		ioMessage = '<div style="text-align:center;padding:6px;">' + ioMessage + '<div>';
	}	
	this.m_scrollingContainerEl.innerHTML = ioMessage;
	this.SetHeight( 48 );
}


function BuildContentFromDoc( )
{
	
	this.SetIOMessage('');
	var xmlDocRes = this.m_xmlDoc.responseXML;      		
	var xmlRootEl = xmlDocRes.documentElement;

	
	if ( xmlRootEl.getAttribute('height'))
	{
		this.SetHeight( xmlRootEl.getAttribute('height') );
	}
	
	
	var menuItems = xmlRootEl.childNodes;
	var numMenuItems = menuItems.length;
	
	
	var i;	
	for (i=0; i<numMenuItems; i++)
	{			
		var menuOptionDiv=document.createElement('div');	
		menuOptionDiv.className = 'xmenuitem';
		
		var menuTable	= document.createElement('table');	
		var menuTBody	= document.createElement('tbody');	
		var menuRow 	= document.createElement('tr');	
		var menuCell 	= document.createElement('td');	
		
		menuRow.appendChild( menuCell );
		menuTBody.appendChild( menuRow );
		menuTable.appendChild( menuTBody );		
		menuOptionDiv.appendChild( menuTable );
				
		menuCell.style.verticalAlign = 'top';
		this.m_activeEl = menuCell;		
		
		
		if ( menuItems[i].nodeName == 'xmenuitem')
		{
			var menuOptionNodes = menuItems[i].childNodes;
			var numMenuOptions = menuOptionNodes.length;
			var n;
			for (n=0; n<numMenuOptions; n++)
			{	
				
				
				switch ( menuOptionNodes[n].nodeName )
				{
					case 'newcol': this.AddNewCol( menuOptionNodes[n] );break;
					case 'image': this.AddImageFromNode( menuOptionNodes[n], 'img' );break;
					case 'embed': this.AddImageFromNode( menuOptionNodes[n], 'embed' );break;
					case 'title': this.AddTitleFromNode( menuOptionNodes[n] ); break;
					case 'subtitle': this.AddSubTitleFromNode( menuOptionNodes[n] ); break;
					case 'labeledvalue':this.AddLabeledValueFromNode( menuOptionNodes[n] ); break;
					case 'text': this.AddTextFromNode( menuOptionNodes[n] ); break;
					case 'link': this.AddLinkFromNode( menuOptionNodes[n] );break;					
					case 'jslink': this.AddJsLinkFromNode( menuOptionNodes[n] );break;
					case 'bar': this.AddBarFromNode( menuOptionNodes[n] );break;
				} 				
			}			
		}						
		this.AddContentItem( menuOptionDiv );
	}
	
}

function AddNewCol(  newColItemNode )
{
	var newCell 	= document.createElement('td');	
	var colWidth 	= newColItemNode.getAttribute('width');
	if (colWidth )
	{
		newCell.style.width = colWidth;		
	}
	this.m_activeEl.parentNode.appendChild( newCell );
		
	newCell.style.verticalAlign = 'top';
	this.m_activeEl = newCell;	
}

function AddBarFromNode( barItemNote )
{
	var barValue = barItemNote.firstChild.nodeValue;	
	var barLabel = barItemNote.getAttribute('label');
	var barMax = barItemNote.getAttribute('max');
	var barWidthPx = barItemNote.getAttribute('widthpx');
		
	var barLenPercent =  (barValue/barMax)*100;
	var barLenPx = (barLenPercent/100)* barWidthPx;	
	
	var altValue = barValue + ' of ' + barMax;
	
	var barCode = '<div style="padding-top:4px;padding-bottom:4px;">';
		
	barCode += '<span style="float:right">';
	if ( barLabel && barValue )
	{
		barCode += '<span style="padding-left:4px;padding-right:4px;">' + barValue + '</span>';		
	}
	barCode += '<span style="border:solid 1px #AAA;padding:0px;margin:0px;">';
	barCode += '<img alt="' + altValue + '" width="' + (barLenPx) + 'px" height="8px" src="/img/uix/graphbg_remaining.gif" border="0px"><img alt="' + altValue + '" width="' + (barWidthPx-barLenPx) + 'px" height="8px" src="/img/uix/graphbg_used.gif" border="0px">';	
	barCode += '</span>'; //end bar container.
	
	barCode += '</span>'; //end floated
			
	if( barLabel )
	{
		barCode  += '<span class="' + GetCssClassFromNode( barItemNote ) + '">' + barLabel + '</span>';			
	}	
	barCode += '</div>';
	this.m_activeEl.innerHTML += barCode;	
}

function AddTextFromNode( textItemNode )
{
	if ( textItemNode.firstChild )
	{
		var textDiv = document.createElement('div');
		textDiv.className = GetCssClassFromNode( textItemNode );	
		textDiv.innerHTML = textItemNode.firstChild.nodeValue;	
		this.m_activeEl.appendChild( textDiv );
	}
}	

function AddTitleFromNode( titleItemNode )
{
	if (  titleItemNode.firstChild )
	{
		var titleDiv = document.createElement('div');	
		titleDiv.className = GetCssClassFromNode( titleItemNode );	
		titleDiv.innerHTML = titleItemNode.firstChild.nodeValue;	
		this.m_activeEl.appendChild( titleDiv );
	}
}

function AddSubTitleFromNode( subTitleItemNode)
{
	if ( subTitleItemNode.firstChild )
	{
		var subTitleDiv = document.createElement('div');	
		subTitleDiv.className = GetCssClassFromNode( subTitleItemNode );	
		subTitleDiv.innerHTML = subTitleItemNode.firstChild.nodeValue;	
		this.m_activeEl.appendChild( subTitleDiv );
	}
}

function AddImageFromNode( imgItemNode, elementName )
{
	var imgDiv = document.createElement('div');
	imgDiv.style.textAlign = 'center';
	var elImg = document.createElement(elementName);	
	elImg.className = GetCssClassFromNode( imgItemNode );	
	elImg.src = imgItemNode.firstChild.nodeValue;	
	
	var width = imgItemNode.getAttribute('width');
	var height = imgItemNode.getAttribute('height');		
	if ( width )
	{
		elImg.style.width = width;		
	}
	if ( height )
	{
		elImg.style.height = height;
	}	
	imgDiv.appendChild( elImg );
	this.m_activeEl.appendChild( imgDiv );
}

function AddLabeledValueFromNode(  labelValueItemNode  )
{
	var value = labelValueItemNode.firstChild.nodeValue;
	var labelTable =  document.createElement('table');
	var labelTBody	= document.createElement('tbody');	
	var labelRow 	= document.createElement('tr');	
	var labelCell 	= document.createElement('td');	
	var valueCell 	= document.createElement('td');	
	
	labelCell.className = GetCssClassFromNode( labelValueItemNode );	
	valueCell.className = 'xmenuvalue';
	labelCell.innerHTML = labelValueItemNode.getAttribute('label'); ;
	valueCell.innerHTML = value;	
	
	labelRow.appendChild( labelCell );
	labelRow.appendChild( valueCell );
	labelTBody.appendChild( labelRow );
	labelTable.appendChild( labelTBody );				
	this.m_activeEl.appendChild( labelTable );
}

function AddLinkFromNode(  linkItemNode )
{	
	var url = linkItemNode.firstChild.nodeValue;
	var text = linkItemNode.getAttribute('linktext');
	var script = linkItemNode.getAttribute('script'); 
	
	var linkDiv = document.createElement('div');
	linkDiv.className = GetCssClassFromNode( linkItemNode );		
	linkDiv.innerHTML = '<a style="color:#040607" href="' + unescape( url ) + '" ' + unescape(script) + ' >' + text + '</a>';
	this.m_activeEl.appendChild( linkDiv );
}

function AddJsLinkFromNode( jsLinkItemNode)
{	
	var script = jsLinkItemNode.firstChild.nodeValue;
	var text = jsLinkItemNode.getAttribute('linktext');	
	var isClosedOnSelect = jsLinkItemNode.getAttribute('isclosedonselect');	
	
	var destoryElementCode='';
	if ( 1 == isClosedOnSelect  )
	{
		destoryElementCode = 'DestroyElement(\'' + this.m_elId + '\');';
	}
		
	var linkDiv = document.createElement('div');
	linkDiv.className = GetCssClassFromNode( jsLinkItemNode );		
	linkDiv.innerHTML = '<a href="#" onclick=" ' + unescape(script) + ';' + destoryElementCode + 'return false;">' + text + '</a>';
	this.m_activeEl.appendChild( linkDiv );

}

function ProcessReqChange( )
{    
	var xmlDoc = g_popWin.m_xmlDoc;
	if (xmlDoc.readyState == 4)  //state complete
    {       
        if (xmlDoc.status == 200)  // only if status ok
        {                  	                                            
            g_popWin.BuildContentFromDoc( );            
        }
        else 
        {
            alert('There was a problem retrieving the XML data:\n' + xmlDoc.statusText);
        }
    }
    else
    {
    	//
    }
}
