/*********************************************************************
	
	=== Cross Browser ===
	
	* Element [ Element.js ]
	
	* updated 2001/05/28
	
	mail : peace@skipup.com
	home : http://www.skipup.com/~peace/
	
*********************************************************************/

var Elements ;

// public class Element extends Object
function Element(){
	
	// private boolean
	var exist = true ;
	
	// private object
	var D = document ;
	
	// private string
	this.name ;
	
	// public LayerObject
	this.layer ;
	
	// public StyleObject
	this.style ;
	
	/****************************** CONSTRUCTOR - BEGIN ******************************/
	
	switch( arguments.length ){
		case 0 : default : { // create new Layer
			this.name = "_js_layer_"+Element.$user_create_element_number++ ;
			if( !Client.NN ){
				var s = "position:absolute;left:0px;top:0px;z-index:1;height:0px;width:0px;visibility:hidden;" ;
				if( Client.MZ ){
					this.layer = D.createElement( "div" );
					this.layer.id = this.name ;
					this.layer.setAttribute( "style" , s );
					D.body.appendChild( this.layer );
				}else{
					D.body.insertAdjacentHTML( "BeforeEnd" , "<div id='"+this.name+"' style=\""+s+"\"><\/div>"+(Client.MAC?' ':'') );
					this.layer = D.all[ this.name ];
				}
				this.style = this.layer.style ;
			}else{
				this.layer = new Layer(0);
				this.style = this.layer ;
			}
			break ;
		}
		case 1 : { // string || Layer || Element
			var o = arguments[0];
			if( typeof o == "string" ){ // string
				this.name  = o ;
				this.layer = getLayer( this.name );
				if( exist ) this.style = !Client.NN ? this.layer.style : this.layer ;
			}else if( typeof o == "object" ){ // Layer || Element
				if( o.constructor == Element ){ // Element
					this.name  = o.name ;
					this.layer = o.layer ;
					this.style = o.style ;
				}else{ // Layer
					this.layer = eval(o);
					this.name  = !Client.NN ? this.layer.id : this.layer.name ;
					this.style = !Client.NN ? this.layer.style : this.layer ;
				}
			}else{
				Exception(o);
			}
			break ;
		}
	}
	
	/****************************** CONSTRUCTOR - E N D ******************************/
	
	if( Client.NN ){
		function searchLayer_Netscape( l , id ){
			for(var i=0;i<l.length;i++){
				if( l[i].name == id ){
					return l[i] ;
				}else if( l[i].document.layers.length != 0 ){
					var s = searchLayer_Netscape( l[i].document.layers , id );
					if( s ) return s ;
				}
			}
			return null ;
		}
	}
	
	function getLayer( name ){
		var D = document ;
		if( Client.IE && D.all[ name ] != null ) return D.all[ name ];
		if( Client.NN ){
			if( D.layers[ name ] != null ) return D.layers[ name ];
			var l = searchLayer_Netscape( D.layers , name );
			if( l ) return l ;
		}
		if( Client.MZ && D.getElementById(name) != null ) return D.getElementById(name);
		exist = false ;
		return Exception( name );
	}
	
	function Exception( object ){ return alert( "存在しないオブジェクト : "+object ); }
	
}

