

function ClassUtil()
	{
	this.getClass = function(element)
		{
		return element.className || (element.getAttribute ? element.getAttribute("class") : false) || "";
		}
	this.setClass = function(element,class_name,overwrite)
		{
		// without overwrite set, its just like adding a class to the element
		var new_class = overwrite ? class_name : (this.getClass(element) ? this.getClass(element)+" "+class_name : class_name);
		element.className = new_class;
		if (element.setAttribute) element.setAttribute("class",new_class);
		}
	this.removeClass = function(element,class_name)
		{
		var elm_class = this.getClass(element);
		var classes_to_check = elm_class.split(" ");
		var new_class = new Array();
		for (var i=0;i<classes_to_check.length;i++)
			{
			if (class_name != classes_to_check[i]) new_class.push(classes_to_check[i]);
			}
		this.setClass(element,new_class.join(" "),true);
		}
	this.checkClass = function(element,class_name)
		{
		var elm_classes = this.getClass(element).split(" ");
		var classes_to_check = class_name.split(" ");
		var chk = 0;
		for (var i=0;i<classes_to_check.length;i++)
			{
			for (var c=0;c<elm_classes.length;c++)
				{
				if (classes_to_check[i] == elm_classes[c])
					{
					chk++;
					break;
					}
				}
			}
		return chk == classes_to_check.length;
		}
	this.getElementsByClassName = function(class_name,opt_root)
		{
		var root = opt_root || document;
		var all = root.getElementsByTagName("*");
		var sp = new Array();
		for (var i=0;i<all.length;i++)
			{
			if (this.checkClass(all[i],class_name)) sp.push(all[i]);
			}
		return sp;
		}
	}
var cutil = new ClassUtil();

function formOnSubmit(type_or_elm)
	{
	var type;
	if (typeof(type_or_elm) == "string") type = type_or_elm;
	else type = $("[name='firstName']",$(type_or_elm)).length ? "wsfy" : "ps";
	
	var f = $("#"+type+"Form");
	f[0].submittedOnce = true;
	f[0].submitted_once = true;
	var ok = true;
	
	var fn = $("[name='"+(type=="ps"?"searchFirstName":"firstName")+"']",f);
	var ln = $("[name='"+(type=="ps"?"searchLastName":"lastName")+"']",f);
	var a = $("[name='"+(type=="ps"?"searchAge":"age")+"']",f);

	if (fn.val() != fn[0].defaultValue) fn.val(fixName(fn.val()));
	if (ln.val() != ln[0].defaultValue) ln.val(fixName(ln.val()));
	if (a.val() != a[0].defaultValue) a.val(fixAge(a.val()));
	
	var des = type == "ps" ? "their" : "your";
	if (!inputHasValue(fn)) ok = alertField(fn,{id:"first_name",message:"Please enter "+des+" <strong>first name</strong>."});
	else alertField(fn,{id:"first_name"},true);
	if (!inputHasValue(ln)) ok = alertField(ln,{id:"last_name",message:"Please enter "+des+" <strong>last name</strong>."});
	else alertField(ln,{id:"last_name"},true);
	if (!inputHasValue(a)) ok = alertField(a,{id:"age",message:"Please enter "+des+" <strong>age</strong>."});
	else alertField(a,{id:"age"},true);
	
	return ok;
	}

