// initFormValidation on load
Event.observe(window, "load", initFormValidation);

var errMandatory = "Mandatory field";
var errEmail = "Invalid email address";
var errMandatoryAr = "حقل اجباري";
var errEmailAr = "يرجى ادخال عنوان بريد الكتروني صحيح";

// add events to each input
function initFormValidation(){   

 var pageUrl = window.location + "";
    if(pageUrl.indexOf("/ar/")!=-1){ 
        errMandatory = errMandatoryAr;
        errEmail = errEmailAr;   
    }


   var formRows = $$("div.formBlock div.row");   
   for(i = 0 ; i<formRows.length; i++){        
        input = formRows[i].select("input","select","textarea");        
        Event.observe(input[0], "focus", highlightRow.bindAsEventListener(input[0]));    
        Event.observe(input[0], "blur", validateInput.bindAsEventListener(input[0]));   
     
        if( formRows[i].className.indexOf("reqif-")!=-1){ addDependantField(formRows[i]); }
   }
   
   // add submit event handler
   var submit = $$("div.formBlock input.submit");
   for(i = 0 ; i<submit.length; i++){                
        Event.observe(submit[i], "click", validateForm);     
   }   
}


// classname format reqif-[INPUTID]-[VALUE]
function addDependantField(div)
{
    var param = div.className.substr(div.className.indexOf("reqif-"));  
    if(param.indexOf(" ")!=-1){  
        param = param.substr(0,param.indexOf(" "));
    }
            
    var dependance = $(param.split("-")[1]);
    var value = param.split("-")[2]; 
    
    if(dependance!=null && value!=null)
    { 
        dependance.addClassName("dep-"+div.id+"-"+value);    
       
        if( dependance.type=="select-one"){ 
            Event.observe(dependance, "change", evaluateDependantField.bindAsEventListener(dependance));  
        }
    }         
}


function evaluateDependantField(input)
{
    if(input.type=="change"){input = this; }
 
    var param = input.className.substr(input.className.indexOf("dep-"));  
    if(param.indexOf(" ")!=-1){param = param.substr(0,param.indexOf("dep-"))[0]};
    
    var div = $(param.split("-")[1]);
    var checkVal = param.split("-")[2]; 
    
    if(input.value==checkVal){makeRequired(div);}
    else{makeOptional(div);}
}

function makeRequired(div)
{
    div.addClassName("required");
    var label = div.select("label")[0];
    if(label.innerHTML.indexOf("<span>*</span>")==-1 && label.innerHTML.indexOf("<SPAN>*</SPAN>")==-1)
    { 
        label.innerHTML = label.innerHTML + " <span>*</span>";  
    }
}

function makeOptional(div)
{
    div.removeClassName("required");
    var label = div.select("label")[0]; 
    label.innerHTML = label.innerHTML.replace("<span>*</span>",""); 
    label.innerHTML = label.innerHTML.replace("<SPAN>*</SPAN>",""); 
    validateInput(div.select("input","select","textarea")[0]);
}


function highlightRow(e){ 
    this.parentNode.addClassName("current");
}

function unHighlightRow(input){
    input.parentNode.removeClassName("current");        
}

function hideError(input){
    input.parentNode.removeClassName("error");
    var errorMessage = input.parentNode.select("span.errorMessage")[0];   
    if(errorMessage!=null)
        errorMessage.innerHTML = "&nbsp;";
}

function showMandatoryError(input){
    input.parentNode.addClassName("error");
    var errorMessage = input.parentNode.select("span.errorMessage")[0]; 
    if(errorMessage!=null)
        errorMessage.innerHTML = errMandatory;
}

function showEmailError(input){
    input.parentNode.addClassName("error");
    var errorMessage = input.parentNode.select("span.errorMessage")[0]; 
    if(errorMessage!=null)
        errorMessage.innerHTML = errEmail;
}

function validateInput(input){
    // first remove the current row highlight
    if(input.type=="blur"){ input = this;}
    unHighlightRow(input);
    
    switch(input.type)
    {
        case "text" :   
            return validateText(input);
            break;
        case "textarea" :   
            return validateText(input);
            break;
        case "select-one" :   
            return validateDropDown(input);
            break; 
        default :   
            return true;
            break; 
    }
}

function validateText(input)
{    
    
    if(input.parentNode.hasClassName("required") && input.value.length<1)
    {    
        showMandatoryError(input);        
        return false;
    }
    else if(input.parentNode.hasClassName("email") && !isValidEmail(input.value))
    { 
        showEmailError(input);  
        return false;     
    }
    else{ 
        hideError(input); 
        return true;
    }
}

function validateDropDown(input)
{    
 
    if(input.className.indexOf("dep-")!=-1){evaluateDependantField(input);}

    if(input.parentNode.hasClassName("required") && (input.value=="" || input.value == "-1"))
    {    
        showMandatoryError(input);               
        return false; 
    } 
    else{ 
        hideError(input); 
        return true;    
    }
}



function validateForm(e){    
    var isValid = true; 
    var formBlock = Event.findElement(e, 'div.formBlock');
 
    var formRows = formBlock.select("div.row");   
    
    for(i = 0 ; i<formRows.length; i++){       
     
        try{
            input = formRows[i].select("input","select","textarea");      
            
            if(input[0]!=null && !validateInput(input[0]))
            {   
                if(isValid){ input[0].focus(); }
                isValid = false; 
            }
        }
        catch(ex){}
    }
    if(!isValid)
    {
        Event.stop(e);   
    }
}



function isValidEmail(email)
{   
    var pattern=/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;
    if(pattern.test(email)){         
		return true;  
    }
    return false;
}

 