var xml_run_count = 0;

function bool_alert( bool_, alert_txt_ ){
	if( !bool_ ){
		alert( alert_txt_ );
	}
	return bool_;
}

function confirm2func( ){
	if( confirm( arguments[0] ) ){
		var len = arguments.length -1;

		switch( len ){
			case 1:
				arguments[1]( );
				break;
			case 2:
				arguments[1]( arguments[2] );
				break;
			case 3:
				arguments[1]( arguments[2], arguments[3] );
				break;
			case 4:
				arguments[1]( arguments[2], arguments[3], arguments[4] );
				break;
			case 5:
				arguments[1]( arguments[2], arguments[3], arguments[4], arguments[5] );
				break;
			case 6:
				arguments[1]( arguments[2], arguments[3], arguments[4], arguments[5], arguments[6] );
				break;
		}
	}
}

function confirm2go( prompt_, url_ ){
	if( confirm( prompt_ ) ){
		location.href = url_ ;
	}
}

function confirm2replace( prompt_, url_ ){
	if( confirm( prompt_ ) ){
		location.replace( url_ );
	}
}	

function debug_object_props( obj_, name_ ){
	var _ele = js_element( 'DEBUG_DIV' );
	if( _ele ){
		var buffer = '<code><pre>\n';
		for( var _prop in obj_ )
			buffer += name_ +"[\""+ _prop + "\"]" + " = " + obj_[ _prop ] + "<br/>\n";
		buffer += "</pre></code>\n";
		_ele.innerHTML = buffer;
//	}else{
//		alert(" Was I here? ");
	}
}

function empty_options( ele_ ){
	if( ele_ ){
		ele_.options.length = 0;
//		for( var i = ele_.length -1; i>=0; i-- ){
//			ele_.options[i] = null;
//		}
	}
}

function escape_close_popup( e ){
	if( arguments.length == 0 ){
		e = event ;
	}
	if( e.keyCode == 27 )
		show_popup( js_element( 'popup_panel' ), false );
//	debug_object_props( e );
//	mouseup();
	self.status = e.keyCode ;

}

function firstval( ){
	var num = arguments.length;
	var v = null;	
	for( var i=0; i < num; i++ ){
		v = arguments[i];
		if( v != null && v != false && v.length > 0 ){
			return v;
		}
	}
	return null;
}

function find_in_set( ){
	var key = arguments[0] ;
	var i =1;
	while( i < arguments.length ){
		if( arguments[0] == arguments[i] )
			return i;
		i++;
	}
	return 0;
}

function form_query_str( frmName_, prefix_ ){
	var form = document.forms[ frmName_ ];
	var query_str = '';
	var j = 0;
	for( i=0; i < form.elements.length; i++ ){

		value = input_value( form.elements[i] );
		if( value != null && ( !form.elements[i].disabled && !js_attribute( form.elements[i], 'my_on_submit_disable' ) ) ){
			if( !is_array( value ) ){
				query_str += escape( form.elements[i].name ) + "=" + my_escape( value ) + "&";
			} else {
				if( value.length ){
					for( j=0; j < value.length; j++ ){
						query_str += escape( form.elements[i].name ) + "=" + my_escape( value[j] ) + "&";
					}
				} else{
					//nothing was selected.

					query_str += escape( form.elements[i].name.substr( 0, form.elements[i].name.length - 2 ) ) + "=&";

				}
			}
		}
	}
	if( arguments.length == 1 ){
	//	alert( query_str );
		return query_str.substr( 0, query_str.length -1 );
	} else {
		alert( "hello " + prefix_ );
		return query_str + prefix_ + "=" + frmName_ ;
	}
}

function group_selection_option( ele_, key_, attrib_ ){
	if( ele_ ){
		empty_options( ele_ );

		var i , j;
		var nodes = document.getElementsByTagName( 'goption' );
		var pattern = new RegExp( "(^|,)" + key_ + "(,|$)" );

		if( nodes && nodes.length ){
			j = 0;
			for( i=0; i < nodes.length; i++) {
				attrib = nodes[i].getAttribute( attrib_ );
				if( attrib && attrib.match( pattern ) ){
					ele_.options[ j] = new Option( nodes[i].getAttribute( 'value' ) );
					ele_.options[ j].value = nodes[i].getAttribute( 'key' );
					j++;
				}
			}
//			alert( "The j is "+ j + pattern.toString() );
		} else{
//			alert( "No nodes." );
		}
	} else {
		alert( "No ele." );
	}
}

function ifrmGo( ele_, url_ ){
	ele_.src = url_;
//	var ifrm = document.getElementById( name_ );
//	ifrm.src = url_;
}

function input_value( field_ ){
//input type: button|file|image|select-multiple are not supported.

	if( field_.type == 'select-one' ){
		return ( field_.options.length ? field_.options[ field_.selectedIndex ].value : ''  );
	} else if( field_.type == 'select-multiple' ){
		var tmp_a = new Array();
		var j= 0;
		var select_all = js_attribute( field_, 'my_on_submit_select_all' );
		for( var i=0; i < field_.options.length; i++ ){
			if( field_.options[i].selected || select_all ){
				tmp_a[j] = field_.options[ i].value;
				j++;
			}
		}
//		alert( field_.options.length + "|" + tmp_a.length );
		return tmp_a ;
	} else if( field_.type == 'text' || field_.type == 'password' || field_.type == 'textarea' || field_.type == 'hidden' ){
		if( field_.form[ field_.name + "___Config" ] ){
		//ok, it is a fck.
			return js_fck_value( field_.name );
		}
		return field_.value;
	} else if( field_.type == 'checkbox' ){
		if( field_.checked )
			return ( field_.value.length ? field_.value : 'on' );
	} else if( field_.type == 'radio' || ( field_.length && field_[0].type == 'radio' ) ){
		if( field_.checked == undefined && field_.length ){
			for( var i=0; i < field_.length; i++){
				if( field_[i].checked )
					return field_[i].value;
			}
		} else if( field_.checked ){
			return field_.value;
		}
	}  else if( field_.type != 'submit' && field_.type != 'button' && field_.type != 'file' ){
		alert( field_.type + "|" + field_.name );

	}
	return null;
}

function is_array(obj) {
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}

function is_negative( frmName_, field_ ){
	var form = document.forms[ frmName_ ];
	if( form['neg'] ){
		return form['neg'].value.indexOf( field_ );
	}
	return 0;
}

function is_num_in( num_, start_, end_ ){
	return ( num_ >= start_ && num_ <= end_ );
}

function is_selected( field, alert_str ){
	if( field.selectedIndex <= 0 && ( arguments.length > 1 && alert_str.length > 0 )){
		alert( alert_str );
		field.focus();
	}
	return ( field.selectedIndex > 0 );
}

function is_senior( child_, parent_ ){

	var _node = child_;
	while( _node.parentNode && _node.parentNode != parent_ ){
		_node = _node.parentNode;
	}
	return ( _node.parentNode && _node.parentNode == parent_ );
}

function js_append_row( parent_, elem_, before_elem_ ){
	var node = elem_.cloneNode( true );
	var i =0, re, m_node;

	if( elem_.getAttribute( 'merge_fields' ) ){
		var merge_fields = elem_.getAttribute( 'merge_fields' ).split( ',' );
		var xinnerHTML = elem_.innerHTML ;
		for( i=0; i < merge_fields.length ; i++ ){
			m_node = js_element( 'MERGE_' + merge_fields[i] );
			if( m_node ){
				re = new RegExp( '##' + merge_fields[i] + '#', 'g' );
				xinnerHTML = xinnerHTML.replace( re, m_node.getAttribute( 'value' ) );
			}
		}
		node.innerHTML = xinnerHTML;
	}
	if( arguments.length == 3 )
		parent_.insertBefore( node.childNodes[0].childNodes[0], before_elem_ );
	else
		parent_.appendChild( node.childNodes[0].childNodes[0] );
}

