var DHTML = new Object();

DHTML.convertDisplayType = function( displayType )
{
    if( document.all && displayType &&
	(displayType == 'table-row-group' ||
	 displayType == 'table-cell' ||
	 displayType == 'table-row') ) {
	displayType = 'block';
    } // if IE
    
    return displayType;
} // convertDisplayType

DHTML.toggleDisplay = function( elementName )
{
    if( DHTML.isVisible( elementName ) ) {
	DHTML.hide( elementName );
    }
    else {
	DHTML.show( elementName );
    }
} // toggleDisplay

DHTML.isVisible = function( elementName )
{
    var element = DHTML.getElement( elementName );
    if( element && element.style ) {
	if( element.style.display == 'none' ) {
	    return 0;
	}
    }

    return 1;
} // isVisible

DHTML.hide = function( elementName )
{
    var element = DHTML.getElement( elementName );
    if( element && element.style ) {
	element.style.display = 'none';
    }
} // hide

DHTML.show = function( elementName )
{
    var element = DHTML.getElement( elementName );
    if( element && element.style ) {
	element.style.display = '';
    }
} // show

DHTML.changeDisplay = function( elementName, displayType )
{
    var element = DHTML.getElement( elementName );
    if( element && element.style ) {
	element.style.display = DHTML.convertDisplayType( displayType );
    }
} // changeDisplay

DHTML.changeInnerText = function( elementName, txt )
{
    var currentValue = null;
    var element = DHTML.getElement( elementName );

    if( element && element.innerText != null ) {
	currentValue = element.innerText;
	element.innerText = txt;
    }
    else if( element && element.firstChild ) {
	currentValue = element.firstChild.nodeValue;
	element.firstChild.nodeValue = txt;
    }

    return currentValue;
} // changeInnerText

DHTML.changeInnerHTML = function( elementName, html )
{
    var element = DHTML.getElement( elementName );
    if( element && element.innerHTML != null ) {
	element.innerHTML = html;
    }
    else if( element != null && element.firstChild ) {
	element.firstChild.nodeValue = html;
    }
} // changeInnerHTML

DHTML.getForm = function( formName )
{
    if( formName == null )
        formName = 'frm_main';
    
    var form = document.forms[formName];

    return form;
} // getForm

DHTML.setFormValue = function( elementName, value, formName )
{
    if( formName == null )
        formName = 'frm_main';
    
    var el = (typeof elementName == 'string') ? document.forms[formName].elements[elementName] : elementName;
    
    if( el != null ) {
	el.value = value;
	return 1;
    }

    return 0;
} // setFormValue

DHTML.uncheckFormInput = function( elementName, formName )
{
    if( formName == null )
        formName = 'frm_main';
    
    var el = document.forms[formName].elements[elementName];
    
    if( el != null ) {
	for( var i = 0; i < el.length; i++ ) {
	    if( el[i].checked ) el[i].checked = false;
	}
	return 1;
    }
    
    return 0;
} // uncheckFormInput

DHTML.getFormValue = function( elementName, formName )
{
    if( formName == null )
        formName = 'frm_main';
    
    var el = (typeof elementName == 'string') ? document.forms[formName].elements[elementName] : elementName;
    var value = null;
    if( el != null ) {
	value = el.value;
    }
    
    return value;
} // getFormValue

DHTML.getFormElement = function( elementName, formName )
{
    var el = elementName;

    if( typeof el == "string" ) {
	if( formName == null )
	    formName = 'frm_main' 
    
	    el = document.forms[formName].elements[elementName];
    }
	
    return el;
} // getFormElement

DHTML.submitForm = function( formName )
{
    if( formName == null )
	formName = 'frm_main';
	    
    var frm = document.forms[formName];
    if( frm != null ) {
	frm.submit();
	return 1;
    }
    
    return 0;
} // submitForm

DHTML.disableFormElement = function( obj, sec )
{
    var elem = DHTML.getFormElement( obj );

    if( elem ) {
	elem.disabled = 'true';

	if( sec ) {
	    ruby.setTimeout( null, DHTML.enableFormElement, sec, elem );
	}
    }
} // disableFormElement

