/**
 * jQuery.timers - Timer abstractions for jQuery
 * Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com)
 * Licensed under the WTFPL (http://sam.zoy.org/wtfpl/).
 * Date: 2009/10/16
 *
 * @author Blair Mitchelmore
 * @version 1.2
 *
 **/

jQuery.fn.extend({
	everyTime: function(interval, label, fn, times) {
		return this.each(function() {
			jQuery.timer.add(this, interval, label, fn, times);
		});
	},
	oneTime: function(interval, label, fn) {
		return this.each(function() {
			jQuery.timer.add(this, interval, label, fn, 1);
		});
	},
	stopTime: function(label, fn) {
		return this.each(function() {
			jQuery.timer.remove(this, label, fn);
		});
	}
});

jQuery.extend({
	timer: {
		global: [],
		guid: 1,
		dataKey: "jQuery.timer",
		regex: /^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,
		powers: {
			// Yeah this is major overkill...
			'ms': 1,
			'cs': 10,
			'ds': 100,
			's': 1000,
			'das': 10000,
			'hs': 100000,
			'ks': 1000000
		},
		timeParse: function(value) {
			if (value == undefined || value == null)
				return null;
			var result = this.regex.exec(jQuery.trim(value.toString()));
			if (result[2]) {
				var num = parseFloat(result[1]);
				var mult = this.powers[result[2]] || 1;
				return num * mult;
			} else {
				return value;
			}
		},
		add: function(element, interval, label, fn, times) {
			var counter = 0;
			
			if (jQuery.isFunction(label)) {
				if (!times) 
					times = fn;
				fn = label;
				label = interval;
			}
			
			interval = jQuery.timer.timeParse(interval);

			if (typeof interval != 'number' || isNaN(interval) || interval < 0)
				return;

			if (typeof times != 'number' || isNaN(times) || times < 0) 
				times = 0;
			
			times = times || 0;
			
			var timers = jQuery.data(element, this.dataKey) || jQuery.data(element, this.dataKey, {});
			
			if (!timers[label])
				timers[label] = {};
			
			fn.timerID = fn.timerID || this.guid++;
			
			var handler = function() {
				if ((++counter > times && times !== 0) || fn.call(element, counter) === false)
					jQuery.timer.remove(element, label, fn);
			};
			
			handler.timerID = fn.timerID;
			
			if (!timers[label][fn.timerID])
				timers[label][fn.timerID] = window.setInterval(handler,interval);
			
			this.global.push( element );
			
		},
		remove: function(element, label, fn) {
			var timers = jQuery.data(element, this.dataKey), ret;
			
			if ( timers ) {
				
				if (!label) {
					for ( label in timers )
						this.remove(element, label, fn);
				} else if ( timers[label] ) {
					if ( fn ) {
						if ( fn.timerID ) {
							window.clearInterval(timers[label][fn.timerID]);
							delete timers[label][fn.timerID];
						}
					} else {
						for ( var fn in timers[label] ) {
							window.clearInterval(timers[label][fn]);
							delete timers[label][fn];
						}
					}
					
					for ( ret in timers[label] ) break;
					if ( !ret ) {
						ret = null;
						delete timers[label];
					}
				}
				
				for ( ret in timers ) break;
				if ( !ret ) 
					jQuery.removeData(element, this.dataKey);
			}
		}
	}
});

jQuery(window).bind("unload", function() {
	jQuery.each(jQuery.timer.global, function(index, item) {
		jQuery.timer.remove(item);
	});
});

/**************************************************************************************
**************************************************************************************/



$(function(){
    var pr = $('fieldset#pr_details');
    pr.hide();
    $('.pr_toggle input:checkbox').change(function(e){
        if ($(this).is('input:checked')) {
            pr.slideDown();
        }else{
            pr.slideUp();
            pr.children('input').val('');
        }
    });
    
    
      // Use the each() method to gain access to each elements attributes
   $('.benefits-bg ul a').each(function()
   {
		if($('#user_categories').length){
			$(this).qtip(
			{
			 content: {
			    // Set the text to an image HTML string with the correct src URL to the loading image you want to use
			    url: $(this).attr('href'), // Use the rel attribute of each element for the url to load
			    title: {
			       button: 'Close' // Show a close link in the title
			    }
			 },
			 position: {
			    corner: {
			       target: 'leftTop', // Position the tooltip above the link
			       tooltip: 'rightTop'
			    },
			    adjust: {
			       screen: false // Keep the tooltip on-screen at all times
			    }
			 },
			 show: { 
			    when: 'mouseover', 
			    solo: true // Only show one tooltip at a time
			 },
			 hide: {
			    fixed: true // Make it fixed so it can be hovered over
			 },
			 style: {
			    tip: true, // Apply a speech bubble tip to the tooltip at the designated tooltip corner
			    border: {
			       width: 0,
			       radius: 4
			    },
			    'overflow': 'auto',
			    name: 'light', // Use the default light style
			    width: 570 // Set the tooltip width
			 }
		})
		}
   });
    
    
    $('#question_form input:checkbox').change(function(e){
    	if($(this).is('input:checked')){
    		if(!confirm('Are you certain? Once marked as complete you will NOT be able to make any more changes to this entry.')){
    			$(this).removeAttr('checked');
    		}
    	}
    });
    
    $('body').everyTime('60s', 'timer', function(){
		if($('#question_form').length){ $.post($('#question_form').attr('action'), $('#question_form').serializeArray()); }
	});
    
    $('#question_nav a').click(function(e){
		e.preventDefault();
		var heaf = $(this).attr('href');
    	if($('#question_form').length){ $.ajax({
    		type: 'post',
    		contentType: $('#question_form').attr('enctype'),
    		url: $('#question_form').attr('action'),
    		data: $('#question_form').serializeArray(),
    		success: function(){window.location = heaf; }
    		}); 
		}
		window.location = heaf;
	});
	
	$("input[name=userfile]").makeAsyncUploader({
        upload_url: $("input[name=userfile]").attr('rel'),
        flash_url: '/public/flash/swfupload.swf',
        button_image_url: '/public/images/blankButton.png'
    });
    
    $('#question_form textarea, #nomination textarea').maxlength(
    	{
    		'words': true,
    		'useInput': true,
    		'feedback': '.wordsleft span',
    		'hardLimit': true
    	}
    );
    
});


function ajaxQuestion(){
	if($('#question_form').length){ $.post($('#question_form').attr('action'), $('#question_form').serialize()); }
}
