$(document).ready(function() {
	/* task timer control */
	$('#timer_toggle').click(function() {
		var timer_url = $(this).attr('data-href');	
		// start
		if (work_timer_active == false) {
			$.post(append_query(timer_url, 'set=start&callback=true'), function(data) {
				$('#timer_toggle').html('stop');
				work_timer_active = true;
			});
		}
		// stop
		else {
			$.post(append_query(timer_url, 'set=stop&callback=true'), function(data) {
				data = $.parseJSON(data);
				if (data.objects.worktimer.total) {
					var newtimertotal = (parseFloat($('#timer_value').val()) + parseFloat(data.objects.worktimer.total));
					$('#timer_value').val(newtimertotal.toFixed(2));
				}
				$('#timer_toggle').html('start');
				work_timer_active = false;
			});
		}
	});
	
	/* modals */
	$("#messagebox").click(function () { 
	   $(this).slideUp(); 
	});
	
	/* ajax hooks */
	$(".callback").click(function() {
		call($(this).attr('href'));
		return false;
	});
	
	/* auto resize text areas */
	$('textarea.expand').autoResize({
	    animateDuration : 200,
	    extraSpace : 0
	}).trigger('change');
	
});

/* variables */
//TODO: make array by task id
var work_timer_active = false;

/* utility functions */
function append_query(url, append) {
	return url + ((url.indexOf("?"))?'&'+append:'?'+append);
}

function call(url) {
	$('#ajax_loading').html('loading... ');
	$.ajax(append_query(url, 'callback'), function(data) {
		$.each(data, function(i, item) {
			alert(i + ' - ' + item);
		    //$('#' + i).html(item);
		});
		$('#ajax_loading').html('');
	});
}

/*
 * jQuery autoResize (textarea auto-resizer)
 * @copyright James Padolsey http://james.padolsey.com
 * @version 1.04
 */
(function($) {
    $.fn.autoResize = function(options) {  
        // Just some abstracted details,
        // to make plugin users happy:
        var settings = $.extend({
            onResize : function(){},
            animate : true,
            animateDuration : 150,
            animateCallback : function(){},
            extraSpace : 20,
            limit: 1000
        }, options);
        
        // Only textarea's auto-resize:
        this.filter('textarea').each(function(){
            
                // Get rid of scrollbars and disable WebKit resizing:
            var textarea = $(this).css({resize:'none','overflow-y':'hidden'}),
            
                // Cache original height, for use later:
                origHeight = textarea.height(),
                
                // Need clone of textarea, hidden off screen:
                clone = (function(){
                    
                    // Properties which may effect space taken up by chracters:
                    var props = ['height','width','lineHeight','textDecoration','letterSpacing'],
                        propOb = {};
                        
                    // Create object of styles to apply:
                    $.each(props, function(i, prop){
                        propOb[prop] = textarea.css(prop);
                    });
                    
                    // Clone the actual textarea removing unique properties
                    // and insert before original textarea:
                    return textarea.clone().removeAttr('id').removeAttr('name').css({
                        position: 'absolute',
                        top: 0,
                        left: -9999
                    }).css(propOb).attr('tabIndex','-1').insertBefore(textarea);
					
                })(),
                lastScrollTop = null,
                updateSize = function() {
					
                    // Prepare the clone:
                    clone.height(0).val($(this).val()).scrollTop(10000);
					
                    // Find the height of text:
                    var scrollTop = Math.max(clone.scrollTop(), origHeight) + settings.extraSpace,
                        toChange = $(this).add(clone);
						
                    // Don't do anything if scrollTip hasen't changed:
                    if (lastScrollTop === scrollTop) { return; }
                    lastScrollTop = scrollTop;
					
                    // Check for limit:
                    if ( scrollTop >= settings.limit ) {
                        $(this).css('overflow-y','');
                        return;
                    }
                    // Fire off callback:
                    settings.onResize.call(this);
					
                    // Either animate or directly apply height:
                    settings.animate && textarea.css('display') === 'block' ?
                        toChange.stop().animate({height:scrollTop}, settings.animateDuration, settings.animateCallback)
                        : toChange.height(scrollTop);
                };
            
            // Bind namespaced handlers to appropriate events:
            textarea
                .unbind('.dynSiz')
                .bind('keyup.dynSiz', updateSize)
                .bind('keydown.dynSiz', updateSize)
                .bind('change.dynSiz', updateSize);
        });
        // Chain:
        return this;  
    };
})(jQuery);
