var Img = new Object();
var MasterFly = new Object();

LoadImgs('tophome', 'topabout', 'topcontact', 'topprint', 'topsend', 'sidenav', 'sidenavon', 'expand', 'expandon');
LoadImgs('spacer', 'required', 'requiredsmall', 'ok', 'oksmall', 'warning', 'warningsmall', 'btnadd', 'btnedit', 'btndelete', 'btncopy', 'btntoggle');

function LoadImgs() {
	var i, n, s;
	for (i = 0; i < arguments.length; i++) {
		n = arguments[i];
		Img[n] = new Image();
		Img[n].src = '/_/img/main/' + n + '.gif';
		s = n.substr(0, 3);
		if (s == 'btn' || s == 'top' || s == 'nav') {
			Img[n + 'on'] = new Image();
			Img[n + 'on'].src = '/_/img/main/' + n + 'on.gif'
		}
	}
}

function GoogleSearch(f) {
	document.location='http://www.google.com/search?hl=en&q='+escape(f.q.value)+'+site%3Achicagowebstudios.com';
	return false;
}

function On(o) {
	o.src = o.src.replace(/on\.(gif|jpg)/, '.$1').replace(/\.(gif|jpg)/, 'on.$1');
}

function Off(o) {
	o.src = o.src.replace(/on\.(gif|jpg)/, '.$1');
}

function Expand(o) {
	var i, b;
	b = o.src.search(/on\.gif/) > -1;
	if (b) Off(o);
	else On(o);
	for (i = 1; i < arguments.length; i++) document.getElementById(arguments[i]).style.display = b ? 'none' : 'block';
}

function ExpandTo(f) {
	var i, n;
	n = f.name;
	i = 0;
	while (document.getElementById(n + i)) {
		document.getElementById(n + i).style.display = Get(f) > i ? 'block' : 'none';
		i++;
	}
}

function ConfirmCancel(f) {
	return f.NumberOfChanges.value * 1 < 1 || confirm('Are you sure you want to discard the changes you have made?');
}

function DisplayError(m) {
	if (m != '') alert('Please correct the following and re-submit:\n\n' + m);
	return m == '';
}

function ConfirmSavePassword(f) {
	if (f.checked) f.checked = confirm('Saving your password allows anyone to automatically log in from your computer.\nThis is only a good option if you are the only person who has access to that computer.\nIf you do not want the security risk of saving your password, please click "Cancel".\nOtherwise, click "OK".')
}

function FocusField(f) {
	if (f.type) {
		f.focus();
		if (f.type == 'text') f.select();
	}
}

function CheckField(f, r, k, m, g) {
	var f2, i, j, l, n, o, p, s;
	f.form.NumberOfChanges.value++;
	s = f.name;
	if (s.indexOf('_DateInput') > -1) {
		f2 = f.form[s.replace(/_DateInput/, '_TimeInput')];
		k = k && (IsTime(f2) || OkEmpty(r, f2));
	}
	if (s.indexOf('_TimeInput') > -1) {
		f2 = f.form[s.replace(/_TimeInput/, '_DateInput')];
		k = k && (IsDate(f2) || OkEmpty(r, f2));
	}
	s = s.replace(/_(Date|Time)Input/, '');
	p = f.form.name + '_';
	i = document[p + s];
	if (i) n = i.src;
	n = (k ? r ? 'ok' : 'spacer' : (n.search(/\/required/) > -1 && m == 0) ? 'required' : 'warning') + (n.search(/small\./) > -1 ? 'small' : '');
	if (!m && n.charAt(0) == 'o' && f.className != 'Ok') f.className = 'Ok';
	if (i) {
		i.src = Img[n].src;
		o = MasterFly;
		for (l in o) for (j in o[l]) if (o[l][j] == s) CheckMaster(l, s);
	}
	if (k) return m ? '' : true;
	if (m) {
		f.className = (n.charAt(0) == 'w') ? 'Warning' : 'Ok';
		if (g == '') {
			if (f.type != 'hidden') {
				f.focus();
				if (f.type == 'text') f.select();
			}
		}
		return '  -->  ' + m + '\n';
	}
	return false;
}

