// archives

ElementExtender.js

/**
 * ElementWrapper
 * version 0.8
 * written by 1000ch
 **/
( function( window, undefined ) {

	var document = window.document;
	var navigator = window.document;
	var location = window.location;
	
	var ElementWrapper = ( function() {
		var ElementWrapper = function() {
			this.elements = [];
			this.utils = {
				//judge value is number or not
				isNumber : function( value ) {
					return !isNaN( parseFloat( value ) ) && isFinite( value );
				},
				//add event to element
				bind : function( element, trigger, callback ) {
					if( element.addEventListener ) {
						//if addEventListener is defined
						element.addEventListener( trigger, callback );
					} else if( element.attachEvent ) {
						//if attachEvent is defined
						element.attachEvent( trigger, callback );
					}
				},
				//remove event from element
				unbind : function( element, trigger, callback ) {
					if( element.removeEventListener ) {
						//if removeEventListener is defined
						element.removeEventListener( trigger, callback );
					} else if( element.detachEvent ) {
						//if detachEvent is defined
						element.detachEvent( trigger, callback );
					}
				}
			};
		}
		ElementWrapper.prototype = {
			constructor : ElementWrapper,
			id : function( selector ) {
				//define return object
				var ret = new ElementWrapper();
				//if selector is undefined
				if( !selector ) {
					return ret;
				}
				//get element by id
				var buff = document.getElementById( selector );
				//add to this element container
				ret.elements.push( buff );
				//return this object
				return ret;
			},
			names : function( selector ) {
				//define return object
				var ret = new ElementWrapper();
				//if selector is undefined
				if( !selector ) {
					return ret;
				}
				//get elements by name
				var buff = document.getElementsByName( selector );
				//add to this element container
				for( var i = 0;i < buff.length;i++ ) {
					ret.elements.push( buff[i] );
				}
				//return this object
				return ret;
			},
			tagNames : function( selector ) {
				//define return object
				var ret = new ElementWrapper();
				//if selector is undefined
				if( !selector ) {
					return ret;
				}
				//get elements by tag name
				var buff = document.getElementsByTagName( selector );
				//add to this element container
				for( var i = 0;i < buff.length;i++ ) {
					ret.elements.push( buff[i] );
				}
				//return this object
				return ret;
			},
			classNames : function( selector ) {
				//define return object
				var ret = new ElementWrapper();
				//if selector is undefined
				if( !selector ) {
					return ret;
				}
				//get elements by class name
				var buff = document.getElementsByClassName( selector );
				//add to this element container
				for( var i = 0;i < buff.length;i++ ) {
					ret.elements.push( buff[i] );
				}
				//return this object
				return ret;
			},
			add : function( addElements ) {
				//if addElements is undefined
				if( !addElements ) {
					return this;
				}
				//if addElements is not instanceof ElementWrapper
				if( !( addElements instanceof ElementWrapper ) ) {
					return this;
				}
				//add this struct object to own elements
				for( var i = 0;i < addElements.size();i++ ) {
					this.elements.push( addElements.get( i ) );
				}
				//return this object
				return this;
			},
			size : function() {
				return this.elements.length;
			},
			get : function( index ) {
				return this.elements[index];
			},
			odd : function() {
				//define return object
				var ret = new ElementWrapper();
				for( var i = 0;i < this.size();i += 2 ) {
					ret.elements.push( this.get( i ) );
				}
				return ret;
			},
			even : function() {
				//define return object
				var ret = new ElementWrapper();
				for( var i = 1;i < this.size();i += 2 ) {
					ret.elements.push( this.get( i ) );
				}
				return ret;
			},
			each : function( callback ) {
				for( var i = 0;i < this.elements.length;i++ ) {
					callback.apply( this.get( i ), arguments );
				}
			},
			css : function( key, value ) {
				for( var i = 0;i < this.size();i++ ) {
					 this.get( i ).style[key] = value;
				}
				//return this object
				return this;
			},
			attr : function( key, value ) {
				for( var i = 0;i < this.size();i++ ) {
					 this.get( i ).setAttribute( key, value );
				}
				//return this object
				return this;
			},
			bind : function( trigger, callback ) {
				for( var i = 0;i < this.size();i++ ) {
					this.utils.bind( this.get( i ), trigger, callback );
				}
				//return this object
				return this;
			},
			unbind : function( trigger, callback ) {
				for( var i = 0;i < this.size();i++ ) {
					this.utils.unbind( this.get( i ), trigger, callback );
				}
				//return this object
				return this;
			},
			onCopy : function( callback ) {
				this.bind( "copy", callback );
			},
			onCut : function( callback ) {
				this.bind( "cut", callback );
			},
			onPaste : function( callback ) {
				this.bind( "paste", callback );
			},
			onFocus : function( callback ) {
				this.bind( "focus", callback );
			},
			onBlur : function( callback ) {
				this.bind( "blur", callback );
			},
			onChange : function( callback ) {
				this.bind( "change", callback );
			},
			onClick : function( callback ) {
				this.bind( "click", callback );
			},
			onDoubleClick : function( callback ) {
				this.bind( "dblclick", callback );
			},
			onContextMenu : function( callback ) {
				this.bind( "contextmenu", callback );
			},
			onKeyDown : function( callback ) {
				this.bind( "keydown", callback );
			},
			onKeyPress : function( callback ) {
				this.bind( "keypress", callback );
			},
			onKeyUp : function( callback ) {
				this.bind( "keyup", callback );
			},
			onMouseDown : function( callback ) {
				this.bind( "mousedown", callback );
			},
			onMouseUp : function( callback ) {
				this.bind( "mouseup", callback );
			},
			onMouseOver : function( callback ) {
				this.bind( "mouseover", callback );
			},
			onMouseMove : function( callback ) {
				this.bind( "mousemove", callback );
			},
			onMouseOut : function( callback ) {
				this.bind( "mouseout", callback );
			},
			onResize : function( callback ) {
				this.bind( "resize", callback );
			},
			onScroll : function( callback ) {
				this.bind( "scroll", callback );
			}
		};
		
		return new ElementWrapper();
	} )();

	window.ElementWrapper = window.$ = ElementWrapper;

} )( window );