
function validate(frm)
{
    var isMatch = true;
	for(var i=0;i < frm.elements.length;i++)
	{
	    if(frm.elements[i].getAttribute("validationRule"))
	    {
	        if($(frm.elements[i]).hasClass("SAID")){
	            if (!SAIDValidate($(frm.elements[i]).val())) {
	                alert(frm.elements[i].getAttribute("validationMessage"));
	                addClassName(frm.elements[i], "input_fail");
	                try {
	                    frm.elements[i].focus();
	                }
	                catch (e) {
	                    //unable to set focus to element
	                }
	                isMatch = false;
	                break;
	            }
	            else {
	                isMatch = true;
	                removeClassName(frm.elements[i], "input_fail");
	            }
	        }
	        else{
		        var re = new RegExp(frm.elements[i].getAttribute("validationRule"));
		        if (frm.elements[i].value.match(re)) {
		            isMatch = true;
		            removeClassName(frm.elements[i], "input_fail");
		        } else {
		            alert(frm.elements[i].getAttribute("validationMessage"));
		            addClassName(frm.elements[i], "input_fail");
		            try{
			            frm.elements[i].focus();
		            }
		            catch(e){
			            //unable to set focus to element
		            }
		            isMatch = false;
		            break;
		        }
		    }
	    }
	}
	return isMatch;
}

function hasValidation(el)
{
    if(el.title.indexOf("|") > -1)
        return true;
    else
        return false;
}

function getValidation(el, pos)
{
    if(el.title.indexOf("|") == -1)
        return "";
    var aValidation = el.title.split("|");
    if(aValidation.length < 2)
        return "";
    return aValidation[pos];
}

function setValidation(el, name, value)
{
    el.setAttribute(name, value);
}

function setupValidation()
{
    if(!document.forms)return;
    var el;
    for(var i=0; i < document.forms.length; i++)
    {
        for(var f=0; f < document.forms[i].elements.length; f++)
        {
            el = document.forms[i].elements[f];
            if(hasValidation(el))
            {
                setValidation(el, "validationMessage", getValidation(el, 0));
                setValidation(el, "validationRule", getValidation(el, 1));
                el.title = getValidation(el, 0);
            }
        }
    }
}

function addEvent(obj, evt, fn){ 
 if (obj.addEventListener){ 
    obj.addEventListener(evt, fn, true); 
    return true; 
 } else if (obj.attachEvent){ 
    var r = obj.attachEvent("on" + evt, fn); 
    return r; 
 } else { 
    return false; 
 }
}

function SAIDValidate(strID) {
    runningTotal = 0;
    if (strID.length == 13) {
        for (i = 0; i < 13; i += 2) runningTotal += parseInt(strID.substr(i, 1));
        for (i = 1; i < 13; i += 2) if (strID.substr(i, 1) < 5) runningTotal += parseInt((2 * strID.substr(i, 1)));
        else runningTotal += parseInt((2 * strID.substr(i, 1) + 1));
        if (runningTotal % 10 == 0) return true;
        return false;
    }
    return false;
}

function addClassName(el, className)
{
    el.className = el.className.indexOf(className) > -1 ? el.className : el.className + " " + className;
}

function removeClassName(el, className)
{
    el.className = el.className.replace(className, "");
}

function announce()
{
    var aPairs = window.location.search.split("&");
    if(aPairs.length == 0)return;
    for(var i=0; i < aPairs.length; i++)
    {
        var aPair = aPairs[i].split("=");
        if(aPair.length > 1)
        {
            if(aPair[0] == "formMessage")
            {
                alert(decodeURIComponent(aPair[1]));
                return;   
            }
        }
    }
}

function __sfh(oForm) {
    var result = true;
    try {
        if (arguments.length > 1) {
            if (arguments[1] == true) {//validate form
                result = validate(oForm);
            }
        }
        var sForm = flattenForm(oForm);
        var fEl = document.createElement("input");
        fEl.type = "hidden";
        fEl.name = "formHTML";
        var newEl = oForm.appendChild(fEl);
        newEl.value = sForm;
    }
    catch (e) { }
    return result;
}

var __currentForm;
function flattenForm(oForm) {
    __currentForm = oForm;
    var cForm = oForm.cloneNode(true);
    for (var i = 0; i < cForm.childNodes.length; i++) {
        elProcess(cForm.childNodes[i]);
    }
    return cForm.innerHTML;
}

function elProcess(oEl) {
    for (var i = 0; i < oEl.childNodes.length; i++) {
        elProcess(oEl.childNodes[i]);
    }
    if (oEl.nodeType == 1) {
        if (oEl.tagName.toUpperCase() != "SCRIPT") {
            if (";SELECT;INPUT;TEXTAREA;".indexOf(";" + oEl.tagName.toUpperCase() + ";") > -1) {
                var tn = document.createElement("b");
                tn.innerHTML = flatten(oEl) + " ";
                var pEl = oEl.parentNode;
                pEl.replaceChild(tn, oEl);
            }
        }
        else {
            var tn = document.createElement("br");
            var pEl = oEl.parentNode;
            pEl.replaceChild(tn, oEl);
        }
    }
}


function flatten(oEl) {
    e = __currentForm.elements[oEl.name];
    if (e == null)
        return "";
    if (e.type == "select-one") {
        return e.options[e.selectedIndex].value;
    }
    if (e.type == "select-multiple") {
        var s = "";
        for (var j = 0; j < e.length; j++) {
            if (e.options[j].selected == true) {
                s += e.options[j].value + "<br />";
            }
        }
        return s;
    }
    if (e.type == "checkbox") {
        return e.checked == true ? "Yes" : "No";
    }
    if (e.type == "radio") {
        return e.checked == true ? "Yes" : "No";
    }
    if (e.type == "button") {
        return "";
    }
    if (e.type == "submit") {
        return "";
    }
    if (e.type == "hidden") {
        return e.value;
    }
    if (e.type == "text") {
        return e.value;
    }
    if (e.type == "password") {
        return e.value;
    }
    if (e.tagName == "TEXTAREA") {
        return e.value;
    }
    return "";
}

$(document).ready(function() {
        setupValidation();
        announce();
});

