/*********************************************************************************/
/*                  JomiTech Components For PHP Script File                      */
/*               Copyright © JomiTech 2007. All Rights Reserved.                 */
/*********************************************************************************/
var JTIEVer = getIEVersion();

function JTJSLog( message )
{
    if( typeof( jtLogWindow ) == "undefined" || jtLogWindow.closed )
    {
        jtLogWindow = window.open( "", null, "width=500,height=300,scrollbars=yes,resizable=yes,status=no,location=no,menubar=no,toolbar=no" );
        if( !jtLogWindow )
            return;

        jtLogWindow.document.open();
        jtLogWindow.document.write( "<html><head><title>JomiTech JavaScript Debug Output</title></head><body></body></html>" );
        jtLogWindow.document.close();
    }

    jtLogWindow.document.body.appendChild( jtLogWindow.document.createTextNode( message ) );
    jtLogWindow.document.body.appendChild( jtLogWindow.document.createElement( "br" ) );
}

function getEventTarget( e )
{
    return ( e.srcElement ) ? e.srcElement : e.target;
}

function getParentNode( object )
{
    var p = object.parentNode;

    while( p.id == ( object.id + "_outer" ) || p.id == ( object.id + "_outerdiv" ) )
        p = p.parentNode;

    return p;
}

function getSizedParentNode( object )
{
    if( getOuterNode( object ) )
        return getOuterNode( object ).offsetParent;
    else
        return object.offsetParent;
}

function getOuterNode( object )
{
    return document.getElementById( object.id + "_outer" );
}

function getBrowserScrollX()
{
    if( window.pageXOffset )
        return window.pageXOffset;
    else if( document.documentElement && document.documentElement.scrollLeft )
        return document.documentElement.scrollLeft;
    else
        return document.body.scrollLeft;
}

function getBrowserScrollY()
{
    if( window.pageYOffset )
        return window.pageYOffset;
    else if( document.documentElement && document.documentElement.scrollTop )
        return document.documentElement.scrollTop;
    else
        return document.body.scrollTop;
}

function setBrowserScrollX( x )
{
    if( window.pageXOffset )
        window.pageXOffset = x;
    else if( document.documentElement && document.documentElement.scrollLeft )
        document.documentElement.scrollLeft = x;
    else
        document.body.scrollLeft = x;
}

function setBrowserScrollY( y )
{
    if( window.pageYOffset )
        window.pageYOffset = y;
    else if( document.documentElement && document.documentElement.scrollTop )
        document.documentElement.scrollTop = y;
    else
        document.body.scrollTop = y;
}

function getBrowserWidth()
{
    if( document.documentElement && document.documentElement.clientWidth )
        return document.documentElement.clientWidth;
    else
        return document.body.clientWidth;
}

function getBrowserHeight()
{
    if( document.documentElement && document.documentElement.clientHeight )
        return document.documentElement.clientHeight;
    else
        return document.body.clientHeight;
}

function getObjectScreenX( object )
{
    var x = 0;

    while( object )
    {
        x += object.offsetLeft;

        object = object.offsetParent;
    }

    return x;
}

function getObjectScreenY( object )
{
    var y = 0;

    while( object )
    {
        y += object.offsetTop;

        object = object.offsetParent;
    }

    return y;
}

function setObjectScreenY( object, y )
{
    y -= getObjectScreenY( getParentNode( object ) );

    getTruePositionNode( object ).style.top = y + "px";
}

function getIEVersion()
{
    var rv = -1;

    if( navigator.appName == 'Microsoft Internet Explorer' )
    {
        var ua = navigator.userAgent;
        var re = new RegExp( "MSIE ([0-9]{1,}[\.0-9]{0,})" );

        if( re.exec( ua ) != null )
            rv = parseFloat( RegExp.$1 );
    }

    return rv;
}

function getTruePositionNode( obj )
{
    if( getOuterNode( obj ) )
        return getOuterNode( obj );
    else
        return obj;
}

function getParentWidth( obj )
{
    if( getSizedParentNode( obj ) == document.body )
        return getBrowserWidth();
    else
        return getTruePositionNode( getSizedParentNode( obj ) ).clientWidth;
}