function regOnSubmit(elm_or_check_only)
	{
	var check_only = false;
	if (typeof(elm_or_check_only) == "boolean" || typeof(elm_or_check_only) == "number") check_only = elm_or_check_only;
	
	var f = $("#regForm");
	f[0].submittedOnce = true;
	f[0].submitted_once = true;
	var ok = true;
	
	var fn = $("[name='firstName']",f);
	var ln = $("[name='lastName']",f);
	var e = $("[name='email']",f);
	var g = $("[name='gender']",f);
	var bm = $("[name='birthMonth']",f);
	var bd = $("[name='birthDay']",f);
	var by = $("[name='birthYear']",f);
	var z = $("[name='zip']",f);

	if (fn.val() != fn[0].defaultValue) fn.val(fixName(fn.val()));
	if (ln.val() != ln[0].defaultValue) ln.val(fixName(ln.val()));
	if (e.val() != e[0].defaultValue) e.val(fixEmail(e.val()));
	if (z.val() != z[0].defaultValue) z.val(fixZip(z.val()));
	
	if (!inputHasValue(fn)) ok = alertField(fn,{id:"first_name",message:"Please enter your <strong>first name</strong>."});
	else alertField(fn,{id:"first_name"},true);
	if (!inputHasValue(ln)) ok = alertField(ln,{id:"last_name",message:"Please enter your <strong>last name</strong>."});
	else alertField(ln,{id:"last_name"},true);

	if (!inputHasValue(e)) ok = alertField(e,{id:"email",message:"Please enter your <strong>email</strong> address."});
	else if (!strContains(e.val(),["@","."])) ok = alertField(e,{id:"email",message:"Please enter a valid <strong>email</strong> address."});
	else alertField(e,{id:"email"},true);
	
	if (g.attr("type") == "radio")
		{
		if (!g[0].checked && !g[1].checked) ok = alertField(g,{id:"gender",message:"Please select <strong>male</strong> or <strong>female</strong>."});
		else alertField(g,{id:"gender"},true);
		}
	else
		{
		if (!g.val()) ok = alertField(g,{id:"gender",message:"Please select <strong>male</strong> or <strong>female</strong>."});
		else alertField(g,{id:"gender"},true);
		}
	
	if (!by.val()) ok = alertField(by,{id:"birthdate",message:"Please select the <strong>year</strong> in which you were born."});
	else alertField(by,{},true);
	if (!bm.val()) ok = alertField(bm,{id:"birthdate",message:"Please select the <strong>month</strong> in which you were born."});
	else alertField(bm,{},true);
	if (!bd.val()) ok = alertField(bd,{id:"birthdate",message:"Please select the <strong>day</strong> on which you were born."});
	else alertField(bd,{},true);
	if (bm.val() && bd.val() && by.val()) alertField(by,{id:"birthdate"},true);
	
	if (!inputHasValue(z)) ok = alertField(z,{id:"zip",message:"Please enter your <strong>zip code</strong>."});
	else if (!strHasLengthOf(z.val(),[5,6,9,10])) ok = alertField(z,{id:"zip",message:"Please enter a <strong>valid US/Canadian zip code (no dashes)</strong>."});
	else alertField(z,{id:"zip"},true);

	if (ok && !check_only)
		{
		if (typeof(visit_history) == "object") visit_history.current_visit.registered = true;
		if (typeof(loadProcessingOverlay) == "function") loadProcessingOverlay({loading_copy:"Processing...",bg_color:"#000000",bg_alpha:"85"});
		}

	return ok;
	}

function alertField(jobj,err,pass)
	{
	var err_elm = jobj.parents("form:first").find(".error."+err.id);
	if (pass)
		{
		jobj.removeClass("highlight");
		jobj.addClass("successful");
		if (err.id) err_elm.html("");
		if (err_elm.hasClass("dblock")) err_elm.fadeOut(300);
		return true;
		}
	else
		{
		jobj.removeClass("successful");
		jobj.addClass("highlight");
		err_elm.html(err.message);
		if (err_elm.hasClass("dblock")) err_elm.fadeIn(300);
		return false;
		}
	}

var reg_exp_bad_age_chars = new RegExp("[^0-9]","g");
var reg_exp_bad_name_chars = new RegExp("[^a-zA-Z\-\' ]","g");
var reg_exp_bad_email_chars = new RegExp("[^a-zA-Z0-9_@\+\-\.]","g");
var reg_exp_bad_zip_chars = new RegExp("[^a-zA-Z0-9]","g");
var reg_exp_perimeter_spaces = new RegExp("^( )+|( )+$","g");
var reg_exp_consecutive_spaces = new RegExp(" +","g");