function CheckMaster(p, n) {
	var a, i, r, s;
	a = MasterFly[p];
	s = 'ok';
	for (i = 0; i < a.length; i++) {
		r = document.images[p.replace(/_.*/, '_' + a[i])].src
		if (r.search(/\/required/) > -1 && s == 'ok') s = 'required';
		if (r.search(/\/warning/) > -1) s = 'warning'; 
	}
	document.images[p].src = Img[s].src;
}

function SplitField(f, n) {
	return f.form[f.name.substr(0, f.name.length - 1) + n];
}

function CheckAddress(f, r, l, m, n) {
	var a, b, v;
	a = SplitField(f, 1);
	b = SplitField(f, 2);
	v = a.value + b.value;
	return CheckField(a, r, (IsText(a) || !r) && v.length < l, m, n);
}

function CheckCardNumber(f, r, m, n) {
	var v = Numerals(f.value).replace(/[^\d]*(\d{4})[^\d]*(\d{4})[^\d]*(\d{4})[^\d]*(\d{4})[^\d]*/, '$1 $2 $3 $4');
	if (v != f.value) f.value = v;
	return CheckField(f, r, IsCCNumber(f) || OkEmpty(r, f), m, n);
}

function CheckCheckbox(f, r, m, n) {
	return CheckField(f, r, f.checked || !r, m, n);
}

function CheckCurrency(f, r, m, n) {
	return CheckField(f, r, IsCurrency(f) || OkEmpty(r, f), m, n);
}

function CheckDate(f, r, m, n) {
	return CheckField(f, r, IsDate(f) || OkEmpty(r, f), m, n);
}

function CheckEmail(f, r, m, n) {
	return CheckField(f, r, (IsEmail(f) || OkEmpty(r, f)), m, n);
}

function CheckExpirationDate(f, r, m, n) {
	var a = SplitField(f, 1);
	var b = SplitField(f, 2);
	return CheckField(a, r, IsExpirationDate(a, b) || OkEmpty(r, a) && OkEmpty(r, b), m, n);
}

function CheckFloat(f, r, m, n) {
	return CheckField(f, r, IsFloat(f) || OkEmpty(r, f), m, n);
}

function CheckInteger(f, r, m, n) {
	return CheckField(f, r, Between(f) || OkEmpty(r, f), m, n);
}

function CheckPassword(f, r, m, n) {
	f1 = SplitField(f, 1);
	f2 = SplitField(f, 2);
	CheckField(f1, r, IsPassword(f1) || OkEmpty(r, f2));
	return CheckField(f2, r, IsPassword(f1) && IsPassword(f2) && f1.value == f2.value || OkEmpty(r, f1) && OkEmpty(r, f2), m, n);
}

function CheckPhone(f, r, m, n) {
	x = /[^\d]*([\d]{3})[^\d]*([\d]{3})[^\d]*([\d]{4})[^\d]*/;
	if (IsMatch(f.value, x)) f.value = f.value.replace(x, '$1-$2-$3');
	return CheckField(f, r, IsPhone(f) || OkEmpty(r, f), m, n);
}

function CheckText(f, r, m, n) {
	return CheckField(f, r, IsText(f) || !r, m, n);
}

function CheckEither(f, f2, r, m, n) {
	return CheckField(f, r, IsText(f) || IsText(f2) || !r, m, n);
}

function CheckTime(f, r, m, n) {
	return CheckField(f, r, IsTime(f) || OkEmpty(r, f), m, n);
}

function CheckWYSIWYG(f, r, m, n) {
	return CheckField(f, r, !IsEmptyWYSIWYG(f) || !r, m, n);
}

function CheckYesNo(f, r, m, n) {
	return CheckField(f, r, f.form[f.name][0].checked || f.form[f.name][1].checked || !r, m, n);
}

function CheckZip(f, r, m, n) {
	x = /[^\d]*([\d]{5})[^\d]*([\d]{4})[^\d]*/;
	if (IsMatch(f.value, x)) f.value = f.value.replace(x, '$1-$2');
	return CheckField(f, r, IsZip(f) || OkEmpty(r, f), m, n);
}

