// Copyright 2005 Cyclendar.com
// This code may not be copied or used without written permission of Cyclendar.com

function extrDigits(y)
{
    var l = y.length;
    var x = '';
    for (var i = 0; i < y.length; i++)
    {
        var c = y.charAt(i);
        if ((c >= '0') && (c <= '9')) x += y.charAt(i);
    }
    return x;
}

function checkDigits(y)
{
    var l = y.length;
    for (var i = 0; i < y.length; i++)
    {
        var c = y.charAt(i);
        if (!((c >= '0') && (c <= '9'))) return false;
    }
    return true;
}

function checkAlphaNumeric(x)
{
    x = x.toLowerCase();
    var l = x.length;
    for (var i = 0; i < l; i++)
    {
        var c = x.charAt(i);
        if (!( ((c >= 'a') && (c <= 'z')) || ((c >= '0') && (c <= '9')) ))
            return false;
    }
    return true;
}


function checkEmail(e)
{
    var re = new RegExp("^[\\w\\.\\- ]+@[\\w\\.\\- ]+\\.\\w{2,}$");
    return re.exec(e);
}

//=======================

function setElStyle(id, dStyle)
{
    var s = document.getElementById(id);
    if (s) { s.style.display = dStyle; }
}

function showElement(id, ok)
{
    var s = document.getElementById(id);
    if (!s) return;
    s.style.visibility = ok ? 'visible' : 'hidden';
}

function zRemoveChildren(cell)
{
    while (cell.firstChild) cell.removeChild(cell.firstChild);
}

function getParentElement(src, parType)
{
    var el = src.parentNode;
    for (; el; el = el.parentNode)
    {
        if (el.tagName.toLowerCase() == parType) return el;
    }
    return 0;
}

function getCellVal(cell)
{
    var out = '';
    for (var i = 0; i < cell.childNodes.length; i++)
    {
        var obj = cell.childNodes[i];
        switch(obj.nodeType)
        {
            case 1:
                out += getCellVal(obj);
                break;
            case 3:
                out += obj.nodeValue;
                break;
        }
    }
    return out;
}

//==================================

function check_text(f)
{
    return f.value.length;
}

function check_checkbox(f)
{
    return f.checked;
}

function check_radio(f)
{
    var form = f.form;
    var n = f.getAttribute('name');
    for(var j = 0; j < form.elements.length; j++)
    {
        if ((form.elements[j].name == n) && form.elements[j].checked)
        {
            return true;
        }
    }
    return false;
}

function check_select(f)
{
    return (f.selectedIndex >= 0);
}

function clear_ui(fields, getUIHolder)
{
    for (var i = 0; i < fields.length; i++)
    {
        var v = document.getElementById(fields[i].id);
        if (!v) { return false; }
        var td = getUIHolder(v);
        if (!td) { return false; }
        setOKStyle(td);
    }
    return true;
}

function checkField(id, func)
{
    this.id = id;
    this.func = func;
}

function getFunc(v)
{
    var tag = v.tagName.toLowerCase();
    if (tag == 'input')
    {
        var type = v.getAttribute('type').toLowerCase();
        if (   (type == 'text') 
            || (type == 'password')
            || (type == 'file') )
        {
            return check_text;
        }
        else if (type == 'checkbox')
        {
            return check_checkbox;
        }
        else if (type == 'radio')
        {
            return check_radio;
        }
        else
        {
            return 0;
        }
    }
    else if(tag == 'select') { return check_select; }
    else if (tag == 'textarea') { return check_text; }
    else
    {
        return 0;
    }
}

function check_form(form, fields, getUIHolder)
{
    for (var i = 0; i < fields.length; i++)
    {
        var v = document.getElementById(fields[i].id);
        if (!v) { return false; }
        var func = getFunc(v);
        if (!func) return false;
        var vf = fields[i].func;
        func = vf ? vf : func;
        var res = func(v);
        var td = getUIHolder(v);
        if (td)
        {
            if (res) { setOKStyle(td); }
            else
            {
                setErrorStyle(td);
                v.focus();
            }
        }
        if (!res) { return false; }
    }
    return true;
}

function blurCheckBase(f, fields, getUIHolder)
{
    if (!f.value.length) return true;
    for (var i = 0; i < fields.length; i++)
    {
        if (f.id != fields[i].id) continue;
        var func = fields[i].func;
        func = func ? func : getFunc(f);
        if (!func) return false;
        var res = func(f);
        var td = getUIHolder(f);
        if (td)
        {
            if (res) { setOKStyle(td); }
            else
            {
                setErrorStyle(td);
            }
        }
        return res;
    }
    return true;
}

//==================================================

function getLinkedTd(item)
{
    var td = getParentElement(item, 'td');
    if (!td) return 0;
    var tr = getParentElement(td, 'tr');
    if (!tr) return 0;
    return tr.cells.item(0);
}

function setErrorStyle(td)
{
    td.className = 'edhError';
    errorAlert(getCellVal(td));
}

function setOKStyle(td)
{
    td.className = 'edh';
}

function clearAlert()
{
    var errDiv = document.getElementById("errDiv");
    if (!errDiv) return;
    zRemoveChildren(errDiv);
    clear_ui(FIELDS, getLinkedTd);
}

function errorAlert1(txt, txt1)
{
    var errDiv = document.getElementById("errDiv");
    if (!errDiv) return;
    zRemoveChildren(errDiv);
    var t = document.createTextNode(txt1);
    if (t) errDiv.appendChild(t);
    var e = document.createElement('ul');
    if (e)
    {
        errDiv.appendChild(e);
        var l = document.createElement('li');
        if (e)
        {
            e.appendChild(l);
            var t = document.createTextNode(txt);
            if (t) l.appendChild(t);
        }
    }
}

function blurCheck(f)
{
    return blurCheckBase(f, FIELDS, getLinkedTd);
}

function verify(form)
{
	clearAlert();
	return check_form(form, FIELDS, getLinkedTd);
}

//=====================================

function checkEm(f)
{
    if (!f.value.length) return false;
    return checkEmail(f.value);
}

function checkCountry(f)
{
    return (f.selectedIndex >= 1);
}