function check_num(Tmp)
{
	var is_num;
	is_num = "0123456789";
	var subst;
    if(Tmp.substring(0, 0 + 1) == "-")
        Tmp = Tmp.substring(1, 1000);
	for(i = 0; i < Tmp.length; i++)
	{
		subst = Tmp.substring(i, i + 1);
		//if(is_num.indexOf(subst) == -1)
		//	return false;
	}
	return true;
}

function check_flt(Tmp)
{
	var is_flt;
	is_flt = "0123456789.";
	var subst;
    if(Tmp.substring(0, 0 + 1) == "-")
        Tmp = Tmp.substring(1, 1000);
	for(i = 0; i < Tmp.length; i++)
	{
		subst = Tmp.substring(i, i + 1);
		if(is_flt.indexOf(subst) == -1)
			return false;
	}
	return true;
}

function check_name(Tmp)
{
    var is_alpha;
    is_alpha = "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ اأإآبتثجحخدذرزسشصضطظعغفقكلمنهوؤيءئىة";
    var subst;
    for(i = 0; i < Tmp.length; i++)
    {
        subst = Tmp.substring(i, i + 1);
        if(is_alpha.indexOf(subst) == -1)
            return false;
    }
    return true;
}

function check_name_en(Tmp)
{
    var is_alpha_en;
    is_alpha_en = "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var subst;
    for(i = 0; i < Tmp.length; i++)
    {
        subst = Tmp.substring(i, i + 1);
        if(is_alpha_en.indexOf(subst) == -1)
            return false;
    }
    return true;
}

function check_phone(Tmp)
{
    var is_phone;
    is_phone = "0123456789 -+()";
    var subst;
    for(i = 0; i < Tmp.length; i++)
    {
        subst = Tmp.substring(i, i + 1);
        if(is_phone.indexOf(subst) == -1)
            return false;
    }
    return true;
}

function check_email(Tmp)
{
    var index_at, index_dot, before_at, after_at;
    var is_alpha_dot = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_0123456789.";

    if (trim(Tmp) != "")
    {
        index_at = Tmp.indexOf("@");
        if ( index_at == -1)
            return false;
        before_at = Tmp.substring( 0, index_at - 1);
        Tmp = Tmp.substring(index_at + 1, Tmp.length);
        index_dot = Tmp.indexOf(".");
        if ( index_dot == -1)
            return false;
        after_at = Tmp.substring( 0, index_dot - 1);
        Tmp = Tmp.substring(index_dot + 1, Tmp.length);
        if ( Tmp.length == 0)
            return false;

        for(i = 0; i < before_at.length; i++)
        {
            subst = before_at.substring(i, i + 1);
            if(is_alpha_dot.indexOf(subst) == -1)
                return false;
        }

        for(i = 0; i < after_at.length; i++)
        {
            subst = after_at.substring(i, i + 1);
            if(is_alpha_dot.indexOf(subst) == -1)
                return false;
        }

        for(i = 0; i < Tmp.length; i++)
        {
            subst = Tmp.substring(i, i + 1);
            if(is_alpha_dot.indexOf(subst) == -1)
                return false;
        }

        return true;
    }
}

function is_leap(YY)
{
    if(YY % 4 != 0)
        return false;
    else if( YY % 100 !=0)
        return true;
    else if( YY % 400 !=0)
        return false;
    else
        return true;
}

function days_in_month(MM, YY)
{
    if ( MM == 1)
        return 31;
    if ( MM == 3)
        return 31;
    if ( MM == 5)
        return 31;
    if ( MM == 7)
        return 31;
    if ( MM == 8)
        return 31;
    if ( MM == 10)
        return 31;
    if ( MM == 12)
        return 31;
    if ( MM == 4)
        return 30;
    if ( MM == 6)
        return 30;
    if ( MM == 9)
        return 30;
    if ( MM == 11)
        return 30;
    if ( MM == 2)
        if(is_leap(YY) == true)
            return 29;
        else
            return 28;
}

function check_date(Tmp)
{
    var q;
    var index;
    var DD;
    var MM;
    var YY;
    q = "\/";
    var MinYear;
    MinYear = 1900;
    var MaxYear;
    MaxYear = 2100;
    index = Tmp.indexOf(q);
    if(index < 1 || index > 2)
        return false;
    DD = Tmp.substring(0, index);
    Tmp = Tmp.substring(index+1, Tmp.length);
    index = Tmp.indexOf(q);
    if(index < 1 || index > 2)
        return false;
    MM = Tmp.substring(0, index);
    YY = Tmp.substring(index+1, Tmp.length);
    if(parseInt(YY) < 1900 || parseInt(YY) > 2100)
        return false;
    if(YY > MaxYear || YY < MinYear)
        return false;
    if(MM < 1 || MM > 12)
        return false;
    if(DD < 1 || DD > days_in_month(MM, YY))
        return false;
    return true;
}

function is_bigger(date1, date2)
{
    //returns
    // -3 error in second date
    // -2 error in first date
    // -1 first is smaller
    // 0 equal
    // 1 first is bigger

    var q;
    var index1, index2;
    var dd1, mm1, yy1, dd2, mm2, yy2;
    q = "\/";
    if ( check_date(date1) == false)
        return -2;
    if ( check_date(date2) == false)
        return -3;
    index1 = date1.indexOf(q);
    index2 = date2.indexOf(q);
    dd1 = date1.substring(0, index1);
    date1 = date1.substring(index1+1, date1.length);
    index1 = date1.indexOf(q);
    mm1 = date1.substring(0, index1);
    yy1 = date1.substring(index1+1, date1.length);
    dd2 = date2.substring(0, index2);
    date2 = date2.substring(index2+1, date2.length);
    index2 = date2.indexOf(q);
    mm2 = date2.substring(0, index2);
    yy2 = date2.substring(index2+1, date2.length);
    if ( yy1 > yy2)
        return 1;
    if ( yy2 > yy1)
        return -1;
    if ( mm1 > mm2)
        return 1;
    if ( mm2 > mm1)
        return -1;
    if ( dd1 > dd2)
        return 1;
    if ( dd2 > dd1)
        return -1;
    return 0;
}

