﻿$j = $.noConflict();

(function ($j) { 

    $j.fn.typewriter = function (userOptions) 
    {
    
    var selector = $j(this);

    var settings = 
    {
        speed : 
        {
            startDelay : 1500,
            typingInterval : 50,
            underscoreBlink : 500
        },
        showCursor : true,
        cursorCharacter : "_"
    };

    $j.extend(settings,userOptions);




    var fullMessage = selector.text();
    var partialMessage = "";
    selector.html("");


    var messageHolder = $j("<span></span>").appendTo(selector);





    //------

    if (settings.showCursor) {
    
        var cursorHolder = $j("<span></span>").appendTo(selector);
        var underscoreToggle = false;
        var underscoreLoop = setInterval(function () {
            if (underscoreToggle) {
                cursorHolder.html(settings.cursorCharacter);
                underscoreToggle = false;
            } else {
                cursorHolder.html("&nbsp;");
                underscoreToggle = true;
            }
        }, settings.speed.underscoreBlink);
    }

    setTimeout(function () {

        var loop = setInterval(function () {


            partialMessage += fullMessage.charAt(partialMessage.length);
            messageHolder.text(partialMessage);
            if (partialMessage == fullMessage) {
                clearInterval(loop);
                setTimeout(function () {
                    selector.text(partialMessage);
                    if (settings.showCursor) 
                    {
                        cursorHolder.fadeOut(5000, function () { clearInterval(underscoreLoop); });
                    }
                }, 2000);
            }
        }, settings.speed.typingInterval);
    }, settings.speed.startDelay);

    }

})(jQuery);
