
debug("extjs: loading vtypes");

Ext.form.VTypes["hostnameVal1"] = /^[a-zA-Z][-.a-zA-Z0-9]{0,254}$/;
Ext.form.VTypes["hostnameVal2"] = /^[a-zA-Z]([-a-zA-Z0-9]{0,61}[a-zA-Z0-9]){0,1}([.][a-zA-Z]([-a-zA-Z0-9]{0,61}[a-zA-Z0-9]){0,1}){0,}$/;
Ext.form.VTypes["hostnameText"]="Invalid Hostname";
Ext.form.VTypes["hostnameMask"]=/[-.a-zA-Z0-9]/;
Ext.form.VTypes["hostname"]=function(v){
    if(!Ext.form.VTypes["hostnameVal1"].test(v)){
        Ext.form.VTypes["hostnameText"]="Must begin with a letter and not exceed 255 characters.";
        return false;
    }
    Ext.form.VTypes["hostnameText"]="L[.L][.L][.L][...] where L begins with a letter, ends with a letter or number, and does not exceed 63 characters";
    return Ext.form.VTypes["hostnameVal2"].test(v);
};

Ext.form.VTypes["ipVal"] = /^([1-9][0-9]{0,1}|1[013-9][0-9]|12[0-689]|2[01][0-9]|22[0-3])([.]([1-9]{0,1}[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){2}[.]([1-9][0-9]{0,1}|1[0-9]{2}|2[0-4][0-9]|25[0-4])$/;
Ext.form.VTypes["ipMask"]=/[.0-9]/;
Ext.form.VTypes["ipText"]="1.0.0.1 - 223.255.255.254 excluding 127.x.x.x";
Ext.form.VTypes["ip"]=function(v){
return Ext.form.VTypes["ipVal"].test(v);
};


Ext.form.VTypes["portText"]="0 - 65535";
Ext.form.VTypes["portMask"]=/[0-9]/;
Ext.form.VTypes["portVal"] = /^(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/;
Ext.form.VTypes["port"]=function(v){
return Ext.form.VTypes["portVal"].test(v);
};


Ext.form.VTypes["netmaskVal"] = /(^(128|192|224|24[08]|25[245])\.0\.0\.0$)|(^255\.(0|128|192|224|24[08]|25[245])\.0\.0$)|(^255\.255\.(0|128|192|224|24[08]|25[245])\.0$)|(^255\.255\.255\.(0|128|192|224|24[08]|252)$)/;
Ext.form.VTypes["netmaskText"]="";
Ext.form.VTypes["netmaskMask"]=/[.0-9]/;
Ext.form.VTypes["netmask"]=function(v){
return Ext.form.VTypes["netmaskVal"].test(v);
};

Ext.form.VTypes["multicastVal"] = /^((22[5-9]|23[0-9])([.](0|[1-9][0-9]{0,1}|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})|(224[.]([1-9][0-9]{0,1}|1[0-9]{2}|2[0-4][0-9]|25[0-5])([.](0|[1-9][0-9]{0,1}|1[0-9]{2}|2[0-4][0-9]|25[0-5])){2})|(224[.]0[.]([1-9][0-9]{0,1}|1[0-9]{2}|2[0-4][0-9]|25[0-5])([.](0|[1-9][0-9]{0,1}|1[0-9]{2}|2[0-4][0-9]|25[0-5])))$/;
Ext.form.VTypes["multicastText"]="224.0.1.0 - 239.255.255.255";
Ext.form.VTypes["multicastMask"]=/[.0-9]/;
Ext.form.VTypes["multicast"]=function(v){
return Ext.form.VTypes["multicastVal"].test(v);
};

Ext.form.VTypes["usernameVal"] = /^[a-zA-Z][-_.a-zA-Z0-9]{0,30}$/;
Ext.form.VTypes["usernameText"]="Username must begin with a letter and cannot exceed 255 characters.";
Ext.form.VTypes["usernameMask"]=/[-_.a-zA-Z0-9]/;
Ext.form.VTypes["username"]=function(v){
return Ext.form.VTypes["usernameVal"].test(v);
};

Ext.form.VTypes["passwordVal1"] = /^.{6,31}$/;
Ext.form.VTypes["passwordVal2"] = /[^a-zA-Z].*[^a-zA-Z]/;
Ext.form.VTypes["passwordText"]="Invalid Password";
Ext.form.VTypes["passwordMask"]=/./;
Ext.form.VTypes["password"]=function(v){
    if(!Ext.form.VTypes["passwordVal1"].test(v)){
        Ext.form.VTypes["passwordText"]="Password length must be 6 to 31 characters long.";
        return false;
    }
    Ext.form.VTypes["passwordText"]="Password must include atleast 2 numbers or symbols.";
    return Ext.form.VTypes["passwordVal2"].test(v);
};

Ext.form.VTypes["phoneVal"] = /^(d{3}[-]?){1,2}(d{4})$/;
Ext.form.VTypes["phoneMask"] = /[d-]/;
Ext.form.VTypes["phoneText"] = "Not a valid phone number. Must be in the format 123-4567 or 123-456-7890 (dashes optional).";
Ext.form.VTypes["phone"]=function(v){
return Ext.form.VTypes["phoneVal"].test(v);
};

Ext.form.VTypes["directoryVal"] = /^(([a-zA-Z]:){0,1}(\\|\/){1})(([-_.a-zA-Z0-9\\\/ ]+)(\\|\/){1})+$/;
Ext.form.VTypes["directoryText"]="";
Ext.form.VTypes["directoryMask"]=/[-_.a-zA-Z0-9\\\/: ]/;
Ext.form.VTypes["directory"]=function(v){
return Ext.form.VTypes["directoryVal"].test(v);
};

Ext.form.VTypes["dateVal"] = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
Ext.form.VTypes["dateText"]="The format is wrong, ie: 01/01/2007 | 01.01.2007 | 01-01-2007";
Ext.form.VTypes["dateMask"]= /[-.a-zA-Z0-9]/;
Ext.form.VTypes["date"] = function(v){
    //check to see if in correct format
    if(! Ext.form.VTypes["dateVal"].test(v)){
        return false; //doesn't match pattern, bad date
    }else{
        var strSeparator = strValue.substring(2,3) ;
        var arrayDate = strValue.split(strSeparator); 
        //create a lookup for months not equal to Feb.
        var arrayLookup = { '01' : 31,'03' : 31, 
            '04' : 30,'05' : 31,
            '06' : 30,'07' : 31,
            '08' : 31,'09' : 30,
            '10' : 31,'11' : 30,'12' : 31
        };
        var intDay = parseInt(arrayDate[1],10); 

        //check if month value and day value agree
        if(arrayLookup[arrayDate[0]] != null) {
            if(intDay <= arrayLookup[arrayDate[0]] && intDay != 0){
                return true; //found in lookup table, good date
            }
        }

        //check for February (bugfix 20050322)
        //bugfix  for parseInt kevin
        //bugfix  biss year  O.Jp Voutat
        var intMonth = parseInt(arrayDate[0],10);
        if (intMonth == 2) { 
            var intYear = parseInt(arrayDate[2]);
            if (intDay > 0 && intDay < 29) {
                return true;
            }else if (intDay == 29) {
                if ((intYear % 4 == 0) && (intYear % 100 != 0) || (intYear % 400 == 0)) {
                    // year div by 4 and ((not div by 100) or div by 400) ->ok
                    return true;
                }   
            }
        }
    }  
    return false; //any other values, bad date
}
debug("extjs: loading vtypes loaded");