function js_attribute( elem_, key_, value_ ){
	var val ;
	if( !elem_ )
		return null;
	if( arguments.length == 2 ){
		val = elem_.getAttribute( key_ );
		if( val !== false && val !== null )
			return val;
	}else if( arguments.length == 3 ){
		elem_.setAttribute( key_, value_ );
		return true;
	}
	return false;
}

function js_calendar( elem_, time_comp_ ){
	var oCalendar = new calendar2( elem_.childNodes[0] );
	oCalendar.year_scroll = true;
	oCalendar.time_comp = ( arguments.length == 2 ? time_comp_ : false );
	oCalendar.popup( elem_.childNodes[0].value );
}

function js_date2timestamp( a_date_ ){
	var strTS = a_date_.getFullYear() + "-";
	var val ;

	val = a_date_.getMonth() + 1;
	if( val < 10 ){
		strTS += '0';
	}
	strTS += val +'-';

	val = a_date_.getDate();
	if( val < 10 ){
		strTS += '0';
	}
	strTS += val +' ';

	val = a_date_.getHours();
	if( val < 10 ){
		strTS += '0';
	}
	strTS += val +':';

	val = a_date_.getMinutes();
	if( val < 10 ){
		strTS += '0';
	}
	strTS += val +':';

	val = a_date_.getSeconds();
	if( val < 10 ){
		strTS += '0';
	}
	strTS += val ;

	return strTS;
}

function js_debug( msg_ ){
	var ele_ = document.getElementById( 'DEBUG_DIV' );
	if( ele_ ){
		ele_.innerHTML += "<br/>" + msg_ ;
	}
}

function js_debug_clear( ){
	var ele_ = document.getElementById( 'DEBUG_DIV' );
	if( ele_ ){
		ele_.innerHTML = '';
	}
}

function js_dollar_format( money_ ){
//0.00001 is for the marginal error from javascript.

	var sign = ( money_ < 0 ? '-' : '' );
	var money = Math.abs( Math.floor( ( money_ + 0.00001 ) * 100 ) );	//for easy calculation of the decenmal
	var str = '';

	i = Math.abs( money ) % 100;
	if( i == 0 ){
		str = '.00';
	} else if( i < 10 ){
		str = '.0' + i ;
	} else {
		str = '.' + i;
	}

	return sign + Math.floor( money / 100 ) + str ;

}

function js_element( id_ ){
	if( arguments.length == 2 ){
		var _parents = document.getElementById( arguments[1] );
		var _ele = private_recursive_js_element( _parents, id_ );
		if( !_ele )
			alert( "Something is wrong" );
		debug_object_props( _ele, 'select' );
		return _ele;

/*		

		var _child = document.getElementById( arguments[0] );
		var _i, _j;
		for( _i=0; _i < _parents.length; _i++ ){
			for( _j =0; _j < _child.length; _j ++ ){
				if( is_senior( _child[_j], _parents[_i] ) ){
					return _child[_j];

				}
			}
		}
		alert( "SOMETHING IS WRONG" );
		return null;
*/
//		return _node.getElementById( id_ );
	}
	if( id_ == false || id_ == null || id_.length == 0 )
		return null;
	return document.getElementById( id_ );
}

function js_childAttribute( node_, key_ ){
//return the first child that has a attribute "k" that is equal to key, such as k="key_"
	if( node_ && node_.childNodes && node_.childNodes.length ){
		for( var i=0; i < node_.childNodes.length; i++){
			c = node_.childNodes[i];
			if( c.nodeType == 1 && js_attribute( c, 'k' ) == key_ )
				return js_attribute( c, 'v' );
		}
	}
	return false;
}

function js_childData( node_, key_ ){
	if( node_ && node_.childNodes && node_.childNodes.length ){
//		if( key_ == 'html' || key_ == 'id' )
//			alert( "I was here." + node_.childNodes.length );
		var c ;
		for( var i=0; i < node_.childNodes.length; i++){
			c = node_.childNodes[i];
			if( c.nodeType == 1 && js_attribute( c, 'k' ) == key_ ){
				var buffer = '';
				if( c.tagName != 'null' ){
					for( var j=0; j < c.childNodes.length; j++ )
						buffer += c.childNodes[j].data;
	//				alert( "got data for " + key_ + "\n" + buffer );
					return buffer;
				} else{
					return null;
				}
//			} else if( c.nodeType == 1 ){
//				alert( "C is " + js_attribute( c, 'k' ) );
			}
		}
	}
	return false;
}

function js_ElementsByAttribute( node_, key_, val_, level_ ){
/*
level: -1 is keep going to the end.
: 1 is children
: 2 is grant children.
*/
	if( level_ == null )
		level_ = 1;

	var nodes = new Array();
	var node_len = 0;
	var tmp_nodes, j;

	if( node_ && ( level_ > 0 || level_ <= -1 ) && node_.childNodes && node_.childNodes.length ){
		for( var i=0; i < node_.childNodes.length; i++){
			c = node_.childNodes[i];
			if( c.nodeType == 1 ){	// 1 is elem, 3 is text
//				alert( c + " " + c.tagName + " " + c.childNodes.length  );
				this_v = js_attribute( c, key_ );
				if( this_v !== false && ( val_ == null || this_v == val_ ) ){
					node_len = nodes.push( c );

				}
				if( c.childNodes.length ){
//this doesn't work			nodes.splice( node_len, 0, js_ElementsByAttribute( c, key_, val_, level_ -1 ) );

					tmp_nodes = js_ElementsByAttribute( c, key_, val_, level_-1 );
					for( j=0; j < tmp_nodes.length; j++ )
						nodes.push( tmp_nodes[ j] );
					node_len = nodes.length ;
				}
			} else if( c.nodeType !=3 && c.nodeType != 7 ){
				alert( "Unkown node type:" + c.nodeType );

			}
		}
	}
	return nodes;
}

function js_fck_value( name_ ){

	var msg = '';
	var j = -1;
	for( var i=0; i < window.frames.length; i++ ){
		if( window.frames[i].FCK ){
			j=i;
		}
	}
	if( j != -1  )
		return window.frames[j].FCK.GetXHTML ( window.frames[j].FCKConfig.FormatOutput );
}

var my_fckeditors = [] ;
function js_fck_window( target_obj_, text_, url_args_ ){
	if( !target_obj_ ){
		alert( "something wrong" );

	}
	var this_id = my_fckeditors.length;

	my_fckeditors[ this_id ] = target_obj_;

	var myform=document.createElement("form");
	myform.setAttribute( 'name', 'frmFCK' );
	myform.setAttribute( 'method', 'post' );
	myform.setAttribute( 'action', '/includes/my_fckeditor.php' );
	myform.setAttribute( 'target', 'fckeditor' );

	var fck_field;

	fck_field = document.createElement( 'input' );
	fck_field.setAttribute( 'type', 'hidden' );
	fck_field.setAttribute( 'name', 'text' );
	fck_field.setAttribute( 'value', text_ );
	myform.appendChild( fck_field );

	fck_field = document.createElement( 'input' );
	fck_field.setAttribute( 'type', 'hidden' );
	fck_field.setAttribute( 'name', 'id' );
	fck_field.setAttribute( 'value', this_id );
	myform.appendChild( fck_field );

	if( url_args_.length ){
		var q_pairs = url_args_.split( '&' );
		for( var i=0; i < q_pairs.length; i++ ){
			tmp = q_pairs[i].split( '=' );

			fck_field = document.createElement( 'input' );
			fck_field.setAttribute( 'type', 'hidden' );
			fck_field.setAttribute( 'name', tmp[0] );
			fck_field.setAttribute( 'value', tmp[1] );
			myform.appendChild( fck_field );
		}
	}

	var mainbody = js_element( 'bodyMain' );
	mainbody.appendChild( myform );
	myform.submit();

	mainbody.removeChild( myform );
//	if( !target_obj_ ){
//		alert( "something wrong" );
//	
//	}
//	var this_id = my_fckeditors.length;
//
//	my_fckeditors[ this_id ] = target_obj_;
//
//	var obj_calwindow = window.open(
//		'/includes/my_fckeditor.php?text=' + my_escape( text_ ) + '&id=' + this_id + "&" + url_args_ ,
//		'Editing: FckEditor', 'width=600,height=480,status=no,resizable=no,top=200,left=200,dependent=yes,alwaysRaised=yes'
//	);
//	obj_calwindow.opener = window;
//	obj_calwindow.focus();
}

