jQuery.fx.off = false;

$(document).ready(function() {
	//pressing enter[keycode=13] in any input field will submit a form. This action is undesired.
	//we want the action in the log in page and inside the filter bar.
	$('.view input:not(.filter_bar input)').keypress(function(event) {
	  if (event.keyCode == '13') {
	     event.preventDefault();
	   }
	});
	
	//adds star to the label that has parent class required
	$('.required label').append('<span class="important">*</span>');
	
	//add tooltip to (...) strings
	$("table.info_table:not(.cake-sql-log) td:contains('...')").addClass('general_tooltip');
	
	$("#top_menu ul li.main_tab").hover(function(){
			$(this).addClass("active_top_menu");
		}, function(){
			$(this).removeClass("active_top_menu");
		}
	);
	$("#top_menu ul li.main_tab ul li").hover(function(){
			$(this).addClass('active_submenu');
		}, function(){
			$(this).removeClass('active_submenu');
		}
	);
	
	$(".btn-disable-load").removeAttr('disabled');
	

/*
 * AccordinButton Click Action
 */
	/*$('div.accordionButton').click(function() {
		$('div.accordionContent').slideUp("normal");	
		$(this).next().slideDown("normal");
	});*.
 
/*
 * Hide the Accordion Content div on page load and show the div that has the class opened
 */
	/*$("div.accordionContent").hide();
	$("div.opened").show();*/
	
/*
 * Generate Alt_Row classes on Odd rows on tables
 */
  	//$('table.info_table:not(.cake-sql-log) tbody tr:odd:not(.table_header),table.crop_table:not(.cake-sql-log) tbody tr:odd:not(.table_header)').addClass('alternate_row');
  	
/*
 * Add a close button to the #flashMessage
 */
	$("#flashMessage").each(function() {
		//IE throws an error when you don't precede a js variable with the 'var' statement
		var close = $("<span class='close'></span>");
	    close.click(function () {
	    	close.parent().addClass("hidden");
	    });
	    $(this).append(close);
	});
	
/*
 * General Tooltip
 */
 
 	$('.general_tooltip:not(.disabled)').tooltip({
 		bodyHandler: function() { 
	        return $(this).attr("ref");
	    }
 	});
	
/*
 * General AJAX Tooltip
 */

  	
/*
 * WeatherButton AJAX Tooltip
 */
	$('.weatherbutton:not(.disabled)').tooltip({
	    width:'470px',
 		height:'105px',
 		loadAjax: true
 	});
  	
/*
 * Graphs AJAX Tooltip
 */
 	$('.graphs:not(.disabled)').tooltip({
 		width:'300px',
 		height:'200px',
 		loadAjax: true
 	});
  	
/*
 * Ajax Link - on a.ajax_link click load data via ajax query alert return data
 */
  	$('a.ajax_link').click(function(){
  		button = $(this);
  		button.addClass('hidden');
		$.get($(this).attr("href"), function(data, textStatus){
			if(textStatus == "success"){
				alert(data);
				button.removeClass('hidden');
			} else {
				button.removeClass('hidden');
				alert("Sending the request failed, please try again.");
			}
		});
		return false;
  	});
  	
/*
* Ajax Link - on a.ajax_link click load data via ajax query alert return data
*/
  	$('a.ajax_link_with_loader').live('click', function(){
  		button = $(this);
  		button.addClass('hidden');
  		$('.ajax_loading').removeClass('hidden');
		$.get($(this).attr("href"), function(data, textStatus){
			if(textStatus == "success"){
				alert(data);
				button.removeClass('hidden');
				$('.ajax_loading').addClass('hidden');
			} else {
				button.removeClass('hidden');
				$('.ajax_loading').addClass('hidden');
				alert("Sending the request failed, please try again.");
			}
		});
		return false;
  	});
  	
/*
* Ajax Link - on a.ajax_link click load data via ajax query alert return data
*/
  	$('a.ajax_link_refresh').live('click', function(event){
  		button = $(this);
  		button.addClass('hidden');
		$.get($(this).attr("href"), function(data, textStatus){
			if(textStatus == "success"){
				button.removeClass('hidden');
				if(confirm(data + "\n\nRefresh page with new data?")){
					location.reload(true);
				} else {
			
				}
			} else {
				button.removeClass('hidden');
				alert("Sending the request failed, please try again.");
			}
		});
		event.preventDefault();
  	});
  	
/*
* Ajax Link with Load Loacation - on a.ajax_link_with_load_location click load data via ajax query set button.attr(load_location).html(data)
*/
  	$('a.ajax_link_with_load_location').live('click', function(event){
  		button = $(this);
  		button.addClass('hidden');
  		
		$.get(button.attr("href"), function(data, textStatus){
			if(textStatus == "success"){
				$(button.attr('load_location')).html(data);
			} else {
				button.removeClass('hidden');
				alert("Sending the request failed, please try again.");
			}
		});
		event.preventDefault();
  	});
  	
  	$('a._ajaxLinkRepleaceLocation').live('click', function(event){
  		button = $(this);
  		button.addClass('hidden');
  		
		$.get(button.attr("href"), function(data, textStatus){
			if(textStatus == "success"){
				$(button.attr('load_location')).replaceWith(data);
			} else {
				button.removeClass('hidden');
				alert("Sending the request failed, please try again.");
			}
		});
		event.preventDefault();
  	});
  	
/*
* Ajax Link - on a.ajax_link_with_loader_refresh click load data via ajax query alert return data and allow user to reload page
*/
  	$('a.ajax_link_with_loader_refresh').live('click', function(event){
  		var button = $(this);
  		button.addClass('hidden');
  		$('.ajax_loading').removeClass('hidden');
		$.get(button.attr("href"), function(data, textStatus){
			if(textStatus == "success"){
				button.removeClass('hidden');
				$('.ajax_loading').addClass('hidden');
				if(confirm(data + "\n\nRefresh page with new data?")){
					location.reload(true);
				} else {
			
				}
			} else {
				button.removeClass('hidden');
				$('.ajax_loading').addClass('hidden');
				alert("Sending the request failed, please try again.");
			}
		});
		event.preventDefault();
  	});
  	
/*
 * Load an iFrame using an ajax style loader
 */
  	$('a.ajax_iframe').live('click', function(){
  		var button = $(this);
  		//Hide the clicked button
  		button.addClass('hidden');
  		//Show the ajax loading icon
  		$('.ajax_loading').removeClass('hidden');
  		//Append an iFrame to the dom
		$(document.body).append('<iframe name="ajaxed_iframe" onload="hide_iframe();" id="ajaxed_iframe" style="visibility:hidden;"></iframe>');
		var iframe_dom = $('#ajaxed_iframe');
		//Set the iFrame's src attr to the button's href attr
		iframe_dom.attr('src', button.attr("href"));
  	});
  	
  	$("select._onFormElementChange").live('change', function(){
		var formElement = $(this);
		if(formElement.attr('ajaxAction') != null && formElement.attr('ajaxAction') != undefined){
			$.ajax({
  				url: formElement.attr('ajaxAction') + '/' + formElement.val(),
  				data: null,
  				success: function(data){ $(formElement.attr('onAjaxActionSuccess')).html(data); }
			});
		}
	});
	
	$('form#NoModelQuickSearchForm').submit(function(event){
		var quickSearchForm = $(this);
		var searchFieldValue = quickSearchForm.find(':input#search_field').val();
		var quickSearchUrl = null;
		if(searchFieldValue == 'Field.field_name'){
			quickSearchUrl = quickSearchForm.find(':input#field_url').val();
		} else if(searchFieldValue == 'BaseStation.basecontrollerserial' || searchFieldValue == 'BaseStation.description') {
			quickSearchUrl = quickSearchForm.find(':input#base_station_url').val();
		} else if(searchFieldValue == 'Sensor.serialnumber') {
			quickSearchUrl = quickSearchForm.find(':input#sensor_url').val();
		} else if (searchFieldValue == 'User.short_name') {
			quickSearchUrl = quickSearchForm.find(':input#user_url').val();
		}
		
		quickSearchForm.attr('action', quickSearchUrl);
	});
  	
  	
/*
 * Toggle Filter Bar with hidden box below it
 * toggles a box to be visible or hidden
 */
  	$("div.filter_bar.toggle_box td .toggle_btn").click(function(){
  		var toggle_box = $("div.filter_bar.toggle_box");
  		var toggle_button = $(this);
  		toggle_box.parent("div.hidden_box")
  		toggle_button.toggleClass("plus");
  		toggle_button.toggleClass("minus");
  		var hidden_box = toggle_box.next(".info_table");
  		hidden_box.toggleClass("hidden");
		hidden_box.toggleClass("visible");
  	});
  	
/*
 * Demo Login - On Demo Login Button Clicked, login as the demo account
 */
  	$('a#demo_login').click(function(){
  		button = $(this);
  		button.addClass('hidden');
  		$('input#UserUsername').val("demo");
  		$('input#UserPassword').val("demo");
  		$('form#UserLoginForm').submit();
  	});
  	
  	$('a.colorbox').colorbox({initialWidth: "650px", initialHeight: "600px", innerWidth:"650px", innerHeight: "600px", scalePhotos: true});
  	
  	modernizerDates();
});