function fixAge(age)
	{
	var max = 120;
	age = age ? age+"" : "";
	age = age.substring(0,3);
	age = age.replace(reg_exp_bad_age_chars,"");
	if (age && age > max) age = age.substring(0,2);
	return age;
	}

function fixName(name)
	{
	name = name ? name+"" : "";
	name = name.replace(reg_exp_perimeter_spaces,"");
	name = name.replace(reg_exp_consecutive_spaces," ");
	name = name.replace(reg_exp_bad_name_chars,"");
	var lcase = name.toLowerCase();
	if (lcase == "firstname" || lcase == "lastname" || lcase == "theirfirstname" || lcase == "theirlastname") name = "";
	return name;
	}

function fixEmail(email)
	{
	email = email ? email+"" : "";
	return email.replace(reg_exp_bad_email_chars,"");
	}

function fixZip(zip)
	{
	zip = zip ? zip+"" : "";
	return zip.replace(reg_exp_bad_zip_chars,"");
	}

function inputHasValue(jobj)
	{
	if (!jobj.val() || (jobj.attr("type") != "hidden" && jobj.val() == jobj[0].defaultValue)) return false;
	return true;
	}

function strHasLengthOf(str,l_arr)
	{
	for (var i=0;i<l_arr.length;i++)
		{
		if (str.length == l_arr[i]) return true;
		}
	return false;
	}

function strContains(val,str_arr)
	{
	val = typeof(val) == "object" ? val.value : (val || "");
	for (var i=0;i<str_arr.length;i++)
		{
		if (val.indexOf(str_arr[i]) == -1) return false;
		}
	return true;
	}

img_cache = new Image();
img_cache.src = "http://a1.mylife.com/a/landa/i/processing_overlay_logo.gif";
img_cache = new Image();
img_cache.src = "http://a1.mylife.com/a/landa/i/processing_overlay_loader.gif";
function load_processing_overlay(params)
	{
	if (typeof(params) != "object") var params = {};
	var bg_color = params["bg_color"] || "#000000";
	var bg_alpha = (params["bg_alpha"] || 85)*1;
	var loading_copy = params["loading_copy"] || "Processing...";
	
	var bg = document.createElement("div");
	bg.style.position = "absolute";
	bg.style.right = "0px";
	bg.style.top = "0px";
	var w_wh = getWidthHeightOfWindow();
	var b_wh = getWidthHeightOfDocument();
	if (w_wh[0] > b_wh[0]) b_wh[0] = w_wh[0];
	if (w_wh[1] > b_wh[1]) b_wh[1] = w_wh[1];
	bg.style.width = b_wh[0]+"px";
	bg.style.height = b_wh[1]+"px";
	bg.style.opacity = bg_alpha/100;
	bg.style.filter = "alpha(opacity="+bg_alpha+")";		
	bg.style.backgroundColor = bg_color;
	bg.style.zIndex = "9999";
	
	var msg = document.createElement("div");
	msg.id = "processing_overlay";
	msg.setAttribute("id","processing_overlay");
	msg.style.position = "absolute";
	msg.style.left = "-1000px";
	msg.style.zIndex = "10000";
	msg.innerHTML = '<img src="http://a1.mylife.com/a/landa/i/processing_overlay_logo.gif" alt="MyLife.com" width="96" height="58" /><br />';
	msg.innerHTML += '<img src="http://a1.mylife.com/a/landa/i/processing_overlay_loader.gif" alt="loading..." width="128" height="15" /><br />';
	msg.innerHTML += loading_copy;
	
	var dbody = document.getElementsByTagName("body")[0];
	dbody.insertBefore(bg,dbody.getElementsByTagName("*")[0]);
	dbody.insertBefore(msg,bg);

	var window_center = getCenterOfScreen();
	var msg_wh = getWidthHeightOf(msg);
	msg.style.left = window_center[0]-msg_wh[0]/2+"px";
	msg.style.top = window_center[1]-msg_wh[1]/2+"px";
	}