function js_field_number_count( field, len, alert_str ){
	var num = field.value ;
	var num_count = 0;
	var c = "";
	var i = 0;
	while( i < num.length ){
		c = num.charAt( i );
		if( c >= '0' && c <= '9'  )
			num_count ++;
		i++;
	}
	if( num_count < len && ( arguments.length > 2 &&  alert_str.length > 0 ) ){
		alert( alert_str );
		field.focus();
	}
	return ( num_count >= len );
}

function js_field_is_digit( field, alert_str ){
	var num = trim( field.value );
	var i =0;

	if( num.charAt( 0 ) == "-" || num.charAt( 0 ) == "+" )
		num = num.substr( 1, num.length );

	var period = 0;
	var c = "";
	i = 0;
	var status = true;
	while( i < num.length && period <= 1 && status ){
		c = num.charAt( i );
		if( c == '.' )
			period ++;
		else if( !( c >= '0' && c <= '9' ) )
			status = false;
		i++;
	}
	if( !( status && period <= 1 && i > 0 ) && ( arguments.length > 1 && alert_str.length > 0 ) ){
		alert( alert_str );
		field.focus();
	}
	return ( status && period <= 1 && i > 0 );
}

function js_focus( id_, focus_ ){
	var node = js_element( id_ );
	if( !node )
		return ;
	if( focus_ )
		node.focus();
	else
		node.blur();

}

function js_form_focus( frmName_ ){
	var form = document.forms[ frmName_ ];
	if( !form )
		return ;

	var type = '';
	for( var i=0; i < form.elements.length ; i++ ){
		type = form.elements[i].type.toUpperCase( );
		if( type == 'TEXT' || type == 'SELECT-ONE' ){
			form.elements[i].focus( );
			return true;
		}
	}
	return false;

}

function js_func_select( elem_ ){
//	alert( elem_.name + "|" + elem_.nodeType + "|" + elem_.selectedIndex + "|" + input_value( elem_ ) );

	eval( input_value( elem_ ) );	
	elem_.selectedIndex = 0;	//reset the selected Index.
}

function js_highlight_input( field_ ){
	if (typeof(document.layers) == 'undefined' || field_.textarea_selected == 0 ) {
		field_.textarea_selected = 1;
		field_.select();
//		field_.form.elements[ field_ ].select();
	}
}

function js_image_swap( img_id_, img_status_, rand_ ){
	var this_img = js_element( img_id_ );
	if( !this_img ){
		alert( "No found " + img_id_ );
	}
	var current_status = js_attribute( this_img, 'imgStatus' );
	var tmp_src = '';
	if( img_status_ == null ){
		img_status_ = current_status;	//js_attribute( this_img, 'imgStatus' );
		img_status_ = ( img_status_ == 'On' ? 'Off' : 'On' );
	}
	tmp_src = js_attribute( this_img, 'img' + img_status_ );
	if( tmp_src && current_status != img_status_ ){

		if( rand_ && tmp_src.indexOf( '?' ) >= 0 ){
			tmp_src = tmp_src + "&rand=" + Math.floor( Math.random() * 10000 );
		} else if( rand_ ) {
			tmp_src = tmp_src + "?rand=" + Math.floor( Math.random() * 10000 );
		}

		js_attribute( this_img, 'imgStatus', img_status_ );
		this_img.src = tmp_src;
	}
}

function js_innerHTML( node_, html_ ){
	if( node_ ){
		if( arguments.length == 2 )
			node_.innerHTML = html_;
		else
			return node_.innerHTML;
//	} else{
//		alert( "no node " );

	}
}

function js_hidden_parent( ){
	return js_element( 'MY_HIDE_DIV' );
}

function js_move_element( ele_, new_parent_){
	if( new_parent_ == null )
		new_parent_ = js_element( 'MY_HIDE_DIV' );

	if( ele_ ){
		var _current_parent = ele_.parentNode;
		if( _current_parent != new_parent_ ){
			try{
				_current_parent.removeChild( ele_ );
				new_parent_.appendChild( ele_ );

			} catch( e ) { alert( "Something Wrong" ); }
		}
	}
}

function js_open_window( url_, attrib_ ){
	var new_win = window.open( url_, 'js_window', attrib_ );
}

function js_prompt( prompt_, default_val_ ){
	var user_val = prompt( prompt_, default_val_ );
	while( user_val !== null && ( !user_val || user_val.length == 0 ) ){
		user_val = prompt( prompt_, default_val_ );
	}
	if( user_val && user_val.length ){
		return user_val;
	}
	return false;
}

function js_show_element( elem_, show_ ){
	if( elem_ ){
		elem_.style.visibility = ( show_ ? 'visible' : 'hidden' );
	}
}

function js_status( str_ ){
//	alert( "I was here." + str_ );
	self.status = str_ ;
}

function js_table_insert_row( nodename_ ){
//this function should use with php function create_html_append_node in stdlib.php
//this function should replace the function js_append_row and refresh_row_counter

	var table_node = js_element( nodename_ );
	var template_node = js_element( 'tRow_' + nodename_ );

	if( template_node && table_node ){
		//create a new node for later appendChild function.
		var new_node = document.createElement( 'table' );

		//the number of current rows.
		var current_rows = Math.floor(  template_node.getAttribute( 'table_rows' ) );

		//the name of the merge field.
		var merge_field = template_node.getAttribute( 'table_merge_field' );

		//get the template row from the template node.		
		var innerHTML = template_node.innerHTML;

		//search and replace all merge field and row.		
		var re = new RegExp( '##' + merge_field + '##', 'g' );
		innerHTML = innerHTML.replace( re, current_rows );

		re = new RegExp( '##ROW##', 'g' );
		innerHTML = innerHTML.replace( re, current_rows + 1 + Math.floor( template_node.getAttribute( 'table_base_num' ) ) );

		//return the innerHTML with the updated merge field into the new_node.
		new_node.innerHTML = "<tbody id=\"" + nodename_ + "_row_" + current_rows + "\">" + innerHTML + "</tbody>";

		//add 1 to the current_rows 
		template_node.setAttribute( 'table_rows', current_rows + 1 );

		//insert_before_node
		var before_node = js_element( template_node.getAttribute( 'table_before_node' ) );

		//finally add the newly created row into the table.
		//childnodes[0] is the tbody tag in the template.
		if( before_node ){
			table_node.insertBefore( new_node.childNodes[0], before_node );
		} else {
			table_node.appendChild( new_node.childNodes[0] );
		}
	} else{
//		alert( "NOT FOUND: tRow_" + nodename_ );
	}
}

function js_input_value( elem_, val_ ){
	var _argc = arguments.length;

	if( !elem_.type && elem_.length && elem_[0].type.toUpperCase() == 'RADIO' ){
		for( var i=0; i < elem_.length; i++){
			if( _argc == 2 && elem_[i].value == val_ ){
				elem_[i].checked = true;
				return elem_[i].value;
			} else if( _argc == 1 && elem_[i].checked ){
				return elem_[i].value;
			}
		}
	}

	if( !elem_.type && elem_.length == 0 ){
//		alert( elem_.tagName + "|" + elem_.id );
		return false ;
	}

	if( elem_.type.toUpperCase() == 'TEXT' ){
		if( _argc == 2 )
			elem_.value = val_;
		return elem_.value;
	} else if( elem_.type.toUpperCase() == 'TEXTAREA' ){
		if( _argc == 2 )
			elem_.value = val_;
		return elem_.value;
	} else if( elem_.type.toUpperCase() == 'SELECT-ONE' ){
		if( _argc == 2 ){
			for( var i =0; i < elem_.options.length; i++){
				if( elem_.options[i].value == val_ )
					elem_.selectedIndex = i ;
			}
		}
		return ( elem_.options.length ? elem_.options[ elem_.selectedIndex ].value : '' ) ;
	} else if( elem_.type.toUpperCase() == 'HIDDEN' ){
		if( _argc == 2 )
			elem_.value = val_;
		return elem_.value;
	} else if( elem_.type.toUpperCase() == 'CHECKBOX' ){
		if( _argc == 1 && elem_.checked )
			return ( elem_.value.length ? elem_.value : 'on' );
		else if( _argc == 2 )
			elem_.checked = val_;
		return elem_.checked ;
//	} else{
//		alert( elem_.type + "|" + elem_[0].type );
	}

	return false;
}

