sfHover = function() {
		if ( document.getElementById("nav")) {
		var sfEls = document.getElementById("nav").getElementsByTagName("LI");
		for (var i=0; i<sfEls.length; i++) {
			sfEls[i].onmouseover=function() {
				this.className+=" sfhover";
			}
			sfEls[i].onmouseout=function() {
				this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
			}
		}
		}
}
if (window.attachEvent) window.attachEvent("onload", sfHover);



var FBConnect = {};


FBConnect.redirect = function(location)
{
	FB.Facebook.get_sessionState().waitUntilReady(function(session){
		window.location.href = location;
	});
}


FBConnect.logout = function()
{
	FB.ensureInit(function() {
        FB.Connect.ifUserConnected(function() {
            FB.Connect.logout();
            setTimeout(function() { window.location.href = '/logout' }, 3000);
        }, function() {
        	window.location.href = '/logout';
        });
    });
}


FBConnect.selectSelect = function(elem, currentValue)
{
	jQuery(elem).val(currentValue).attr("selected", "selected");
}


FBConnect.getSignUpInfo = function()
{
	FB.ensureInit(function() {

		var api = FB.Facebook.apiClient;

		FB.Connect.ifUserConnected(function() {

			api.users_getInfo(api.get_session().uid, ['first_name', 'birthday', 'sex', 'meeting_sex', 'current_location', 'pic_square_with_logo'], function(result, exception) {

				jQuery('#fb-loading').html(" loading data from Facebook...");

				var loaded = FBConnect.loadSignUpInfo(result[0]);

				if (loaded.length > 0) {
					jQuery('#fb-loading').html("<br /><br />Loaded (highlighted in blue): <ul><li>" + loaded.join("</li><li>") + "</li></ul>");
				} else {
					jQuery('#fb-loading').html(" Sorry, nothing to load from your Facebook profile.");
				}

			});

		}, function() {
		})
	});
}


FBConnect.loadInfoIntoForm = function(fields, dataObject)
{
	var loaded = [];
	var ret;

	var i;
	for (i = 0; i < fields.length; i++) {

		if (dataObject[fields[i]]) {

			ret = this.loadField(fields[i], dataObject[fields[i]], dataObject);

			if (ret) {
				loaded.push(ret);
			}
		}
	}
	return loaded;

}

FBConnect.highlightField = function(element)
{
	// highlight parent form-item
	jQuery(element).parents(".form-item").addClass("facebook-highlight");

	// highlight tab
	var parents = jQuery(element).parents("fieldset");
	if (parents.length > 0) {
		jQuery("#" + parents.get(0).id + "_tab").addClass("facebook-highlight");
	}
}

FBConnect.loadField = function(field, value, data)
{

	switch (field) {

		case "birthday":
			return this.loadDateField(value, 'pr_birthday');

		case "sex":
			return this.loadSexField(value);

		case "meeting_sex":
			return this.loadSexualOrientation(value, data);

		case "current_location":
			return this.loadCurrentLocation(value, data);

		case "relationship_status":
			return this.loadRelationshipStatus(value, data);

		case "about_me":
			return this.loadText(value, data, 'pr_one_minute', "Sum yourself up");

		case "meeting_for":
			return this.loadMeetingFor(value, data);

		case "activities":
			return this.loadText(value, data, 'pr_for_fun_i', "For fun I");

		case "books":
			return this.loadText(value, data, 'pr_favourite_books', "Favorite books");

		case "music":
			return this.loadText(value, data, 'pr_artists_i_like', "I'm into this music right now");

		case "hometown_location":
			return this.loadHometown(value, data);

		case "hs_info":
			return this.loadHighSchool(value, data);

		default:

	}

}

FBConnect.loadHighSchool = function(value, dataObject)
{
	if (value.hs1_name) {
		if (jQuery('#pr_high_school_at')) {
			jQuery('#pr_high_school_at').value = value.hs1_name;
			if (value.hs2_name) {
				jQuery('#pr_high_school_at').value += ", " + value.hs2_name;
			}

			FBConnect.highlightField(jQuery('#pr_high_school_at'));

			return "I went to high school at";
		}
	}
}



FBConnect.loadHometown = function(value, dataObject)
{

	var elem = jQuery('#pr_originally_from');

	if (elem) {

		if (value.city) {
			elem.value = value.city;
			if (value.state) {
				elem.value += ", " + value.state;
			}

			FBConnect.highlightField(elem);

			return "I'm originally from";
		}
	}
}


FBConnect.loadText = function(value, dataObject, field, returnText)
{
	field = jQuery("#" + field);
	if (value && value != "" && field) {
		field.val(value);
		FBConnect.highlightField(field);
		return returnText;
	}
}