$(document).bind('cbox_complete', function(){
	//$('a.colorbox').colorbox.resize();
});

/**
 * CHECK_ALL - check all checkboxes for a form
 *
 * @param form_id string - form id to check all the checkboxes in
 * @param checkbox_div string - class of div holding the checkboxes
 * @access public
 *
 */
function check_all(form_id, checkbox_div){
	$('form#'+form_id+' div.'+checkbox_div+' input:checkbox').attr('checked', 1)
}


function check_all_assign(form_id, filter_list_div){
	$('form#'+form_id+' div#'+filter_list_div+' tr:not(.v-hideThis) input:checkbox').attr('checked', 1)
}

function filter_listing(input_id, table_id){
	var filter = $(input_id).val(), count = 0;
	$("table#"+table_id+":first :not(thead) tr").each(function () {
    	if ($(this).text().search(new RegExp(filter, "i")) < 0) {
    	    $(this).addClass("v-hideThis");
   		} else {
        	$(this).removeClass("v-hideThis");
        	count++;
    	}
	});
}

function show_accordion(content_id, title_id){
	$(".v-content.v-stepTitle").addClass("v-inactiveStepTitle");
	$(".v-content:not(.v-stepTitle)").addClass("v-hideThis");
	
	$("#"+content_id +".v-content:not(.v-stepTitle),"+" #"+content_id +" .v-content:not(.v-stepTitle)" ).removeClass("v-hideThis");
	$("#"+title_id).removeClass("v-inactiveStepTitle");
}