function PickDate(f, r) {
	var newWin = window.open('/Includes/Pages/Dt.asp?FIELD=' + escape(f) + '&setting=' + escape(eval('document.' + f + '.value')) + '&REQUIRED=' + r, 'Dt', 'LEFT=300,TOP=150,WIDTH=200,HEIGHT=240,RESIZABLE=yes,SCROLLBARS=no,status=0');
	if (newWin != null && newWin.opener == null) newWin.opener = self;
	newWin.focus();
}

function PickTime(f, r) {
	var newWin = window.open('/Includes/Pages/Time.asp?FIELD=' + escape(f) + '&setting=' + escape(eval('document.' + f + '.value')) + '&REQUIRED=' + r, 'Time', 'LEFT=280,TOP=120,WIDTH=240,HEIGHT=300,RESIZABLE=yes,SCROLLBARS=no,status=0');
	if (newWin != null && newWin.opener == null) newWin.opener = self;
	newWin.focus();
}

function GetIndex(a, v) {
	for (var i = 0; i < a.length; i++) if (v == a[i]) return i;
	return -1;
}

function Get(f) {
	var t = f.type;
	if (InArray(t, ['text', 'hidden', 'file', 'textarea', 'password'])) {
		return f.value;
	} else if (t == "select-one") {
		return f[f.selectedIndex].value;
	} else if (t == "checkbox") {
		return f.checked ? f.value : '';
	} else if (isNaN(t)) {
		if (isNaN(f.length) && f.checked) return f.value;
		for (i = 0; i < f.length; i++) if (f[i].checked) return f[i].value;
		return '';
	}
	return f.value;
}

function Set(f, v) {
	var i, t; 
	t = f.type;
	if (InArray(t, ['text', 'hidden', 'file', 'textarea', 'password'])) {
		f.value = v;
	} else if (t == "select-one") {
		for (i = 0; i < f.length; i++) if (f[i].value == v) f.selectedIndex = i;
	} else if (t == "checkbox") {
		f.checked = v;
	} else if (isNaN(t)) {
		if (isNaN(f.length)) {
			f.checked = (f.value == v);
		} else {
			for (i = 0; i < f.length; i++) f.checked = (f.value == v);
		}
	} else {
		f.value = v;
	}
}

function Trim(s) {
	s += '';
	while (InArray(s.substring(0, 1), [' ', '\r', '\n'])) s = s.substring(1, s.length);
	while (InArray(s.substring(s.length - 1, s.length), [' ', '\r', '\n'])) s = s.substring(0, s.length - 1);
	return s;
}

function Alphas(s) {
	return s.replace(/[^A-Z]/g, '');
}

function Numerals(s) {
	return s.replace(/[^0-9]/g, '');
}

function IsMatch(v, r) {
	return v != '' && v.replace(r, '') == '';
}

function HasMatch(v, r) {
	return v != '' && v.replace(r, '') != v;
}

function Between(i, a, b) {
	return i >= a && i <= b;
}

function InArray(x, a) {
	for (i = 0; i < a.length; i++) if (a[i] == x) return true;
	return false;
}

function EmptyField(f) {
	return Empty(Get(f));
}

function Empty(s) {
	return s == null || Trim(s) == '';
}

function OkEmpty(r, f) {
	return !r && EmptyField(f);
}

function IsText(f) {
	return !EmptyField(f);
}

function IsEmptyWYSIWYG(f) {
	return f.value.replace(/(<P>|&nbsp;|\s|<\/P>)/gi, '') == '';
}

function IsZip(f) {
	return IsMatch(Get(f), Get(f).indexOf('-') > 0 ? /^\d{5}-\d{4}$/ : /^\d{5}$/);
}

function IsPhone(f) {
	return IsMatch(Get(f), /\d{3}-\d{3}-\d{4}/);
}

function IsEmail(f) {
	return IsMatch(Get(f), /^([^$@\\ ]+)@((([^$@\\ \.]+)\.)*)([^$@\\ \.]{2,}\.)([A-Za-z]{2,6})$/);
}

