function go(url) { if(url != '') { self.location.href = url; return false; } return true; }
function createCookie(name, value, days) { if(days > 0) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else expires = ""; document.cookie = name+"="+value+expires+"; path=/"; }
function createShortCookie(name, value, secs) { if(secs > 0) { var date = new Date(); date.setTime(date.getTime()+(secs*1000)); var expires = "; expires="+date.toGMTString(); } else expires = ""; document.cookie = name+"="+value+expires+"; path=/"; }
function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=ca.length-1; i > 0; i--) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; }
function deleteCookie(name, path, domain) { document.cookie = name+'='+( ( path ) ? ";path=" + path : "") + ( ( domain ) ? ";domain=" + domain : "" ) + '; expires=Thu, 01-Jan-70 00:00:01 GMT;'; }

if(!window.SForm) { var SForm = new Object(); }
Object.extend(SForm,
	{
		serialize: function(form) {
				var f = $(form);
				if(f)
				{
					var s = f.serialize(true);
					$A(f.getInputs('checkbox')).each(function(e){if(e.name.match(/_flag/) && $F(e) != 'Y')s[e.name]='N';});
					$A(Form.getElements(f)).each(function(e){e.value = e.value.replace( /\u2018/g, "'" ); e.value = e.value.replace( /\u2019/g, "'" ); e.value = e.value.replace( /\u201c/g, '"' ); e.value = e.value.replace( /\u201d/g, '"' ); e.value = e.value.replace( /\u2013/g, '-' ); e.value = e.value.replace( /\u2014/g, '--' ); });
					return s;
				} return $H();
			},
		show: function(ids) { ids.each(function(e){if($(e))Element.show(e);}); },
		hide: function(ids) { ids.each(function(e){if($(e))Element.hide(e);}); },
		require: function(ids,message)
		{
			var valid=true;
			$A(ids).each(
				function(e){
					if($(e) && actuallyVisible(e)){
						SForm.clearError(e);
						if($F(e)==''){
							SForm.addError(e,(message ? message : 'Required'));
							valid = false;
						}
					}
				}
			);
			return valid;
		},
		valid: function(id, valid_func, message) { if($(id) && !valid_func($F(id))){SForm.addError(id,message);return false;}return true; },
		addMessage: function(id, msg) { if($(id)){new Insertion.Bottom($(id).parentNode,'<small class="message">'+msg+'</small>');SForm.clearOnChange(id);} },
		clearMessage: function(id) { if($(id)){$A($(id).parentNode.getElementsByTagName('small')).each(function(e){if(e.hasClassName('message'))e.remove();});} },
		addError: function(id, error) { if($(id)){$(id).parentNode.addClassName('error');new Insertion.Bottom($(id).parentNode,'<small class="error">'+error+'</small>');SForm.clearOnChange(id);} },
		clearError: function(id) { if($(id) && $($(id).parentNode)){$($(id).parentNode).removeClassName('error');$A($($(id).parentNode).getElementsByTagName('small')).each(function(e){if($(e) && $(e).hasClassName('error'))e.remove();});} },
		clearOnChange: function(id) { if($(id))Event.observe(id,'change',function(e){SForm.clearError(Event.element(e));SForm.clearMessage(Event.element(e));}); },
		makeCurrent: function(id,c,o) { $A(o).each(function(e){if($(e))$(e).removeClassName(c);});if($(id))$(id).addClassName(c); },
		makeCurrentInList: function(id) { if($(id) && $(id).up('ul')) SForm.makeCurrent(($(id).match('li')?$(id):$(id).up('li')),'current',$(id).up('ul').descendants()); },
		addDefault: function(id,v) { if($(id) && ($F(id)=='' || $F(id)==v) && $(id).addClassName){$(id).addClassName('defaultText');$(id).value=v;} },
		removeDefault: function(id) { if($(id) && $(id).hasClassName('defaultText')){$(id).value='';$(id).removeClassName('defaultText');} },
		addFormats: function(obj) { $H(obj).each(function(p){if($(p.key) && p.value)Event.observe(p.key,'change',function(e){$(p.key).value=p.value($F(p.key))});}); },
		addTriggers: function(obj) { $H(obj).each(function(p){if($(p.key) && p.value)Event.observe(p.key,(($(p.key).type=='checkbox'||$(p.key).type=='radio')?'click':'change'),function(e){p.value();});}); },
		addDefaults: function(obj) { $H(obj).each(function(p){if($(p.key) && p.value){SForm.addDefault(p.key,p.value);Event.observe(p.key,'focus',function(e){SForm.removeDefault(p.key);});Event.observe(p.key,'blur',function(e){SForm.addDefault(p.key,p.value);});}}); },
		addSubmit: function(f,func) { if($(f) && func)Event.observe(f,'submit',function(e){func();Event.stop(e);}); },
		setup: function(f,func,formats,triggers,defaults) { SForm.addFormats(formats || {}); SForm.addTriggers(triggers || {}); SForm.addDefaults(defaults || {}); SForm.addSubmit(f,func); },
		setupForm: function(f,params)
		{
			var options = {
					submit: null,
					validate:null,
					formats: null,
					triggers: null,
					defaults: null
				};
			Object.extend(options, params || {});
			f = $(f);
			if(f)
			{
				SForm.setup(f,
							function(){
								var valid = true;
								if(!SForm.require(f.select('div.required input'))) valid = false;
								if(!SForm.require(f.select('div.required select'))) valid = false;
								if(!SForm.require(f.select('div.required textarea'))) valid = false;
								if(options.validate) { if(!options.validate(f)) valid = false; }
								if(valid) submitForm(f, f.action, options.submit);
							}, options.formats, options.triggers, options.defaults);
			}
		}
	});