function js_tag_value( elem_, val_ ){
	var _argc = arguments.length;
	if( !elem_.type && !elem_.length && !elem_[0].type )
		return false ;
	if( !elem_.type && elem_.length && elem_[0].type.toUpperCase() == 'RADIO' ){
		for( var i=0; i < elem_.length; i++){
			if( _argc == 2 && elem_[i].value == val_ ){
				elem_[i].checked = true;
				return elem_[i].value;
			} else if( _argc == 1 && elem_[i].checked ){
				return elem_[i].value;
			}
		}
	} else if( elem_.type.toUpperCase() == 'TEXT' ){
		if( _argc == 2 )
			elem_.value = val_;
		return elem_.value;
	} else if( elem_.type.toUpperCase() == 'TEXTAREA' ){
		if( _argc == 2 )
			elem_.value = val_;
		return elem_.value;
	} else if( elem_.type.toUpperCase() == 'SELECT-ONE' ){
		if( _argc == 2 )
			elem_.selectedIndex = val_;
		return ( elem_.options.length ? elem_.options[ elem_.selectedIndex ].value : '' ) ;
	} else if( elem_.type.toUpperCase() == 'HIDDEN' ){
		if( _argc == 2 )
			elem_.value = val_;
		return elem_.value;
	} else if( elem_.type.toUpperCase() == 'CHECKBOX' ){
		if( _argc == 1 && elem_.checked )
			return ( elem_.value.length ? elem_.value : 'on' );
		else if( _argc == 2 )
			elem_.checked = val_;
		return elem_.checked ;
//	} else{
//		alert( elem_.type );
	}

	return false;
}

function js_timestamp2date( timestamp_ ){
	if( timestamp_.length == 14 ){
		return new Date(
			timestamp_.substr( 0, 4 ),
			Math.floor( timestamp_.substr( 4, 2 ) -1 ),
			timestamp_.substr( 6, 2 ),
			timestamp_.substr( 8, 2 ),
			timestamp_.substr( 10, 2 ),
			timestamp_.substr( 12, 2 ) );
	}
	return new Date( 0 );
}
function js_trim( str_ ){
	return str_.replace( /\s/, '' );
}

function manager_page_number_valid( frmName_ ){
	var form = document.forms[ frmName_ ];
	if( !form ){
		return false;
	}
	var maxPage = Math.floor( js_attribute( form, 'my_maxPage' ) );
	var userPage = parseInt( input_value( form['page'] ) );

	if( isNaN( userPage ) || userPage <= 0 || userPage > maxPage ){
		alert( "Page number must be in between 0 and " + maxPage );
		js_highlight_input( form['page'] );
		return false;
	}
	js_tag_value( form['page'], userPage - 1 );	//page begin with 0 and begin with maxpage-1
	return true;
}

function my_escape( val_ ){
//	if( escape( val_ ).match( /\+/g ) ){
//		alert( escape( val_ ).replace( /\+/g, '%2B' ).replace( /\%0A/g, "\n" )  );
//	}
	return escape( val_ ).replace( /\+/g, '%2B' );
}

