
// main functions 
// 1- validator_add(val,type,msg)
// type:
//     - req <=> required
//     - email 
//     - integer 
//     - double 
//     - date
//     - req 
//     - req 
//
//     - 
// 2- validator_run(alert_type , submt_form )
//  alert_type:
//      - alert
//      - string
//
//
///////////////////////////////////////



// Configuration ///////////////////////////////////////////
var delmiter = " <BR> ";
var rtag = "rtag";
var normalcolor = "#FFFFFF";
var errorcolor = "#FFFF9F";
////////////////////////////////////////////////////////////



var vvals=new Array();
var vtypes=new Array();
var vmsgs=new Array();

var messege = "Error";
messege = "";

var tmp=new Array();


function validator_run(alert_type , submt_form )
{
if(alert_type=="alert")
delmiter =" \n ";
else if(alert_type=="string")
delmiter =" <BR> ";

for(i=0 ;i< vvals.length ; i++)
{

if(vtypes[i]=="req")
{
messege = messege + validator_req(vvals[i],vmsgs[i]) ;
}else if(vtypes[i]=="email")
{
messege = messege + validator_email(vvals[i],vmsgs[i]) ;
}else if(vtypes[i]=="integer")
{
messege = messege + validator_integer(vvals[i],vmsgs[i]) ;
}/*else if(vtypes[i]=="double")
{
messege = messege + validator_double(vvals[i],vmsgs[i]) ;
}*/else if(vtypes[i]=="date")
{
messege = messege + validator_date(vvals[i],vmsgs[i]) ;
}



}

if( messege != "" ){
if(alert_type=="alert")
alert(messege);
else if(alert_type=="string")

document.getElementById(rtag).innerHTML = messege;

}else
{




if(submt_form != "")
{
document.getElementById(submt_form).submit();
}


}

messege = "";



}


function validator_add(val,type,msg)
{

vvals[vvals.length] = val;
vtypes[vtypes.length] = type;
vmsgs[vmsgs.length] = msg;

}



function validator_print()
{
for(i=0 ;i< vvals.length ; i++)
{
document.write(vvals[i] + " - " + vtypes[i] + " - " + vmsgs[i] +  delmiter);
}

}



function validator_clear()
{
vvals=tmp;
vtypes=tmp;
vmsgs=tmp;
}






function validator_req(val,msg)
{
if(document.getElementById(val).value == ""){
document.getElementById(val).style.backgroundColor = errorcolor  ;
return msg + delmiter;
}
else
{
document.getElementById(val).style.backgroundColor = normalcolor ;
return "";
}
}



function validator_email(val,msg)
{


if(!check_email(document.getElementById(val).value)){
document.getElementById(val).style.backgroundColor = errorcolor  ;
return msg + delmiter;
}
else
{
document.getElementById(val).style.backgroundColor = normalcolor ;
return "";
}


}






function validator_integer(val,msg)
{


if(!is_number(document.getElementById(val).value)){
document.getElementById(val).style.backgroundColor = errorcolor  ;
return msg + delmiter;
}
else
{
document.getElementById(val).style.backgroundColor = normalcolor ;
return "";
}


}

/*

function validator_double(val,msg)
{


if(!is_double(document.getElementById(val).value)){
document.getElementById(val).style.backgroundColor = errorcolor  ;
return msg + delmiter;
}
else
{
document.getElementById(val).style.backgroundColor = normalcolor ;
return "";
}


}

*/

function validator_date(val,msg)
{


if(!is_date(document.getElementById(val).value)){
document.getElementById(val).style.backgroundColor = errorcolor  ;
return msg + delmiter;
}
else
{
document.getElementById(val).style.backgroundColor = normalcolor ;
return "";
}


}








function check_email(e) {

ok = "1234567890qwertyuiop[]asdfghjklzxcvbnm.@-_QWERTYUIOPASDFGHJKLZXCVBNM";

for(k=0; k < e.length ;k++){
if(ok.indexOf(e.charAt(k))<0){ 
return (false);
}	
} 

if (document.images) {
re = /(@.*@)|(\.\.)|(^\.)|(^@)|(@$)|(\.$)|(@\.)/;
re_two = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
if (!e.match(re) && e.match(re_two)) {
return (-1);		
} 

}

}




function  is_number(op){
        exp = /^\s*[-\+]?\d+\s*$/;
        if (op.match(exp) == null) 
            return null;
        num = parseInt(op, 10);
        return (isNaN(num) ? false : true);
}









function  is_date(op){
var val="";
val.dateorder = "ymd";
        var yearFirstExp = new RegExp("^\\s*((\\d{4})|(\\d{2}))([-/]|\\. ?)(\\d{1,2})\\4(\\d{1,2})\\s*$");
        m = op.match(yearFirstExp);
        var day, month, year;
        if (m != null && (m[2].length == 4 || val.dateorder == "ymd")) {
            day = m[6];
            month = m[5];
            year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10))
        }
        else {
            if (val.dateorder == "ymd"){
                return null;		
            }						
            var yearLastExp = new RegExp("^\\s*(\\d{1,2})([-/]|\\. ?)(\\d{1,2})\\2((\\d{4})|(\\d{2}))\\s*$");
            m = op.match(yearLastExp);
            if (m == null) {
                return null;
            }
            if (val.dateorder == "mdy") {
                day = m[3];
                month = m[1];
            }
            else {
                day = m[1];
                month = m[3];
            }
            year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10))
        }
        month -= 1;
        var date = new Date(year, month, day);
        return (typeof(date) == "object" && year == date.getFullYear() && month == date.getMonth() && day == date.getDate()) ? date.valueOf() : null;
  

  }