function IsEmailList(f) {
	v = Get(f).replace(/[ ]?[;,][ ]?/gi, ',');
	a = v.split(",");
	for (i = 0; i < a.length; i++) {
		if (IsEmail(a[i])) return false;
		if (!IsMatch(a[i], /^([^$@\\ ]+)@((([^$@\\ \.]+)\.)+)([A-Za-z0-9]+)$/)) return false;
	}
	f.value = v;
	return true;
}

function IsURL(f) {
	return IsMatch(Get(f), /^http(s?):\/\/([^$@\\ ]+)$/i);
}

function IsPassword(f) {
	return Get(f).length > 5;
}

function Between(f) {
	return IsMatch(Get(f), /^(\+|\-)?([0-9]+)$/);
}

function IsFloat(f) {
	return IsMatch(Get(f), /^(\+|\-)?([0-9]+)(((\.|\,)?([0-9]+))?)$/);
}

function IsCurrency(f) {
	return IsMatch(Get(f), /^(([0-9]{1,3}([\,]?[0-9]{3})*)|([0-9]{0,3}))(\.[0-9]{2})?$/);
}

function IsDate(f) {
	v = Get(f).replace(/-/g, '/');
	a = v.split('/');
	if (a.length != 3) return false;
	if (isNaN(m = parseInt(a[0])) || isNaN(d = parseInt(a[1])) || isNaN(y = parseInt(a[2]))) return false;
	a  = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	y = y < 41 ? y + 2000 : y < 100 ? y + 1900 : y;
	if (IsLeapYear(y)) a[1]++;
	return Between(m, 1, 12) && Between(d, 1, a[m - 1]);
}

function IsLeapYear(y) {
	return !(y % 4) && (y % 100 || !(y % 400));
}

function IsTime(f) {
	v = Trim(Get(f)).toUpperCase();
	if (v.replace(/[:AM]/, '') == v) return false;
	if (!IsMatch(v, /[012]?[0-9](:[012345][0-9]){0,2}([ ]*[AP][M]?)?/, '')) return false;
	a = v.replace(/[^0-9]/g, ',').split(',');
	if (a[0] * 1 > 23) return false;
	return true;
}

function IsCCNumber(f) {
	var s = 0;
	var v = Numerals(f.value);
	if (v.length < 13) return false;
    a = new Array;
	for (i = 0; i < v.length; i++) a[v.length - 1 - i] = v.substring(i, i + 1);
	for (i = 0; i < v.length; i++) {
        if (i % 2 != 0) {
			a[i] = a[i] * 2;
			if (a[i] >= 10) a[i] = a[i] - 9;
		}
		a[i] *= 1;
		s = s + a[i].valueOf();
	}
	return s % 10 == 0;
}

function IsExpirationDate(f1, f2) {
	d = new Dt();
	if (isNaN(m = parseInt(Get(f1))) || isNaN(y = parseInt(Get(f2)))) return false;
	if (y < d.GetYear() || y == d.GetYear() && m <= d.GetMonth()) return false;
	return true;
}

function FinishPage() {
	var f = document.forms;
	for (var i = 0; i < f.length; i++) FormNode(f[i]);
}

function FormNode(o) {
	if (o.className == 'SBtn' || o.className == 'Btn') {
		o.onmouseover = FormOn;
		o.onmouseout = FormOff;
	}
	var c = o.childNodes;
	for (var i = 0; i < c.length; i++) FormNode(c[i]);
}

function FormOn() {
	for (var i = 0; i < 2; i++) {
		var o = i ? o.parentElement : event.srcElement;
		o.className = o.className.replace(/BtnOn/, 'Btn').replace(/Btn/, 'BtnOn');
		if (o.src) o.src = o.src.replace(/btnon/, 'btn').replace(/btn/, 'btnon');
	}
}

function FormOff() {
	for (var i = 0; i < 2; i++) {
		var o = i ? o.parentElement : event.srcElement;
		o.className = o.className.replace(/BtnOn/, 'Btn');
		if (o.src) o.src = o.src.replace(/btnon/, 'btn');
	}
}