var petside_user = {
	config: {
		action: "/user/action.php",
		debug: false,
		params: {},
		list_type_limit: 4
	},
	
	label: {
		news: "Receive weekly tips to help you raise a happy, healthy pet."
	},
	
	data: {},
	
	form_elements: function(frm) {
		var elements = {};
		var keys = [];
		
		$(frm)
			.find(":input")
				.each(function(i, e){
					if (typeof(this.name) != "undefined" && this.name.length > 0 && /\[X\]/.test(this.name) === false) {
						if (
							(this.type === "radio" && this.checked === true) ||
							(this.type === "checkbox" && this.checked === true) ||
							($.inArray(this.type, ["radio", "checkbox"]) === -1)
						) {
							keys.push(this.name);
							elements[this.name] = this.value;
						}
					}
				})
			.end()
		.end();
		return {elements: elements, keys: keys};
	},
	
	form: {
		st: null,
		submit: function (frm, t) {
			this.st = $(frm).find(":submit").val();
			$(frm)
				.find("[class^='styled-message']")
					.remove()
				.end()
				.find(":submit")
					.attr("disabled", "disabled")
					.val(typeof(t) != "undefined" ? t : "Saving...")
				.end()
				.find("[value='Cancel']")
					.attr("disabled", "disabled")
				.end()
			.end();
		},
		error: function (frm, message) {
			if (typeof(message) == "undefined") {
				message = "Oops, we had a problem, please try again.";
			};
			$(frm)
				.find(":submit")
					.removeAttr("disabled")
				.end()
				.append("<div class='styled-message-error'>"+ message +"</div>")
			.end();
		},
		success: function(frm, message) {
			$(frm)
				.find(":submit")
					.removeAttr("disabled")
					.val(this.st != null ? this.st : "Save")
				.end()
				.find("[value='Cancel']")
					.removeAttr("disabled")
				.end()
			.end();
			if (typeof(message) != "undefined") {
				$(frm)
					.append("<div class='styled-message-success'>"+ message +"</div>")
				.end();
			};
			this.st = null;
		}
	},
	
	replacer: function(key, value) { // json function
		return value;
	},
	
	sort_number: function(a, b) {
		return a - b;
	},
	
	modal:{
		// created on request
		//login:{ open:false, html:null },
		func:function(k, l, m){
			var self = this;
			
			if (typeof(self[k]) == "undefined") {
				self[k] = {open:false, html:null};
			};
			
			if (self[k].open) {
				// close
				$.modal.close();
				self[k].open = false;
			} else {
				if (self[k].html === null) {
					// retrieve
					$.get("/user/modal/"+ k +".php", {}, function(resp){
						self[k].html = resp;
						l.call(self);
					});
				} else {
					// open
					self[k].open = true;
					$(self[k].html).modal({
						position: [100,],
						containerId: k + "-modal-wrap",
						containerClass: "",
						closeClass: k + "-modal-close",
						closeHTML: "<div><img/></div>",
						onOpen: function(modal){
							modal.overlay.fadeIn("fast", function(){
								modal.container.show();
								modal.data.show();
								modal.container.find(":text:first").focus();
								m.call(self);
							});
						},
						onClose: function(){
							self[k].open = false;
							$.modal.close();
						}
					});
				}
			}
		}
	},
	
	fb_setting: {}
};

var PS = {
	User:{}
};

var FB_key;

function ps_user_init()
{
	// check cookie against session
	if ($.cookie("ps_user_check") == null && PS.User.Sess.In()) {
		$.post(petside_user.config.action, {_action:'check-session', val:$.cookie("ps_user_session")});
	};
	
	// check cookie
	if (PS.User.Sess.In()) {
		$("#header_login > div.header_login_in")
			.removeClass("hide-me")
			.find("a#header_login_user")
				.text( (JSON.parse( $.cookie("ps_user_session") )).first_name )
			.end()
		.end();
	} else {
		$("#header_login > div.header_login_out")
			.removeClass("hide-me")
		.end();
	};
	
	FB_RequireFeatures(["XFBML"], function(){
		FB.Facebook.init(FB_key, "/user/xd_receiver.htm");
	});
	
	try {
		// settings from cookie
		petside_user.fb_setting = JSON.parse($.cookie("fbsetting_" + FB_key));
	} catch (e) {
	};
	
	// redirect to page that requires login
	var l = PS.User.Login.redirect();
	if (l !== false) {
		ps_user_login_modal(l);
	}
}

// still used by pl/kl
function ps_user_sess()
{
	return ($.cookie("ps_user_session") !== null && $.cookie("ps_user_session").length > 0);
}

PS.User.Sess = {}
PS.User.Sess.In = function(){
	return ($.cookie("ps_user_session") !== null && $.cookie("ps_user_session").length > 0);
};

PS.User.Sess.val = function(){
	return (PS.User.Sess.In() ? JSON.parse($.cookie("ps_user_session")) : false);
};

PS.User.Login = {};
PS.User.Login.redirect = function(){
	var r = false;
	try{
		if (window.location.search.length) {
			var l = window.location.search.replace(/^\?/, '').split('&');
			for (var m in l) {
				if (/^login\=/.test(l[m])) {
					r = l[m].split('=')[1];
					break;
				}
			}
		}
	} catch (e) {};
	return r;
}

PS.User.Login.resend_confirm = function(a){
	$.ajax({
		url: petside_user.config.action,
		type: "POST",
		data: {_action:"resend-confirm", vals:JSON.stringify({user_id:confirm_user_id, email:confirm_email_address}, petside_user.replacer)},
		success: function(resp){
			$(a).text("Your confirmation email has been resent.");
		}
	});
}

function ps_user_fb_submit(fn)
{
	$.modal.close();
	
	// if on-login function not defined
	if (typeof(fn) == "undefined") {
		var fn = function() {
			var l = PS.User.Login.redirect();
			if (l === false) {
				window.location.reload();
			} else {
				window.location = l;
			}
		};
	};
	
	FB.Connect.requireSession(function(){
		$.post(petside_user.config.action, {_action:"connect"}, fn);
	});
}