function hsOnSubmit(formElm)
	{
	if (formElm.name.value == formElm.name.defaultValue) formElm.name.value = "";
	if (formElm.state.value == "--") formElm.state.value = "";
	if (!formElm.name.value && !formElm.state.value) return false;
	}

function setCurrent(input_field)
	{
	cutil.setClass(input_field,"current");
	}

function removeCurrent(input_field)
	{
	cutil.removeClass(input_field,"current");
	}

function maidenSelectOnChange(select)
	{
	maidenOnChange(select);
	}

function maidenOnChange(inp)
	{
	var getSRValue = function(elm)
		{
		if (typeof(elm.value) != "undefined") return elm.value;
		for (var i=0;i<elm.length;i++)
			{
			if (elm[i].checked) return elm[i].value;
			}
		}
	var gender = typeof(inp) == "string" ? document.getElementById(inp).gender : inp;
	if (getSRValue(gender) == "2") showMaiden();
	else hideMaiden();
	}

function showMaiden()
	{
	var m = document.getElementById("maiden");
	if (m) m.style.display = "block";
	}

function hideMaiden()
	{
	var m = document.getElementById("maiden");
	if (m) m.style.display = "none";
	}
	
function inputOnBlur(formID)
	{
	if (typeof(formID) == "string")
		{
		var tform = document.getElementById(formID);
		if (tform.submittedOnce)
			{
			if (formID == "regForm") regOnSubmit(tform,true);
			else formOnSubmit(tform,true);
			}
		}
	else
		{
		var elm = formID;
		if (!elm.value && elm.value != elm.defaultValue)
			{
			elm.value = elm.defaultValue;
			cutil.setClass(elm,"example");
			}
		}
	}

function inputOnFocus(elm)
	{
	if (elm.value == elm.defaultValue)
		{
		elm.value = "";
		cutil.removeClass(elm,"example");
		}
	}

function btnOver(btnCont)
	{
	btnCont.getElementsByTagName("input")[0].style.visibility = "visible";
	}

function btnOut(btnCont)
	{
	btnCont.getElementsByTagName("input")[0].style.visibility = "hidden";
	}

function hasValue(field)
	{
	if (!field.value || (field.type != "hidden" && field.value == field.defaultValue)) return false;
	return true;
	}

function isAlpha(val)
	{
	val = (typeof(val) == "object") ? (val.value || "") : (val || "");
	var reg_exp = new RegExp("[a-zA-Z\-]");
	for (var i=0;i<val.length;i++)
		{
		if (!reg_exp.test(val.charAt(i))) return false;
		}
	return true;
	}

function radioChecked(field)
	{
	for (var i=0;i<field.length;i++)
		{
		if (field[i].checked) return true;
		}
	return false;
	}

function hasLengthOf(elm,l_arr)
	{
	for (var i=0;i<l_arr.length;i++)
		{
		if (elm.value.length == l_arr[i]) return true;
		}
	return false;
	}

function containsStrings(val,str_arr)
	{
	val = typeof(val) == "object" ? val.value : (val || "");
	for (var i=0;i<str_arr.length;i++)
		{
		if (val.indexOf(str_arr[i]) == -1) return false;
		}
	return true;
	}

function maximizeWindow(relocate,set_width,set_height)
	{
	set_width = set_width || 9999;
	set_height = set_height || 9999;
	if (screen.availWidth || screen.width)
		{
		var max_width = screen.availWidth || screen.width;
		var max_height = screen.availHeight || screen.height;
		var new_width = (!set_width || max_width < set_width) ? max_width : set_width;
		var new_height = (!set_height || max_height < set_height) ? max_height : set_height;
		if (window.resizeTo) window.resizeTo(new_width,new_height);
		else if (window.outerWidth)
			{
			window.outerWidth = new_width;
			window.outerHeight = new_height;
			}
		}
	if (relocate)
		{
		if (window.moveTo) window.moveTo(0,0);
		else if (window.screenX)
			{
			window.screenX = 0;
			window.screenY = 0;
			}
		}
	}

