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

function form_category_suggest() {
	
	var hostname = window.location.hostname;
	
	if (hostname.match(/blloggs/)) {
		//alert(hostname.match(/blloggs/));
	}
	
    jQuery("#the_category").AddIncSearch({
        maxListSize: 10000,
        maxMultiMatch: 10000,
        warnMultiMatch: 'Top {0} matches...',
		warnNoMatch: 'No matches...',
		zIndex: 'auto',
		position_chooser_top: 198,
		position_chooser_left: 15,
		position_input_top: 198,
		position_input_left: 9,
		position_blocker_top: 198,
		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();
		
		$(element_id).bind("blur", function() {
				
			var url = trim($(this).val());
			//if (url != url_filled) { // stop excessive checking
			
				if (url == "") {
					
					$(url_status_output_id).css("color", "");
					$(url_status_output_id).html(url_status_default_text);
					
				} else {
					
					if (element_id.match(/website_url/i) || element_id.match(/blog_url/i) || element_id.match(/offer_url/i) || element_id.match(/author_url/i) || element_id.match(/page_url/i)) {
						
						check_url(url, "page", url_status_output_id);
						
					} else if (element_id.match(/feed/i)) {
						
						check_url(url, "feed", url_status_output_id);
					}
				}
			//}
		});
	});
}

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");
			element_value = trim($(this).val());
			error_id = "#"+$(this).attr("id") + "_error";
			$(error_id).css("color", "");
			
			if (!element_name.match(/email/i) && element_value == "") {
				
				errors.push(element_name);
				$(error_id).css("color", "red");
			
			} else if (element_name.match(/email/i) && !email_format.test(element_value)) {
				
				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("_", " ").replaceAll("name1", "first name").replaceAll("name2", "last name"));
			}
			alert(error_message);
			return false;
		}
	});
}

function form_preview() {
	
	// get array of all elements previewed
	$(".previewed").each(function (i) {
		var element_id = "#"+$(this).attr("id");
		$(element_id).bind("focus keyup blur", function() {
			
			var preview_id = element_id+"_preview";
			$(preview_id).html($(element_id).val().replaceAll("\n", "<br />"));
		});
	});
	
	form_manage_field_visibility("the_body", "the_body_preview");
}

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_show_hidden() {
	
	// REMEMBER TO BIND EVENTS BELOW TO NEW ELEMENTS ADDED TO THIS ARRAY
	var pairs = 	new Array(
				new Array("the_title", "the_summary"),
				new Array("the_title", "OFFER_the_offer_code"),
				new Array("the_title", "OFFER_the_expiry_date"),
				new Array("the_title", "OFFER_the_offer_url"),
				new Array("the_category", "the_keywords"),
				new Array("the_category", "the_category_suggestion"),
				new Array("the_name2", "the_author_url"),
				new Array("the_name2", "the_about")
				);
				
	for (var i in pairs) {
		form_manage_field_visibility(pairs[i][0], pairs[i][1]);
	}
}
 
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 check_url(url, type, output_id) {
	
	var url_status_text;
	
	$.ajax({
		type: "POST",
		url: "/_code/urlchecker/urlchecker.php",
		data: "url="+url+"&type="+type,
		success: function(response) {
			if (type == "page") {
				if (response == 1) {
					url_status_text = "URL OK";
					$(output_id).css("color", "green");
				} else {
					url_status_text = "URL Error. Please Check Your URL or Media Type";
					$(output_id).css("color", "red");
				}
			} else if (type == "feed") {
				if (response == 1) {
					url_status_text = "Feed OK";
					$(output_id).css("color", "green");
				} else {
					url_status_text = "Feed Error. Please Check Your Feed URL or Media Type";
					$(output_id).css("color", "red");
				}
			}
			$(output_id).html(url_status_text.bold());
		}
	});
}

// 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;
		});
	});
}