function actuallyVisible(obj)
{
	obj = $(obj);
	if(obj && obj.visible())
	{
		var v = true;
		$A(obj.ancestors()).each(function(o){if(!o.visible())v=false;});
		return v;
	}
	return false;
}

if(!window.Format) { var Format = new Object(); }
Object.extend(Format,
	{
		number: function(val) { try { return val.replace(/[^0-9]/g, ""); } catch(e) { return ''; } },
		decimal: function(val) { try { return val.replace(/[^0-9.]/g, ""); } catch(e) { return ''; } },
		ppnumber: function(val) { try { val = val.toString().replace(/[^0-9]/g, ""); if(val.length > 3) { while(/(\d+)(\d{3})/.test(val)) { val = val.replace(/(\d+)(\d{3})/, '$1,$2'); } } return val; } catch(e) { return '0'; } },
		phone: function(val) { try { var v = Format.number(val); if(v.length < 10) return val; else return '('+v.substring(0, 3)+') '+v.substring(3, 6)+'-'+v.substring(6, v.length); } catch(e) { return ''; } },
		date: function(val) { try { var p = parseDate(val); if(p != null) return formatDate(p, 'MM/dd/yyyy'); else return ''; } catch(e) { return ''; } },
		expdate: function(val) { try { var p = parseDate(val); if(p != null) return formatDate(p, 'MM/yy'); else return ''; } catch(e) { return ''; } }
	});

if(!window.Valid) { var Valid = new Object(); }
Object.extend(Valid,
	{
		username: function(val) { return(val.length > 5); },
		password: function(val) { return(val.length > 5); },
		email: function(val) { return val.match(/^[a-zA-Z0-9_.-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z0-9]{2,4}$/); },
		zip: function(val) { return(val.length == 5); },
		date: function(val) { return(parseDate(val)!=null); },
		cvn: function(val) { return(val.length == 3 || val.length == 4); },
		cc: function(val) { if(val.length < 12) return false; var i, j, prod; var sum = 0; for(i = 0; i <val.length; i++) { if((i % 2) != (val.length % 2)) sum += parseInt(val.charAt(i)); else { prod = parseInt(val.charAt(i)) * 2; sum += prod % 10; if(prod >= 10) sum += 1; } } if((sum % 10) == 0) return true; else return false; }
	});