//
// Meeting for
//
FBConnect.loadMeetingFor = function(value, dataObject)
{
	var matchValue = 0;

	var i;
	for (i = 0; i < value.length; i++) {

		switch (value[i]) {
			case "Friendship":
				break;
			case "A Relationship":
				matchValue += 6;
				break;
			case "Dating":
				matchValue += 8;
				break;
			case "Random Play":
				matchValue += 32;
				break;
			case "Whatever I can get":
				matchValue += 64;
				break;
		}
	}

	var i = 1;
	var elem;
	var matched;
	var num_matched = 0;

	var parent = jQuery("#pr_looking_for_1").parents("fieldset");

	if (parent.length > 0) {
		parent.find("input").each(function() {
			elem = jQuery(this);
			if ((elem.val() & matchValue) > 0) {
				elem.attr("checked", "checked");
				num_matched++;
			} else {
				elem.attr("checked", "");
			}
		});
	}

	if (num_matched > 0) {
		FBConnect.highlightField(jQuery('#pr_looking_for_1'));
		return "Looking for";
	}

}


//
// relationship status
//
FBConnect.loadRelationshipStatus = function(value, dataObject)
{

	var matchValue = 0;

	switch (value) {

		case "Single":
			matchValue = 1;
			break;
		case "In an Open Relationship":
		case "In a Relationship":
		case "Engaged":
			matchValue = 8;
			break;
		case "Married":
			matchValue = 16;
			break;
	}

	if (matchValue > 0) {
		this.selectSelect(jQuery('#pr_relationship'), matchValue);
		FBConnect.highlightField(jQuery('#pr_relationship'));
		return "Relationship";
	}
}



//
// Location - zip
//
FBConnect.loadCurrentLocation = function(value, dataObject)
{
	if (value.zip && value.zip != "" && jQuery('#pr_zipcode')) {
		jQuery('#pr_zipcode').val(value.zip);
		FBConnect.highlightField(jQuery('#pr_zipcode'));
		return "Zip Code";
	}
}

FBConnect.loadSexualOrientation = function(value, dataObject)
{
	if (value && value instanceof Array && dataObject.sex) {

		// default to straight
		var sexual_orientation = 1;

		if (dataObject.meeting_sex.length > 1) {
			// bi
			sexual_orientation = 2;
		} else {
			if (dataObject.meeting_sex[0] == dataObject.sex) {
				// gay
				sexual_orientation = 4;
			}
		}

		// select value
		this.selectSelect('pr_sexual_orientation', sexual_orientation);

		FBConnect.highlightField(jQuery('#pr_sexual_orientation'));

		return "Sexual Orientation";
	}
}


FBConnect.loadSexField = function(value)
{
		if (value == "male") {
			jQuery('#pr_gender_1').attr("checked", "checked");
			jQuery('#pr_gender_2').attr("checked", "");
		} else {
			jQuery('#pr_gender_1').attr("checked", "");
			jQuery('#pr_gender_2').attr("checked", "checked");
		}
		FBConnect.highlightField(jQuery('#pr_gender_1'));
		return "Gender";
}


FBConnect.loadDateField = function(value, fieldName)
{
	if (value) {

		var date = value;

		month = date.match(/[A-Z][a-z]+/);
		day = date.match(/[0-9]{1,2}/);
		year = date.match(/[0-9]{4}/);

		if (day && month) {

			if (!year) {
				year = 2009;
			}

			var dateObj = new Date(month + " " + day + " " + year);

			// set month
			var monthToMatch = dateObj.getMonth()+1;
			var dayToMatch = dateObj.getDate();
			var yearToMatch = dateObj.getFullYear();

			var monthSelect = jQuery("#" + fieldName + '\\[month\\]');
			if (monthSelect) {
				this.selectSelect(monthSelect, monthToMatch);
			}

			var daySelect = jQuery("#" + fieldName + "\\[day\\]");
			if (daySelect) {
				this.selectSelect(daySelect, dayToMatch);
			}

			FBConnect.highlightField(daySelect);

			if (year) {
				this.selectSelect(jQuery("#" + fieldName + '\\[year\\]'), yearToMatch);
				return "Birthday";
			} else {
				return "Birthday (no year)";
			}
		}
	}
}