function ps_user_register_init()
{
	// document.ready
	
	$("#registration").validate({
		errorElement:"span",
		submitHandler: function (form){
			return ps_user_register_submit(form);
		},
		rules:{
			first_name:"required",
			last_name:"required",
			email:{
				required:true,
				email:true
			},
			password:{
				required:true,
				minlength:5
			},
			confirm:{
				equalTo:"#password"
			},
			zip:{
				required:true,
				minlength:5
			},
			birth_year:{
				required:true,
				min:1
			},
			gender:"required",
			terms:"required"
		},
		messages:{
			first_name: "Please specify your first name",
			last_name: "Please specify your last name",
			birth_year:{
				min:"Please select a birth year"
			}
		}
	});
	
	ps_pet_add(0);
	$("a#pet_add")
		.bind("click", ps_pet_add)
	.end();
	
	// precheck newsletter
	if (window.location.hash.length > 0) {
		var n = /\#(dog|cat)/.exec(window.location.hash)[1];
		$(":input[name='pet_type[0]'][value='"+ n +"']")
			.trigger("click")
		.end();
	};
}

function ps_user_register_submit(frm)
{
	try {
		petside_user.form.submit(frm);
		
		var params = ps_submit_params(frm);
		var util = petside_user.form_elements(frm);
		var elements = util.elements;
		var keys = util.keys;
		// user
		var user = {};
		$(["first_name", "last_name", "email", "birth_year", "children", "password", "gender", "zip"]).each(function(n, e){
			if (typeof(elements[e]) !== "undefined") {
				user[e] = elements[e];
			}
		}).end();
		
		// pets
		var pets = [];
		if (elements.owner != "on") {
			var pet_index = $.grep(keys, function(n, i){
				return /^pet_name/.test(n);
			});
			for (var i in pet_index) {
				var n = parseInt(/pet_name\[([0-9]+)\]/.exec(pet_index[i])[1]);
				var pet = {};
				$(["name", "breed", "alt", "birth_day", "birth_month", "birth_year", "other", "type", "newsletter"]).each(function(x, p){
					var e = "pet_" + p + "[" + n + "]";
					if (typeof(elements[e]) !== "undefined") {
						pet[p] = elements[e];
					}
				});
				pets.push(pet);
			}
		};
		
		// newsletters
		var news = {};
		$(frm)
			.find(":input[type='checkbox'][name^='news']")
				.each(function(n, i){
					news[i.value] = i.checked;
				})
			.end()
		.end();
		
		params.vals = JSON.stringify({user: user, pets: pets, news: news}, petside_user.replacer);
		
		$.ajax({
			url: petside_user.config.action,
			type: "POST",
			data: params,
			async: false,
			error: function(m){
				petside_user.form.error(frm, m);
			},
			success: function(resp){
				resp = JSON.parse(resp);
				if (resp.success === true) {
					// registered, need activation
					window.location = "/user/confirm/"+ resp.user_id +"?email="+ user.email;
				} else {
					// error
					this.error(resp.message);
				};
			}
		});
	} catch(e) { };

	return false;
}

function ps_pet_add(i)
{
	if (typeof(i) !== "number") {
		// find index for next added pet
		var n = [];
		$("div#pet_add_wrapper")
			.children("div[id^='pet_']")
				.each(function(){
					var x = parseInt(($(this).attr("id")).split("_")[1]);
					if (!isNaN(x)) {
						n.push(x)
					}
				})
			.end()
		.end();
		// remove and return highest, incremented
		var i = parseInt( n.sort(petside_user.sort_number).pop() ) + 1;
	};
	
	// clone, rename and insert html
	$("#pet_X")
		.clone()
		.attr("id", "pet_"+ i)
		.removeAttr("style")
		.addClass("clearfix")
		.html( $("#pet_X").html().replace(/X/g,i) )
		.insertBefore("#pet_X")
	.end();
	
	if (i) {
		$("<button>Remove Pet</button>")
			.bind("click", function(){
				$("#pet_"+i).remove();
				return false;
			})
			.appendTo("#pet_"+i)
			.wrap("<div class='pet-remove'></div>");
	};
	
	$("#pet_"+ i +"_name")
		.rules("add", {
			required: function(ele){
				return !$(ele.form).find(":input[name='owner']").get(0).checked;
			},
			messages: {
				required: "Your pet's name is required"
			}
		});
	
	$(":input#pet_"+ i +"_breed")
		.bind("change", function(){
			if (this.value == 0) {
				$("#pet_"+ i +"_wrap_other")
					.show()
					.children(":input")
						.trigger("focus")
					.end()
				.end();
			} else {
				$("#pet_"+ i +"_wrap_other")
					.hide()
				.end();
			}
		})
	.end();
	
	$(":input[name='pet_type["+ i +"]']")
		.filter("[value='dog'],[value='cat']")
			.bind("click", function(){
				// show select
				$("#pet_"+ i +"_wrap_breed")
					.show()
					.find("option:not([value='0'])")
						.remove()
					.end()
				.end();
				// hide other_breed, other_type
				$("#pet_"+ i +"_wrap_alt,#pet_"+ i +"_wrap_other")
					.hide()
				.end();
				// remove rules
				$("#pet_"+ i +"_alt")
					.rules("remove");
				
				var v = this.value;
				
				// options
				$("select#tpl_sel_"+ v + " > option")
					.clone()
					.prependTo(":input#pet_"+ i +"_breed")
				.end();
				$(":input#pet_"+ i +"_breed option:first")
					.attr("selected", "selected")
				.end();
				
				var sel = function(t){
					var c = 0;
					$(":input[name^='pet_type'][value='"+ t +"']:visible:checked")
						.each(function(){
							c += $(this).parent().parent().parent().find(":input[name^='pet_newsletter']").attr("checked") ? 1 : 0;
						})
					.end();
					return c;
				};
				
				// restore newsletter
				$(":input[name='pet_newsletter["+ i +"]']")
					.removeAttr("disabled")
					.attr("checked", (sel("dog") <= petside_user.config.list_type_limit))
					.unbind("click")
					.bind("click", function(){
						if (this.checked && sel(v) > petside_user.config.list_type_limit) {
							ps_user_account_pet_limit(v);
							$(this).removeAttr("checked");
						}
					})
					.parent()
						.children("strong")
							.text(petside_user.label.news.replace("pet", PS.Pet.type(this.value)))
						.end()
					.end()
				.end();
			})
		.end()
		.filter("[value='other']")
			.bind("click", function(){
				// show other_type
				$("#pet_"+ i +"_wrap_alt")
					.show()
					.children(":input")
						.trigger("focus")
					.end()
				.end();
				// add rules
				$("#pet_"+ i +"_alt")
					.rules("add", {
						required:function(ele){
							return !$(ele.form).find(":input[name='owner']").get(0).checked;
						}
					});
				// hide select, other_breed
				$("#pet_"+ i +"_wrap_breed,#pet_"+ i +"_wrap_other")
					.hide()
				.end();
				// remove newsletter
				$(":input[name='pet_newsletter["+ i +"]']")
					.removeAttr("checked")
					.attr("disabled", "disabled")
				.end();
			})
		.end()
		.filter("[value='dog']")
			.trigger("click")
		.end()
	.end();
	
	$("#pet_"+ i +"_birth").birthSelect({
		format:"mdy",
		field:"pet_birth_",
		index:i,
		year:"0,30"
	});
		
	$("select[name*='birth_']")
		.filter("[name$='["+ i +"]']")
			.bind("change", PS.Pet.birth_change)
		.end()
	.end();
}