DHTML.enableFormElement = function( obj )
{
    var elem = DHTML.getFormElement( obj );
    
    if( elem ) {
	elem.disabled = '';
    }
} // enableFormElement


DHTML.setWndLocation = function( wnd, url )
{
    wnd.location.href = url;		
} // setWndLocation

DHTML.setLocation = function( url )
{
    DHTML.setWndLocation( window, url );
} // setLocation

DHTML.getElement = function( element )
{
    if( typeof element == 'string' ) {
	if( document.all )  {
	    element = document.all[element];
	}
	else {
	    element = document.getElementById(element);
	}
    }

    return element;
} // getElement

DHTML.getCSSRule = function( rule )
{
    var sheets = document.styleSheets;    
    for( var sheetIdx = 0; sheetIdx < sheets.length; sheetIdx++ ) {
	var sheet = sheets[sheetIdx];
	var rules = sheet.rules ? sheet.rules : sheet.cssRules ? sheet.cssRules : null;
	
	if( rules ) {
	    for( var ruleIdx = 0; ruleIdx < rules.length; ruleIdx++ ) {
		if( rules[ruleIdx].selectorText.toLowerCase() == rule.toLowerCase() ) {		    
		    return rules[ruleIdx];
		}
	    }
	}
    }

    return null;
} // getCSSRule

DHTML.createListener = function( element, eventName )
{
    var elem = DHTML.getElement( element );
    if( elem && !elem['on' + eventName] ) {
	elem['on' + eventName] = DHTML._processEvent;
	if( !elem.listeners ) {
	    elem.listeners = new Array();
	}
	elem.listeners[eventName] = new Array();
	var addMeth = 'addOn' + eventName.substr(0, 1).toUpperCase() + eventName.substr(1).toLowerCase() + 'Listener';
	elem[addMeth] = DHTML._addEvent;
	elem[addMeth].event = eventName;
	//alert( elem + ' : ' + elem.listeners );
    }
} // createListener

DHTML._addEvent = function( evtObj )
{
    if( !evtObj || (typeof evtObj != 'function' && typeof evtObj != 'object') ) return;

    //alert( arguments.callee.event );
    this.listeners[arguments.callee.event].push( evtObj );
} // _addEvent

DHTML._processEvent = function( evt )
{
    if( !evt ) evt = event;
    var srcElem = evt.target || evt.srcElement;

    if( evt.type == 'load' ) srcElem = window;

    //alert( srcElem + ' : ' + srcElem.listeners );
    var listeners = srcElem.listeners[evt.type];
    if( listeners ) {
	for( var i=0; i < listeners.length; i++ ) {
	    var list = listeners[i];
	    if( typeof list == 'object' ) {
		list.process( srcElem, evt );
	    }
	    else {
		list( srcElem, evt );
	    }
	}
    }
} // _processEvent

DHTML.sort = function( sortBy, sortDir, sortURL )
{
    var sortValue = sortBy + '' + sortDir;
    
    if( sortURL ) {
	sortURL += '&sort_by=' + sortValue;

	DHTML.setLocation( sortURL );
    } else {
	DHTML.setFormValue( 'sort_by', sortValue );
	DHTML.setFormValue( 'action', 'sort' );
	DHTML.submitForm();
    }
} // sort

DHTML.hilightOn = function( TR )
{
  TR.bgColor='#EEEEEE';
  for( i = 0; i < TR.cells.length; i++ ) 
  {
    TR.cells[i].className += " highlight";
  }
} // hilightOn

DHTML.hilightOff = function( TR )
{
  TR.bgColor='#FFFFFF';
  for( i = 0; i < TR.cells.length; i++ )
  {
    var classes = TR.cells[i].className.split( ' ' );
    classes.pop();
    TR.cells[i].className = classes.join( ' ' );
  }
} // hilightOff