function getParentHeight( obj )
{
    if( getSizedParentNode( obj ) == document.body )
        return getBrowserHeight();
    else
        return getTruePositionNode( getSizedParentNode( obj ) ).clientHeight;
}

function addEvent( object, eventName, functionPtr )
{
    if( window.addEventListener )
        object.addEventListener( eventName, functionPtr, false );
    else if( window.attachEvent )
        object.attachEvent( "on" + eventName, functionPtr );
}

function deleteEvent( object, eventName, functionPtr )
{
    if( window.removeEventListener )
        object.removeEventListener( eventName, functionPtr, false );
    else if( window.detachEvent )
        object.detachEvent( "on" + eventName, functionPtr );
}


function JTJSFont( fontFamily, fontSize, fontColor, fontWeight, fontLineHeight, fontAlign, fontStyle, fontVariant, fontCase )
{
    this.fontAlign = fontAlign;
    this.fontCase = fontCase;
    this.fontColor = fontColor;
    this.fontFamily = fontFamily;
    this.fontLineHeight = fontLineHeight;
    this.fontSize = fontSize;
    this.fontStyle = fontStyle;
    this.fontVariant = fontVariant;
    this.fontWeight = fontWeight;

    this.applyToObjectStyle = function( object )
    {
        object.style.fontFamily = this.fontFamily;
        object.style.fontSize = this.fontSize;
        object.style.color = this.fontColor;
        object.style.fontWeight = this.fontWeight;
        object.style.lineHeight = this.fontLineHeight;
        object.style.textAlign = this.fontAlign;
        object.style.fontStyle = this.fontStyle;
        object.style.fontVariant = this.fontVariant;
        object.style.textTransform = this.fontCase;
    }
}

function JTPageControlChangeEvent( pageControlObject, activeTab )
{
    this.PageControl = pageControlObject;
    this.ActiveTab = activeTab;
}

function JTEvent( fromElement, type )
{
    this.target = fromElement;
    this.srcElement = fromElement;
    this.type = type;
}

function JTPageControlSetTabState( pageControlObject, tabsheet, index, activeindex )
{
    var centerclasstype, tabclasstype;

    centerclasstype = ( index == activeindex ) ? 'active' : 'inactive';

    if( index == activeindex )
        tabclasstype = 'active';
    else if( index < activeindex )
        tabclasstype = 'before';
    else
        tabclasstype = 'after';

    document.getElementById( "jttabbutton_" + tabsheet ).className = "jtbb jtfont jttab jttab_" + centerclasstype;
    document.getElementById( "jttabinner_" + tabsheet ).className = "jtbb jtfont jttabinner jttabinner_" + tabclasstype;
    document.getElementById( "jttabinner2_" + tabsheet ).className = "jtbb jttabinner2 jttabinner2_" + centerclasstype;

    if( document.getElementById( tabsheet ) )
    {
        if( index == activeindex )
            document.getElementById( tabsheet ).style.zIndex = "3";
        else
            document.getElementById( tabsheet ).style.zIndex = "1";
    }
}

function JTPageControlTabClick( pagecontrol, tabsheet )
{
    var pageControlObject = document.getElementById( pagecontrol );
    var tabs = pageControlObject.Tabs;
    var i;
    var ActiveTab;

    for( i = 0; i < tabs.length; ++i )
    {
        if( tabs[ i ] == tabsheet )
            break;
    }

    if( i < tabs.length )
        ActiveTab = i;
    else
        ActiveTab = -1;

	for( i = 0; i < tabs.length; ++i )
	{
	    if( i != ActiveTab )
		    JTPageControlSetTabState( pageControlObject, tabs[ i ], i, ActiveTab );
	}

    JTPageControlSetTabState( pageControlObject, tabs[ ActiveTab ], ActiveTab, ActiveTab );

	pageControlObject.TabIndex = ActiveTab;

	if( pageControlObject.OnChange )
	{
	    var pageControlEvent = new JTPageControlChangeEvent( pageControlObject, ActiveTab );

	    pageControlObject.OnChange( pageControlEvent );
	}
}

function JTAddPageControlTabs( pagecontrol, tabs )
{
    PageControlTabs[ pagecontrol ] = tabs;
}