function ps_user_login_modal(l)
{
	petside_user.modal.func(
		"login",
		function(){
			ps_user_login_modal(l);
		},
		function(){
			ps_user_login_init(l);
		}
	);
}

function ps_user_login_init(l)
{
	$("#user-login").validate({
		errorElement:"span",
		submitHandler: function (form){
			return ps_user_login_submit(form);
		},
		rules:{
			email:{
				required:true,
				email:true
			},
			password:"required"
		}
	});
	
	if (typeof(l) != "undefined") {
		$("#user-login :input[name='redirect']")
			.val(l)
		.end();
	};
	
	if ($.cookie("ps_user_remember") !== null) {
		$("#user-login")
			.find("input#email")
				.val($.cookie("ps_user_remember"))
			.end()
			.find("input#password")
				.focus()
			.end()
		.end();
	};
}

function ps_user_login_submit(frm)
{
	try {
		petside_user.form.submit(frm, "Sending...");
		
		var elements = (petside_user.form_elements(frm)).elements;
		var params = ps_submit_params(frm);
		
		params.vals = JSON.stringify({
			email: elements.email,
			password: elements.password,
			remember: (typeof(elements.remember) !== undefined)
		}, petside_user.replacer);
		
		$.ajax({
			url: petside_user.config.action,
			type: "POST",
			data: params,
			error: function(m){
				petside_user.form.error(frm, m);
			},
			success: function(resp){
				resp = JSON.parse(resp);
				if (resp.success == true) {
					if (elements.redirect.length > 0) {
						window.location = elements.redirect;
					} else if (/user\/(activate|register|confirm)/.test(window.location.pathname)) {
						window.location = "/user/account.php";
					} else {
						window.location.reload();
					}
				} else {
					petside_user.form.success(frm);
					if (resp.message == 'user_not_valid') {
						window.location = "/user/confirm/"+ resp.user_id +"?email="+ elements.email;
					} else {
						this.error(resp.message);
					}
				}
			}
		});
	} catch(e) {};
	
	return false;
}

function ps_user_logout_submit(loc)
{
	var r = function(){
		window.location = "/user/logout.php?r=" + loc.pathname;
	};
	
	if (JSON.parse($.cookie("ps_user_session")).is_external === true) {
		// facebook user
		FB.Connect.logout(r);
	} else {
		// plain ps user
		r.call();
	}
}


function ps_user_forgot_modal()
{
	petside_user.modal.func(
		"forgot",
		ps_user_forgot_modal,
		function(){
			$("#user-forgot").validate({
				errorElement:"span",
				submitHandler: function (frm){
					try {
						petside_user.form.submit(frm);
						var params = ps_submit_params(frm);
						var elements = (petside_user.form_elements(frm)).elements;
						params.vals = JSON.stringify({email:elements.email}, petside_user.replacer);
						
						$.ajax({
							url: petside_user.config.action,
							type: "POST",
							data: params,
							error: function(m){
								petside_user.form.error(frm, m);
							},
							success: function(resp){
								resp = JSON.parse(resp);
								if (resp.success === true) {
									// sent
									petside_user.form.success(frm, resp.message);
								} else {
									// error
									this.error(resp.message);
								};
							}
						});
					} catch (e) {};
					return false;
				},
				rules:{
					email:{
						required:true,
						email:true
					}
				}
			});
		}
	);
}


var ps_user_account_config = {
	'user-info': {
		errorElement:"span",
		submitHandler: function (form){
			return ps_user_account_info_submit(form);
		},
		rules:{
			first_name:"required",
			last_name:"required",
			zip:{
				required:true,
				minlength:5
			},
			birth_year:"required",
			gender:"required"
		}
	},
	'pet-info': {
		errorElement:"span",
		submitHandler: function(form){
			return ps_user_account_pet_submit(form);
		},
		rules:{
			name:"required",
			other_breed:{
				required: function(ele){
					return $(ele).parent("div").hasClass("element"); // is visible
				}
			},
			other_type:{
				required: function(ele){
					return $(ele).parent("div").hasClass("element"); // is visible
				}
			}
		}
	},
	newsletter: {},
	vendor:{
		submitHandler: function(form){
			return ps_user_account_vendor_submit(form);
		}
	},
	trigger:{
		'user-info':{
			open: ps_user_account_info_init
		},
		newsletter:{
			open: ps_user_account_news_init,
			close: ps_user_account_news_disp
		},
		'vendor':{
			open:ps_user_account_vendor_open,
			close:ps_user_account_vendor_close
		}
	}
};


function ps_user_account_init()
{
	// populate pets
	ps_user_account_pet_init();
	
	// populate vendor
	ps_user_account_vendor_init();
	
	// populate newsletter
	ps_user_account_news_disp();
	
	// precheck newsletter
	if (window.location.hash.length > 0) {
		// add pet
		ps_user_account_pet_add(true);
		
		var n = /\#(dog|cat)/.exec(window.location.hash)[1];
		$(obj)
			.find(":input[name='type']")
				.removeAttr("checked")
				// change type
				.filter("[value='"+ n +"']")
					.attr("checked", "checked")
					.trigger("click")
				.end()
			.end()
			// precheck newsletter
			.find(":input[name='newsletter']")
				.attr("checked", "checked")
			.end()
			.find(":input:visible:first")
				.focus()
			.end()
		.end();
	};
}

function ps_user_account_sel(obj)
{	
	var sel = $(obj).attr("id");
		
	if (/\-[0-9]+/.test(sel)) {
		sel = sel.split("-");
		sel.pop();
		sel = sel.join("-");	
	};
	
	return sel;
}