DHTML.testURL = function( fieldName, urlPrefix, urlPrefixIfURLStartWithSlash )
{
    var url, re, arResults;
    var slash = '';
    
    var linkBox = DHTML.getElement( fieldName );
    url = (linkBox == null) ? DHTML.getFormValue( fieldName ) : linkBox.value;

    if( !url || url == "" ) {
	alert( 'Please enter a valid link.' );
	return;
    }
    
    re = new RegExp( '^(http://)' );
    arResults = re.exec( url );
    if( arResults == null ) // then the pattern didn't match
    {
	re = new RegExp( '^/' );
	arResults = re.exec( url );
	if( arResults == null )
	{
	    //slash = '/';
	}

	if( url.substr( 0, 1 ) == '/' ) {
	    urlPrefix = urlPrefixIfURLStartWithSlash;
	}

	url = urlPrefix + slash + url;
    }
    
    ruby.newWnd( url, 800, 600, 'yes' );
} // testURL

DHTML.xmlHttpPost = function(strURL, strSubmit, strResultFunc, strErrFunc)
{
    var xmlHttpReq = false;

    // Mozilla/Safari
    if (window.XMLHttpRequest) {
	xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
	xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }

    //alert( 'Posting to: ' + strURL );
    xmlHttpReq.open('POST', strURL, true);
    xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xmlHttpReq.onreadystatechange = function() {	
	if (xmlHttpReq.readyState == 4) {
	    //alert( xmlHttpReq.responseText );
	    
	    if (xmlHttpReq.status == 200) {
		if( typeof strResultFunc == 'function'  ) {
		    strResultFunc( xmlHttpReq );
		}
		else if( strResultFunc.indexOf( '(' ) == -1 ) {
		    eval(strResultFunc + '(xmlHttpReq);');
		}
		else {
		    eval(strResultFunc + ', xmlHttpReq);');
		}
	    }
	    else if( strErrFunc != null )
	    {
		if( typeof strErrFunc == 'function'  ) {
		    strErrFunc( xmlHttpReq );
		}
		else if( strErrFunc.indexOf( '(' ) == -1 ) {
		    eval(strErrFunc + '(xmlHttpReq);');
		}
		else {
		    eval(strErrFunc + ', xmlHttpReq);');
		}
	    }
	}
    }

    xmlHttpReq.send(strSubmit);
} // dhtml_xmlhttpPost

DHTML.cloneObject = function(orig_obj) {
  var clone_obj = new Array();
  for (var i in orig_obj) {
    clone_obj[i] = orig_obj[i];
  }
  
  return clone_obj;
} // cloneObject

DHTML.activate = function(chkbox, url) {
    if( !url )
	url = location.pathname;

    var activate = chkbox.checked ? 1 : 0;

    location.href = url + '?action=activate&activate=' + activate + '&id=' + chkbox.value;
}

var ccElement = null;

function showCC( event, ccNum ) /* TODO: Move these CC functions into diff namespace */
{
    if ( ccElement == null ) {
	var div = document.createElement( 'div' );
	div.className = 'creditCardView';
	
	var x = event.clientX;
	var y = event.clientY;
	
	var scrollX, scrollY;
	if( window.scrollX ) {
	    scrollX = window.scrollX;
	    scrollY = window.scrollY;
	}
	else {
	    scrollX = document.body.scrollLeft;
	    scrollY = document.body.scrollTop;
	}

	x += scrollX;
	y += scrollY;
	y -= 60;
	
	div.style.left = x;
	div.style.top = y;
	
	with( div.style ) {
	    position = 'absolute';
         }
	
	div.innerHTML = "<table><tr><td></td><td id=\"close\"><a href=\"javascript:hideCC();\">x</a></td></tr><tr><td>Credit Card #:</td><td>" + ccNum + "</td></tr></table>";
	document.body.appendChild( div );
	ccElement = div;
    }
    else {
	document.body.appendChild( ccElement );
    }
} // showCC

function hideCC()
{
    if( ccElement ) {
	document.body.removeChild( ccElement );
    }
} //hideCC