function my_xml_request(){
	this.arguments = new Array();
	this.obj = null;
	if( window.XMLHttpRequest ) { // Mozilla, Safari, ...
		this.obj = new XMLHttpRequest();
		if( this.obj.overrideMimeType) {
			this.obj.overrideMimeType('text/xml');
		}
	} else if( window.ActiveXObject ) { // IE
		try {
			this.obj = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				this.obj = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
}

function private_recursive_js_element( ele_, target_id_ ){
	var _i = 0;
	for( _i=0; _i < ele_.childNodes.length; _i++ ){
		if( ele_.childNodes[_i].id == target_id_ )
			return ele_.childNodes[ _i];
		else{
			_ele = private_recursive_js_element( ele_.childNodes[ _i], target_id_ );
			if( _ele )
				return _ele;
		}
	}
	return null;
}

function prompt2ajax( prompt_, url_ ){
	var user_val = prompt( prompt_ );
	while( user_val !== null && ( !user_val || user_val.length == 0 ) ){
		user_val = prompt( prompt_ );
	}
	if( user_val && user_val.length ){
//		alert( user_val + "\n" + url_ );

		var q_index = url_.indexOf( '?' );
		var query_str = '';
		if( q_index >= 0 ){
			query_str = url_.substr( q_index +1, url_.length );
			url_ = url_.substr( 0, q_index );
		}
		ajax_post_request( url_, query_str + '' + user_val, ' ' );
	}
}

function prompt2go( prompt_, url_ ){
	var user_val = prompt( prompt_ );
	while( user_val !== null && ( !user_val || user_val.length == 0 ) ){
		user_val = prompt( prompt_ );
	}
	if( user_val && user_val.length )
		location.href = url_ + user_val;
}

function radio_value( ele_ ){
	for( var _i=0; _i < ele_.length; _i++ ){
		if( ele_[_i].checked )
			return ele_[_i].value;
	}
	return '';

}

function refresh_row_counter( elem_ ){

	var nodes = elem_.getElementsByTagName( 'span' );
	var j =0;
	for( var i=0; i < nodes.length; i++){
		if( js_attribute( nodes[i], 'row_counter' ) == elem_.id ){
			j++;
			nodes[i].innerHTML = j;
		}
	}
}

function screen_height( ){
	if( window.XMLHttpRequest ) { // Mozilla, Safari, ...
		return window.screen.availHeight;
//		return document.documentElement.offsetHeight ;
	} else if( window.ActiveXObject ) { // IE
		return window.screen.availHeight ;
//		return document.documentElement.offsetHeight - 22;
	}	
}

function screen_width( ){
	if( window.XMLHttpRequest ) { // Mozilla, Safari, ...
		return window.screen.availWidth;
//		return document.documentElement.offsetWidth ;
	} else if( window.ActiveXObject ) { // IE
		return window.screen.availWidth ;
//		return document.documentElement.offsetWidth - 22;
	}	
}

function selected_value( field_ ){
	return field_.options[ field_.selectedIndex ].value;

}

function selectOption( field, key ){
	for( var i =0; i < field.options.length; i++){
		if( field.options[i].value == key )
			field.selectedIndex = i ;
	}
}

function show_popup( elem_, show_, url_ ){
	if( show_ && arguments.length == 3 ){
		if( js_attribute( elem_, 'url' ) != url_ && url_.length ){
			js_attribute( elem_, 'url', url_ );
			elem_.innerHTML = '';
			if( url_.indexOf( '?' ) >= 0 ){
				query_str = url_.substr( url_.indexOf( '?' ) +1, url_.length );
			}

			xml_post_request( url_, query_str, xml_replace_innerHTML, elem_ );
		}
		elem_.style.top = screen_height() / 2 - 200 + document.body.scrollTop;
		elem_.style.left = screen_width() / 2 - 200;
		document.onkeydown = escape_close_popup
	} else if( show_ && arguments.length == 4 ){
		elem_.style.top = arguments[3] ;
		elem_.style.left = arguments[2] ;
//		elem_.style.top = screen_height() / 2 - 200 + document.body.scrollTop;
//		elem_.style.left = screen_width() / 2 - 200;
		document.onkeydown = escape_close_popup
	} else {
		elem_.style.top = -1000;
		elem_.style.left = -1000;
		document.onkeydown = null;
	} 
}

function show_popup2( elem_, show_, url_ ){
	if( show_ && arguments.length == 3 ){
		if( js_attribute( elem_, 'url' ) != url_ && url_.length ){
			js_attribute( elem_, 'url', url_ );
			elem_.innerHTML = '';
			var qmark = url_.indexOf( '?' );
			var query_str = '';
			if( qmark > 0 ){
				query_str = url_.substr( qmark+1, url_.length );
				url_ = url_.substr( 0, qmark );
			}
			ajax_post_request( url_, query_str, ' ', elem_ );
//			xml_post_request( url_, query_str, xml_replace_innerHTML, elem_ );
		}
		elem_.style.top = screen_height() / 2 - 200 + document.body.scrollTop;
		elem_.style.left = screen_width() / 2 - 200;
		document.onkeydown = escape_close_popup
	} else if( show_ && arguments.length == 4 ){
		elem_.style.top = arguments[3] ;
		elem_.style.left = arguments[2] ;
//		elem_.style.top = screen_height() / 2 - 200 + document.body.scrollTop;
//		elem_.style.left = screen_width() / 2 - 200;
		document.onkeydown = escape_close_popup
	} else {
		elem_.style.top = -1000;
		elem_.style.left = -1000;
		document.onkeydown = null;
	} 
}

function ajax_post_request( url_, query_str_, frm_name_ ){
//ajax_post_request is only different from xml_post_request in the following.
//it is MY_XML version 2
//call back function is xml_process_response
//the 3rd arguments is the name of the target form.
//frm_name_ cannot be NULL, otherwise IE will alert, but firefox is alright with NULL.

	var _my_xml = new my_xml_request();
	var _doc_ID = js_attribute( document.getElementsByTagName( 'MY_DOC_ID' )[0], 'value' );
//	alert( "I was here " + xml_run_count );

	try{
		if( js_element( 'divErrorPrompt' ) ){
			js_innerHTML( js_element( 'divErrorPrompt' ), '' );
		}

		_my_xml.obj.open( "POST", url_, true );
		_my_xml.obj.setRequestHeader( "Method", "POST" + url_ + " HTTP/1.1" );
		_my_xml.obj.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded");
		_my_xml.obj.setRequestHeader( 'MY_XML', 2 );	//( call_back_func_ == xml_process_response ? '2' : '1' ) );
		_my_xml.obj.setRequestHeader( 'MY_DOC_ID', _doc_ID );

		if( frm_name_ && frm_name_.length ){
			frm_name_ = js_trim( frm_name_ );
		}
		if( frm_name_ && frm_name_.length ){
			_my_xml.obj.setRequestHeader( 'MY_FORM_NAME', frm_name_ );
		}

		_my_xml.arguments = new Array();
		var node_ID;
		for( var _i=3; _i< arguments.length; _i++ ){
			_my_xml.arguments[ _i - 3] = arguments[ _i];

			node_ID = 'name=' + escape( firstval( arguments[ _i].id, arguments[_i].name ) );
			node_ID += '&tag=' + escape( arguments[_i].tagName );
			if( node_ID ){
				if( arguments[_i].form ){
					node_ID += "&form=" + escape( arguments[_i].form.name );
//					node_ID = arguments[_i].form.name + "{" + node_ID + "}" ;
				}
//				alert( node_ID );
				_my_xml.obj.setRequestHeader( 'NODE_' + ( _i-3 ), node_ID );	// + escape( node_ID ), 1 );
			}
		}

//		for( var _i=3; _i< arguments.length; _i++ )
//			_my_xml.arguments[ _i - 3] = arguments[ _i];
		_my_xml.obj.onreadystatechange = function( ){
			if( _my_xml.obj.readyState == 4 ){
				xml_run_count = Math.max( 0, xml_run_count - 1 );
				xml_process_response( _my_xml ) ;
			}
		};
		xml_run_count ++;
		if( xml_run_count == 1 )
			xml_request_running();
		_my_xml.obj.send( query_str_ );
	} catch( e ){
		alert( "Ajax_post_request: Something is Wrong " + url_ + "\n"+ e['message'] );
//		return false;
	}
//	return true;
}

function ajax_submit_request( url_, query_str_, frmName_, submit_name_ ){
//ajax_post_request is only different from xml_post_request in the following.
//it is MY_XML version 2
//call back function is xml_process_response
//the 3rd arguments is the name of the target form.
//frmName_ cannot be NULL, otherwise IE will alert, but firefox is alright with NULL.

	var _my_xml = new my_xml_request();
//	var nodes = document.getElementsByTagName( 'MY_DOC_ID' );

	var _doc_ID = js_attribute( document.getElementsByTagName( 'MY_DOC_ID' )[0], 'value' );

//	alert( _doc_ID + "|" + nodes.length + "|" + js_attribute( nodes[0], 'value' ) );
//	alert( "I was here " + xml_run_count );

	try{
		_my_xml.obj.open( "POST", url_, true );
		_my_xml.obj.setRequestHeader( "Method", "POST" + url_ + " HTTP/1.1" );
		_my_xml.obj.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded");
		_my_xml.obj.setRequestHeader( 'MY_XML', 2 );	//( call_back_func_ == xml_process_response ? '2' : '1' ) );
		_my_xml.obj.setRequestHeader( 'MY_DOC_ID', _doc_ID );

		if( arguments.length >= 3 && frmName_ && frmName_.length ){
			_my_xml.obj.setRequestHeader( 'MY_FORM_NAME', frmName_ );
		}

		if( arguments.length >= 4 && document.forms[ frmName_ ] ){
			var form = document.forms[ frmName_ ];
			if( form[ submit_name_ ] ){
				form[ submit_name_ ].value = js_attribute( form[submit_name_], 'my_run' );
				form[ submit_name_ ].disabled = true;
				_my_xml.obj.setRequestHeader( 'MY_SUBMIT', submit_name_ );
			}
		}

		if( js_element( 'divErrorPrompt' ) ){
			js_innerHTML( js_element( 'divErrorPrompt' ), '' );
		}

		_my_xml.arguments = new Array();
		var node_ID;
		for( var _i=4; _i< arguments.length; _i++ ){
			_my_xml.arguments[ _i - 4] = arguments[ _i];

			node_ID = 'name=' + escape( firstval( arguments[ _i].id, arguments[_i].name ) );
			node_ID += '&tag=' + escape( arguments[_i].tagName );
			if( node_ID ){
				if( arguments[_i].form ){
					node_ID += "&form=" + escape( arguments[_i].form.name );
//					node_ID = arguments[_i].form.name + "{" + node_ID + "}" ;
				}
//				alert( node_ID );
				_my_xml.obj.setRequestHeader( 'NODE_' + ( _i-4 ), node_ID );	// + escape( node_ID ), 1 );
			}
		}

//		for( var _i=3; _i< arguments.length; _i++ )
//			_my_xml.arguments[ _i - 3] = arguments[ _i];
		_my_xml.obj.onreadystatechange = function( ){
			if( _my_xml.obj.readyState == 4 ){
				xml_run_count = Math.max( 0, xml_run_count - 1 );
				xml_process_response( _my_xml ) ;
			}
		};
		xml_run_count ++;
		if( xml_run_count == 1 )
			xml_request_running();
		_my_xml.obj.send( query_str_ );
	} catch( e ){
		alert( "Ajax_post_request: Something is Wrong " + url_ + "\n"+ e['message'] );
//		return false;
	}
//	return true;
}

function xml_error_msgs( xml_doc_ ){
	var _node = xml_doc_.getElementsByTagName( 'error' );
	var _err_node, _xml_doc_ID, _this_doc_ID ;

	_err_node = xml_doc_.getElementsByTagName( 'MY_DOC_ID' );
	if( _err_node.length ){
		_xml_doc_ID = _err_node[0].getAttribute('value' );
		_err_node = document.getElementsByTagName( 'MY_DOC_ID' );
		if( _err_node.length ){
			_this_doc_ID = _err_node[0].getAttribute('value' );
			if( _xml_doc_ID != _this_doc_ID )
				return false;
		}
	}

	if( _node && _node.length > 0 ){
		var _i = 0;
		var _message = '';
		var _errors = _node[0].getElementsByTagName( 'list' );
		if( _errors.length > 0 ){
			for( _i=0; _i < _errors.length; _i++ ){
				_message += ( _errors[_i].getAttribute( 'value' ) + "\r\n" );
			}
			alert( "Error:\r\n" + _message );
			return true;
		} else if( js_trim( _node[0].firstChild.data ).length ) {
			_message = _node[0].firstChild.data ;
			alert( "Error:\r\n" + _message );
			return true;
		} else{
			return false;
		}
	}
	return false;
}

function xml_post_request( url_, query_str_, call_back_func_ ){
	var _my_xml = new my_xml_request();
	var _doc_ID = js_attribute( document.getElementsByTagName( 'MY_DOC_ID' )[0], 'value' );
//	alert( "I was here " + xml_run_count );

	try{
		if( js_element( 'divErrorPrompt' ) ){
			js_innerHTML( js_element( 'divErrorPrompt' ), '' );

		}

		_my_xml.obj.open( "POST", url_, true );
		_my_xml.obj.setRequestHeader( "Method", "POST" + url_ + " HTTP/1.1" );
		_my_xml.obj.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded");
		_my_xml.obj.setRequestHeader( 'MY_XML', ( call_back_func_ == xml_process_response ? '2' : '1' ) );
		_my_xml.obj.setRequestHeader( 'MY_DOC_ID', _doc_ID );

		_my_xml.arguments = new Array();
		var node_ID;
		for( var _i=3; _i< arguments.length; _i++ ){
			_my_xml.arguments[ _i - 3] = arguments[ _i];

			node_ID = 'name=' + escape( firstval( arguments[ _i].id, arguments[_i].name ) );
			node_ID += '&tag=' + escape( arguments[_i].tagName );
			if( node_ID ){
				if( arguments[_i].form ){
					node_ID += "&form=" + escape( arguments[_i].form.name );
//					node_ID = arguments[_i].form.name + "{" + node_ID + "}" ;
				}
//				alert( node_ID );
				_my_xml.obj.setRequestHeader( 'NODE_' + ( _i-3 ), node_ID );	// + escape( node_ID ), 1 );
			}
		}

//		for( var _i=3; _i< arguments.length; _i++ )
//			_my_xml.arguments[ _i - 3] = arguments[ _i];
		_my_xml.obj.onreadystatechange = function( ){
			if( _my_xml.obj.readyState == 4 ){
				xml_run_count = Math.max( 0, xml_run_count - 1 );
				call_back_func_( _my_xml ) ;
			}
		};
		xml_run_count ++;
		if( xml_run_count == 1 )
			xml_request_running();
		_my_xml.obj.send( query_str_ );
	} catch( e ){
		alert( "Something is Wrong " + url_ + "\n"+ e );
//		return false;
	}
//	return true;
}

function xml_process_result( my_xml_ ){
	var xml_doc = my_xml_.obj.responseXML;
	if( !xml_error_msgs( xml_doc ) ){
		var node = xml_doc.getElementsByTagName( 'result' );
		if( node && node.length ){
			alert( node[0].firstChild.data );
//			alert( xml_doc.getElementsByTagName( 'MY_DOC_ID' )[0].getAttribute( 'value' ) );
		} else{
			alert( 'No result was return.' );
		}
	}
}

function xml_replace_innerHTML( my_xml_ ){
	var _ele = my_xml_.arguments[0];
	var _xml_doc = my_xml_.obj.responseXML;
//	js_debug( my_xml_.obj.responseText );
	if( !xml_error_msgs( _xml_doc ) ){
		if( Math.floor( my_xml_.obj.status / 100 ) == 2 ){
			var _node = _xml_doc.getElementsByTagName( 'result' );
			if( _node.length  ){
				if( _node.length == 1 && _ele ){
					var buffer = '';
					for( var i=0; i< _node[0].childNodes.length; i++ )
						buffer += _node[0].childNodes[i].data;
					_ele.innerHTML = buffer;

//				
//					js_debug_clear( );
//					js_debug( _node[0].firstChild.data );
//					alert( _node[0].firstChild.data.length + " " + _node[0].childNodes.length  );
//					_ele.innerHTML = _node[0].firstChild.data ;
				} else if( _node.length ){
					_node = _node[0].getElementsByTagName( 'list' );
					for( var i=0; i < _node.length;  i++ ){
						tmp_node = js_element( js_attribute( _node[i], 'key' ) );
						js_innerHTML( tmp_node, js_attribute( _node[i], 'value' ) );
					}

				} else if( _node.length == 0 ){
					alert( "No result was return" );
				}
			}
			else{
				_ele.innerHTML = my_xml_.obj.responseText ;
			}
		}
	}
}

function xml_replace_options( my_xml_ ){
//	alert( my_xml_.obj.responseText );
	var _ele = my_xml_.arguments[0];
	var _xml_doc = my_xml_.obj.responseXML;
	if( !xml_error_msgs( _xml_doc ) ){
		var _index =0, _k, _v;

		for( _i = _ele.length - 1; _i >=0; _i-- ){
			_ele.options[ _i ] = null;
		}

		var _node = _xml_doc.getElementsByTagName( 'list' );
		for( _i=0; _i < _node.length ; _i++ ){
			_k = _node[_i].getAttribute( 'key' );
			_v = _node[_i].getAttribute( 'value' );
			_ele.options[ _i ] = new Option( _v, _k );

			if( _k == my_xml_.arguments[1] )
				_index = _i;			
		}
		_ele.selectedIndex = _index;
	}
}

function xml_replace_value( my_xml_ ){
	var _ele = my_xml_.arguments[0];
	var _xml_doc = my_xml_.obj.responseXML;
	if( !xml_error_msgs( _xml_doc ) ){
		if( _ele && Math.floor( my_xml_.obj.status / 100 ) == 2 ){
			var _node = _xml_doc.getElementsByTagName( 'result' );
			_ele.value = _node[0].firstChild.data ;
		}
	}
}

function xml_request_running(){
	xml_run_count = Math.max( 0, xml_run_count );
	var _ele = js_element( 'XML_RUNNING_DIV' );

	if( xml_run_count ){
		if( _ele ){
			_org_message = "&nbsp;Running,&nbsp;please&nbsp;wait.";
			_ele.innerHTML = _org_message + ".....".substr( 0, ( _ele.innerHTML.length - _org_message.length + 1) % 6 );
			_ele.style.top = document.body.scrollTop;
			_ele.style.left = document.body.scrollLeft + document.body.clientWidth - 202;
			setTimeout( 'xml_request_running();', 100 );
		}
	}
	else if( _ele ){

		_ele.style.top = -100;
		_ele.style.left = -100;
	}
}

function xml_submit( frmName_, submit_button_ ){

	var query_str = '';
	var form = document.forms[ frmName_ ];
	var i =0;

	submit_button_.disabled = true;
	submit_button_.value = "Please wait. Processing...";

	for( i=0; i < form.elements.length; i++ ){
		value = input_value( form.elements[i] );
		if( value != null ){
			query_str += escape( form.elements[i].name ) + "=" + my_escape( value ) + "&";
//			alert( form.elements[i].name + "\n" + my_escape( value ) );
		}
	}
	var url_action = form.action ; // javascript 's length is 10

	if( url_action.substr( 0, 10 ).toLowerCase() == 'javascript' ){
		form.submit();
		submit_button_.disabled = false;
		submit_button_.value = "Submit";
	} else  {
		xml_post_request( form.action, form_query_str( frmName_ ), xml_submit_result, submit_button_ );
	}

}

function xml_submit_result( my_xml_ ){
	var xml_doc = my_xml_.obj.responseXML;

//	alert( my_xml_.obj.responseText );	
	if( !xml_error_msgs( xml_doc ) ){
		var valid_return = false;
		var strReturn = '';

		var node = xml_doc.getElementsByTagName( 'result' );
		if( node && node.length ){
			strReturn = node[0].firstChild.data ;
			valid_return = true;
		}

		node = xml_doc.getElementsByTagName( 'url' );
		if( node && node.length && node[0].childNodes.length ){
			var link2go = node[0].firstChild.data ;
			node = xml_doc.getElementsByTagName( 'confirm_go' );
			if( node && node.length && confirm( strReturn + "\n" + node[0].firstChild.data ) ){
				top.location = link2go ;
			} else if( node && node.length == 0 ){
				if( strReturn.length )
					alert( strReturn );
				top.location = link2go ;
			}
//			top.location = node[0].firstChild.data ;
			valid_return = true;
		} else if( valid_return ){
			alert( strReturn );
		}

		node = xml_doc.getElementsByTagName( 'AUTO_INCREMENT_FIELD' );
		if( node && node.length > 0 ){
			var field_name = node[0].firstChild.data;
			node = xml_doc.getElementsByTagName( field_name );
			var record_ID = node[0].firstChild.data;

			if( my_xml_.arguments[0] ){
				form = my_xml_.arguments[0].form ;
				if( form[ 'flds[' + field_name + ']' ] )
					form[ 'flds[' + field_name + ']' ].value = record_ID ;
			}
		}
		if( !valid_return ){
			alert( "Submit didn't return any valid result" );
		}
		if( my_xml_.arguments[0] ){
			my_xml_.arguments[0].value = "Submit";
			my_xml_.arguments[0].disabled = false;
		}
	} else {
		if( my_xml_.arguments[0] ){
			my_xml_.arguments[0].value = "Submit";
			my_xml_.arguments[0].disabled = false;
		}
	}
}

function xml_url_go( my_xml_ ){
	var url = '';
	var xml_doc = my_xml_.obj.responseXML;
	if( !xml_error_msgs( xml_doc ) ){
		var node = xml_doc.getElementsByTagName( 'url' );
		if( node && node.length )
			url = node.item(0).firstChild.data ;
		if( url.length ){
			top.location = url;
			return true;
		} else{
			node = xml_doc.getElementsByTagName( 'alert' );
			if( node ){
				alert( node[0].firstChild.data );
			} else {
				alert( "Error: No link was return" );
			}
			return false;
		}
	}
	return false;
}

function xml_process_response( my_xml_ ){
	var xml_doc = my_xml_.obj.responseXML ;
	var node ;
	var xversion;

	node = xml_doc.getElementsByTagName( 'ootm' );
	if( node && node.length == 1 ){
		//make sure the version is 2.
		var xversion = node[0].getAttribute( 'version' );
		if( xversion != 2 )
			return null;
	}

	//make sure the xml doc_ID AND this html document 's DOC_ID is the same.
	node = xml_doc.getElementsByTagName( 'MY_DOC_ID' );
	if( node && node.length ){
		xml_docID = node[0].getAttribute( 'value' );
		node = document.getElementsByTagName( 'MY_DOC_ID' );
		if( node && node.length ){
			html_doc_ID = node[0].getAttribute( 'value' );
			if( html_doc_ID != xml_docID ){
				alert( "Non match" );
				return false;
			}
		}
	} else {
		alert( "No doc" );
		alert( xml_doc + "?" + my_xml_.obj.responseText + "?" + my_xml_.obj.readyState );
 		alert( my_xml_.obj.getResponseHeader("Content-Type") );
 		return false;
	}

	if( xversion == 2 ){

		var i, j, l, buffer, frmName, nName;
		var prompted = false ;
		var tmp_str = '';
		var sub_node, this_elem , c ;
		var error = false;
		var redirected = false;

		//replace the innerHTML with the given id in result tag.
		node = js_ElementsByAttribute( xml_doc, 'k', 'error', 2 );
		if( node && node.length && node[0].childNodes.length ){
			buffer = '';
			for( i=0; i < node[0].childNodes.length; i++ ){
				if( node[0].childNodes[i].childNodes.length ){
					tmp_str += node[0].childNodes[i].firstChild.data + "\n";
					buffer += "<li>" + node[0].childNodes[i].firstChild.data + "</li>\n";
				}
			}
			if( tmp_str.length ){
				alert( "Error: \n" + tmp_str );
				prompted = true;
				error = true;

				if( js_element( 'divErrorPrompt' ) ){
					js_innerHTML( js_element( 'divErrorPrompt' ), "<ul class=\"stdUL\" style=\"color:red;\"><b>Error</b>\n" + buffer + "</ul>" );
				}
//				return false;
			}
		}

		node = js_ElementsByAttribute( xml_doc, 'k', 'url', 2 );
		if( !error && node && node.length && !prompted ){
			var link = js_childData( node[0], 'link' );
			if( link && link.length ){
				redirected = true;

//				alert( link );
				tmp_str = js_childData( node[0], 'confirm_go' );

				var go2link = false;
				if( !tmp_str || tmp_str.length == 0 ){
					tmp_str = js_childData( node[0], 'alert_go' );
					if( !( !tmp_str || tmp_str.length == 0 ) ){
						alert( tmp_str );
						prompted = true;
					}
					tmp_str = js_childData( node[0], 'prompt2ajax' );
					if( tmp_str ){
						prompt2ajax( tmp_str, link );
						prompted = true;
//						alert( go2link );
					} else{
						go2link = true;
					}
//					top.location = link;
				}
				else if( confirm( tmp_str ) ){
					go2link = true;
					prompted = true;
//					top.location = link;
				}

//				prompted = ( tmp_str.length );

				if( go2link ){
					tmp_str = js_childData( node[0], 'new_win' );
//					alert( "new_win: " + tmp_str );
					if( tmp_str == 1 ){
						var newWindow = window.open( link, '_new');
						newWindow.focus();
					} else{
						top.location.href = link;
					}

				}
			}
		}

		//execute the javascript in jsini tag.
		node = js_ElementsByAttribute( xml_doc, 'k', 'jsini', 2 );
		if( node && node.length && node[0].childNodes.length ){
			for( i=0; i < node[0].childNodes.length; i++ ){
				c = node[0].childNodes[i] ;
				if( c.childNodes.length && js_attribute( c, 'k' ) >= 0 ){
//					alert( c.childNodes[0].data );
					eval( c.childNodes[0].data );
				}
			}
		}

		//replace the innerHTML with the given id in result tag.
		node = js_ElementsByAttribute( xml_doc, 'k', 'result', 2 );
		if( node && node.length && node[0].childNodes.length ){
			for( i=0; i < node[0].childNodes.length; i++ ){
				c = node[0].childNodes[i] ;
				if( c.nodeType == 1 ){
					tmp_str = js_childData( c, 'id' );
					if( tmp_str && tmp_str.length && ( this_elem = js_element( tmp_str ) ) ){
						js_innerHTML( this_elem, js_childData( c, 'html' ) );
					} else if( my_xml_.arguments.length ){
//						js_innerHTML( js_element( my_xml_.arguments[0] ), js_childData( c, 'html' ) );
//						alert( "Was i here? " + my_xml_.arguments[0].id  + "\n" + js_childData( c, 'html' ) );
						js_innerHTML( my_xml_.arguments[0], js_childData( c, 'html' ) );
					}
				}
			}
		}

		//change the value in a form, if provided options, change a select's options as well.	
		node = js_ElementsByAttribute( xml_doc, 'k', 'hfield', 2 );
		if( node && node.length && node[0].childNodes.length ){
//			alert( node[0].childNodes.length );
			for( i=0; i < node[0].childNodes.length; i++){
				c = node[0].childNodes[i];
				frmName = js_childData( c, 'frm' );
				nName = js_childData( c, 'name' );
//				alert( frmName + "|" + nName  + "|" + js_childData( c, 'value' ) );
				if( document.forms[ frmName ] && document.forms[ frmName][ nName] ){
//					alert( frmName + "|" + nName  + "|" + js_childData( c, 'value' ) );
					this_elem = document.forms[ frmName ][ nName ] ;

					sub_node = js_ElementsByAttribute( c, 'k', 'options', 1 );
					if( sub_node && sub_node.length && sub_node[0].childNodes.length ){
						empty_options( this_elem );
						l= 0;
//						alert( sub_node[0].childNodes.length );
						for( j=0; j < sub_node[0].childNodes.length; j++ ){
							if( sub_node[0].childNodes[j].nodeType == 1 ){
								if( sub_node[0].childNodes[j].childNodes.length )
									this_elem.options[l] = new Option( sub_node[0].childNodes[j].firstChild.data );
								else
									this_elem.options[l] = new Option( '' );
								tmp_str = js_attribute( sub_node[0].childNodes[j], 'k' );
								if( tmp_str == false ){
									tmp_str = '';
								}
								this_elem.options[l].value = tmp_str;
								l++;
							}
						}
					}
					if( ( tmp_str = js_childData( c, 'value' ) ) ){
//						alert( frmName + "|" + nName + "|" + tmp_str );
						js_input_value( this_elem, tmp_str );
					}
				} else if( frmName && nName ){

//					alert( "NO found: " + document.forms[ frmName ] + "|" + frmName + "|" + nName );
				}
			}
		}

		//execute the javascript in jsini tag.
		node = js_ElementsByAttribute( xml_doc, 'k', 'jsini', 2 );
		if( node && node.length && node[0].childNodes.length ){
			for( i=0; i < node[0].childNodes.length; i++ ){
				c = node[0].childNodes[i] ;
				if( c.childNodes.length && js_attribute( c, 'k' ) < 0 ){
//					alert( c.childNodes[0].data );
					eval( c.childNodes[0].data );
				}
			}
		}

		node = js_ElementsByAttribute( xml_doc, 'k', 'submit', 2 );
		if( node && node.length && node[0].childNodes.length ){
			if( !redirected ){
				frmName = js_childData( node[0], 'frm' );
				nName = js_childData( node[0], 'id' );
				this_elem = document.forms[ frmName ][nName ];

				this_elem.disabled = false;
				this_elem.value = js_attribute( this_elem, 'my_prompt' );
//			} else {
//				alert( "Was I here? redirected" );
			}

		}

		//alert the user if 'alert' is provided.
		if( !prompted ){
			node = js_ElementsByAttribute( xml_doc, 'k', 'alert', 2 );
			if( node && node.length ){
				tmp_str = node[0].childNodes[0].data;
				if( tmp_str && tmp_str.length ){
					prompted = true;
					alert( tmp_str );
				}
			}
		}
	}
}

//-------------------------OLD FUNCTIONS ------------------------------

function trim( str ){
	var tmpstr = str;
	var i =0;
	for( i =0; i < tmpstr.length && tmpstr.charAt( i ) == " "; i++);
	tmpstr = tmpstr.substr( i, tmpstr.length );
	for( i = tmpstr.length -1; i > 0 && tmpstr.charAt( i ) == " "; i--);
	tmpstr = tmpstr.substr( 0, i+1 );
	return tmpstr;
}

function addQuantity( formname, name)
{
	var i = Math.floor( document.forms[formname][name].value );
	document.forms[formname][name].value = ( i + 1 );
}
function subQuantity( formname, name )
{
	var i = Math.floor( document.forms[formname][name].value );
	document.forms[formname][name].value = Math.max( 0, ( i -1 )) ;
}

function field_empty( field, alert_str ){
	if( field.value.length == 0 && ( arguments.length > 1 && alert_str.length > 0 ) ){
		alert( alert_str );
		field.focus();
	}
	return field.value.length == 0 ;
}

function is_checked( field, alert_str ){
	var check = false;
	if( field.type && field.type.toLowerCase( ) == 'radio' && field.length == undefined ){
		check = field.checked;
	}
	for( var i=0; i < field.length; i ++ ){
		check = ( check || field[i].checked );
	}

	if( !check && ( arguments.length > 1 && alert_str.length > 0 )){
		alert( alert_str );
	}
	return check;
}

function field_is_digit( field, alert_str ){
	var num = trim( field.value );
	var i =0;

	if( num.charAt( 0 ) == "-" || num.charAt( 0 ) == "+" )
		num = num.substr( 1, num.length );

	var period = 0;
	var c = "";
	i = 0;
	var status = true;
	while( i < num.length && period <= 1 && status ){
		c = num.charAt( i );
		if( c == '.' )
			period ++;
		else if( !( c >= '0' && c <= '9' ) )
			status = false;
		i++;
	}
	if( !( status && period <= 1 && i > 0 ) && ( arguments.length > 1 && alert_str.length > 0 ) ){
		alert( alert_str );
		field.focus();
	}
	return ( status && period <= 1 && i > 0 );
}

function field_is_email( field, alert_str ){
		var email = field.value;
		var return_val = !( email.indexOf( "\@" ) == -1 || email.lastIndexOf( "." ) == -1 || email.indexOf( "\@" ) > email.lastIndexOf( "." ) );
		if( !return_val && ( arguments.length > 1 &&  alert_str.length > 0 ) ){
			alert( alert_str );
			field.focus();
		}
		return return_val;
}

function number_count( field, len, alert_str ){
	var num = field.value ;
	var num_count = 0;
	var c = "";
	var i = 0;
	while( i < num.length ){
		c = num.charAt( i );
		if( c >= '0' && c <= '9'  )
			num_count ++;
		i++;
	}
	if( num_count < len && ( arguments.length > 2 &&  alert_str.length > 0 ) ){
		alert( alert_str );
		field.focus();
	}
	return ( num_count >= len );
}

function ootm_modify_timestamp( type_, val_elem_, elem_name_ ){

	var form = val_elem_.form ;
	var val = js_input_value( form[ elem_name_ ] );	//YYYY-MM-DD HH:II:SS
	var new_val = js_input_value( val_elem_ );

	if( new_val.length == 0 ){
		new_val = '00';
	} else if( Math.floor( new_val ) < 10 ){
		new_val = '0'+ '' + new_val ;
	}

	if( type_ == 'hour' ){
		val = val.substr( 0, 11 ) + new_val + val.substr( 13, 6 );
	} else if( type_ == 'minute' ){
		val = val.substr( 0, 14 ) + new_val + val.substr( 16, 3 );
	} else if( type_ == 'second' ){
		val = val.substr( 0, 17 ) + new_val ;
	} else if( type_ == 'Ymd' ){
		val = new_val + val.substr( 10, 9 );
	} else if( type_ == 'month' ){
		val = val.substr( 0, 5 ) + new_val + val.substr( 7, 12 );
	} else if( type_ == 'day' ){
		val = val.substr( 0, 8 ) + new_val + val.substr( 10, 9 );
	} else if( type_ == 'year' ){
		val = new_val + val.substr( 4, 15 );
	}
//	alert( val );

	js_input_value( form[ elem_name_ ] , val );

//	alert( js_input_value( form[ elem_name_ ] ) );
}

function ootm_paid_today( frmName_, month_name_, day_name_, year_name_, val_name_ ){
	var form = document.forms[ frmName_ ];
	var today = new Date();

	js_input_value( form[month_name_], today.getMonth( ) + 1 );
	js_input_value( form[day_name_], today.getDate( ) );
	js_input_value( form[year_name_], today.getFullYear( ) );

	js_input_value( form[val_name_], js_date2timestamp( today ) );
}

function openJWindow( url, attrib ){
	a_win = window.open(url, "Jwindow", attrib );
	a_win.focus();
}

function set_today( frmName, field_year, field_month, field_day ){
	var today = new Date();
	var form = document.forms[ frmName ];
	var i = 0;

	if( field_year.length ){
		for( i = 0; i < form[ field_year].options.length; i++){
			if( form[ field_year].options[ i].value == today.getFullYear() )
				form[ field_year].selectedIndex = i;
		}
	}
	if( field_month.length ){
		for( i = 0; i < form[ field_month].options.length; i++){
			if( form[ field_month].options[ i].value == today.getMonth() +1 )
				form[ field_month].selectedIndex = i;
		}
	}
	if( field_day.length ){
		for( i = 0; i < form[ field_day].options.length ; i++){
			if( form[ field_day].options[ i].value == today.getDate() )
				form[ field_day].selectedIndex = i;
		}
	}

}

function check_a_box( frmName_, box_name_ ){
	var form = document.forms[ frmName_ ];
	form[ box_name_].checked = true;

}

function js_display( elem_, display_ ){
	elem_.style['display'] = ( display_ ? 'inline' : 'none' );
}
