$(document).ready(function() {
	$(".labeled-input").each(function() {
		this.label = this.value;

		this.onfocus = function() {
			if(this.value==this.label) {
				this.value = "";
				$(this).removeClass("labeled-input");
			}
		};

		this.onblur = function() {
			if(this.value=="") {
				this.value = this.label;
				$(this).addClass("labeled-input");
			}
		};
	});

	$("textarea").elastic();
	pngFix();
});

function Validator(form) {
	if(typeof(form)=="string") 
		form = $(form).get(0);

	this.errors = "";
	this.form = form;
	this.originalColor = $(form).find("input[type='text']").css("border-left-color");

	this.reset = function() {
		this.errors = "";
	};

	this.validate = function(noscroll) {
		if(this.errors.length==0) {
			return true;
		}
		else {
			//alert("Please fix the following errors:\n\n" + this.errors);
			this.errors = "";
			if(noscroll==null)
				window.scrollTo(0, 0);
			return false;
		}
	};

	this.email = function(fieldName, field) {
		var val = $(form[fieldName]).val();
		if(validateEmail(email)) {
			this.error(fieldName, false);
			return true;
		}
		else {
			this.error(fieldName, true, field + " is invalid");
			return false;
		}
	};
	
	this.showError = function(fieldName, errormessage) {
		this.error(fieldName, true, errormessage);
		return false;
	}

	this.require = function(fieldName, field) {
		var val = $(form[fieldName]).val();
		if(isEmpty(val) || (form[fieldName].label && form[fieldName].label==val)) {
			this.error(fieldName, true, field + " is required");
			return false;
		}
		else {
			this.error(fieldName, false);
			return true;
		}
	};

	this.requireRadio = function(fieldName, field) {
		   var val = $(form).find('input[name=' + fieldName + ']:checked').val();
		   if(isEmpty(val)) {
			   this.error(fieldName, true, field + " is required");
			   return false;
		   }
		   else {
			   this.error(fieldName, false);
			   return true;
		   }
	};
	
	this.requireAlphanumeric = function(fieldName, field) {
		var myRegxp = /^([a-zA-Z0-9_-]+)$/; 
		var val = $(form[fieldName]).val();
		if(myRegxp.test(val)==false) {
			this.error(fieldName, true, field + " contains invalid character");
			return false;
		}
		else {
			this.error(fieldName, false);
			return true;
		}
	};
	
	this.requireStartAlpha = function(fieldName, field) {
		var myRegxp  = /^([a-zA-Z])/; 
		var val = $(form[fieldName]).val();
		if(myRegxp.test(val)==false) {
			this.error(fieldName, true, field + " starts with a non alphabet character.");
			return false;
		}
		else {
			this.error(fieldName, false);
			return true;
		}
	};

	this.regex = function(fieldName, exp, error) {
		var val = $(form[fieldName]).val();
		var reg = new RegExp(exp);
		if(val.match(reg)) {
			this.error(fieldName, false);
			return true;
		}
		else {
			this.error(fieldName, true, error);
			return true;
		}
	};

	this.date = function(fieldName, field) {
		var val = $(form[fieldName]).val();
		if(isEmpty(val)) {
			this.error(fieldName, false);
			return true;
		}

		var d = parseDatepicker(val);
		if(d) {
			this.error(fieldName, false);
			return true;
		}
		else {
			this.error(fieldName, true, field + " is invalid");
			return false;
		}
	};	
	
	/**
	 * this.error("fieldName1" [, "fieldName2" ], error: boolean [, "msg" ])
	 */
	this.error = function() {
		var fields = new Array();
		var iserror;

		var j = 0;
		for(;j<arguments.length;j++) {
			if(typeof arguments[j]=="boolean") {
			   iserror = arguments[j];	
				break;
			}
		}

		if(iserror) {
			if(j+1<arguments.length)
				this.errors += "- " + arguments[j+1] + "\n";
			for(var i=0;i<j;i++) {
				var c = $(this.form[arguments[i]]);
				//c.css("border-color", "red");
				//c.parent().css("border", "solid 1px red");
				var span = c.parent().parent().find(".input-msg");
				span.addClass("input-error");
				span.removeClass("input-ok");
				if(j+1<arguments.length)
					span.html(arguments[j+1]);
			}
		}
		else {
			for(var i=0;i<j;i++) {
				var c = $(this.form[arguments[i]]);
				//c.css("border-color", this.originalColor);
				//c.parent().css("border", "none");
				var span = c.parent().parent().find(".input-msg");
				span.removeClass("input-error");
				span.addClass("input-ok");
				span.html("&nbsp;");
			}
		}
	};
}

function isEmpty(e) {
	if(e==null) return true;
	return $.trim(e)=="";
}

function makeDatepicker(element_selector, value) {
	$(element_selector).datepicker();
	$(element_selector).datepicker('option', { dateFormat: 'd MM yy' });
	$(element_selector).val(value);
}

function parseDatepicker(val) {
	if(isEmpty(val)) return null;

	var reg = /^\s*([1-9]|[12][0-9]|3[01]) +(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) +(\d{4})\s*$/;
	if(!reg.test(val)) return null;

	try {
		var day = parseInt(val.replace(reg, "$1"));
		var month = val.replace(reg, "$2");
		var year = parseInt(val.replace(reg, "$3"));

		var months = { Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5, Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11 };
		month = months[month];

		var d = new Date();
		d.setDate(day);
		d.setMonth(month);
		d.setFullYear(year);
		return d;
	} catch(e) {
		return null;
	}
}

function validateEmail(email) {
	var filter = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; 
	// /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
	return filter.test(email);
}

function randInt(i) {
	return Math.floor(Math.random() * i);
}