function ps_user_account_edit(obj, v)
{
	var obj = $(obj).parent("div").parent("div,form").parent("div");
	var sel = ps_user_account_sel(obj);
	
	$(obj)
		.children("[id^='"+ sel +"-']")
			.toggleClass("hide-me")
		.end()
	.end();
	
	if (v) {
		// open form
		$(obj)
			.children("form")
				.validate(ps_user_account_config[sel]);
		
		var d;
		if (sel == "user-info") {
			// user-info
			d = (typeof(petside_user.data[sel]) != "undefined" ? petside_user.data[sel] : {});
			
		} else if (typeof(petside_user.data[sel]) != "undefined") {
			// info array ('pet-info')
			d = petside_user.data[sel][ $(obj).find("form :hidden[name$='id']").val() ];
		};
		
		if (typeof(d) != "undefined") {
			$(obj)
				.find("form :input")
					.each(function(){
						if (typeof(this.name) != "undefined" && typeof(d[this.name]) != "undefined") {
							if (this.type == "radio") {
								if (this.value == d[this.name]) {
									$(this).trigger("click");
									this.checked = true;
								} else {
									this.checked = false;
								}
							} else if (this.type == "checkbox") {
								if (d[this.name]) {
									this.checked = true;
								}
							} else {
								this.value = d[this.name];
							}
						}
					})
				.end()
			.end();		
		};
		
		// trigger on open
		if (typeof(ps_user_account_config.trigger[sel]) != "undefined") {
			ps_user_account_config.trigger[sel].open.call(this, $(obj).children("form"));
		}
	} else {
		// close form
		// trigger on close
		try {
			if (typeof(ps_user_account_config.trigger[sel]) != "undefined") {
				ps_user_account_config.trigger[sel].close.call(this, $(obj).children("form"));
			}			
		}catch(e){};
	}
}

function ps_user_account_info_init(frm)
{
	if (petside_user.data['user-info'].is_external) {
		// remove change pass
		$("div#user-info-edit-pass").remove();
	};
}

function ps_user_account_info_submit(frm)
{
	try {
		var params = ps_submit_params(frm);
		var elements = petside_user.form_elements(frm).elements;
		
		for (var e in elements) {
			if ($.inArray(e, ["_action", "_ip"]) == -1)
				params.vals[e] = elements[e];
		}
		params.vals = JSON.stringify(params.vals, petside_user.replacer);
		
		// submit form
		$.ajax({
			url:petside_user.config.action, type:"POST", data:params,
			error: function(){
				petside_user.form.error(frm, m);
			},
			success: function(resp){
				resp = JSON.parse(resp);
				if (resp.success) {
					// save
					petside_user.data['user-info'] = resp.resp;
					// update display
					PS.User.Info.Display();
					// refresh header
					ps_user_init();
					// close form
					$(frm)
						.find(":input[value$='password']")
							.val("")
						.end()
						.find(":input[value='Cancel']")
							.trigger("click")
						.end()
					.end();
				} else {
					this.error(resp.message);
				}
			}
		});
	} catch (e) { }

	return false;
}

PS.User.Info = {};
PS.User.Info.Display = function(){
	var d = petside_user.data['user-info'];
	$("#user-info-disp dd")
		.filter(":eq(0)")
			.text(d.first_name +" "+ d.last_name)
		.end()
		.filter(":eq(3)")
			.text(d.zip)
		.end()
		.filter(":eq(4)")
			.text(d.birth_year)
		.end()
		.filter(":eq(5)")
			.text(d.gender != null ? (d.gender == "F" ? "Female" : "Male") : "Not entered")
		.end()
		.filter(":eq(6)")
			.text(d.children)
		.end()
	.end();
};

PS.User.Password = {};
PS.User.Password.Edit = function(a){
	if ($(a).data("open") === true) {
		// hide fields
		$("#user-info-form :input[name$='_password']")
			.parent("div")
				.attr("class", "hide-me")
			.end()
		.end();
		// remove rules
		$("#old_password").rules("remove");
		$("#new_password").rules("remove");
		$("#confirm_password").rules("remove");
		// save
		$(a).text($(a).data("txt"))
			.data("open", false)
		.end();
	} else {
		// show fields
		$("#user-info-form :input[name$='_password']")
			.parent("div")
				.attr("class", "element")
			.end()
		.end();
		// add rules
		$("#old_password").rules("add", {
			required:true,
			remote:{
				url:petside_user.config.action,
        		type:"post",
				data:{ _action:"account-check-pass" }
			}
		});
		$("#new_password").rules("add", { required:true, minlength:5 });
		$("#confirm_password").rules("add", { equalTo:"#new_password" });
		// save
		$(a).data("txt", $(a).text())
			.text("Cancel Change Password")
			.data("open", true)
		.end();
	};
};



function ps_user_account_pet_add()
{
	// tpl
	obj = ps_user_account_pet_tpl();

	// open form
	$(obj)
		.find(".button-edit > button")
			.trigger("click")
		.end()
		.children("form.user-form")
			// trigger dog options
			.find(":input[name='pet_id'],:input[name='name']")
				.val('')
			.end()
			.find(":input[name='type'][value='dog']")
				.trigger("click")
			.end()
			// select first dog
			.find(":input[name='breed_id']")
				.children("option:first")
					.attr("selected", "selected")
				.end()
			.end()
		.end()
	.end();
	
	if (PS.Pet.subscribed("dog") >= petside_user.config.list_type_limit) {
		$(obj).find(":input[name='newsletter']").removeAttr("checked");
	};
	
	if (typeof(arguments[0]) != "undefined" && arguments[0]) {
		return obj;
	}
}