function allowOnly(e,allowables)
	{
	if (typeof(allowables) == "string") allowables = [allowables];
	e = e || window.event;
	var key = String.fromCharCode(e.which || e.keyCode);
	var re = "";
	for (var i=0;i<allowables.length;i++)
		{
		switch (allowables[i])
			{
			case "numeric" : allowables[i] = "0-9";break;
			case "alpha" : allowables[i] = "a-zA-Z";break;
			case "|" : allowables[i] = "\|";break;
			case "-" : allowables[i] = "\-";break;
			case "+" : allowables[i] = "\+";break;
			//case "\\" : allowables[i] = "\\";break;
			case "." : allowables[i] = "\.";break;
			case "$" : allowables[i] = "\$";break;
			case "^" : allowables[i] = "\^";break;
			case "?" : allowables[i] = "\?";break;
			}
		re += allowables[i];
		}
	var reg_exp = new RegExp("["+re+"]");
	return reg_exp.test(key);
	}

function fireRegOpenedPixel()
	{
	if (typeof(global_regopenedpx) == "undefined")
		{
		var px = new Image();
		px.src = "http://r.casalemedia.com/j.gif?u=123830&s=2";
		global_regopenedpx = true;
		}
	}

function addEventHandler(to_element,event,handler)
	{
	if (typeof(handler)=="string") handler = Function(handler);
	var f = event.substr(0,2);
	var e = (f=="on"||f=="On"||f=="ON"||f=="oN") ? event.substr(2) : event;
	to_element.addEventListener ? to_element.addEventListener(event,handler,false) : to_element.attachEvent("on"+event,handler);
	}

function stop_tab(e)
	{
	e = e || window.event;
	var key_code = e.which || e.keyCode;
	if (key_code == 9) return false;
	}

function getWidthHeightOf(element)
	{
	var w = 0;
	var h = 0;
	if (element.clientWidth && element.clientHeight)
		{
		w = element.clientWidth;
		h = element.clientHeight;
		}
	return [w,h];
	}

function getWidthHeightOfWindow()
	{
	var w = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0;
	var h = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0;
	return [w,h];	
	}

function getWidthHeightOfDocument()
	{
	var w = 0;
	var h = 0;
	var b = document.getElementsByTagName("body")[0];
	w = b.offsetWidth;
	h = b.offsetHeight;
	return [w,h];	
	}

function getScrollHeight()
	{
	return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
	}

function getCenterOfScreen()
	{
	var scrollHeight = getScrollHeight();
	var wh_window = getWidthHeightOfWindow();
	var x = wh_window[0]/2;
	var y = wh_window[1]/2+scrollHeight;
	return [x,y];
	}

function selectOptionWithValue(sel,val)
	{
	for (var i=0;i<sel.length;i++) sel[i].selected = false;
	for (var i=0;i<sel.length;i++)
		{
		if (sel[i].value == val)
			{
			sel[i].selected = true;
			return sel[i];
			}
		}
	return null;
	}

function str_contains(str,what)
	{
	return str.indexOf(what) != -1;
	}

function addScript(url)
	{
	var new_script = document.createElement("script");
	new_script.setAttribute("type","text/javascript");
	new_script.setAttribute("src",url);
	var document_heads = document.getElementsByTagName("head");
	if (document_heads[0]) document_heads[0].appendChild(new_script);
	}

function getURLVars()
	{
	var url = ((typeof(window.location) == "string") ? window.location : window.location.href) || "";
	var var_string = url.split("?")[1] || "";
	var var_pairs = var_string.split("&");
	var get_object = new Object();
	for (var i=0;i<var_pairs.length;i++)
		{
		var pair = var_pairs[i].split("=");
		if (pair.length == 2) get_object[pair[0]] = pair[1];
		}
	return get_object;
	}

$_GET = getURLVars();