	
	Application.widget.button = {
		
		init: function( args )
		{
			for(var i=args.length-1;i>=0;i--)
			{
				new Application.widget.button.create( args[i] );
			}
		},
		
		create: function( args )
		{
			var object = document.getElementById( args.id );
			var beforeClass = null;
			
			/*
				Widget Events Structure
			*/
			
			var eventsList = [];
			
			this.events =
			{
				add: function( eventName, func )
				{
					if( !eventsList[ eventName ] )
					{
						eventsList[ eventName ] = [];
					}
					
					eventsList[ eventName ][ eventsList[ eventName ].length ] = func;
				},
				
				handle: function( eventName )
				{
					if( !eventsList[ eventName ] )
					{
						return false;
					}
					
					var eventsLength = eventsList[ eventName ].length;
					
					for(var i=0;i<eventsLength;i++)
					{
//						Application.debug.addRow({text:eventsList[eventName][i]});
						eventsList[ eventName ][ i ]();
					}
					
					return true;
				}
			};
			
			/*
				Functional part
			*/
			
			// Define methods and properties
			this.pressed = false;
			this.args = args;
			
			this.press = 	function()
							{
								object.className = args.overClass;
								
								object.widgetObject.pressed = true;
							};
			
			this.unpress = 	function()
							{
								object.className = args.outClass;
								
								object.widgetObject.pressed = false;
							};
			
			this.events.add( "mouseover", 	function( e )
											{
												object.className = args.overClass;
											});
			
			this.events.add( "mouseout", 	function( e )
											{
												if( object.widgetObject.pressed == true && args.pressButton == true )
												{
													return;
												}
												
												object.className = args.outClass;
											});
			
			this.events.add( "click", args.clickFunction);
			
			if(args.pressButton == true)
			{
				this.events.add( "mousedown", 	function( e )
												{
													if( object.widgetObject.pressed == true )
													{
														object.widgetObject.unpress();
														
														return;
													}
													
													object.widgetObject.press();
												});
			}
			
			/*
				Events association
			*/
			
			Application.event.add(object, "mouseover", 	function(e)
														{
															var eventsLength = eventsList["mouseover"].length;
															
															for(var i=0;i<eventsLength;i++)
															{
																eventsList["mouseover"][ i ]( e );
															}
														});
			
			Application.event.add(object, "mouseout", 	function(e)
														{
															var eventsLength = eventsList["mouseout"].length;
															
															for(var i=0;i<eventsLength;i++)
															{
																eventsList["mouseout"][ i ]( e );
															}
														});
			
			Application.event.add(object, "click", 	function(e)
													{
														var eventsLength = eventsList["click"].length;
														
														for(var i=0;i<eventsLength;i++)
														{
															eventsList["click"][ i ]( e );
														}
													});
			
			if(args.pressButton == true)
			{
				Application.event.add(object, "mousedown", 	function(e)
															{
																var eventsLength = eventsList["mousedown"].length;
																
																for(var i=0;i<eventsLength;i++)
																{
																	eventsList["mousedown"][ i ]( e );
																}
															});
			}
			
			// Make sure the HTML object links to this object
			object.widgetObject = this;
		}
		
	}
	