function JTExpandPanelClick( id )
{
    var panelObject = document.getElementById( id );

    JTSetExpandPanelState( id, ( panelObject.PanelState == "psHidden" ) ? "psVisible" : "psHidden" );

    if( panelObject.OnChange )
        panelObject.OnChange( panelObject, panelObject.PanelState );
}

function JTSetExpandPanelState( id, state )
{
    var panelObject = document.getElementById( id );
    var panelContent = document.getElementById( id + "_content" );
    var panelControl = document.getElementById( id + "_control" );
    var panelControlSpan = document.getElementById( id + "_controltext" );
    var ncStartX = 0;
    var ncObject = null;

    if( panelObject.NextControl )
    {
        ncObject = document.getElementById( panelObject.NextControl + "_outer" );
        if( !ncObject )
            ncObject = document.getElementById( panelObject.NextControl );
    }

    if( ncObject )
        ncStartX = panelObject.offsetHeight;

    if( typeof( panelObject.origHeight ) == "undefined" )
        panelObject.origHeight = panelObject.offsetHeight;

    if( state == "psVisible" )
    {
        panelContent.style.display = "block";
        panelObject.style.height = panelObject.origHeight + "px";

        setTimeout( "document.getElementById( '" + ( id + "_controltext" ) + "' ).innerHTML = '" + panelObject.HideText + "'", 1 );
    }
    else
    {
        panelContent.style.display = "none";
        panelObject.style.height = panelControl.offsetHeight + "px";

        setTimeout( "document.getElementById( '" + ( id + "_controltext" ) + "' ).innerHTML = '" + panelObject.ShowText + "'", 1 );
    }

    panelObject.PanelState = state;

    if( ncObject )
        setObjectScreenY( ncObject, getObjectScreenY( ncObject ) + ( panelObject.offsetHeight - ncStartX ) );
}

function JTGridDoSelectCell( GridID, GridObject, Row, Col )
{
    JTGridSetGridSelectionState( GridID, GridObject, GridObject.SelectedRow, GridObject.SelectedCol, false );
    JTGridSetGridSelectionState( GridID, GridObject, Row, Col, true );

    GridObject.SelectedRow = Row;
    GridObject.SelectedCol = Col;  
}

function JTGridSetGridSelectionState( GridID, GridObject, Row, Col, Selected )
{
    if( GridObject.RowSelect )
    {
        if( Row < 0 )
            return;

        var RowObject = document.getElementById( GridID + "_row_" + Row );
        var RowCells = RowObject.getElementsByTagName( "TD" );
        var RowClass;
        var RowColor;
        var i;

        if( Selected )
        {
            RowObject.lastBackColor = RowObject.style.backgroundColor;
            RowObject.lastClassName = RowObject.className;

            RowClass = "jtgrid_row_selected";
            RowColor = GridObject.SelectedColor;
        }
        else
        {
            RowClass = RowObject.lastClassName;
            RowColor = RowObject.lastBackColor;
        }

        RowObject.className = RowClass;
        RowObject.style.backgroundColor = RowColor;

        for( i = 0; i < RowCells.length; ++i )
        {
            JTGridSetGridCellSelectionState( GridID, GridObject, RowCells[ i ], Row, Col, Selected );
        }
    }
    else
    {
        if( Row < 0 || Col < 0 )
            return;

        JTGridSetGridCellSelectionState( GridID, GridObject, document.getElementById( GridID + "_cell_" + Row + "_" + Col ), Row, Col, Selected );
    }
    
    if( Selected )
    {
        document.getElementById( GridID + "_sr" ).value = Row;
        document.getElementById( GridID + "_sc" ).value = Col;
    }
}

function JTGridSetGridCellSelectionState( GridID, GridObject, CellObject, Row, Col, Selected )
{
    if( Selected )
    {
        CellObject.lastClassName = CellObject.className
        CellObject.lastStyle = CellObject.style.cssText;

        CellClass = "jtgrid_data_cell jtgrid_cell_selected";
        CellColor = GridObject.SelectedColor;
        CellFont = GridObject.SelectedFont;

        CellObject.style.backgroundColor = CellColor;
        CellFont.applyToObjectStyle( CellObject );
    }
    else
    {
        CellClass = CellObject.lastClassName;

        CellObject.style.cssText = CellObject.lastStyle;
    }

    CellObject.className = CellClass;
}