function ps_user_account_pet_tpl()
{
	var i = $("div.pet-display:visible").length;
		
	var obj = $("#pet-template")
		.clone()
		.attr("id", "pet-info-"+ i)
		.children("div.user-display")
			.attr("id", "pet-info-"+ i +"-disp")
			.find(".button-edit > button")
				.bind("click", function(){
					ps_user_account_pet_edit(0, "pet-info-" + i)
				})
			.end()
		.end()
		.children("form.user-form")
			.attr("id", "pet-info-"+ i +"-form")
		.end();
		
	// form input names
	$(obj)
		.find(".birthday-select")
			.birthSelect({
				format:"mdy", field:"birth_", year:"0,30"
			})
		.end()
	.end();
	
	// bind type
	var frm = $(obj).children("form.user-form");
	
	$(frm)
		.find(":input[name='breed_id']")
			.bind("change", function(){
				if (this.value == 0) {
					$(frm)
						.find(":input[name='other_breed']")
							.parent("div")
								.attr("class", "element")
							.end()
							.trigger("focus")
						.end()
					.end();
				} else {
					$(frm)
						.find(":input[name='other_breed']")
							.parent("div")
								.attr("class", "hide-me")
							.end()
						.end()
					.end();
				};
				ps_user_account_pet_style();
			})
		.end()
		.find(":input[name='type'][value='dog'],:input[name='type'][value='cat']")
			.bind("click", function(){
				$(frm)
					.find(":input[name='breed_id']")
						// show select
						.parent("div")
							.attr("class", "element")
						.end()
						.children("option:not([value='0'])")
							.remove()
						.end()
					.end()
					.find(":input[name='newsletter']")
						.parent("div")
							.attr("class", "element")
							.children("strong")
								.text(petside_user.label.news.replace("pet", PS.Pet.type(this.value)))
							.end()
						.end()
					.end()
					// hide other_breed, other_type
					.find(":input[name='other_breed'],:input[name='other_type']")
						.parent("div")
							.attr("class", "hide-me")
						.end()
					.end()
				.end();
				
				// options
				$("select#tpl_sel_"+ this.value + " > option")
					.clone()
					.prependTo( $(frm).find(":input[name='breed_id']") )
				.end();
				$(frm)
					.find(":input[name='breed_id'] option:first")
						.attr("selected", "selected")
					.end()
				.end();
				
				ps_user_account_pet_style();
			})
		.end()
		.find(":input[name='type'][value='other']")
			.bind("click", function(){
				$(frm)
					// show other_type
					.find(":input[name='other_type']")
						.parent("div")
							.attr("class", "element")
						.end()
						.trigger("focus")
					.end()
					// hide select, other_breed
					.find(":input[name='breed_id'],:input[name='other_breed']")
						.parent("div")
							.attr("class", "hide-me")
						.end()
					.end()
					// hide newsletter
					.find(":input[name='newsletter']")
						.removeAttr("checked")
						.parent("div")
							.attr("class", "hide-me")
						.end()
					.end()
				.end();
				ps_user_account_pet_style();
			})
		.end()
		.find(":input[name='newsletter']")
			.bind("click", function(){
				var c = 0;
				var t = $(this.form).find(":input[name='type']:checked").val();
				
				if (this.checked && (t == "dog" || t == "cat")) {
					c = PS.Pet.subscribed(t);
				};
				
				if (c >= petside_user.config.list_type_limit) {
					ps_user_account_pet_limit(t);
					this.checked = false;
				}
			})
		.end()
		.find("select[name^='birth_']")
			.bind("change", PS.Pet.birth_change)
		.end()
	.end();
	
	// add rules
	$(frm)
		.validate(ps_user_account_config['pet-info']);
	
	$(obj)
		.insertBefore("#pet-template")
		.show()
	.end();
	
	return obj;
}

PS.Pet = {};

PS.Pet.type = function(v){
	return (v == "dog" ? "puppy" : "kitten");
};

PS.Pet.subscribed = function(t){
	var c = 0;
	$.each(petside_user.data['pet-info'], function(){
		if (this.type == t && parseInt(this.newsletter) > 0) {
			c++;
		}
	});
	return c;
};

PS.Pet.birth_change = function(){
	var s = $(this).parent().children("select");
	var b = new Date(s.filter("[name*='year']").val(), s.filter("[name*='month']").val() - 1, s.filter("[name*='day']").val());
	var a = ((new Date()).getTime() - b.getTime()) / 1000 / (365.25 * 86400);
		
	var c = $(this.form).find("[name*='news']");
	
	var n = /\[([0-9]+)\]/.exec(this.name);
	if (n != null && n.length) {
		c = c.filter("[name$='["+ n[1] +"]']");
	};
		
	if (a > 2) {
		c.removeAttr("checked").end();
	};
};

function ps_user_account_pet_disp(obj, id, data)
{
	var n = "";
	if (data.type != "other") {
		n = "You "+ (data.newsletter ? "<strong>ARE</strong>" : "are <strong style='color:#A00;'>NOT</strong>") +" subscribed to "+ PS.Pet.type(data.type).ucfirst() +"Life.";
	};
	
	var lbl_breed = val_breed = "";
	if (data.other_type != null && data.other_type != "") {
		lbl_breed = 'type';
		val_breed = data.other_type;
	} else {
		lbl_breed = 'breed';
		val_breed = data.other_breed != null && data.other_breed != "" ? data.other_breed : (data.breed_id != null && data.breed_id != "" ? petside_user.data.breed[data.breed_id].name : 'Choose a breed');
	};
	
	$(obj)
		.children("div.user-display")
			.find(".button-edit > button")
				.unbind("click")
				.bind("click", function(){
					ps_user_account_pet_edit(id, obj.attr("id"));
				})
			.end()
			.children("dl")
				.children()
					.removeClass("hide-me")
					.filter("dd:eq(0)")
						.text(data.name)
					.end()
					.filter("dd:eq(1)")
						.text(data.birth_month +"/"+ data.birth_day +"/"+ data.birth_year)
					.end()
					.filter("dt:eq(2)")
						.html(lbl_breed + ":")
					.end()
					.filter("dd:eq(2)")
						.text(val_breed)
					.end()
					.filter("dd:eq(3)")
						.html(data.microchip)
					.end()
					.filter("dd:eq(4)")
						.html(data.additional)
					.end()
					.filter("dd:eq(5)")
						.html(n)
					.end()
					.filter("dd")
						.each(function(i){
							if (!this.innerHTML.length) {
								$(this).addClass("hide-me");
								$(this).parent().children("dt:eq("+ i +")").addClass("hide-me")
							}
						})
					.end()
				.end()
			.end()
		.end()
		.children("form.user-form")
			.children(":input[name='pet_id']")
				.val(id)
			.end()
		.end()
	.end();
}

function ps_user_account_pet_style()
{
	var s = $(".pet-display:visible");
	var c = s.length;
	// borders
	$(".pet-display:visible")
		.removeClass("dashed-border-right")
		.removeClass("dashed-border-bottom")
		.filter(":nth-child(even)")
			.addClass("dashed-border-right")
		.end()
		.filter(":lt("+ (c-(c%2?1:2)) +")")
			.addClass("dashed-border-bottom")
		.end()
	.end();
	// heights
	for (var h = 0; h < c; h += 2)
	{
		var l = s.get(h);
		var r = s.get(h + 1);
		
		if (typeof(r) == "undefined") {
			continue;
		};
		
		var hl = $(l).children(":visible").get(0).offsetHeight + 10;
		var hr = $(r).children(":visible").get(0).offsetHeight + 10;
		
		if (hl > hr) {
			$(l).css("height", hl);
			$(r).css("height", hl);
		} else {
			$(l).css("height", hr);
			$(r).css("height", hr);
		}
	}	
}

