	function listNewOptGroup( group ) {
		var optgroup = document.createElement( "li" );
		optgroup.appendChild( document.createTextNode( group.name ) );
		
		var optgroup_children = document.createElement( "ul" );
		optgroup.appendChild( optgroup_children );

		return optgroup;
	}

	function listNewElement( elem, onclick ) {
		var option = document.createElement( "li" );
		var a = document.createElement( "a" );
		a.appendChild( document.createTextNode( elem.name ) );
		a.id = 'a'+elem.id;
		a.eid = elem.id;
		/* a.href = '#'; */
		
		if( onclick ) {
			a.onclick = new Function( onclick );
		}

		option.appendChild( a );

		return option;
	}

	function t_toggle( id ) {
		$('#' + id ).toggleClass( 'energy-hide' );
	}
	function a_toggle( id ) {
		$('#' + id ).toggleClass( 'energy-hidden' );
	}

	function check_element_generic( me, checkfunc, permitEmpty ) {

		if( permitEmpty && ( $(me).val().length == 0 || $(me).val() == null) ) {
			$( '#' + $(me).attr( 'lid' ) ).removeClass( 'required-empty' );
			return true;
		}

		if( checkfunc.apply( me ) == false ) {
			$( '#' + $(me).attr( 'lid' ) ).addClass( 'required-empty' );
			return false;

		} else {
			$( '#' + $(me).attr( 'lid' ) ).removeClass( 'required-empty' );
			return true;
		}
	}

	function check_element_int_range( me, left, right ) {
		var val = $(me).val();
		if( ! val.match( /^\d+$/ ) )
			return false;
		
		if( !( val >= left && val <= right ) )
			return false;
	}

	function check_element_float_range( me, left, right ) {
		var val = $(me).val();

		val = val.replace( /\,/, '.' );

		if( ! val.match( /^\d+(\.\d+)?$/ ) )
			return false;
		
		if( !( val >= left && val <= right ) )
			return false;
	}

	function check_element_date( me ) {
		var val = $(me).val();

		var f1 = /^(\d\d)\.(\d\d)\.(\d\d)$/;
		var f2 = /^(\d\d)\-(\d\d)\-(\d\d)$/;
		var f3 = /^(\d\d)\/(\d\d)\/(\d\d)$/;
		var f4 = /^(\d\d\d\d)\-(\d\d)\-(\d\d)$/;
		var f5 = /^(\d\d)\/(\d\d)\/(\d\d\d\d)$/;
		var f6 = /^(\d\d)\.(\d\d)\.(\d\d\d\d)$/;

		var d; var m; var y = 0;

		if( f1.test( val ) || f2.test( val ) || f3.test( val ) ) {
			d = RegExp.$1; m = RegExp.$2; y = 2000 + Number(RegExp.$3);

		} else if( f4.test( val ) ) {
			d = f4.$3; m = f4.$2; y = f4.$1;

		} else if( f5.test( val ) || f6.test( val ) ) {
			d = RegExp.$1; m = RegExp.$2; y = RegExp.$3;

		} else {
			return false;
		}

		var dateobj = new Date( y, m-1, d );

		if( ( dateobj.getMonth() + 1 ) != m
			|| dateobj.getDate() != d
			|| dateobj.getFullYear() != y
		) {
			return false;
		}

		return dateobj;
	}

	function check_element_date_obj_range( me, left_date_obj, right_date_obj ) {
		var dateobj = check_element_date( me );

		if( dateobj == false ) {
			return false;
		} else {
		}

		return dateobj >= left_date_obj && dateobj <= right_date_obj;
	}

	function f_try_check( elem, func_attr_name ) {

		var funcName = func_attr_name 
			? $(elem).attr( func_attr_name )
			: 'f_check_' + $(elem).attr( 'lid' );


		if( eval( "typeof " + funcName + " == 'function'" ) ) {
			return window[funcName]( elem );
		}

		return check_element_generic( elem, function() {
			//alert($(elem).val());
			if( $(elem).val().length < 1 ) {
			    //alert($(elem).attr('name') + ':' + $(elem).val());	
			    return false;
			}
		});
	}

function change_parent( element_id, new_parent_id ) {
	var elem = document.getElementById( element_id );
	var new_parent = document.getElementById( new_parent_id );
	elem.parentNode.removeChild( elem );
	new_parent.appendChild( elem );
}

function plural( n, one, one_, many ) {

   return (  
        ( n % 10 == 1 )
             ?
                ( n % 100 == 11 ? many : one )
             :
                (
					( n % 10 == 2 || n % 10 == 3 || n % 10 == 4 )
					 ?
						( ( n % 100 == 2 || n % 100 == 3 || n % 100 == 4 )
						 ?
							many
						 :
							one_
						)
					 :
						many
				)
    );
}