function setBasicMember__Element__(){
	
	var E  = Element ;
	var EP = E.prototype ;
	
	var C = Client ;
	var D = document ;
	
	if( C.NN ){
		function searchLayer_Netscape( a ){
			for( var i in a ) if( a[i].name !== void 0 ){
				Elements[ a[i].name ] = new E( a[i] );
				if( a[i].document.layers.length != 0 ) searchLayer_Netscape( a[i].document.layers );
			}
		}
	}else if( C.MZ ){
		function searchLayer_Mozilla( a ){
			for(var i=0;i<a.childNodes.length;i++){
				if( a.childNodes[i].toString().match(/object HTML.*Element/) != null ){
					var n = a.childNodes[i] ;
					if( n.id ) Elements[ n.id ] = new E( n );
					if( n.childNodes.length != 0 ) searchLayer_Mozilla( n );
				}
			}
		}
	}
	
	/***************************** SET_STATIC_MEMBER - BEGIN *****************************/
	
	// public static int
	E.$user_create_element_number = 0 ;
	
	// public static string[]
	E.index ;
	
	// public static void
	E.setElementArray = E.setArray = function(){
		Elements = new Array();
		E.index  = new Array();
		var index ;
		var count = 0 ;
		if( C.IE ){
			for( var i in D.all ){
				index = i.toString();
				if( isNaN( index ) && index != "length" ){
					E.index[ count++ ] = index ;
					Elements[ index ] = new E( index );
				}
			}
		}else{
			if( C.NN ) searchLayer_Netscape( D.layers );
			if( C.MZ ) searchLayer_Mozilla( D.body );
			for( var i in Elements ) E.index[ count++ ] = Elements[i].name ;
		}
	};
	
	/***************************** SET_STATIC_MEMBER - E N D *****************************/
	
	/****************************** SET_MEMBER - BEGIN ******************************/
	
	// public final string
	EP.getID = function(){ return this.name ; };
	
	// public final boolean
	EP.equals = function( e ){ return ( this.layer == e.layer ); };
	
	// public void
	EP.setDisplay = function( v ){ this.style.display = v };
	
	// public boolean
	EP.getDisplay = function(){
		return this.style.display ;
	};
	// public void
	EP.setVisibility = function( v ){ this.style.visibility = ( v ? true : false ) ? ( !C.NN ? "visible" : "inherit" ) : ( !C.NN ? "hidden" : "hide" ); };
	
	// public boolean
	EP.getVisibility = function(){
		var v = this.style.visibility ;
		return ( v == "visible" || v == "show" || v == "inherit" );
	};
	
	// public void
	EP.setBackgroundColor = function( v ){
		var c = v ? ( ( typeof v == "string" ) ? v : v.toColor() ) : '' ;
		if( c == '' && !C.IE ) c = C.NN ? null : "transparent" ;
		if( !C.NN ){
			this.style.backgroundColor = c ;
		}else{
			this.style.bgColor = c ;
		}
	};
	
	// public string
	EP.getBackgroundColor = function(){
		var c = !C.NN ? this.style.backgroundColor : this.style.bgColor ;
		if( !( c ) && ( C.NN && c != 0 ) ) return '' ;
		if( !C.NN ){
			return C.IE ? c.substring(1,7) : ( new Point3( c.substring( 4 , c.length-1 ).split(',') ) ).toColor() ;
		}else{
			var t = c.toString(16);
			var z = "" ;
			for(var i=0;i<6-t.length;i++) z += "0" ;
			return z+t ;
		}
	};
	
	// public void
	EP.setBackgroundImage = function( p ){
		if( !C.NN ){
			this.style.backgroundImage = "url("+p+")" ;
		}else{
			this.style.background.src = p ;
		}
	};
	
	// public void
	EP.initPosition = function(){ if( !C.NN ){
		var o = this.layer ;
		var s = o.style ;
		if( C.MZ ){
			s.left = o.offsetLeft ;
			s.top  = o.offsetTop  ;
		}else{
			s.pixelLeft = o.offsetLeft ;
			s.pixelTop  = o.offsetTop  ;
		}
	}};
	EP.setPosition = function(){
		var l , t ;
		var a = arguments ;
		switch( a.length ){
			case 0 : default : l = t = 0 ; break ;
			case 1 : { // Dimension || number
				if( a[0].constructor == Dimension ){ // Dimension
					l = a[0].x ;
					t = a[0].y ;
				}else{ // number
					l = t = a[0] ;
				}
				break ;
			}
			case 2 : { // number , number
				l = a[0];
				t = a[1];
				break ;
			}
		}
		var o = this.style ;
		if( !C.NN ){
			if( C.MZ ){
				o.left = l ;
				o.top  = t ;
			}else{
				o.pixelLeft = l ;
				o.pixelTop  = t ;
			}
		}else{
			o.moveTo( l , t );
		}
	};
	EP.setPosition3 = function(){
		var l , t , d ;
		var a = arguments ;
		switch( a.length ){
			case 0 : default : l = t = 0 ; d = 1 ; break ;
			case 1 : { // Point3
				l = a[0].x ;
				t = a[0].y ;
				d = a[0].z ;
				break ;
			}
			case 2 : { // Dimension , number || number , number
				var p = new Dimension( a[0] );
				l = p.x ;
				t = p.y ;
				d = a[1];
				break ;
			}
			case 3 : { // number , number , number
				l = a[0];
				t = a[1];
				d = a[2];
				break ;
			}
		}
		var o = this.style ;
		if( !C.NN ){
			if( C.MZ ){
				o.left = l ;
				o.top  = t ;
			}else{
				o.pixelLeft = l ;
				o.pixelTop  = t ;
			}
		}else{
			o.moveTo( l , t );
		}
		o.zIndex = ( d < 1 ) ? 1 : d ;
	};
	EP.setPositionX = EP.setX = function( l ){
		if( !(l) ) l = 0 ;
		var s = this.style ;
		if( !C.NN ){
			if( C.MZ ){
				s.left = l ;
			}else{
				s.pixelLeft = l ;
			}
		}else{
			s.moveTo( l , s.top );
		}
	};
	EP.setPositionY = EP.setY = function( t ){
		if( !(t) ) t = 0 ;
		var s = this.style ;
		if( !C.NN ){
			if( C.MZ ){
				s.top = t ;
			}else{
				s.pixelTop = t ;
			}
		}else{
			s.moveTo( s.left , t );
		}
	};
	EP.setPositionZ = EP.setZ = function( d ){ this.style.zIndex = ( !(d) || d < 1 ) ? 1 : d ; };
	
	// public Dimension
	EP.getPosition = function(){
		var s = this.style ;
		var p = C.IE ? new Dimension( s.pixelLeft , s.pixelTop ) : new Dimension( parseInt( s.left ) , parseInt( s.top ) ) ;
		if( !C.NN && p.isNaN() ){
			this.initPosition();
			if( C.MZ ){
				p.setX( parseInt( s.left ) );
				p.setY( parseInt( s.top  ) );
			}else{
				p.setX( s.pixelLeft );
				p.setY( s.pixelTop  );
			}
		}
		return p ;
	};
	
	// public Posint3
	EP.getPosition3 = function(){
		var s = this.style ;
		var p = C.IE ? new Point3( s.pixelLeft , s.pixelTop , s.zIndex ) : new Point3( parseInt( s.left ) , parseInt( s.top ) , s.zIndex ) ;
		if( !C.NN && p.isNaN() ){
			this.initPosition();
			if( C.MZ ){
				p.setX( parseInt( s.left ) );
				p.setY( parseInt( s.top  ) );
			}else{
				p.setX( s.pixelLeft );
				p.setY( s.pixelTop  );
			}
		}
		return p ;
	};
	
	// public int
	EP.getPositionX = EP.getX = function(){
		var s = this.style ;
		var l = C.IE ? s.pixelLeft : parseInt( s.left ) ;
		if( !C.NN && isNaN( l ) ){
			this.initPosition();
			return C.IE ? s.pixelLeft : parseInt( s.left ) ;
		}else{
			return l ;
		}
	};
	EP.getPositionY = EP.getY = function(){
		var s = this.style ;
		var t = C.IE ? s.pixelTop : parseInt( s.top ) ;
		if( !C.NN && isNaN( t ) ){
			this.initPosition();
			return C.IE ? s.pixelTop : parseInt( s.top ) ;
		}else{
			return t ;
		}
	};
	EP.getPositionZ = EP.getZ = function(){ return this.style.zIndex ; };
	
	// public void
	EP.moveForward  = function( e ){ this.style.zIndex = new E( e ).style.zIndex+1 ; };
	EP.moveBackward = function( e ){ this.style.zIndex = new E( e ).style.zIndex-1 ; };
	
	// public void
	EP.initSize = function(){ if( !C.NN ){
		var o = this.layer ;
		var s = o.style ;
		if( C.MZ ){
			s.width  = o.offsetWidth ;
			s.height = o.offsetHeight ;
		}else{
			s.pixelWidth  = o.offsetWidth ;
			s.pixelHeight = o.offsetHeight ;
		}
	}};
	EP.setSize = function(){
		var w , h ;
		var a = arguments ;
		switch( a.length ){
			case 0 : default : w = h = 0 ; break ;
			case 1 : { // Dimension || number
				if( a[0].constructor == Dimension ){ // Dimension
					w = a[0].x ;
					h = a[0].y ;
				}else{ // number
					w = h = a[0];
				}
				break ;
			}
			case 2 : { // number , number
				w = a[0];
				h = a[1];
				break ;
			}
		}
		var s = this.style ;
		if( !C.NN ){
			if( C.MZ ){
				s.width  = w ;
				s.height = h ;
			}else{
				s.pixelWidth  = w ;
				s.pixelHeight = h ;
			}
		}else{
			s.resizeTo( w , h );
		}
	};
	EP.setWidth = function( w ){
		if( !(w) ) w = 0 ;
		var s = this.style ;
		if( !C.NN ){
			if( C.MZ ){
				s.width = w ;
			}else{
				s.pixelWidth = w ;
			}
		}else{
			s.resizeTo( w , s.clip.height );
		}
	};
	EP.setHeight = function( h ){
		if( !(h) ) h = 0 ;
		var s = this.style ;
		if( !C.NN ){
			if( C.MZ ){
				s.height = h ;
			}else{
				s.pixelHeight = h ;
			}
		}else{
			s.resizeTo( s.clip.width , h );
		}
	};
	
	// public Dimension
	EP.getSize = function(){
		var s = this.style ;
		if( !C.NN ){
			
			var p = C.MZ ? new Dimension( parseInt( s.width ) , parseInt( s.height ) ) : new Dimension( s.pixelWidth , s.pixelHeight ) ;
			if( p.isNaN() ){
				this.initSize();
				if( C.MZ ){
					p.set( parseInt( s.width ) , parseInt( s.height ) );
				}else{
					p.set( s.pixelWidth , s.pixelHeight );
				}
			}
			return p ;
		}else{
			return new Dimension( s.clip.width , s.clip.height );
		}
	};
	
	// public int
	EP.getWidth = function(){
		var s = this.style ;
		if( !C.NN ){
			var w = C.MZ ? parseInt( s.width ) : s.pixelWidth ;
			if( isNaN( w ) ){
				this.initSize();
				return C.MZ ? parseInt( s.width ) : s.pixelWidth ;
			}else{
				return w ;
			}
		}else{
			return s.clip.width ;
		}
	};
	EP.getHeight = function(){
		var s = this.style ;
		if( !C.NN ){
			var h = C.MZ ? parseInt( s.height ) : s.pixelHeight ;
			if( isNaN( h ) ){
				this.initSize();
				return C.MZ ? parseInt( s.height ) : s.pixelHeight ;
			}else{
				return h ;
			}
		}else{
			return s.clip.height ;
		}
	};
	
	// public void
	EP.setTrim = function(){
		var l , t , r , b ; // left , top , right , bottom
		var a = arguments ;
		switch( a.length ){
			case 0 : default : t = l = r = b = 0 ; break ;
			case 1 : {
				l = a[0][0];
				t = a[0][1];
				r = a[0][2];
				b = a[0][3];
				break ;
			}
			case 2 : { // Dimension , Dimension
				l = a[0].x ;
				t = a[0].y ;
				r = a[1].x ;
				b = a[1].y ;
				break ;
			}
			case 4 : { // number , number , number , number
				l = a[0];
				t = a[1];
				r = a[2];
				b = a[3];
				break ;
			}
		}
		if( !C.NN ){
			this.style.clip = "rect( "+t+" "+r+" "+b+" "+l+" )" ;
		}else{
			var c = this.style.clip ;
			c.left   = l ;
			c.top    = t ;
			c.right  = r ;
			c.bottom = b ;
		}
	};
	
	EP.getTrim = function(){
		var a = arguments ;
		switch( a.length ){
			case 0 : default : {
				if( !C.NN ){
					var v = this.style.clip ;
					var r = v.substring( 5 , v.length-1 ).split( ' ' );
					for(var i=0;i<4;i++) r[i] = parseInt( r[i] );
					return new Array( r[3] , r[0] , r[1] , r[2] );
				}else{
					var c = this.style.clip ;
					return new Array( c.left , c.top , c.right , c.bottom );
				}
			}
			case 1 : {
				var v = this.getTrim();
				if( typeof a[0] == "number" ){
					return v[ a[0] ];
				}else{
					return ( a[0] == "x" ) ? new Dimension( v[0] , v[2] ) : new Dimension( v[1] , v[3] ) ;
				}
			}
		}
	};
	
	// public Image( Image[] )
	EP.getImage = function( f ){
		if( f || f == 0 ){
			return ( typeof f == "number" ) ? this.getImage()[f] : ( C.IE ? document.images[f] : ( C.NN ? this.layer.document.images[f] : document.getElementById(f) ) );
		}else{
			var l = this.layer ;
			if( C.IE ){
				return l.all.tags("img");
			}else if( C.NN ){
				return l.document.images ;
			}else if( C.MZ ){
				var images = new Array();
				function setImage_Mozilla( a ){
					for(var i=0;i<a.childNodes.length;i++){
						if( a.childNodes[i].toString().match(/object HTML.*Element/) != null ){
							var n = a.childNodes[i];
							if( n.toString().match(/object HTMLImageElement/) != null ){
								images[ images.length++ ] = n ;
							}else if( n.childNodes.length != 0 ){
								setImage_Mozilla( n );
							}
						}
					}
				} setImage_Mozilla( l );
				return images ;
			}
		}
	};
	
	// public void
	EP.setText = function( t ){
		if( !(t) ) t = "" ;
		if( !C.NN ){
			this.layer.innerHTML = t ;
		}else{
			var d = this.layer.document ;
			d.open( "text/html" );
			d.write( t );
			d.close();
		}
	};
	
	// public void
	EP.setFile = function( p ){
		if( !C.NN ){
			this.layer.innerHTML = "<"+"iframe src=\""+p+"\" marginWidth=0 marginHeight=0 scrolling=\"no\" frameBorder=\"no\" style=\"width:100%;height:100%;margin:0px;\"><\/iframe>" ;
		}else{
			this.layer.src = p ;
		}
	};
	
	// public string
	EP.toString = function(){ return "Element : "+this.name ; };
	
	/****************************** SET_MEMBER - E N D ******************************/
	
} setBasicMember__Element__();