FBConnect.loadInfo = function(fields, data, showLink)
{
	var loaded = FBConnect.loadInfoIntoForm(fields, data);

	if (loaded.length > 0) {
		var str = "<br /><br />Loaded (highlighted in blue): <ul><li>" + loaded.join("</li><li>") + "</li></ul>";
		if (showLink) {
			str += "<br />Don't forget to click <a href='#update-profile' onclick=\"document.getElementById('profile-form').submit(); return false;\">Update profile</a> to save your Facebook info";
		}
		jQuery('#fb-loading').html(str);
		jQuery('#updated_from_facebook').val(1);
	} else {
		jQuery('#fb-loading').html(" Sorry, nothing to load from your Facebook profile.");
	}
}

FBConnect.loadInfoFromPopup = function(fields, data, showLink)
{
	var loaded = FBConnect.loadInfoIntoForm(fields, data);
	var str = "";

	if (loaded.length > 0) {
		var str = "<p>The following fields have been updated from Facebook and are highlighted in blue:</p><ul><li>" + loaded.join("</li><li>") + "</li></ul>";
		if (showLink) {
			str += "<br />Don't forget to click <a href='#update-profile' onclick=\"document.getElementById('profile-form').submit(); return false;\">Update profile</a> to save your Facebook info";
		}
		jQuery('#updated_from_facebook').val(1);
	} else {
		str = "<p>Sorry, nothing to load from your Facebook profile.</p>";
	}

	// add update message
	jQuery('#facebook-loading').html("Don't forget to click <a href='#update-profile' onclick=\"document.getElementById('profile-form').submit(); return false;\">Update profile</a> to save your Facebook info.").show();

	// close the dialog
	jQuery('#facebook-dialog').dialog('close');

	//str += "<div class='button-block margin-top-20'><div class='button'><div class='link'><a href='#ok' onclick=\"jQuery('#facebook-dialog').dialog('close'); return false;\">Ok</a></div></div></div>";

	jQuery('#fb-loading').html(str);

}



FBConnect.getAndLoadInfo = function(fields)
{
	FB.ensureInit(function() {
		var api = FB.Facebook.apiClient;
		FB.Connect.ifUserConnected(function() {

			api.users_getInfo(api.get_session().uid, fields, function(result, exception) {

				$('fb-loading').innerHTML = " loading data from Facebook...";

				FBConnect.loadInfo(fields, result[0]);

			});
		});
	});
}


FBConnect.init = function()
{
	//this.checkLogin();
}














