function Banner( u, s, i, w ) {
    /* ------------------------------------------------------------ */
    /* Private variables                                            */
    /* ------------------------------------------------------------ */
    var c_url;   //string; URL to which banner points
    var c_src;   //string; path to banner image
    var c_img;   //object; reference to DOM object for image
    var c_spawn; //boolean; determines whether or not link spawns new window
    var c_int;   //number; interval index for fading effect

    /* ------------------------------------------------------------ */
    /* Public properties                                            */
    /* ------------------------------------------------------------ */
    function url() {
        return c_url;
	}

    function src() {
        return c_src;
	}

    function img() {
        return c_img;
	}

    function spawn() {
        return c_spawn;
	}

    function interval() {
        return c_int;
	}

    this.url = url;
    this.src = src;
    this.img = img;
    this.spawn = spawn;
    this.interval = interval;

    /* ------------------------------------------------------------ */
    /* Constructor                                                  */
    /* ------------------------------------------------------------ */
    setURL( u );
    setSrc( s );
    setImg( i );
    setSpawn( w );

    /* ------------------------------------------------------------ */
    /* Private Methods                                              */
    /* ------------------------------------------------------------ */
    function incrementOpacity() {
        var opac = getOpacity();
        var self = this;

        if( arguments.length > 0 ) {
            self = arguments[ 0 ];
		}

        if( opac < 99 ) {
            self.setOpacity( ++opac );
            c_int = setTimeout( function(){ incrementOpacity( self ) }, 10 );
        }
	}

    function getOpacity() {
        if( typeof c_img.filters != "undefined" ) {
            return c_img.filters.item( "DXImageTransform.Microsoft.Alpha" ).opacity;
		} else if( typeof c_img.style.MozOpacity != "undefined" ) {
            return c_img.style.MozOpacity * 100;
		} else if( typeof c_img.style.KhtmlOpacity != "undefined" ) {
            return c_img.style.KhtmlOpacity * 100;
		} else {
            return 100;
		}
	}

    function setOpacity( val ) {
        var img = this.img();

        if( typeof img.filters != "undefined" ) {
            img.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=" + val + ")";
		}
        img.style.MozOpacity = val / 100.0;
        img.style.KhtmlOpacity = val / 100.0;

        return getOpacity();
	}

    function setURL( u ) {
        c_url = u;
	}

    function setSrc( s ) {
        c_src = s;
	}

    function setImg( i ) {
        c_img = i;
	}

    function setSpawn( w ) {
        c_spawn = ( w ) ? true : false;
	}

    /* ------------------------------------------------------------ */
    /* Public Methods                                               */
    /* ------------------------------------------------------------ */
    this.setOpacity = setOpacity;
    this.getOpacity = getOpacity;
}