function check_during(Tmp)
{
    var q;
    var index;
    //var DD;
    var MM;
    var YY;
    q = "\/";
    var MinYear;
    MinYear = 1900;
    var MaxYear;
    MaxYear = 2100;
    /*index = Tmp.indexOf(q);
    if(index < 1 || index > 2)
        return false;
    DD = Tmp.substring(0, index);
    Tmp = Tmp.substring(index+1, Tmp.length);*/
    index = Tmp.indexOf(q);
    if(index < 1 || index > 2)
        return false;
    MM = Tmp.substring(0, index);
    YY = Tmp.substring(index+1, Tmp.length);
    if(parseInt(YY) < 1900 || parseInt(YY) > 2100)
        return false;
    if(YY > MaxYear || YY < MinYear)
        return false;
    if(MM < 1 || MM > 12)
        return false;
    /*if(DD < 1 || DD > days_in_month(MM, YY))
        return false;*/
    return true;
}

function check_input(my_input)
{
    my_alt = my_input.alt + "_";

    if(my_alt == "")
        return true;

    my_alt = my_alt + "_";

    if (my_input.value != null)
    {
        my_val = trim(my_input.value);
    }

    my_type    = "";
    my_min_val = ""; my_max_val = ""; my_val_val = "";
    my_min_len = ""; my_max_len = ""; my_val_len = "";
    my_req     = "";
    result     = true;

    if(my_alt.indexOf("HIDDEN") >= 0 )
    {
        try
        {
            my_input.focus();
        }
        catch(exception)
        {
            return true;
        }
    }

    if(my_alt.indexOf("DISABLE") >= 0 )
    {
        try
        {
            my_input.focus();
        }
        catch(exception)
        {
            return true;
        }
    }

    error_cause = "";

    if(my_alt.indexOf("REQUIRE") >= 0 )
    {
        my_req = "yes";
        result = result && (my_val != "");
        if(!result)
            error_cause = "require";
    }

    if(my_alt.indexOf("NUM") >= 0 )
    {
        my_type = "num";
        if(my_val != "")
            result = result && check_num(my_val);
        if(!result)
            error_cause = "num";
    }
    else if(my_alt.indexOf("FLT") >= 0 )
    {
        my_type = "flt";
        if(my_val != "")
            result = result && check_flt(my_val);
        if(!result)
            error_cause = "flt";
    }
    else if(my_alt.indexOf("NAME") >= 0 )
    {
        my_type = "name";
        if(my_val != "")
            result = result && check_name(my_val);
        if(!result)
            error_cause = "name";
    }
    else if(my_alt.indexOf("DATE") >= 0 )
    {
        my_type = "date";
        if(my_val != "")
            result = result && check_date(my_val);
        if(!result)
            error_cause = "date";
    }
    else if(my_alt.indexOf("PHONE") >= 0 )
    {
        my_type = "phone";
        if(my_val != "")
            result = result && check_phone(my_val);
        if(!result)
            error_cause = "phone";
    }
    else if(my_alt.indexOf("EMAIL") >= 0 )
    {
        my_type = "email";
        if(my_val != "")
            result = result && check_email(my_val);
        if(!result)
            error_cause = "email";
    }

    if(my_alt.indexOf("LEN") >= 0 )
    {
        index_start = my_alt.indexOf("LEN");
        index_end   = my_alt.indexOf("_", index_start);
        index_2dots = my_alt.indexOf(":", index_start);
        if (index_2dots > index_end || index_2dots == -1)
        {
            my_val_len = my_alt.substring(index_start+3, index_end);
            result = result && (my_val.length == parseInt(my_val_len));
        }
        else
        {
            my_min_len = my_alt.substring(index_start+3, index_2dots);
            my_max_len = my_alt.substring(index_2dots+1, index_end);
            if(my_min_len != "")
                result = result && (my_val.length >= parseInt(my_min_len));
            if(my_max_len != "")
                result = result && (my_val.length <= parseInt(my_max_len));;
        }
        if(!result)
            error_cause = "len";
    }

    if(my_alt.indexOf("VAL") >= 0 )
    {
        index_start = my_alt.indexOf("VAL");
        index_end   = my_alt.indexOf("_", index_start);
        index_2dots = my_alt.indexOf(":", index_start);
        if (index_2dots > index_end || index_2dots == -1)
        {
            my_val_val = my_alt.substring(index_start+3, index_end);
			alert(my_val_val);
            result = result && (parseInt(my_val) == parseInt(my_val_val));
        }
        else
        {
            my_min_val = my_alt.substring(index_start+3, index_2dots);
            my_max_val = my_alt.substring(index_2dots+1, index_end);
            if (my_min_val != "")
                result = result && (parseInt(my_val) >= parseInt(my_min_val));
            if (my_max_val != "")
                result = result && (parseInt(my_val) <= parseInt(my_max_val));
        }
        if(!result)
            error_cause = "val";
    }

    if(result == false)
    {
        alert_input = my_input;
        enable_alert();
        balloon_show(eval("error_" + error_cause), my_input.name);
    }

    return result;
}

function check_form(form)
{
    for(j = 0; j < form.length; j++)
    {
        result = check_input(form[j]);
        if(result == false)
                return false;
    }
    form.submit();
}
