﻿var validEmail = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-|_)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/i,
validZIP = /^\d{5}(-\d{4})?$/
var validName = /^[\-\ \'\.a-zA-Z]*$/;
var validCardName = /^[\-\'\.a-zA-Z]+\x20[\-\ \'\.a-zA-Z]+$/;
var validPhone = /^\(?\b[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}\b$/;
var validSecurityCode = /^\d{3,4}$/;
var EmailErrorMessage = 'Please enter a valid email address';
var NameErrorMessage = "Letters, spaces or dashes";
var CardNameErrorMessage = "Please enter your full name as it appears on your credit card";
var ZipCodeErrorMessage = "Enter a valid ZIP or ZIP+4 code";
var phoneErrorMessage = 'Valid phone number and area code';
var CommonErrorMessage = "Oops! There's a problem with your search.\nPlease correct errors marked in red and try again.";
var Error_Message_ID = 'Error_Message_ID';

var ValidateTypeReqName = 'ReqName';
var ValidateTypeName = 'Name';
var ValidateTypeReqList = 'ReqList';
var ValidateTypePastYear = 'PastYear';
var ValidateTypeReqPastYear = 'ReqPastYear'
var ValidateTypeDay = 'ValidDay';
var ValidateTypeReqMonth = 'ReqMonth';
var ValidateTypeLessThan = 'LessThan';
var ValidateTypeBetween = 'Between';
var ValidateTypeAge = 'Age';
var ValidateTypeReqEmail = 'Email';
var ValidateTypeReq = 'Req';
var ValidateTypePhone = 'Phone';

var MIN_YEAR = 1750;
function validate1(e) {
	var keynum;
	if(window.event) {
		keynum = e.keyCode;
	} else if(e.which) {
		keynum = e.which;
	}
	if (e.ctrlKey || keynum == null || keynum < 32) {
		return true;
	}
	var validchars =  /^[\w\s;.\[\]\-'@]*$/i;
	var keychar = String.fromCharCode(keynum);
	return validchars.test(keychar);
}
function validateZip(e)
{
	var keynum;
	if(window.event) {
		keynum = e.keyCode;
	} else if(e.which) {
		keynum = e.which;
	}
	if (e.ctrlKey || keynum == null || keynum < 32) {
		return true;
	}
	var validchars = /[\d\-]/;
	var keychar = String.fromCharCode(keynum);
	return validchars.test(keychar);
}
function validateForm(form)
{
	var error=""
	if (!form['firstName'].value)
		error += "First Name is required.<br/>"
	if (!form['lastName'].value)
		error += "Last Name is required.<br/>"
	if (form['email'] && !validEmail.test(form['email'].value))
	    error += EmailErrorMessage + "<br/>"
	if (form['zip'] && !validZIP.test(form['zip'].value))
	    error += ZipCodeErrorMessage + "<br/>"
	if (error)
	{
		var er = document.getElementById("error");
		er.innerHTML = error;
		er.style.display="block";
	}
	return !error
}

ClearErrorMessage = function(aObj) { }

function divFieldErrorText(aObj, aMessage, aInTextBox, aErrorHighlighting) 
{
    ClearErrorMessage(aObj);
    
	var e = aObj.getAttribute("idErrorText"),
		k = aObj.getAttribute("idErrorTextBox");
	if (e)
		e = document.getElementById(e);
	if (e)
		e.parentNode.removeChild(e);
	for(var  l = aObj; !k && l && l.getAttribute; l = l.parentNode)
		k = l.getAttribute("idErrorTextBox");
	if(k && (k = document.getElementById(k)) && (k.firstChild.nodeName == '#text'))
		k.removeChild(k.firstChild);
	if(aMessage)
	{
		e = document.createElement("DIV");
		e.className = "FieldErrorText";
		var p = aInTextBox ? k || aObj.parentNode : aObj.parentNode;
		p.appendChild(e);
		aObj.setAttribute("iderrortext", e.id = getPK());
		var pref = aObj.getAttribute('errorprefix') || '';
		e.innerHTML = pref + aMessage;
		e.style.display = "block";
	}
	if(k)
	{
		var m;
		for (var i = k.childNodes.length - 1; i >= 0; --i)
		{
			if( (m = (k.childNodes[i].nodeName != '#text' && k.childNodes[i].style.display != 'none')) )
				break;
		}
		k.style.display = m ? "block" : "none";
	}
	if(aErrorHighlighting){
		var t = aObj.type;
		if(t == "text" || t == "select-one" || t == "password" || t == 'textarea'){
			if(aMessage){
				if((aObj.className).search(aErrorHighlighting) == -1)
					aObj.className += ' '+aErrorHighlighting;
			}
			else{
				aObj.className = aObj.className.replace(aErrorHighlighting, '');
			}
		}
	}
	return aMessage;
}
String.prototype.Trim = function() {
    var method = {
        L: /^\s*/g,
        R: /\s*$/g,
        A: /(^\s*)|(\s*$)/g
    };
    return function(aMethod) {
        return this.replace(method[aMethod || "A"], "");
    };
}();

function validateForm2(form, aShowPopup, aQualifyPrefix, aPasswordRequired, aErrorHighlighting) {
    var obj, obj2, error;
    if ((obj = form['firstName'] || form[aQualifyPrefix + 'FirstName'] || document.getElementById('FirstName')))
        error = divFieldErrorText(obj, obj.value.Trim() ? (validName.test(obj.value) ? null : NameErrorMessage) : "First Name is required", null, aErrorHighlighting) || error;
    if ((obj = form['lastName'] || form[aQualifyPrefix + 'LastName'] || document.getElementById('LastName')))
        error = divFieldErrorText(obj, obj.value.Trim() ? (validName.test(obj.value) ? null : NameErrorMessage) : "Last Name is required", null, aErrorHighlighting) || error;
    if ((obj = form[aQualifyPrefix + 'SearchedFirstName']))
        error = divFieldErrorText(obj, obj.value.Trim() ? (validName.test(obj.value) ? null : NameErrorMessage) : "Searched First Name is required.", null, aErrorHighlighting) || error;
    if ((obj = form[aQualifyPrefix + 'SearchedLastName']))
        error = divFieldErrorText(obj, obj.value.Trim() ? (validName.test(obj.value) ? null : NameErrorMessage) : "Searched Last Name is required.", null, aErrorHighlighting) || error;
    if ((obj = form['email'] || form[aQualifyPrefix + 'Email'] || form[aQualifyPrefix + 'SearchCriteria']))
        error = divFieldErrorText(obj, obj.value.Trim() ? (validEmail.test(obj.value) ? null : EmailErrorMessage) : "Email is required", null, aErrorHighlighting) || error;
    if ((obj = form['zip'] || form[aQualifyPrefix + 'ZIPCode']))
        error = divFieldErrorText(obj, obj.value.Trim() ? (validZIP.test(obj.value) ? null : ZipCodeErrorMessage) : "Zip is required", null, aErrorHighlighting) || error;
    if ((obj = form[aQualifyPrefix + 'NewPassword1']) && (obj2 = form[aQualifyPrefix + 'NewPassword2'])) {
        var isError = aPasswordRequired ? (obj.value == '' || obj2.value != obj.value) : (obj.value != obj2.value);
        error = divFieldErrorText(obj, (isError && obj.value == '') ? "New password is required." : null, null, aErrorHighlighting) || error;
        error = divFieldErrorText(obj2, (obj.value != obj2.value) ? "New passwords must match each other." : null, null, aErrorHighlighting) || error;
    }
    if ((obj = form[aQualifyPrefix + 'AgreeToTerms']))
        error = divFieldErrorText(obj.parentNode, obj.checked ? null : "Agree To Terms is required", null, aErrorHighlighting) || error;

	if(error)
		var doubleCheckErrorBar = document.getElementById('doubleCheckErrorBar');
		if(doubleCheckErrorBar)
			doubleCheckErrorBar.style.display = 'block';

    return !error;
}
getPK = (function()
{
	var pk = "p" + (new Date() * 1).toString(32), pkn = 0;
	return function(aName)
	{
		if (aName)
			return aName;
		if (pkn > 99999)
		{
			pkn = 0;
			pk = "p" + (new Date() * 1).toString(32);
		};
		return pk + (++pkn).toString(32);
	}
}());
function validateForm3(aForm, aShowPopup, aWaitIconContainer) {
    var validateError, obj;
    if ((obj = aForm['firstName'] || aForm['FirstName']))
        validateError = divFieldErrorText(obj, obj.value.Trim() ? (validName.test(obj.value) ? null : NameErrorMessage) : "First Name is required.") || validateError;
    if ((obj = aForm['middleName'] || aForm['MiddleName']))
        validateError = divFieldErrorText(obj, validName.test(obj.value) ? null : NameErrorMessage) || validateError;
    if ((obj = aForm['lastName'] || aForm['LastName']))
        validateError = divFieldErrorText(obj, obj.value.Trim() ? (validName.test(obj.value) ? null : NameErrorMessage) : "Last Name is required.") || validateError;
    if ((obj = aForm['city'] || aForm['City']))
        validateError = divFieldErrorText(obj, validName.test(obj.value) ? null : NameErrorMessage) || validateError;
    if ((obj = aForm['zipCode'] || aForm['ZIPCode']))
        validateError = divFieldErrorText(obj, obj.value.Trim() ? (validZIP.test(obj.value) ? null : ZipCodeErrorMessage) : null) || validateError;
    if ((obj = aForm['age'] || aForm['Age']))
        validateError = divFieldErrorText(obj, (!obj.value || (obj.value > 0 && obj.value <= 120)) ? null : "Value is not in the correct format") || validateError;
	if (validateError)
        aShowPopup ? showErrorMessage(Error_Message_ID, CommonErrorMessage) : alert(CommonErrorMessage);
    if (!validateError && aWaitIconContainer) ShowWaitIcon(aForm, aWaitIconContainer)
    return !validateError;
}
function validateForm4(aForm, aShowPopup, aQualifyPrefix, aSearchCriteria, aErrorHighlighting) {
    var obj, obj2, error;
    if (aSearchCriteria && (obj = document.getElementById(aQualifyPrefix + 'SearchCriteria'))) {
        if (aSearchCriteria == "FieldTypeEmail")
            error = divFieldErrorText(obj, obj.value.Trim() ? (validEmail.test(obj.value) ? null : EmailErrorMessage) : "Email To Search is required", null, aErrorHighlighting) || error;
    }
    if (aForm && aForm.id == 'Purchase') {
        if (obj = document.getElementById(aQualifyPrefix + 'CCName'))
            error = divFieldErrorText(obj, obj.value.Trim() ? (validCardName.test(obj.value) ? null : CardNameErrorMessage) : "Your Name is required", null, aErrorHighlighting) || error;
        if (obj = document.getElementById(aQualifyPrefix + 'CCNumber')) {
            var val = obj.value.replace(/\D+/g, '');
            var header = val.substring(0, 4);
            var isValid;
            switch (val.length) {
                case 13:
                    if (header >= 4000 && header < 5000) isValid = true;
                    break;
                case 14:
                    if ((header >= 3600 && header < 3700) || (header >= 3800 && header < 3900) || (header >= 3000 && header < 3060)) isValid = true;
                    break;
                case 15:
                    if ((header >= 3400 && header < 3600) || (header >= 3700 && header < 3800)) isValid = true;
                    break;
                case 16:
                    if ((header >= 3500 && header < 3600) || (header >= 4000 && header < 5000) || (header >= 5100 && header < 5620) || (header == 6011)) isValid = true;
            }
            error = divFieldErrorText(obj, obj.value.Trim() ? (isValid ? null : "Credit card number is not valid.") : "Card Number is required", null, aErrorHighlighting) || error;
        }
        if ((obj = document.getElementById(aQualifyPrefix + 'CCExpMonth')) && (obj2 = document.getElementById(aQualifyPrefix + 'CCExpYear'))) {
            dateNow = new Date();
            var currentMonth = dateNow.getMonth() + 1;
            var currentYear = dateNow.getFullYear();
            error = divFieldErrorText(obj2, (obj.value.Trim() && obj2.value.Trim()) ? (currentYear > obj2.value || (currentYear == obj2.value && currentMonth > obj.value)) ? "Credit card has expired." : null : "Expiration Date is required", null, aErrorHighlighting) || error;
        }
        if ((obj = document.getElementById(aQualifyPrefix + 'CCSecurityCode')))
            error = divFieldErrorText(obj, obj.value.Trim() ? (validSecurityCode.test(obj.value) ? null : "The security code is a 3 or 4 digit number.") : "Security Code is required", null, aErrorHighlighting) || error;

        if ((obj = document.getElementById(aQualifyPrefix + 'PostalCode')))
            error = divFieldErrorText(obj, obj.value.Trim() ? (validZIP.test(obj.value) ? null : ZipCodeErrorMessage) : "Zip is required", null, aErrorHighlighting) || error;
    }
    if ((obj = document.getElementById(aQualifyPrefix + 'External.Agree'))) {
        error = divFieldErrorText(obj, obj.checked ? null : "You must agree to the terms and conditions before purchase.", null, aErrorHighlighting) || error;
    }
    if (aShowPopup && error) aForm.id == 'Purchase' ? showErrorMessage(Error_Message_ID) : showErrorMessage(Error_Message_ID, error, null, aErrorHighlighting);
    if (!error && (obj = document.getElementById('submitButton')) && (obj2 = document.getElementById('processingDiv'))) {
        obj.style.display = 'none';
        obj2.style.display = '';
    }

	if(error)
		var doubleCheckErrorBar = document.getElementById('doubleCheckErrorBar');
		if(doubleCheckErrorBar)
			doubleCheckErrorBar.style.display = 'block';

    return !error;
}
function validate2_FE(form, wait, contID, contID2) {
    var res = validEmail.test(form['email'].value.replace(/^\s+|\s+$/g, ''))
    if (!res) alert(EmailErrorMessage)
	if (res && wait)
		ShowWaitIcon(form, contID, contID2);
	return res;
}
function validate2(form, aIsDomain, aShowPopup) {
    var EmailOrDomainErrorMessage = 'Invalid email or domain format!';
	var val = form['email'].value.replace(/^\s+|\s+$/g, '');
	if (aIsDomain && !val.match("@"))
		val = "user@" + val;
	var res = validEmail.test(val), updateContainerId;
	if (!res) aShowPopup ? showErrorMessage(Error_Message_ID, aIsDomain ? EmailOrDomainErrorMessage : EmailErrorMessage) : alert(aIsDomain ? EmailOrDomainErrorMessage : EmailErrorMessage);
	if (res && ((updateContainerId = form.getAttribute("updateContainerId"))||form.getAttribute("showWait")))
		ShowWaitIcon(form, updateContainerId);
	return res;
}
function validate3(form, aShowPopup) {
	var emlList = form['tbEmails'].value.split("\n"), res, eml, maxCount = 10, updateContainerId, emlListCount=0, validMails=[];
	for (var i = 0; i < emlList.length; ++i)
	{
	    if (!emlList[i]) continue;
		if (emlListCount > maxCount)
		{
			emlListCount++
			break
		}
		eml = emlList[i].replace("\r", "").replace("^ | $", "")		
		if(eml)
		{
			res = validEmail.test(eml);			
			if (!res) 
			{
			    aShowPopup ? showErrorMessage(Error_Message_ID, EmailErrorMessage + "<br/>Check this e-mail: '" + eml + "'") : alert(EmailErrorMessage + "\nCheck this e-mail: '" + eml + "'");
			    return false;
			}
			else
			{	
				emlListCount++
				validMails.push(eml)
			}				
		}
	};
	if (validMails.length == 0) {
	    aShowPopup ? showErrorMessage(Error_Message_ID, EmailErrorMessage) : alert(EmailErrorMessage);
	    return false;
	}
	if (res && (emlListCount > maxCount))
	{
		alert("You enetered more then " + maxCount + " emails! Only first " + maxCount + " emails will be validated.");
		form['tbEmails'].value = validMails.join("\n");
	};
	if (res && ((updateContainerId = form.getAttribute("updateContainerId"))||form.getAttribute("showWait")))
	{	
		ShowWaitIcon(form, updateContainerId);
	}
	return res;
}
function validate4(form, aShowPopup) {
	var text = form['phone'].value;
	var digits = '';
	for (var i = 0; i < text.length; i++) {
		if (/[0-9]/.test(text.substr(i, 1))) {
			digits += text.substr(i, 1);
		}
	}
	
	if (digits.substr(0, 1) == '1') {
		digits = digits.substr(1);
	}
	if (digits.length < 10) {
	    aShowPopup ? showErrorMessage(Error_Message_ID, phoneErrorMessage) : alert(phoneErrorMessage);
	    return false;
	}
	if (digits.length > 10) {
	    aShowPopup ? showErrorMessage(Error_Message_ID, phoneErrorMessage) : alert(phoneErrorMessage);
	    return false;
	};

	form['phone'].value = digits;
	if ((updateContainerId = form.getAttribute("updateContainerId")) || form.getAttribute("showWait")) {
		ShowWaitIcon(form, updateContainerId);
	}
	return true;
}
addEvent = function(aObj, aEvent, aFunction)
{
	if (typeof(aFunction)!="function")
		aFunction = new Function(aFunction);
	if ( aObj.addEventListener )
		aObj.addEventListener(aEvent, aFunction, false);
	else if ( aObj.attachEvent )
		aObj.attachEvent("on"+aEvent, aFunction );
}

function loadImage(aPath) {
	var img=document.createElement("IMG")
	with (img)
	{
		src = aPath
		style.display="none"
	}
	document.body.appendChild(img)
}

selectItem=function(aId, aIndex)
{
	var o=document.getElementById(aId);
	if (o) o.selectedIndex = aIndex;
}
function wopen(url, name, w, h)
{
	w += 32;
	h += 96;
	var win = window.open(url,
		name,
		'width=' + w + ', height=' + h + ', ' +
		'location=no, menubar=no, ' +
		'status=no, toolbar=no, scrollbars=yes, resizable=no');
	win.resizeTo(w, h);
	win.focus();
}

clearFlag = false;
function showInfo(ref) {
	var element = document.getElementById(ref), selelement;
	if(selelement = element.parentNode.selectedItemId)
		document.getElementById(selelement).style.display = "none";
	if(selelement == ref)
		element.parentNode.selectedItemId = "";
	else
	{
		element.parentNode.selectedItemId = ref;
		if (element.offsetHeight)
			element.parentNode.selectedItemId = "";
		else
			element.style.display = "block";
	}
	return false;
}
swapImg = function(aObj, aDirection, aReverseBtn, aForvardBtn, aReverseBtnImg, aReverseBtnOffImg, aForwardBtnImg, aForwardBtnOffImg) {
	if (aObj.className == "lnk1" && (aReverseBtn = document.getElementById(aReverseBtn)) && (aForvardBtn = document.getElementById(aForvardBtn))) {
		if (typeof (aObj.parentNode.imageIndex) == 'undefined')
			aObj.parentNode.imageIndex = 0;
		var images = aObj.parentNode.parentNode.getElementsByTagName('DIV')[0].getElementsByTagName('IMG'),
			crntImageIndex = aObj.parentNode.imageIndex,
			newImageIndex = crntImageIndex + aDirection,
			lastImageIndex = images.length - 1;
		images[crntImageIndex].style.display = "none";
		if (crntImageIndex == 0 && newImageIndex == 1 || crntImageIndex == lastImageIndex && newImageIndex == lastImageIndex - 1) {
			var prevLink = aObj.parentNode.getElementsByTagName("A")[aDirection == 1 ? 0 : 1]
			prevLink.className = "lnk1";
			prevLink.href = "javascript:void(0)";
		}
		if (newImageIndex == lastImageIndex || newImageIndex == 0) {
			aObj.className = "lnk0";
			aObj.removeAttribute("href");
			if (newImageIndex == lastImageIndex) {
				aForvardBtn.src = aForwardBtnOffImg;
				aReverseBtn.src = aReverseBtnImg;
			}
			if (newImageIndex == 0) {
				aForvardBtn.src = aForwardBtnImg;
				aReverseBtn.src = aReverseBtnOffImg;
			}
		}
		if (newImageIndex != lastImageIndex && newImageIndex != 0) {
			aForvardBtn.src = aForwardBtnImg;
			aReverseBtn.src = aReverseBtnImg;
		}
		images[newImageIndex].style.display = "block";
		aObj.parentNode.imageIndex = newImageIndex;
	}
	if (window.event) {
		event.cancelBubble = true;
		event.returnValue = false;
	};
	return false;
}

scale = function(aImg)
{
	if (aImg.className == "hiddenImg")
		aImg.style.cssText = "position: absolute; top: -10000px; display:block;"
	var ww = aImg.width / aImg.parentNode.clientWidth, hh = aImg.height / aImg.parentNode.clientHeight;
	if(ww > 1 || hh > 1)
		if (ww > hh)
			aImg.width = aImg.parentNode.clientWidth
		else 
			aImg.height = aImg.parentNode.clientHeight;
	aImg.style.cssText = "";
}
imgError404 = function(aImg)
{
	aImg.onerror = null;
	var k = aImg.parentNode,
		a = k.nextSibling.getElementsByTagName("A");
	var index = a[0].parentNode.imageIndex
	if(index)
	{
		for (var i = 0, n = k.childNodes.length; i < n; ++i)
		{
			if(k.childNodes[i] == aImg)
			{
				if(index >= i)
					--index;
				break;
			}
		}
	}
	aImg.parentNode.removeChild(aImg);
	var u = k.childNodes[index = a[0].parentNode.imageIndex = index || 0];
	if(u)
		u.style.display = "block";
	u = index ? 1 : 0;
	if (a[0].className != "lnk" + u)
	{
		a[0].className = "lnk" + u;
		if(u)
			a[0].href = "javascript:void(0)";
		else
			a[0].removeAttribute("href");
		a[0].firstChild.src = a[0].firstChild.src.toLowerCase().replace(u ? "_off.gif" : ".gif", u ? ".gif" : "_off.gif")
	}
	
	u = (k.childNodes.length == 0 || index == k.childNodes.length - 1) ? 0 : 1;
	if (a[1].className != "lnk" + u)
	{
		a[1].className = "lnk" + u;
		if(u)
			a[1].href = "javascript:void(0)";
		else
			a[1].removeAttribute("href");
		a[1].firstChild.src = a[1].firstChild.src.toLowerCase().replace(u ? "_off.gif" : ".gif", u ? ".gif" : "_off.gif")
	}
}
ShowWaitIconInForm=function(aEvent, aContainer)
{
	var ff = (aEvent && aEvent.target)||(event && event.srcElement);
	if (ff)
		ShowWaitIcon(ff,aContainer);
}
showToolTip = function(aObj, aText, aEvent) {
	var divTT;
	if (aObj.getAttribute("haveToolTip")) {
		divTT = aObj.parentNode.lastChild;
		divTT.style.display = "block";
	} else if (aText) {
		aObj.setAttribute("haveToolTip", "true");
		divTT = document.createElement("DIV");
		divTT.className = "toolTip";
		divTT.innerHTML = aText;
		aObj.parentNode.appendChild(divTT);
		if (divTT.clientWidth > aObj.parentNode.parentNode.clientWidth - 20) {
			divTT.style.whiteSpace = "normal";
			if (aObj.parentNode.parentNode.clientWidth > 20)
				divTT.style.width = (aObj.parentNode.parentNode.clientWidth - 20) + "px";
			else
				divTT.style.width = (aObj.parentNode.parentNode.offsetWidth - 20) + "px"
		}
	} else
		return;
	if (aEvent)
		divTT.style.top = (aEvent.offsetY || aEvent.layerY || 0) + 25 + "px";
	if (aObj.parentNode.parentNode.nodeName.toLowerCase() == "div" && aObj.parentNode.parentNode.clientWidth > 20) 
		divTT.style.left = Math.min(0, aObj.parentNode.parentNode.clientWidth - divTT.clientWidth - aObj.parentNode.offsetLeft) + "px"
	
}
hideToolTip=function(aObj)
{
	aObj.parentNode.lastChild.style.display = "none";
}



preloadImage = function()
{
	var o = document.getElementById("waitImage");
	if(o)
	{
		var b = o.parentNode;
		if(b.toUpperCase() == 'BODY')
			b.removeChild(o);
		else
		{
			o = b.parentNode;
			o.removeChild(b);
			for(o = o.firstChild; o ; o = o.nextSibling)
				if ((b = o.style) && typeof(b.visibility) != "undefined")
					b.visibility = 'visible';
		}
	};
	with ((o = document.createElement("IMG")))
	{
		id="waitImage";
		alt="Processing...";
		src = (window.location.pathname.indexOf("/freeservices/") >= 0 ? "../" : "") + "images/loading.gif";
		style.display = "none";
	};
	document.body.appendChild(o)
};

ShowWaitIcon = function(frm, aContainerID, aContainerID2)
{
	var isIeEvent = false;
	if (typeof(event) == "object" && (isIeEvent = true))
		event.returnValue = false;
	var container;
	if(aContainerID2)
		container = typeof(aContainerID2) == "Object" ? aContainerID2 : (aContainerID2 && document.getElementById(aContainerID2));
	if(!container)
		container = typeof(aContainerID) == "Object" ? aContainerID : ((aContainerID && document.getElementById(aContainerID)) || frm.parentNode.parentNode);
	var chld = container.childNodes, chldStyle;
	for (var i = 0; i < chld.length; ++i)
		if ((chldStyle = chld[i].style) && typeof(chldStyle.visibility) != "undefined")
			chldStyle.visibility = "hidden";
	container.style.position = "relative";
	var newDiv = document.createElement("div");
		newDiv.style.cssText="position:absolute;top: 0px; left: 0px; text-align: center; padding-top: " + (container.offsetHeight-32) / 2 + "px; padding-left: " + (container.offsetWidth-32) / 2 + "px;"
	var img =document.getElementById("waitImage");
	if (img)
	{
		img.width=32;
		img.height=32;
		img.style.display = "block";
		newDiv.appendChild(img);

		container.appendChild(newDiv);
	}
	if (isIeEvent)
	{
		if(frm)
			frm.submit();
		img.src = img.src;
	}
};

function ShowWaitTimeout(aContainerID, aValidParam, aForm, aUrl)
{
    if (aValidParam == null || validateUniversal(aForm, aValidParam))
	{
	    var mainContent;
	    if (mainContent = document.getElementById(aContainerID)) 
	    {
	        var chld = mainContent.childNodes, chldStyle;
	        for (var i = 0; i < chld.length; ++i)
	            if (chld[i].style)
	            chld[i].style.display = "none"
	        var newEl = document.createElement('div');
	        newEl.className = "align_center";
	        newEl.innerHTML = '<h1>Searching...</h1><p>&#160;</p><p><img src="images/loading.gif" alt="Searching.." width="32" height="32" /></p><p><br />Please wait a moment. If this page does not refresh, <a href="#" onclick="getElementById(\'' + aForm.id + '\').submit()">click here</a>.</p>';
	        mainContent.appendChild(newEl);
	    }
		setTimeout("document.getElementById('" + aForm.id + "').submit();", 10);
		return true;
	}
	return false;
}

function validateUniversal(aForm, aValidationParams, aErrorHighlighting) {
    var validateError, obj,	used = {};
	aForm.removeAttribute('alertErr');
	for (var item in aValidationParams) {
		if (!used[aValidationParams[item][0]] && (obj = aForm[aValidationParams[item][0]])) {
			var k;
			k = null;
			if(obj.type){
			var rel = obj.getAttribute("relatedField");
				if(rel)
					rel = (rel = aForm[rel]) && (rel.options ? rel.options[rel.selectedIndex] : rel).value.Trim();
			switch (aValidationParams[item][1]) {
				case ValidateTypeReqName:
					if(obj.offsetWidth){
						req = aValidationParams[item][2] ? aValidationParams[item][2] : "Value is required.";
						cus = aValidationParams[item][3] ? aValidationParams[item][3] : NameErrorMessage;
						k = divFieldErrorText(obj, obj.value.Trim() ? (validName.test(obj.value) ? null : cus) : (rel ? null : req), null, aErrorHighlighting);
					}
					break;
				case ValidateTypeName:
						k = divFieldErrorText(obj, !obj.disabled && obj.value.Trim() ? (validName.test(obj.value) ? null : NameErrorMessage) : null, null, aErrorHighlighting);
					break;
				case ValidateTypeReqList:
						req = aValidationParams[item][2] ? aValidationParams[item][2] : "Value is required.";
						k = divFieldErrorText(obj, (obj.options[obj.selectedIndex].value.Trim() || rel)? null : req, null, aErrorHighlighting);
					break;
				case ValidateTypePastYear:
					var q = obj.value.Trim();
				    if (obj.offsetWidth)
					{
						var year = (new Date()).getFullYear();
						if(!q || /^\d+$/.test(q))
						{
							var passedYear = parseInt(q, 10), m = false;
							k = divFieldErrorText(obj, obj.disabled ? null : (((obj.getAttribute("isRequired") == "true" && !q && !rel) ? "Value is required." : null) || (m = ((passedYear >= 1 && passedYear <= year) || !q ? null : "Year must be in range 1 - " + year + "."))),m, aErrorHighlighting);
						}
						else{
							var pref = obj.getAttribute("errorprefix");
							if(pref)
								obj.removeAttribute("errorprefix");
							k = divFieldErrorText(obj, "Year is not valid.", null, aErrorHighlighting);
							if (pref)
								obj.setAttribute("errorprefix", pref);
						}
					}
					else
						divFieldErrorText(obj, null, null, aErrorHighlighting);
				    break;
				case ValidateTypeReqPastYear:
				    var year2 = (new Date()).getFullYear();
				    var passedYear2 = parseInt(obj.value, 10);
				    if (obj.offsetWidth)
				        k = divFieldErrorText(obj, obj.value.Trim() ? (isNaN(obj.value) ? "Year is not valid." : ((passedYear2 >= 1 && passedYear2 <= year2) || !obj.value.Trim() ? null : "Year between 1 - " + year2 + ".")) : "Value is required.", null, aErrorHighlighting);
				    break;
	            case ValidateTypeDay:
	                k = divFieldErrorText(obj, !obj.value.Trim() || (obj.value > 0 && obj.value <= 31) ? null : "Day must be in range 01 - 31.", null, aErrorHighlighting);
	                break;
	            case ValidateTypeReqMonth:
	                k = divFieldErrorText(obj, obj.value.Trim() ? ( obj.value > 0 && obj.value <= 12 ? null : "Month must be in range 01 - 12.") : "Value is required.", null, aErrorHighlighting);
	                break;
	            case ValidateTypeLessThan:
	                if (!used[aValidationParams[item][2]]) 
	                {
	                    var rel_obj = aForm[aValidationParams[item][2]];
						if (rel_obj && rel_obj.offsetWidth)
						{
	                        var year1 = parseInt(obj.value, 10);
	                        var year2 = parseInt(rel_obj.value, 10);
							if (!isNaN(year1) && !isNaN(year2))
							{
								var pref = obj.getAttribute("errorprefix");
								if(pref)
									obj.removeAttribute("errorprefix");
	                            k = divFieldErrorText(obj, (year1 > year2) ? aValidationParams[item][3] : null, true, aErrorHighlighting);
								if (pref)
									obj.setAttribute("errorprefix", pref);
							}
	                    }
	                }
	                break;
	            case ValidateTypeBetween:
	                var item2 = aValidationParams[item][2], item3 = aValidationParams[item][3]
	                if (!used[item2] && !used[item3] && (obj1 = aForm[item2]) && obj1.offsetWidth && (obj2 = aForm[item3]) && obj2.offsetWidth) {
                        var year = parseInt(obj.value, 10);
                        k = divFieldErrorText(obj, (year < parseInt(obj1.value, 10) || year > parseInt(obj2.value, 10)) ? aValidationParams[item][4] : null, null, aErrorHighlighting);
                    }
	                break;
				case ValidateTypeAge:
					var age = obj.value.Trim();
			 		k = divFieldErrorText(obj, (age == '' || /^\d+$/.test(age) && (parseInt(age,10)<151) && (parseInt(age,10)>0)) ? null : "Age is not valid.", null, aErrorHighlighting);
			 		break;
			 	case ValidateTypeReqEmail:
					req = aValidationParams[item][2] ? aValidationParams[item][2] : "Value is required.";
					cus = aValidationParams[item][3] ? aValidationParams[item][3] : "Email is not valid.";
			 		k = divFieldErrorText(obj, obj.value.Trim() ? (validEmail.test(obj.value) ? null : cus) : req, null, aErrorHighlighting);
			 		break;
				case ValidateTypeReq:
					req = aValidationParams[item][2] ? aValidationParams[item][2] : "Value is required.";
					if(obj.type == 'checkbox')
						k = divFieldErrorText(obj, obj.checked ? null : req, null, aErrorHighlighting);
					else if(obj.type == 'text' || obj.type == 'textarea')
						k = divFieldErrorText(obj, obj.value.Trim() ? null : req, null, aErrorHighlighting);
					break;
				case ValidateTypePhone:
					k = divFieldErrorText(obj, obj.value.Trim() ? (validPhone.test(obj.value) ? null : "Phone is not valid.") : null, null, aErrorHighlighting);
			 		break;
			};
			}
			else{/* Validation for radio */
				k = aValidationParams[item][1] ? aValidationParams[item][1] : "Value is required.";
				for(var j=obj.length; j>0; --j)
					if (obj[j-1].checked){
						k = null;
						break;
					}
				k = divFieldErrorText(obj[obj.length-1], k);
			}
			used[aValidationParams[item][0]] = k;
			validateError = k || validateError;
		}
	}
	if (validateError){
		if(top.LightviewOpened){
			top.Lightview.resizeWithinViewport(null, 'err');
		}
		else {
			var doubleCheckErrorBar = document.getElementById('doubleCheckErrorBar');
			if(doubleCheckErrorBar){
				aForm.setAttribute('doubleCheckErrorBar',true);
				doubleCheckErrorBar.style.display = 'block';
			}
			else
				alert(CommonErrorMessage);
			aForm.setAttribute('alertErr', 'true');
		}
	}
	else if(top.LightviewOpened)
			top.Lightview.resizeWithinViewport(null, true);
	return !validateError;
}

(function(a, b){
	if (window.addEventListener)
	{
		window.addEventListener("unload",a,false);
		window.addEventListener("load",b,false);
	}
	else if (window.attachEvent)
	{
		window.attachEvent("onunload",a);
		window.attachEvent("onload",b);
	}
})(function() { }, preloadImage);

ClearForm = function(aName) {
    var e = document[aName];
    e.reset();
    e = e.elements;
    for (var i = 0, t; i < e.length; ++i) {
        t = e[i].type;
        if (t == "text" || t == "password")
            e[i].value = "";
        else if (t == "checkbox")
            e[i].checked = false
        else if (e[i].className.indexOf('InError') != -1)
            e[i].className = e[i].className.replace(new RegExp("InError"), '')
        else if (t == "select-one") {
			if (e[i].name == 'Location') {
				with (e[i])
					for (var j = 0; j < e[i].length; ++j)
						with (options[j])
							if (value == "US")
							{
								selected = true;
								break;
							}
				if (aName == "SearchAnyName" || aName == "VitalRecords" || aName == "SearchCensus"){
					e[i].setAttribute('isClear',true);
					e[i].onchange();
				}
			}
			else if(e[i].name == 'Month' || e[i].name == 'Day' || e[i].name == 'CountyUK')
				e[i].options[0].selected = true;
			else if(e[i].name == 'RecordType')
				e[i].options[4].selected = true;
		}
    }
    var arr = document[aName].getElementsByTagName('div')
    for (var i = 0; i < arr.length; i++)
        if (arr[i].className == 'FieldErrorText') { arr[i].parentNode.removeChild(arr[i]); i-- }
    if (window.event) {
        event.cancelBubble = true;
        event.returnValue = false;
    };
    return false;
}
SetFocusForm = function(aFormId) {
    var obj, aForm = document.forms[aFormId]
    if (aForm && aForm.elements[0])
        for (var i = 0; i < aForm.elements.length; i++)
            if ((obj = aForm.elements[i]) && obj.style.display != "none" && obj.type != 'hidden') {
                obj.focus();
                if (obj.type == 'text') obj.select();
                break;
            }
}