$(function(){
    if (!Array.prototype.indexOf) {
        // IE does not support the use of indexOf for an array
        // see: http://stackoverflow.com/questions/1744310/
        Array.prototype.indexOf = function(obj, start) {
             for (var i = (start || 0), j = this.length; i < j; i++) {
                 if (this[i] == obj) { return i; }
             }
             return -1;
        }
    }
    
    $('.click-once, .buttons .primaryAction').click(function(e){
    	var $this = $(this);
    	if ($this.data('clicked')) {
    		e.preventDefault();
    	} else {
			$this.data('clicked', true);
		}
    });
    
    $('.to-top-link').click(function(e){
    	$('html').scrollTop(0);
    	e.preventDefault();    	
    });
	
    $('input[type=text][id*=date]').datepicker({ 
        yearRange: '1982:+7',
        dateFormat: 'd-M-yy',
        changeMonth: true,
        changeYear: true
    });

    $('input[type=text].clear-on-focus').each(function(){
    	// only set the input value to the title if no value is present in the html
        if ($(this).val() == '') {
	    	$(this).val($(this).attr('title')).focus(function(){
	            if ($(this).val() == $(this).attr('title'))
	                $(this).val('');
	        }).blur(function(){
	            if ($.trim($(this).val()) == '')
	            	$(this).val($(this).attr('title'));
	        });
        }
    });

	// remove from all to clean up any transitionary mistakes
	$('#additional').not('.filters-menu').find('li.current').removeClass('current').end()
		.find('a[href=' + window.location.pathname + ']').each(function(){
			$(this).parent().addClass('current');
			$(this).parents('ul.nav-sub > li').addClass('current');
		});
		
	// Set AJAX CSRF header
	// http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
	$('html').ajaxSend(function(event, xhr, settings) {
	    function getCookie(name) {
	        var cookieValue = null;
	        if (document.cookie && document.cookie != '') {
	            var cookies = document.cookie.split(';');
	            for (var i = 0; i < cookies.length; i++) {
	                var cookie = jQuery.trim(cookies[i]);
	                // Does this cookie string begin with the name we want?
	                if (cookie.substring(0, name.length + 1) == (name + '=')) {
	                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
	                    break;
	                }
	            }
	        }
	        return cookieValue;
	    }
		if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
			// Only send the token to relative URLs i.e. locally.
			var csrf = getCookie('csrftoken') || ''; 
			// Set blank if cookie was null
		    xhr.setRequestHeader("X-CSRFToken", csrf);	
		}
	});
	
	// Add fancy character counters
    $('textarea[data-characterMax]:not([data-tinyMCE])').each(function(i, textarea){
		var bottomMessage = $('<p />')
            .addClass('character-count-bottom')
			.addClass('instructional')
			.addClass('ui-helper-clearfix');
		var maxLength = $(textarea).data('characterMax') || $(textarea).attr('characterMax');
		maxLength = parseInt(maxLength);
		var label = $('label[for=' + $(textarea).attr('id') + ']');
        if (label.length) {
            label.addClass('label-count-top').addClass('ui-helper-clearfix');
        }
		var topMessage = $('<span />')
            .addClass('character-count-top')
			.addClass('instructional')
			.addClass('ui-helper-clearfix')
			.text('Maximum: ' + maxLength + ' characters');
	    function limits(obj, limit){
	        var text = $(obj).val();
	        text = text.replace(/(\\r\\n|\\r|\\n)/g, "\\r\\n");
	        var length = text.length;
	        var remaining = Math.max(limit - length, 0);
	        if(remaining == 0){
	            $(obj).val(text.substr(0, limit));
	        }
	        bottomMessage.text(remaining + " characters remaining");
	    }
		$(textarea).before(topMessage);
		$(textarea).after(bottomMessage);
	    $(textarea).keyup(function(){
	        limits($(this), maxLength);
	    }).keyup();
	});

});

// Character counter for TinyMCE
function addMCECharacterCount(ed) {
	var textarea = ed.getElement();
	$(textarea).addClass('ui-helper-clearfix');
	var bottomMessage = $('<p />')
	    .addClass('character-count-bottom')
	    .addClass('instructional')
	    .addClass('ui-helper-clearfix');
	var maxLength = $(textarea).data('characterMax') || $(textarea).attr('characterMax');
	maxLength = parseInt(maxLength);
	var label = $('label[for=' + $(textarea).attr('id') + ']');
	if (label.length) {
	    label.addClass('label-count-top').addClass('ui-helper-clearfix');
	}
	var topMessage = $('<span />')
	    .addClass('character-count-top')
	    .addClass('instructional')
	    .addClass('ui-helper-clearfix')
	    .text('Maximum: ' + maxLength + ' characters');
	$(textarea).before(topMessage);
	$(topMessage).after('<div class="ui-helper-clearfix" />');
	
	var text = '';
	var message = '';
	var errorClass = 'count-limit';
	if (maxLength) {
	    ed.onLoadContent.add(function(ed, e) {
	        text = ed.getContent().replace(/\n/g, "\r\n");
	        var charcount = maxLength - text.length;
	        if (charcount >= 0) {
	            message = ' characters remaining';
	            if (bottomMessage.hasClass(errorClass)) {
	                bottomMessage.removeClass(errorClass);
	            }
	        } else {
	            message = ' characters over the limit';
	            if (!bottomMessage.hasClass(errorClass)) {
	                bottomMessage.addClass(errorClass);
	            }
	        }
	        bottomMessage.text(Math.abs(charcount) + message);
	    });
	
	    ed.onEvent.add(function(ed, e) {
	        text = ed.getContent().replace(/\n/g, "\r\n");
	        var charcount = maxLength - text.length;
	        if (charcount >= 0) {
	            message = ' characters remaining';
	            if (bottomMessage.hasClass(errorClass)) {
	                bottomMessage.removeClass(errorClass);
	            }
	        } else {
	            message = ' characters over the limit';
	            if (!bottomMessage.hasClass(errorClass)) {
	                bottomMessage.addClass(errorClass);
	            }
	        }
	        bottomMessage.text(Math.abs(charcount) + message);
	    });
	    $(textarea).after(bottomMessage);
	}
}
// make it safe to use console.log always
(function(b){function c(){}for(var d="assert,clear,count,debug,dir,dirxml,error,exception,firebug,group,groupCollapsed,groupEnd,info,log,memoryProfile,memoryProfileEnd,profile,profileEnd,table,time,timeEnd,timeStamp,trace,warn".split(","),a;a=d.pop();){b[a]=b[a]||c}})((function(){try
{console.log();return window.console;}catch(err){return window.console={};}})());

