﻿/// <reference path="../doc/jquery-1.3.2-vsdoc.js" />

(function($){
	
    $.oneline = function(el, options){
        // To avoid scope issues, use 'base' instead of 'this'
        // to reference this class from internal events and functions.
        var base = this;
        
        // Access to jQuery and DOM versions of element
        base.$el = $(el);
        base.el = el; 
        base.wrapper = $('<span />');
        
        // Add a reverse reference to the DOM object
        base.$el.data('oneline', base);
        
        base.init = function(){
            
            base.options = $.extend({},$.oneline.defaultOptions, options);
			
            base.el.style.whiteSpace = 'nowrap';
            base.el.style.overflow = 'hidden';
            
            //base.wrapper.css('position','relative').css('left', '5px').addClass('oneline-wrapper');
            base.wrapper.css('position','relative').addClass('oneline-wrapper');
            
            if (base.options.width == 'auto')
            {
                base.CalculateWidth(base.wrapper);
            }
            base.$el.css('height', base.options.height).wrapInner(base.wrapper);
            base.wrapper = base.$el.find('.oneline-wrapper');
            //TO DO: check to see if scroll is needed
            /*base.$el.hover(
                function(ev)
                {
                    base.scrollDir = 'left';
                    base.timer = setTimeout(function(){ base.Scroll(); }, 500);
                    base.$el.children('img:eq(1)').show();
                },
                function(ev)
                {
                    clearTimeout(base.timer);
                    base.wrapper.animate({left: '0px'});
                    base.$el.children('img:eq(1)').hide();
                }
            );
            */
            if (base.options.rightFade)
            {
                base.$el.append($('<img src="' + base.options.rightFade + '" alt="" />')
                    .attr('style', 'position: absolute; top: 0px; right: 0px; width: 30px; height: 50px;'))
                    .addClass('right-fade');
            }
            if (base.options.leftFade)
            {
                base.$el.append($('<img src="' + base.options.leftFade + '" alt="" />')
                    .attr('style', 'display: none; position: absolute; top: 0px; left: 0px; width: 30px; height: 50px;'))
                    .addClass('left-fade');
            }
        }
        
        base.Scroll = function()
        {
            var offset = (base.scrollDir == 'left') ? -5 : 5;
            var pause = 50;
            var left = Number(base.wrapper.css('left').replace(/px/, '')) + offset;
            if (left <= base.$el.width() - base.options.width)
            {
                base.scrollDir = 'right';
                pause = 300;
            }
            else if (left >= 0)
            {
                base.scrollDir = 'left';
                left = 0;
                pause = 300;
            }
            base.wrapper.css('left', left + 'px');
            base.timer = setTimeout(function() { base.Scroll(); }, pause);
        }
        
        base.CalculateWidth = function(wrapper)
        {
            wrapper.css('visibility', 'hidden')
                .css('position', 'absolute')
                .append(base.$el.children())
                .appendTo(base.$el);
            base.options.width = wrapper.get(0).offsetWidth + 15;
            
            base.$el.append(wrapper.children());
            wrapper.empty().remove()
                .css('visibility', 'visible')
                .css('position', 'absolute');
        }
        
        // Sample Function, Uncomment to use
        // base.functionName = function(paramaters){
        // 	
        // }
        
        base.init();
    }

	
    $.oneline.defaultOptions = {
        scroll: true,
        rightFade: null,
        leftFade: null,
        width: 'auto',
        height: '28px'
    }
	

    $.fn.oneline = function(options){
        return this.each(function(){
            (new $.oneline(this, options));
        });
    }

	
})(jQuery);