function fetch(id, url, opts)
{
	if($(id))
	{
		var options = {
			method:'get',
			parameters:$H(),
			evalScripts:true,
			onComplete:null,
			insertion:null};
		Object.extend(options, opts || {});
		if($(id).innerHTML == '') $(id).innerHTML = '<div class="loader"><span>Loading...</span></div>';

		if(options.insertion == 'replace')
		{
			options.insertion = null;
			options.onSuccess = function(e){$(id).replace(e.responseText);};
			options.evalJS = true;
			new Ajax.Request(url, options);
		} else {
			new Ajax.Updater(id, url, options);
		}
	}
}

function ajax(url, params)
{
	var options = {
			method: 'post',
			parameters: $H(),
			encoding: 'UTF-8',
			contentType: 'application/x-www-form-urlencoded',
			success: '',
			error: '',
			onComplete:null,
			onSuccess:null,
			onError:null,
			on304:null};
	Object.extend(options, params || {});
	new Ajax.Request(url,
					 {
						 method:options.method,
						 encoding:options.encoding,
						 evalJSON:true,
						 contentType:options.contentType,
						 parameters:options.parameters,
						 onComplete:options.onComplete,
						 onSuccess:function(e)
						 	{
								var resp = e.responseJSON;
								if(resp.transfer && resp.transfer != '') go(resp.transfer);

								if(resp.message && resp.message.length > 0 && options.success!='' && $(options.success))
								{
									$(options.success).innerHTML = '';
									$A(resp.message).each(function(v){$(options.success).innerHTML+=v+'<br />';});
									Element.show(options.success);
								} else {
									if(options.success!='' && $(options.success)) Element.hide(options.success);
								}

								if(resp.error && resp.error.length > 0 && options.error!='' && $(options.error))
								{
									$(options.error).innerHTML = '<a href="#" onclick="$(this).up().hide();return false;" class="close"><span>X</span></a>';
									$A(resp.error).each(function(v){$(options.error).innerHTML+=v+'<br />';});
									Element.show(options.error);
								} else {
									if(options.error!='' && $(options.error)) Element.hide(options.error);
								}

								if(resp.success)
								{
									if(options.onSuccess) options.onSuccess(e);
								} else {
									if(options.onError) options.onError(e);
								}
							},
						 onFailure:function(e)
						 	{
								if(options.error!='' && $(options.error)) Element.show(options.error);
								if(options.onError) options.onError();
							},
						on304:function(e)
							{
								if(options.on304) options.on304();
							}
					});
}

function submitForm(form, url, params)
{
	form = $(form);
	if(form)
	{
		var options = {
				altFunc:null,
				method: 'post',
				encoding: 'UTF-8',
				contentType: 'application/x-www-form-urlencoded',
				button: form.down('.submit input'),
				success: form.up().down('p.message'),
				error: form.up().down('p.error'),
				parameters:$H(),
				hideOnSuccess:false,
				onSuccess:null,
				onError:null,
				onComplete:null};
		Object.extend(options, params || {});

		form.addClassName('submitting');
		if(options.altFunc != null) return options.altFunc();

		ajax(url,
			 {
				method:options.method,
				encoding:options.encoding,
				contentType:options.contentType,
				parameters:options.parameters.merge(SForm.serialize(form)),
				success:options.success,
				error:options.error,
				onSuccess:function(r)
							{
								form.removeClassName('submitting');
								if(options.hideOnSuccess) form.hide();
								if(options.onComplete)options.onComplete(r);
								if(options.onSuccess)options.onSuccess(r);
							},
				onError:function(r)
							{
								form.removeClassName('submitting');
								if(options.onComplete)options.onComplete(r);
								if(options.onError)options.onError(r);
							}
			});
		if(pageTracker) pageTracker._trackPageview("/submit/"+form.id);
		return true;
	}
	return false;
}
