$(document).ready(function() {
	
	loading_image();
	search_query();
	no_status_bar_info();
	auto_highlight();
	open_popups();
	form_word_stats();
	form_guidelines();
	form_validate();
	form_url_check();
	form_spellcheck();
	form_category_suggest();
	
});

function loading_image() {
	
	$(window).load(function() {
			$('#img-notfound').hide();
	});
}

function form_category_suggest() {
    jQuery("#the_category").AddIncSearch({
        maxListSize: 10000,
        maxMultiMatch: 10000,
        warnMultiMatch: 'Top {0} matches...',
		warnNoMatch: 'No matches...',
		zIndex: 'auto',
		position_chooser_top: 187,
		position_chooser_left: 15,
		position_input_top: 187,
		position_input_left: 9,
		position_blocker_top: 187,
		position_blocker_left: 9
    });
}

function open_popups() {
	
	$(".popup").bind("click", function() {
		
		$(this).attr('target', ''); // disable non-javascript behaviour
		window.open($(this).attr('href'), '', 'top=50,left=50,width=750,height=600,menubar=no,toolbar=yes,location=yes,status=no,scrollbars=yes,resizable=yes');
		return false;
	});
}

function auto_highlight() {
	
	$(".autohighlighted").bind("focus", function() {
		
		$(this).select();
	});
}

function search_query() {
	var query = $(".search").find("input:text").val();
	$(".search").find("input:text").focus();
	$(".search").find("input:text").val(query); // move cursor to last character in ie
}

function form_url_check() {
	
	// get array of all elements are pinged
	$(".pinged").each(function (i) {
			
		var element_id = "#"+$(this).attr("id");
		var url_status_output_id = element_id + "_status";
		var url_status_default_text = $(url_status_output_id).html();
		var url_status_text = new String();
		
		$(element_id).bind("blur", function() {
				
			var url = trim($(this).val());
			
			if (url == "") {
				$(url_status_output_id).css("color", "");
				$(url_status_output_id).html(url_status_default_text);
			} else {
				
				// Checking feed...
				$(url_status_output_id).ajaxStart(function(){
					url_status_text = 'Checking feed...';
					$(this).css("color", "gray");
					$(this).html(url_status_text.bold());
				 });
				
				if (url_is_valid(url)) {
					
					url_status_text = "Feed OK";
					$(url_status_output_id).css("color", "green");
					$(url_status_output_id).html(url_status_text.bold());
					return;
					
				} else {
					
					 // try adding feedburner fix to see if it works
					var url_fix = "/?format=xml";
					if (!url.match(url_fix)) {
						url2 = (url+url_fix).replaceAll(/\/+\?/, "/?");
						if (url_is_valid(url2)) {
							$(this).val(url2);
							url_status_text = "Feed OK";
							$(url_status_output_id).css("color", "green");
							$(url_status_output_id).html(url_status_text.bold());
							return;
						}
					}
					
					url_status_text = "Feed Error. Please Check the URL or Media Type";
					$(url_status_output_id).css("color", "red");
					$(url_status_output_id).html(url_status_text.bold());
				}
			}
		});
	});
}

function form_word_stats() {
	
	// get array of all elements are counted
	$(".counted").each(function (i) {
		var element_id = "#"+$(this).attr("id");
		$(element_id).bind("focus keyup blur", function() {
			
			// count chars remaining
			count_chars(this);
			// OR //
			//var chars_left = $(this).attr("maxlength") - $(this).val().length; // attr("maxlength"); doesn't work in safari
			//if (chars_left <= 0) { chars_left = 0; }
			//var chars_left_output_id = element_id + "_char_count";
			//var chars_left_text = chars_left + " Characters Left";
			//$(chars_left_output_id).html(chars_left_text.bold());
			
			// count words
			//count_words(this);
			// OR //
			var word_count = trim($(this).val()).replaceAll(/\s+/, " ").split(/\s/).length; // replace consecutive spaces with one and split
			if (trim($(this).val()) == '') { word_count = 0; }
			var word_count_output_id = element_id + "_word_count";
			var word_count_text = word_count + " Words";
			$(word_count_output_id).html(word_count_text.bold());
		});
	});
}

function form_guidelines() {
	
	var element_ids = new Array();
	var guideline_ids = new Array();
	
	// get array of all elements are guidelined
	$(".guidelined").each(function (i) {
		
		var element_id = "#"+$(this).attr("id");
		$(element_id).bind("focus change", function() {
				
				var guideline_id	= "#"+$(this).attr("id").replaceAll(/[0-9]+/, "") + "_guideline"; // remove numbers and append
				$(guideline_id).css("color", "rgb(75,75,75)");
				$(guideline_id).css("background", "rgb(235,235,235)");
				$(guideline_id).css("border", "1px solid rgb(175,175,175)");
		});
		
		$(element_id).bind("blur", function() {
				
				var guideline_id	= "#"+$(this).attr("id").replaceAll(/[0-9]+/, "") + "_guideline"; // remove numbers and append
				$(guideline_id).css("color", "");
				$(guideline_id).css("background", "");
				$(guideline_id).css("border", "");
		});
	});
}