function ps_user_account_pet_submit(frm)
{
	try {
		petside_user.form.submit(frm);
		
		var params = ps_submit_params(frm);
		var elements = petside_user.form_elements(frm).elements;
		
		// filter reserved
		var pet = {};
		for (var e in elements)
		{
			if ($.inArray(e, ["_action", "_ip", "item", "namedItem"]) == -1) {
				pet[e] = elements[e];
			}
		};
		if (pet.type == "other") {
			pet.breed_id = null;
		} else {
			if (parseInt(pet.breed_id) > 0){
				pet.other_breed = "";
				pet.other_type = "";
			}			
		};
		
		// json values
		params.vals = JSON.stringify(pet, petside_user.replacer);
		
		$.ajax({
			url: petside_user.config.action,
			type: "POST",
			data: params,
			error: function(){},
			success: function(resp){
				resp = JSON.parse(resp);
				petside_user.form.success(frm);
				var p = resp.pet_id;
				// new pet
				if (typeof(petside_user.data['pet-info'][p]) == "undefined") {
					petside_user.data['pet-info'][p] = {};
				};
				// update data
				for (var i in pet)
				{	
					if (i !== "pet_id") {
						if (i == "breed_id" && parseInt(pet[i]) == 0) {
							pet[i] = "";
						};
						petside_user.data['pet-info'][p][i] = (pet[i] == null || pet[i].length == 0 ? null : pet[i]);
					}
				};
				if (typeof(pet.newsletter) == "undefined") {
					petside_user.data['pet-info'][p].newsletter = null;
				};
				// update disp
				ps_user_account_pet_disp($(frm).parent(), p, petside_user.data['pet-info'][p]);
				
				// close form
				$(frm).find(":input[value='Cancel']").removeAttr("disabled").end();
				
				ps_user_account_pet_close( $(frm).find(":input[value='Cancel']").get(0) );
			}
		});
		
	} catch(e) { };
	
	return false;
}

function ps_user_account_pet_init()
{
	$("#pet-wrapper")
		.children(":not(#pet-header,#pet-template)")
			.remove()
		.end()
	.end();

	if (typeof(petside_user.data['pet-info']) !== "undefined") {
		var p = petside_user.data['pet-info'];
		for (var i in p)
		{
			ps_user_account_pet_disp(ps_user_account_pet_tpl(), i, p[i]);
		};
		ps_user_account_pet_style();
	};
}

function ps_user_account_pet_edit(i, n)
{	
	$("[id^='"+ n +"-']")
		.toggleClass("hide-me")
	.end();
	
	if (typeof(i) == undefined || i == 0) {
		// new
		// disable cancel
		$("#"+ n +"-form")
			.find(":input[value='Cancel']")
				.attr("disabled", "disabled")
			.end()
		.end();
		
	} else {
		// edit
		var d = petside_user.data['pet-info'][i];
		
		// populate data		
		$.each(["pet_id", "name", "other_type", "other_breed", "microchip", "additional"], function(i, k){
			if (d[k] != null && d[k].length) {
				$("#"+ n +"-form")
					.find(":input[name='"+ k +"']")
						.val(d[k])
					.end()
				.end();
			};
		});
		
		$("#"+ n +"-form :input[name='type']")
			.removeAttr("checked")
			.filter("[value='"+ d.type +"']")
				.attr("checked", "checked")
				.trigger("click")
			.end()
		.end();
		
		$("#"+ n +"-form :input")
			.filter("[name='breed_id']")
				.find("option[value='"+ (d.breed_id == null ? 0 : d.breed_id) +"']")
					.attr("selected", "selected")
				.end()
			.end()
			.filter("[name^='birth']")
				.each(function(){
					$(this)
						.find("option")
							.removeAttr("selected")
							.filter("[value='"+ d[this.name] +"']")
								.attr("selected", "selected")
							.end()
						.end()
					.end();
				})
			.end()
			.filter("[name='newsletter']")
				.attr("checked", (parseInt(d.newsletter) > 0))
			.end()
		.end();
		
		if ((d.type == "dog" || d.type == "cat") && d.breed_id == null) {
			$("#" + n + "-form :input[name='other_breed']")
				.parent("div")
					.attr("class", "element")
				.end()
			.end();
		};
	};
	
	ps_user_account_pet_style();
}

function ps_user_account_pet_close(obj)
{
	var obj = $(obj).parent("div").parent("div,form").parent("div");
	var sel = ps_user_account_sel(obj);
	
	$(obj)
		.children("[id^='"+ sel +"-']")
			.toggleClass("hide-me")
		.end()
	.end();
	
	ps_user_account_pet_style();
}

function ps_user_account_pet_limit(t)
{
	petside_user.modal.func("limit",
		function(){
			ps_user_account_pet_limit(t);
		},
		function(){
			$("#limit-modal-wrap")
				.find("p.message-"+t)
					.removeClass("hide-me")
				.end()
			.end()
		}
	);
}



function ps_user_pet_remove_modal(arg)
{
	if (typeof(arg) != "undefined" && typeof(arg.type) != "undefined") {
		// get id from button
		p = $(arg).parent("div").parent("form").children(":input[name='pet_id']").val();
		if (!p) {
			// unsaved pet
			$(arg).parent("div").parent("form").parent("div").remove();
			ps_user_account_pet_style();
		} else {
			ps_user_pet_remove_modal(p);
		}
	} else {
		petside_user.modal.func(
			"remove",
			function(){
				ps_user_pet_remove_modal(arg);
			},
			function(){
				ps_user_pet_remove_init(arg);
			}
		);
	}
}

function ps_user_pet_remove_init(p)
{
	$("form#pet-remove")
		.bind("submit", function(){
			return ps_user_pet_remove_submit(this, p);
		})
		.find(":button[value='Cancel']")
			.bind("click", function(){
				ps_user_pet_remove_modal(p);
			})
		.end()
	.end();
}

function ps_user_pet_remove_submit(frm, p)
{
	try {
		var params = ps_submit_params(frm);
		params.vals = JSON.stringify({pet_id: p}, petside_user.replacer);
		$.ajax({
			url: petside_user.config.action,
			type: "POST",
			data: params,
			error: function(){},
			success: function(resp){
				ps_user_pet_remove_modal();
				resp = JSON.parse(resp);
				// remove from petside_user.data
				var tmp = {};
				for (var x in petside_user.data['pet-info']) {
					if (x != p)
						tmp[x] = petside_user.data['pet-info'][x];
				};
				petside_user.data['pet-info'] = tmp;
				// remove from display
				$(":input[name='pet_id'][value='"+ p +"']")
					.parent("form")
						.parent("div")
							.remove();
							
				ps_user_account_pet_style();
			}
		});
	} catch(e) { };
	return false;
}