$(document).ready(function() {
	var re = new RegExp("[\"'=]?https?://[\\w\\d:#@%/;$()~_?\+-=\\\.&]+", "gm");

	$(".auto-url").each(function() {
		var html = this.innerHTML;
		var res = html.match(re);
		if(res==null) return;

		for(var i=0;i<res.length;i++) {
			var url = res[i];
			var c = url.charAt(0);
			if(c=='h')
				html = html.replace(url, "<a href='" + url + "' target='_blank'>" + url + "</a>");
		}
		this.innerHTML = html;
	});
});

function registerOrLogin(formId, callback) {
	var $form = $("#" + formId);

	var login_email = $.trim($form.find("input[name=login_email]").val());
	var login_password = $.trim($form.find("input[name=login_password]").val());

	var register_email = $.trim($form.find("input[name=register_email]").val());
	var register_user = $.trim($form.find("input[name=register_user]").val());
	var password = $.trim($form.find("input[name=register_password]").val());
	var confirmpassword = $.trim($form.find("input[name=register_confirmpassword]").val());

	if(!(isEmpty(login_email) || isEmpty(login_password))) {
		$(".ajax_loader").show();
		$.post(BASE_URL + "ajax/login", { email: login_email, password: login_password }, function(d) {
			$(".ajax_loader").hide();
			var ok = eval("(" + d + ")");
			if(ok) { $(".ajax_loader").show(); callback(); }
			else $form.find(".error_login").show();
		});
	}
	else if(!(isEmpty(register_email) || isEmpty(register_user) || isEmpty(password) || isEmpty(confirmpassword))) {
		var hasError = false;

		if(password!=confirmpassword) {
			$form.find(".error_password_matches").show();
			hasError = true;
		}
		else
			$form.find(".error_password_matches").hide();

		if(!register_email.match(/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/)) {
			$form.find(".error_email_invalid").show();
			hasError = true;
		}
		else
			$form.find(".error_email_invalid").hide();

		if(!register_user.match(/^[A-Za-z0-9][-_A-Za-z0-9]*$/)) {
			$form.find(".error_username_invalid").show();
			hasError = true;
		}
		else
			$form.find(".error_username_invalid").hide();

		if(hasError)
			return;

		$(".ajax_loader").show();
		$form.find(".error_username_exists").hide();
		$form.find(".error_username_invalid").hide();
		$form.find(".error_email_exists").hide();
		$.post(BASE_URL + "ajax/register", { email: register_email, username: register_user, password: password }, function(d) {
			$(".ajax_loader").hide();
			var ok = eval("(" + d + ")");
			if(ok==0) { $(".ajax_loader").show(); callback(); }
			else if(ok==1) $form.find(".error_username_exists").show();
			else if(ok==2) $form.find(".error_username_invalid").show();
			else if(ok==3) $form.find(".error_email_exists").show();
		});
		
	}
	else {
		alert("Please fill in all fields to either login or register!");
	}

	return false;
}

function pngFix() {
	var ie6 = $.browser.msie && Math.floor($.browser.version)==6;
	if(!ie6) return;

	$("img.static").each(function() {
		var $this = $(this);
		var src = $this.attr("src");
		if(src.match(/^.*\.png$/)) {
			$this.attr("src", src + ".gif");
		}
	});
	$("*").each(function() {
		var val = $(this).css("background-image");
		if(val.match(/^.*\.png['"]?\)$/)) {
			val = val.replace(".png", ".png.gif");
			$(this).css("background-image", val);
		}
	});
}

function submitFeedback() {
	if(!fkbox_validate("#feedbackBox_tab0")) return;

	var name = $("#feedback-form input[name='name']").val();
	var email = $("#feedback-form input[name='email']").val();
	var message = $("#feedback-form textarea[name='message']").val();

	if(name==null) name = "";
	if(email==null) email = "";

	$("#feedback-loader").show();
	$.post(BASE_URL + "service/sendFeedback", { name: name, email: email, message: message }, function(d) {
		$("#feedback-loader").hide();
		$("#feedback_flash").show();
		setTimeout('closeFkbox("#feedbackBox")', 3000);
	});
}

function submitContact() {
	if(!fkbox_validate("#contactWindow_tab0")) return;

	var name = $("#contact-form input[name='name']").val();
	var email = $("#contact-form input[name='email']").val();
	var message = $("#contact-form textarea[name='message']").val();

	if(name==null) name = "";
	if(email==null) email = "";

	$("#contact-loader").show();
	$.post(BASE_URL + "service/sendContact", { name: name, email: email, message: message }, function(d) {
		$("#contact-loader").hide();
		$("#contact_flash").show();
		setTimeout('closeFkbox("#contactWindow")', 3000);
	});
}

function submitInvite() {
	if(!fkbox_validate("#inviteWindow_tab0")) return;

	var name = $("#invite-form input[name='name']").val();
	var emails = $("#invite-form textarea[name='emails']").val();
	var message = $("#invite-form textarea[name='message']").val();

	if(name==null) name = "";

	$("#invite-loader").show();
	$.post(BASE_URL + "service/sendInvite", { name: name, emails: emails, message: message }, function(d) {
		$("#invite-loader").hide();
		$("#invite_flash").show();
		setTimeout('closeFkbox("#inviteWindow")', 3000);
	});
}

$(document).ready(function() {
	$("input[type='text']").bind("keypress", function(e) {
		if(e.originalEvent.keyCode==13) return false;
		return true;
	});
	$(".enterable-box").unbind("keypress");
});

function checkTopSearchBox() {
	var val = $.trim($("#topSearchBox").val());
	if(val=="" || val=="Find friend or charity") return false;
	return true;
}