function JTGridDoCellDoubleClick( GridID, GridObject, Row, Col )
{
    JTGridDoSelectCell( GridID, GridObject, Row, Col );

    var gridInput = document.getElementById( GridID + "Input" );
    var gridCell = document.getElementById( GridID + "_cell_" + Row + "_" + Col );

    gridInput.value = JTGridGetCellText( GridID, Row, Col );
    gridInput.style.fontFamily = gridCell.style.fontFamily;
    gridInput.style.fontSize = gridCell.style.fontSize;
    gridInput.style.left = gridCell.offsetLeft + "px";
    gridInput.style.top = gridCell.offsetTop + "px";
    gridInput.style.width = gridCell.offsetWidth + "px";
    gridInput.style.visibility = "visible";
    gridInput.focus();
}

function JTGridDoInputBlur( GridID )
{
    var GridObject = document.getElementById( GridID );
    var gridInput = document.getElementById( GridID + "Input" );
    var oldText = JTGridGetCellText( GridID, GridObject.SelectedRow, GridObject.SelectedCol );

    gridInput.style.visibility = "hidden";

    if( gridInput.value != oldText )
    {
        if( GridObject.OnCellEdited && GridObject.OnCellEdited( GridObject, GridObject.SelectedRow, GridObject.SelectedCol, oldText, gridInput.value ) == false )
            return;

        JTGridSetCellText( GridID, GridObject.SelectedRow, GridObject.SelectedCol, gridInput.value );
    }
}

function JTGridGetCellText( GridID, Row, Col )
{
    var gridCell = document.getElementById( GridID + "_cell_" + Row + "_" + Col );

    return gridCell.innerHTML;
}

function JTGridSetCellText( GridID, Row, Col, Value )
{
    var gridCell = document.getElementById( GridID + "_cell_" + Row + "_" + Col );

    gridCell.innerHTML = Value;
}

function JTLocateFirstChildByTagName( Object, TagName )
{
    var i;

    for( i = 0; i < Object.childNodes.length; ++i )
    {
        if( Object.childNodes[ i ].tagName == TagName )
            return Object.childNodes[ i ];
    }

    return null;
}

function JTGridInitColumns( GridID )
{
	//var gridObject = document.getElementById( GridID );
    var gridHeader = document.getElementById( GridID + "_header" );
    var gridData = document.getElementById( GridID + "_rows" );
    var i;

    if( !gridHeader || !gridData )
        return;

    var firstGridRow;

    firstGridRow = JTLocateFirstChildByTagName( gridData, "TBODY" );
    firstGridRow = JTLocateFirstChildByTagName( firstGridRow, "TR" );
    if( !firstGridRow )
        return;

    var dataColumnArray = firstGridRow.getElementsByTagName( "TD" );

    gridHeader = JTLocateFirstChildByTagName( gridHeader, "TBODY" );
    gridHeader = JTLocateFirstChildByTagName( gridHeader, "TR" );
    if( gridHeader )
    {
        var columnArray = gridHeader.getElementsByTagName( "TD" );

        if( dataColumnArray.length > 0 && dataColumnArray[ 0 ].offsetWidth == 0 )
        {
            setTimeout( "JTGridInitColumns( '" + GridID + "' )", 10 );
            return;
        }

        var headerDiv = document.getElementById( GridID + "_headerdiv" );
        if( headerDiv )
        {
            var dataDiv = document.getElementById( GridID + "_data" );

			headerDiv.style.width = ( dataDiv.clientWidth == 0 ? dataDiv.offsetWidth : dataDiv.clientWidth ) + "px";
            headerDiv.style.height = firstGridRow.offsetHeight + "px";
        }

        var s = 0;

        for( i = 0; i < columnArray.length; ++i )
        {
            if( dataColumnArray.length <= i )
                break;

            columnArray[ i ].style.width = ( dataColumnArray[ i ].offsetWidth - 4 ) + "px";

            s += dataColumnArray[ i ].offsetWidth;
        }

        document.getElementById( GridID + "_header" ).style.width = ( s - 1 ) + "px";
    }
}