function ps_user_account_vendor_open(frm)
{
	var i = $(frm).children(":inupt[name='vendor_id']").val(); 
	var id = petside_user.data.vendor.type[i].name.toLowerCase().replace(/[^a-z]/i, '-');
	
	// populate data
	if (typeof(petside_user.data.vendor.data[i]) != "undefined" &&
		ps_user_account_vendor_count(i) > 0) {
		$.each(petside_user.data.vendor.data[i], function(j, v){
			o = ps_user_account_vendor_add(i, id);
			$(o)
				.find(":input[name='vendor[]']")
					.val(j)
				.end()
				.find(":input[name='name[]']")
					.val(v.name)
				.end()
				.find(":input[name='number[]']")
					.val(v.number)
				.end()
			.end()
		})
	} else {
		ps_user_account_vendor_add(i, id);
	}
}

function ps_user_account_vendor_close(frm)
{
	var i = $(frm).children(":inupt[name='vendor_id']").val(); 
	$(frm)
		.parent()
			.replaceWith(ps_user_account_vendor_disp(i, petside_user.data.vendor.type[i]))
		.end()
	.end();
}

function ps_user_account_vendor_init()
{
	$.each(petside_user.data.vendor.type, function(i, v){
		var id = v.name.toLowerCase().replace(/[^a-z]/i, '-') + "-info";
		// validation
		ps_user_account_config[id] = ps_user_account_config.vendor;
		// triggers	
		ps_user_account_config.trigger[id] = ps_user_account_config.trigger.vendor;
		
		$("#vendor-list")
			.append(ps_user_account_vendor_disp(i, v));
	});
}

function ps_user_account_vendor_disp(i, v)
{
	var id = v.name.toLowerCase().replace(/[^a-z]/i, '-');
		
	var tpl = $("#vendor-tpl").clone();
	$(tpl)
		.attr("id", id + "-info")
		.children("h4")
			.text(v.name)
		.end()
		.children("a")
			.unbind("click")
			.bind("click", function(){
				ps_user_account_vendor_add(i, id);
			})
			.children("span")
				.text(v.name)
			.end()
		.end()
		.children("div")
			.attr("id", id+"-info-disp")
		.end()
		.children("form")
			.attr("id", id+"-info-form")
			.children(":input[name='vendor_id']")
				.val(i)
			.end()
			.children(":input[name='type']")
				.val(id)
			.end()
		.end()
		.show();
	
	if (typeof(petside_user.data.vendor.data[i]) != "undefined" &&
		ps_user_account_vendor_count(i) > 0) {
		// empty
		$(tpl)
			.find("div.user-display > dl")
				.empty()
			.end()
		.end();
		// populate
		$.each(petside_user.data.vendor.data[i], function(w, y){
			$(tpl)
				.find("div.user-display > dl")
					.append("<dt>Name:</dt>")
					.append("<dd>"+ y.name +"</dd>")
					.append("<dt>Number:</dt>")
					.append("<dd>"+ y.number +"</dd>")
				.end()
			.end();
		});
		
	} else {
		$(tpl)
			.find("div.user-display > dl > dd:eq(0)")
				.text("Add " + v.name)
			.end()
		.end();
	};
	
	return tpl;
}

function ps_user_account_vendor_count(i)
{
	// count
	var c = 0;
	for (var d in petside_user.data.vendor.data[i]) {
		c++;
	};
	return c;	
}

function ps_user_account_vendor_add(i, id)
{
	// open form
	if ($("#"+ id +"-info > form:visible").length == 0) {
		$("#"+ id +"-info-disp > .button-edit > button")
			.trigger("click")
		.end();
	};
	// add row
	var r = $("#"+ id +"-info-form").children("div.tpl").clone();
	$(r)
		.removeClass("tpl")
		.removeClass("hide-me")
		.prepend("<input type='hidden' name='vendor[]' value=''/>")
		.insertBefore("#"+ id +"-info-form > div.tpl")
	.end();
	return r;
}

function ps_user_account_vendor_remove(o)
{
	var wrap = $(o).parent("div").parent("div");
	var frm = $(wrap).parent("form");
	var i = $(frm).find(":input[name='vendor_id']").val();
	var id = $(frm).find(":input[name='type']").val();
	
	$(wrap).remove();
	
	if ($(frm).find("div.input-wrap:visible").length == 0) {
		ps_user_account_vendor_add(i, id);
	}
}

function ps_user_account_vendor_submit(frm)
{
	try {
		var i = $(frm).find(":input[name='vendor_id']").val();
		var params = ps_submit_params(frm);
		params.vendor_id = i;
		params.type = $(frm).find(":input[name='type']").val();
		$(frm)
			.find(":input[name='vendor[]']")
				.each(function(i, v){
					params.vals[i] = {
						id: this.value,
						name: $(frm).find(":input[name='name[]']:eq("+ i +")").val(),
						number:  $(frm).find(":input[name='number[]']:eq("+ i +")").val()
					};
				})
			.end()
		.end();
		
		params.vals = JSON.stringify(params.vals, petside_user.replacer);
		
		$.ajax({
			url: petside_user.config.action,
			type: "POST",
			data: params,
			error: function(){},
			success: function(resp){
				petside_user.data.vendor.data[i] = JSON.parse(resp);
				$(frm)
					.find(":input[value='Cancel']")
						.trigger("click")
					.end()
				.end();
			}
		});
			
	} catch (e) {};
	
	return false;
}


function ps_user_account_news_disp()
{
	$("#newsletter-disp > ul")
		.empty()
	.end();
		
	$.each(petside_user.data.newsletter, function(n, o){
		$("#newsletter-disp > ul")
			.append("<li>You "+ (o.user_newsletter_id ? "<strong>ARE</strong>" : "are <strong style='color:#A00;'>NOT</strong>") +" subscribed to  "+ o.label +"</li>")
		.end();
	});
}