var Browser = {
  Version: function() {
    var version = 999; // we assume a sane browser
    if (navigator.appVersion.indexOf("MSIE") != -1)
      // bah, IE again, lets downgrade version number
      version = parseFloat(navigator.appVersion.split("MSIE")[1]);
    return version;
  }
}

/**
 * is_int - javascript validation function for if a passed in arg is an integer
 *
 * @param x multiple - a passed in value to determine if it can be parsed as an integer
 * @return bool - returns true on being an integer false otherwise
 * @access public
 *
 */
function is_int(x) {
	var y=parseInt(x);
	if (isNaN(y)) return false;
	return x==y && x.toString()==y.toString();
}

/**
 * HIDE_IFRAME - callback after iframe for csv files on the graphs page is loaded
 *
 * @access public
 *
 */
function hide_iframe(){
	$('a#download_csv', window.parent.document).removeClass('hidden');
	$('.ajax_loading', window.parent.document).addClass('hidden');
}

function modernizerDates(){
	if(!Modernizr.inputtypes.date){
		$('input[type=date][readonly!=readonly], div.date input[readonly!=readonly]').each(function() {
			var $input = $(this);
			$input.datepicker({
				minDate: $input.attr('min'),
				maxDate: $input.attr('max'),
				shortYearCutoff: 50,
				dateFormat: 'yy-mm-dd'
			});
		});
	};
}

