if( typeof NviImageState == 'undefined' ){
	var NviImageState = new function(){
		var Host = this ;
		var ImagesDB = [] ;
		var Suffix = { Over : '_on' } ;
		var RegExpCollection = { Extension : /\.\w{3,4}$/i , RollOverClass : /\brollover|activate\b/i } ;
		function initialize(){
			var Images = document.images ;
			for( var i = 0 ; i < Images.length ; i++ ){
				var Image = Images[ i ] ;
				var Classes = Image.className ;
				var ClassesMatch = Classes.match( RegExpCollection.RollOverClass ) ;
				if( ClassesMatch != null ){
					Image.className = Classes.replace( RegExpCollection.RollOverClass , '' ) ;
					var ImageObject = CreateImageObject( Image , ClassesMatch[ 0 ].toLowerCase() ) ;
					if( typeof ImageObject == 'object' ){
						Preload( ImageObject.Over ) ;
						Image.ImageObject = ImageObject ;
						Image.onmouseover = function(){ ChangeSrc( this.ImageObject , true ) ; }
						Image.onmouseout = function(){ ChangeSrc( this.ImageObject , false ) ; }									
						if( ImageObject.Mode == 'activate' ) ImageObject.Image.src = ImageObject.Over ;						
					}
				}
			}
		}
		this.initialize = initialize ;
		function ChangeSrc( ImageObject , Swap ){
			if( ImageObject.Mode == 'activate' ) return ;
			if( ImageObject.Image.src == ImageObject.Over ){ ImageObject.Image.src = ImageObject.Normal ; }
			else{
				if( ImageObject.Image.src == ImageObject.Normal ) ImageObject.Image.src = ImageObject.Over ;
			} 
		}
		function CreateImageObject( Image , ClassesMatch ){
			var Uri = Image.src ;
			var ImageObject = ImageObjectExist( Uri ) ;
			if( ImageObject.Exist ) return ImageObject.ImageObject 
			var Extension = Uri.match( RegExpCollection.Extension ) ;
			var BaseUri = Uri.replace( RegExpCollection.Extension , "" ) ;
			for( var i in Suffix ){
				var CleanupRegExp = new RegExp( Suffix[ i ] + "$" , "i" ) ;
				if( BaseUri.match( CleanupRegExp ) != null ){
					BaseUri = BaseUri.replace( CleanupRegExp , '' ) ;
					break ;
				}
			}
			ImageObject = { Image : Image , Mode : ClassesMatch , Normal : Uri , Over : BaseUri + Suffix.Over + Extension } ;
			ImagesDB.push( ImageObject ) ;
			return ImageObject ;
		}
		function ImageObjectExist( Uri ){
			for( var i = 0 ; i < ImagesDB.length ; i++ ){
				if( ImagesDB[ i ].Normal == Uri ) return { Exist : true , ImageObject : ImagesDB[ i ] } ;
			}
			return { Exist : false , ImageObject : null } ;
		}
		function Preload( Uri ){
			var Temporary = new Image() ;
			Temporary.src = Uri ;					
		}
		try{ window.attachEvent( 'onload' , initialize ) ; }
		catch( error ){ try{ window.addEventListener( 'load' , initialize , false ) ; }catch( error ){} }
	}
}