function ps_user_account_news_init()
{
	$("#newsletter-form > ul")
		.empty()
	.end();

	$.each(petside_user.data.newsletter, function(n, o){
		var lbl = $("<span></span>")
			.append("<strong>"+ o.label +"</strong>")
			.append("<br/>")
			.append(o.description)
			.append("<br/>");
		$("<li></li>")
			.append("<input type='checkbox' value='"+ n +"' "+ (o.user_newsletter_id ? "checked" : "") +"/>")
			.append(lbl)
			.appendTo("#newsletter-form > ul");
	});
	
	$("#newsletter-form")
		.unbind("submit")
		.bind("submit", function(){
			var frm = this;
			petside_user.form.submit(frm);
			var params = ps_submit_params(frm);
			params.vals = {};
			$.each(frm.elements, function(i, o){
				if (this.type == "checkbox") {
					params.vals[o.value] = o.checked;
				}
			});
			params.vals = JSON.stringify(params.vals, petside_user.replacer);
			$.ajax({
				url: petside_user.config.action,
				type: "POST",
				data: params,
				error: function(){
				},
				success: function(resp){
					resp = JSON.parse(resp);
					// update data
					petside_user.form.success(frm);
					petside_user.data.newsletter = resp.data;
					// update pet data
					$.each(resp.data, function(i, o){
						if (/(puppy|kitten)life/.test(o.name) && o.user_newsletter_id == null) {
							var t = (/(puppy|kitten)/.exec(o.name)[1] == "puppy" ? "dog" : "cat");
							$.each(petside_user.data['pet-info'], function(n, p){
								if (p.type == t && parseInt(p.newsletter) > 0) {
									petside_user.data['pet-info'][n].newsletter = null;
								}
							});
						};
					});
					ps_user_account_pet_init();
					
					// close form
					$(frm).find(":input[value='Cancel']").trigger("click");
				}
			});
			return false;
		})
	.end();
}


function ps_submit_params(frm)
{
	var params = $.extend({vals:{}}, petside_user.config.params);
	
	try {
		if (frm.tagName.toLowerCase() === "form") {
		
			$(frm)
				.find(":input")
					.each(function(){
						if ("_action,_ip,".indexOf(this.name + ",") >= 0) {
							params[this.name] = this.value;
						};
					})
				.end()
			.end();
		}
	} catch (e) {}
	
	return params;
}

function debug(out)
{
	if (petside_user.config.debug) {
		try {
			console.log(out)
		} catch (e) {
			for(var x in e)
			{
				alert(x +" "+ e[x]);
			}
		}
	}
}


function ps_comment_init(sel)
{
	if (typeof(sel) != "string") {
		sel = "form#comment-form";
	};
	$(sel)
		.validate({
			errorElement:"span",
			submitHandler: function (form){
				return ps_comment_submit(form);
			},
			rules: { body:"required" },
			messages:{ body:"A comment body is required." }
		});
		
	var c = JSON.parse($.cookie("ps_user_session"));
	if (c == null || !JSON.parse($.cookie("ps_user_session")).is_external) {
		$(sel).find(":input[name='publish']").parent("span").remove();
	} else {
		//$(sel).find(":input[name='publish']").parent("span").removeClass("hideme");
	};
}

function ps_comment_submit(frm)
{
	try {
		var params = ps_submit_params(frm);
		var elements = petside_user.form_elements(frm).elements;
		
		for (var e in elements)
		{
			if ($.inArray(e, ["blog_id", "entry_id", "base_name", "parent_id", "body"]) != -1)
				params.vals[e] = elements[e];
		};
		params.vals = JSON.stringify(params.vals, petside_user.replacer);

		if (!PS.User.Sess.In() && !$(frm).children(":input[type='hidden'][name='logged']").length) {
			// login, then submit
			ps_comment_modal();
		} else {
			// submit
			params._action = "comment-post";
			$.ajax({
				url: petside_user.config.action,
				type: "POST",
				data: params,
				error: function(){},
				success: function(resp){
					resp = JSON.parse(resp);
					if (resp && typeof(resp) == "object" && resp.success == true) {
						// posted
						window.location.reload();
					} else {
						// err
					}
				}
			});
		};
	} catch (e) { };
	
	return false;
}

function ps_comment_reply(a, c)
{
	if (!$(a).find("+ form").length) {
		// clone comment form
		$("form#comment-form")
			.clone()
			.attr("id", "comment-form-"+c)
			.children(":input[name='parent_id']")
				.val(c)
			.end()
			.find("span.error")
				.remove()
			.end()
			.find(":input[type='reset']")
				.bind("click", function(){
					$(this.form).remove();
				})
			.end()
			.insertAfter(a);
		// validate
		ps_comment_init("form#comment-form-"+c);
	};
}

function ps_comment_modal()
{
	petside_user.modal.func("comment", ps_comment_modal, ps_comment_modal_init);
}

function ps_comment_modal_init()
{
	var frm = $("form#comment-modal-form");

	$("form#comment-modal-form")
		.validate({
			submitHandler: function (frm) {
				try {
					var params = ps_submit_params(frm);
					var elements = petside_user.form_elements(frm).elements;
					
					if (elements.guest_name.length > 0 && elements.guest_email.length > 0) {
						// guest
						params._action = "login-guest";
						params.vals = JSON.stringify({name:elements.guest_name, email:elements.guest_email}, petside_user.replacer);
					} else if (elements.user_email.length > 0 && elements.user_password.length > 0) {
						// user
						params._action = "login";
						params.vals = JSON.stringify({email:elements.user_email, password:elements.user_password}, petside_user.replacer);
					};
					
					$.ajax({
						url:petside_user.config.action,
						type:"POST",
						data:params,
						error:function(){},
						success:function(resp){
							resp = JSON.parse(resp);
							
							if (typeof(resp) == "object" && resp.success == true) {
								$.modal.close();
								$("form#comment-form")
									.prepend("<input type='hidden' name='logged' value='1'/>")
									.submit();
							} else {
								// err
							}
						}
					});
				} catch (e) {};
				return false;
			},
			errorElement:"span",
			rules:{
				user_email:{
					email:true,
					required:function(){
						return (frm.find(":input[name='guest_name']").val().length == 0);
					}
				},
				user_password:{
					required:function(){
						return (frm.find(":input[name='user_email']").val().length > 0);
					}
				},
				guest_name:{
					required:function(){
						return (frm.find(":input[name='user_email']").val().length == 0);
					}
				},	
				guest_email:{
					email:true,
					required:function(){
						return (frm.find(":input[name='guest_name']").val().length > 0);
					}
				}
			}
		});
	
	frm.find(":input[name^='guest']")
			.bind("keypress", function(){
				$("form#comment-modal-form")
					.find(":input[name^='user']").val('').end()
				.end();
			})
		.end()
		.find(":input[name^='user']")
			.bind("keypress", function(){
				$("form#comment-modal-form")
					.find(":input[name^='guest']").val('').end()
				.end();
			})
		.end()
	.end();
}

function ps_comment_fb_submit()
{
	ps_user_fb_submit(function(){
		$("form#comment-form")
			.prepend("<input type='hidden' name='logged' value='1'/>")
			.submit();
	});
}

String.prototype.ucfirst = function(){
	if (!this.length) return this;
	var i = /(.{1})/.exec(this)[1];
	return this.replace(/^.{1}/, i.toUpperCase());
};