function form_validate() {
	
	// check all required elements have been filled
	$("form.validated").submit(function () {
		
		var element_name	= new String();
		var element_value 	= new String();
		var errors 			= new Array();
		var error_id			= new String();
		var error_message 	= new String();
		var email_format  		= /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		
		//return validate_form(this);
		// OR //
		// get array of all elements required
		$(".required").each(function (i) {
			
			element_name = $(this).attr("id").replaceAll(/[0-9]+/, "");
			element_value = trim($(this).val());
			error_id = "#"+$(this).attr("id").replaceAll(/[0-9]+/, "")+"_error";
			$(error_id).css("color", "");
			
			var radio_checked = $("input:radio:checked").length;

			
			if (element_name != "the_email" && element_name != "the_email_me" && element_value == "") {
				
				errors.push(element_name);
				$(error_id).css("color", "red");
			
			} else if (element_name == "the_email" && !email_format.test(element_value)) {
				
				errors.push(element_name);
				$(error_id).css("color", "red");
				
			} else if (element_name == "the_email_me" && radio_checked < 1) {
				
				errors.push(element_name);
				$(error_id).css("color", "red");
			}
		});
	
		if (errors.length == 0) {

			$(this).find(":submit").css("font-weight", "normal");
			$(this).find(":submit").css({color: "rgb(100,100,100)"});
			$(this).find(":submit").attr("value", "Please Wait...");
			$(this).find(":submit").click(function() {
				$(this).attr("disabled", true);
			});
			
			return true;
		} else {
			error_message = "Please complete the following fields:\n";
			for (var i in errors) {
				error_message += "\n - " + get_titlecase(errors[i].replaceAll(/[0-9]+/, "").replaceAll("_", " ").replaceAll("email me", "email preferences"));
			}
			alert(error_message);
			return false;
		}
	});
}

function form_manage_field_visibility(driver_field_id, hidden_field_id) {
	
	// helper elements
	var divider_id = "#"+hidden_field_id+"_divider";
	var row_id = "#"+hidden_field_id+"_row";
	
	// hide element
	$(divider_id).fadeOut("slow");
	$(row_id).fadeOut("slow");
	
	$("#"+driver_field_id).bind("load focus keyup blur change", function() {
		
		if ($(this).val() != '') {
			$(divider_id).fadeIn("slow");
			$(row_id).fadeIn("slow");
		} else {
			$(divider_id).fadeOut("slow");
			$(row_id).fadeOut("slow");
		}
	});
}
 
function form_spellcheck() {
	
	// get array of all element ids that are spellchecked
	$(".spellchecked").each(function (i) {
		var element_id = "#"+$(this).attr("id");
		realtime_spellcheck(element_id);
		open_spellchecker_onclick(element_id);
	});
	
	// for spellchecked group
	var element_ids = new Array();
	
	// get array of all element ids that are spellchecked as group
	$(".spellchecked_group").each(function (i) {
		var element_id = "#"+$(this).attr("id");
		realtime_spellcheck(element_id);
		element_ids.push(element_id);
	});
	
	if (element_ids.length > 0) {
		open_spellchecker_onclick(element_ids);
	}
}

function open_spellchecker_onclick(element_ids) {
	
	if (!is_array(element_ids)) {
		var element_ids = new Array(element_ids);
	}
	
	var spellcheck_link_id = element_ids[0].replaceAll(/[0-9]+/, "")+"_spellcheck"; // remove numbers and append
	
	// on click
	$(spellcheck_link_id).click(function() {
		
		// remove # for non-jquery
		for (var i in element_ids) {
			element_ids[i] = element_ids[i].replaceAll("#", "");
		}
		
		open_spellchecker(element_ids);
	});
}
 
function realtime_spellcheck(element_id) {
	
	// prepend hash sign
	var element_id = element_id;
	var spellcheck_link_id = element_id.replaceAll(/[0-9]+/, "")+"_spellcheck"; // remove numbers and append
	
	// on focus or blur
	$(element_id).bind("focus blur", function() {
			
		var text = $(element_id).val();
		if (text != '' && text !=null) {
			realtime_spellchecker(text, spellcheck_link_id);
		}
	});
	 
	// on keyup
	$(element_id).keyup(function(e) {
	
		var key = e.charCode || e.keyCode || 0;
		
		// check after a space (32), backspace (8) or delete (46)
		if (key == 32 || key == 8 || key == 46) {
			
			var text = $(element_id).val();
			realtime_spellchecker(text, spellcheck_link_id);
		}
	});
}

function realtime_spellchecker(text, output_id) {
	
	$.ajax({
		type: "POST",
		url: "/_code/speller/myspellchecker.php",
		data: "text="+text,
		success: function(response) {
					
			if (response == 0) { 
				$(output_id).css("color", "");
				$(output_id).css("fontWeight", "");
				$(output_id).html("Check Spelling");
			} else {
				$(output_id).css("color", "red");
				$(output_id).css("fontWeight", "600");
				$(output_id).html("Check Spelling");
			}
		}
	});
}

function url_is_valid(url) {
	var feedback;
	$.ajax({
		type: "POST",
		url: "/_code/urlchecker/urlchecker.php",
		data: "url="+encodeURIComponent(url),
		async: false,
		success: function(response) {
			if (response == 1) {
				feedback = true;
			} else {
				feedback = false;
			}
		}
	});
	return feedback;
}

// doesn't work on all browsers
function no_status_bar_info() {
	// get array of all elements previewed
	$(".nostatus").each(function () {
		$(this).bind("mouseover mouseout", function() {
			window.status = ' ';
			return true;
		});
	});
}