var Canoodle = {

		sliders: [],

		signupCheckUsername: function(usernameElementId)
		{

		    var usernameElem = document.getElementById(usernameElementId);

		    if (usernameElem) {

		        var username = escape(usernameElem.value);

		        if (username.length == 0) {
		        	this.signupSetLoadingHtml(usernameElementId + "_check_result", "username is <span style='color: red;'>empty!</span>");
		        } else if (username.length < 6) {
		        	this.signupSetLoadingHtml(usernameElementId + "_check_result", "<em>" + username + "</em> is <span style='color: red;'>too short</span> must be at least 6 characters long!");
		        } else if (username.length > 16) {
		            this.signupSetLoadingHtml(usernameElementId + "_check_result", "<em>" + username + "</em> is <span style='color: red;'>too long</span> must be less than 16 characters long!");
		        } else if (!username.match(/^[A-Za-z0-9][A-Za-z0-9_-]+$/)) {
		            this.signupSetLoadingHtml(usernameElementId + "_check_result", " <span style='color: red;'>usernames must start with a letter or number and only contain letters, numbers, the _ and - symbols!</span>");
		        } else {
		            var loading_elem = document.getElementById(usernameElementId + "_check_result");
		            if (loading_elem) {
		                loading_elem.innerHTML = "<img src='/images/loading.gif' alt='checking' style='margin-bottom: -3px;' />";
		            } else {
		                //alert(username_elem_id + "_check_result");
		            }

		            jQuery.getJSON("/signup-form?opt=checkUsername&username=" + username + "&usernameElementId=" + usernameElementId,
		            		function(data){
		            			if (data.usernameElementId != null) {

		            				if (data.status == 1) {
		            					Canoodle.signupSetLoadingHtml(data.usernameElementId + "_check_result", "<em>" + data.username + "</em> is <span style='color: green;'>available!</span>");
		            				} else {
		            					Canoodle.signupSetLoadingHtml(data.usernameElementId + "_check_result", "<em>" + data.username + "</em> is <span style='color: red;'>already taken!</span>");
		            				}
		            			}
		            		}
		            	);
		        }
		    }
		},

		signupSetLoadingHtml: function(elem_id, html)
		{
		    var loading_elem = document.getElementById(elem_id);
		    if (loading_elem != null) {
		        loading_elem.innerHTML = html;
		    }
		},


		resetSliders: function()
		{
			for (var i = 0; i < this.sliders.length; i++) {
				this.sliders[i].slider('value', 50);
			}
		},

		addSlider: function(slider)
		{
			this.sliders.push(slider);
		},

		registerSlider: function(sliderId, weight)
		{
	        jQuery(document).ready(function(){

	            var slider = jQuery('#slider_' + sliderId);
	            slider.slider({
	                step: 10,
	                value: weight,
	                change: function(event, ui) {
	            		// set the hidden form field value
	                    jQuery('#slider_' + sliderId + '_weight').val(ui.value);
	                }
	            });
	            Canoodle.addSlider(slider);
	        });
		},

		switchPhoto: function(element, imageUrl)
		{
			var imageElement = $(element);
			if (imageElement) {
				imageElement.src = imageUrl;
			}
		},

		toggleFormFieldset: function(elem)
		{
			var parent = elem.parentNode;

			while (parent.tagName.toLowerCase() != "fieldset") {
				if (parent.tagName.toLowerCase() == "body") {
					return false;
				} else {
					parent = parent.parentNode;
				}
			}

			parent = jQuery(parent);
			elem = jQuery(elem);

			var toHide = parent.find("div.form-contents");

			if (toHide.css("display") != 'none') {
				toHide.hide();
				elem.removeClass('max');
				elem.addClass('min');
			} else {
				toHide.show();
				elem.removeClass('min');
				elem.addClass('max');
			}

		},

		// jQuery
		toggleFormFieldsetTabs: function(elem, id)
		{

			// remove previously selected classes on tabs
			jQuery("#fieldgroup-list").find("a").each(
					function(i) {
						jQuery(this).removeClass('selected');
					});

			// add the new selected class
			jQuery(elem).addClass('selected');

			// hide all other fieldsets
		    jQuery("#profile-form fieldset").each(
					function() {
						jQuery(this).hide();
					});

			// reference the fieldset
			var fieldset = jQuery("#" + id);
			if (fieldset) {
				jQuery(fieldset).show();
			}

			// set current tab value
			jQuery("#current_tab").val(id);

			return false;
		},

	    messagesDeleteSelected: function(from) {

			var checkboxes = jQuery('#messages-list input.message-check');
			var toDelete = [];

			var i, checkbox;
			for (i = 0; i < checkboxes.length; i++) {
				var checkbox = jQuery(checkboxes[i]);
				if (checkbox.attr('checked') == true) {
					toDelete.push(checkbox.attr('id'));
				}
			}

			if (toDelete.length > 0) {
				window.location = "/messages?opt=delete&from=" + from +"&message_guids=" + toDelete.join(",");
			}
	    },


	    initMessages: function() {

	    	var messageSelect = jQuery("#messages-select");

	    	if (messageSelect) {

	    		messageSelect.change(
	    			function(e) {

	    				var option = messageSelect.val();

	    				if (option == "all") {

	    					jQuery("#messages-list input.message-check").each(
	    							function(i) {
	    								jQuery(this).attr('checked', true);
	    							});
	    				} else if (option == "none") {
	    					jQuery("#messages-list input.message-check").each(
	    							function(elem) {
	    								jQuery(this).attr('checked', false);
	    							});
	    				}
	    		});
	    	}

	    },

	    toggleElem: function(elem) {

	    	var elem = $(elem);
	    	if (elem) {
	    		if (elem.style.display == 'none') {
	    			elem.style.display = '';
	    		} else {
	    			elem.style.display = 'none';
	    		}
	    	}

	    },

	    toggleHaveChildren: function(prefix, onload) {

	    	if (typeof onload == 'undefined') {
	    		onload = false;
	    	}

	    	var yesCheckbox = jQuery('#' + prefix + '_have_children_1');

	    	if (yesCheckbox.attr('checked')) {

	    		// wants children

	    		// show
	    		jQuery('#' + prefix + '_have_children_live_with_1').parents('.form-item').show();
	            jQuery('#' + prefix + '_children_want_more_1').parents('.form-item').show();
	            jQuery('#' + prefix + '_children_how_many').parents('.form-item').show();

	    		// hide
	    		jQuery('#' + prefix + '_want_children_1').parents('.form-item').hide();

	    	} else {

	    		// doesn't want children

	    		// hide
	    		jQuery('#' + prefix + '_have_children_live_with_1').parents('.form-item').hide();
	            jQuery('#' + prefix + '_children_want_more_1').parents('.form-item').hide();
	            jQuery('#' + prefix + '_children_how_many').parents('.form-item').hide();

	            // show
	            jQuery('#' + prefix + '_want_children_1').parents('.form-item').show();

	        }

	    },


	    init: function() {
	    }
}

if (window.addEvent) {
	window.addEvent('domready', function() {
		FBConnect.init();
	});
}