function JTGridSelectCellHandler( GridID, Row, Col )
{
    var GridObject = document.getElementById( GridID );
    
    var OldSelRow = document.getElementById( GridID + "_sr" ).value;
    var OldSelCol = document.getElementById( GridID + "_sc" ).value;

    document.getElementById( GridID + "_sr" ).value = Row;
    document.getElementById( GridID + "_sc" ).value = Col;

    if( GridObject.OnSelectCell && GridObject.OnSelectCell( GridObject, Row, Col ) == false )
    {
        document.getElementById( GridID + "_sr" ).value = OldSelRow;
        document.getElementById( GridID + "_sc" ).value = OldSelCol;
        return;
    }

    JTGridDoSelectCell( GridID, GridObject, Row, Col );
}

function JTGridHeaderClickHandler( GridID, Col )
{
    var GridObject = document.getElementById( GridID );

    if( GridObject.OnHeaderClick )
        GridObject.OnHeaderClick( GridObject, Col );
}

function JTGridGridScroll( e )
{
    var event = e || window.event;
    var headerObject = document.getElementById( getEventTarget( event ).parentNode.parentNode.id + "_headerdiv" );

    headerObject.scrollLeft = getEventTarget( event ).scrollLeft;
}

function JTGridInitialize( gridID )
{
    JTGridInitColumns( gridID );
}

function JTNavBarInitialize( navBarID, navItems, selected, clickHandler )
{
    var i;
    var navBarObject = document.getElementById( navBarID );

    for( i = 0; i < navItems.length; ++i )
    {
        var itemObject = document.getElementById( navItems[ i ] );

        itemObject.onclick = clickHandler;
        itemObject.navBar = navBarObject;
    }

    if( selected )
        navBarObject.activeSubBar = selected + "_subbar";
    else
        navBarObject.activeSubBar = "";
}

function JTNavBarButtonOver( NavButtonID, ButtonType )
{
    JTNavBarSetButtonState( NavButtonID, ButtonType, "over" );

    var itemObject = document.getElementById( NavButtonID );
    var barObject = document.getElementById( NavButtonID + "_subbar" );

    if( itemObject.navBar.activeSubBar && document.getElementById( itemObject.navBar.activeSubBar ) )
        document.getElementById( itemObject.navBar.activeSubBar ).style.display = "none";

    if( barObject )
    {
        barObject.style.display = "block";

        itemObject.navBar.activeSubBar = barObject.id;
    }
}

function JTNavBarButtonOut( NavButtonID, ButtonType, OrigState )
{
    JTNavBarSetButtonState( NavButtonID, ButtonType, OrigState );
}

function JTNavBarSetButtonState( NavButtonID, ButtonType, State )
{
    document.getElementById( NavButtonID ).className = "jtbb jtfont jt" + ButtonType + "navbar_button jt" + ButtonType + "navbar_button_" + State;

    if( document.getElementById( NavButtonID + "_inner" ) )
        document.getElementById( NavButtonID + "_inner" ).className = "jtbb jtfont jt" + ButtonType + "navbar_button_inner jt" + ButtonType + "navbar_button_inner_" + State;
}

function JTToolButtonOver( ToolButtonID )
{
    JTToolButtonSetStateClass( ToolButtonID, "over" );
}

function JTToolButtonOut( ToolButtonID )
{
    JTToolButtonSetStateClass( ToolButtonID, "" );
}

function JTToolButtonDown( ToolButtonID )
{
    JTToolButtonSetStateClass( ToolButtonID, "down" );
}

function JTToolButtonUp( ToolButtonID )
{
    JTToolButtonSetStateClass( ToolButtonID, "over" );
}

function JTToolButtonSetStateClass( ToolButtonID, StateClass )
{
    var CenterStateClass;

    if( StateClass != "" )
        CenterStateClass = "jttoolbutton_" + StateClass;
    else
        CenterStateClass = "";

    document.getElementById( ToolButtonID ).className = "jtbb jtfont jttoolbutton " + CenterStateClass;
}

function JTEliminateDuplicateID( id )
{
    var object = document.getElementById( id );

    if( object )
    {
        var objectParent = object.parentNode;

        objectParent.removeChild( object );
    }
}

function JTInitializeTabControl( id, tabArray, tabIndex, onChange )
{
    var tabObject = document.getElementById( id );

    tabObject.Tabs = tabArray;
    tabObject.TabIndex = tabIndex;
    tabObject.OnChange = onChange;
}