/**
 * publish the plugin
 */
jQuery.fn.createLaunchButton = function(props) {
    return this.each(function(){
        var b = new LaunchButton(this, props);
    });
};


function LaunchButton(element, props) {
    var allowClick = true;
    var jnlpImgLinkElement = element;
    var launchingDisplayTime = props.launchingDisplayTime != undefined?props.launchingDisplayTime:3000;
    var fadeTime = props.fadeTime != undefined?props.fadeTime:200;
	var imageQueue = new ImageQueue(element, fadeTime);
    if ( props.image1 == undefined || props.image2 == undefined || props.image3 == undefined ) {
        throw 'LaunchButton: you must define all three images in the properties';
    }    
    var tempImage = new Image();
    tempImage.src = props.image1;
    var img = props.image1;
    var img2 = props.image2;
    var img3 = props.image3;
    preload(img);
    preload(img2);
    preload(img3);
    var lastTargetImage;
    imageQueue.add(img, 0);
    
    $(jnlpImgLinkElement).css('position', 'relative');
    $(jnlpImgLinkElement).mouseover(function() {
        if ( allowClick ) {
            fadeImage(img2);
        }
    });
    $(jnlpImgLinkElement).mouseout(function() {
        if ( allowClick ) {
            fadeImage(img);
        }
    });
    
   $(jnlpImgLinkElement).click(function(evt) {
        evt.preventDefault();
        if (  allowClick ) {
            setAllowClick(false);
            fadeImage(img3);
            setTimeout(function() {
                setAllowClick(true);
                fadeImage(img);
            }, launchingDisplayTime);
            $(jnlpImgLinkElement).css('pointer','default');
            setTimeout(function() {
                $(jnlpImgLinkElement).css('pointer','auto');
	        	window.location=$(jnlpImgLinkElement).attr('href');
            }, fadeTime);
        }
    });
    
    function setAllowClick(flag) {
        allowClick = flag;
    }

    function fadeImage(image, fadeTime) { 
        if ( lastTargetImage == image ) {
            return;
        }
        lastTargetImage = image;
        imageQueue.add(image, fadeTime);
        $(jnlpImgLinkElement).css('cursor', 'pointer');
    }
    
    function preload(imageURL) {
        var img = new Image();
        img.src = imageURL;
    }
};


