var myFormCheck = new Class({
    
    Implements: [Options],
    Extends: FormCheck,
    options : {
        initval : true, 
        rules : {
                "civ":"validate['group[1,1]','target:home-radio-block']",
                "nom":"validate['required','nodigit','length[2,-1]','~this.validateDiffersInitvalue']",
                "login":"validate['required','nodigit','length[2,-1]','~this.validateDiffersInitvalue']",
                "prenom":"validate['required','nodigit','length[2,-1]','~this.validateDiffersInitvalue']",
                "email":"validate['required','email','~this.validateDiffersInitvalue']",
                "email2":"validate['confirm:email']",
                "paremail":"validate['required','email']",
                "addr1":"validate['required','~this.validateDiffersInitvalue']",
                "cp":"validate['required','~this.varlidatecp']",

                "pass":"validate['~this.validatePassword']",
                "pass_to_hide":"validate['~this.validatePassword']",

                "pass2":"validate['confirm:pass']",
                "dob":"validate['required','~this.validateDiffersInitvalue']",
                //"pays":"validate['required','~this.validateDiffersInitvalue']",
                "ville":"validate['~this.validateDifferFromCity']",
                "captcha":"validate['required','~this.validateCaptcha']",
                "login_email":"validate['required','~this.validateDiffersInitvalue']",
                "login_pass":"validate['required','~this.validateDiffersInitvalue']",
                "login_pass_direct":"validate['required','~this.validateDiffersInitvalue']",
                "gsm_code":"validate['~this.validateSmsCode']"
		}
        /*
        rules : {
                "civ":"validate['required','target:home-radio-block']",
                "nom":"validate['required','nodigit','length[2,-1]']",
                "prenom":"validate['required','nodigit','length[2,-1]']",
                "email":"validate['required','email']",
                "addr1":"validate['required']",
                "cp":"validate['required','digit','length[5,5]']",
                "pass":"validate['required']",
                "dob":"validate['required','date_fr']",
                "pays":"validate['required']",
                "captcha":"validate['required']"
                }
        */
    },

    initialize: function(form,options) {
        if($(form)) {
            //this.options.onSubmit = this.save;
            this.setOptions(options);
            //this.genCitiesList();            

            $each($(form).getElements('*[name^=user]'),function(elts,key) {
            	if(elts.id == "login_email" && elts.get("value").indexOf("@") != -1) { // to avoid storage of email address in initvalue in case of remindme
            		elts.store("initvalue",elts.get("initvalue"));
            	} else {
            		elts.store("initvalue",elts.get("value"));
            	}
                var elInitVal = elts.retrieve("initvalue");
                var rules = this.options.rules[elts.get("id")];
                if(rules != undefined) {
                    elts.addClass(rules);
                }
				
				if(this.options.initval!==false){
					elts.addEvent("focus",function() {
						elVal = this.get("value");
                        this.setStyle('color', 'black');
                    	if(elVal == elInitVal) {
                    	    this.set("value","");
                    	}
                	});
                	elts.addEvent("blur",function() {
                    	elVal = this.get("value");
                    	if(elVal == "") {
                            this.setStyle('color', 'grey');
                            this.set("value",elInitVal);
                    	}
              	  });
				}
            },this);
            this.parent(form);
        }
    },
    
    validateTest : function(el) {
    	return false;
    },
    
    validateFocus : function(el) {
    	alert('toto');
    },
    
    validateDiffersInitvalue : function(el) {
        if(el.get("value") == el.retrieve("initvalue") && this.options.initval) {
            el.errors.push(formcheckLanguage.required);
            return false;
        }
        return true;
    },
    validatePassword:function(el){
        
        switch(el.style.display){
            case 'none':
            break;
            case 'block':
                if(el.get("value") == el.retrieve("initvalue") && this.options.initval) {
                    el.errors.push(formcheckLanguage.required);
                    return false;
                }

                var val = el.get('value');
                if (val.length<=0){
                    alert(val.length);
                    el.errors.push(formcheckLanguage.required);
                    return false;
                }
                

            break;
        }
        return true;        
    },
    validateDifferFromCity : function(el){
        if (el.value!=''){
            return true;            
        } else {
            el.errors.push(formcheckLanguage.required);
            return false;
        }
    },
    
    varlidatecp : function(el){
        var retVal = false;
        var req = new Request({
            url:"/libs/checkcp/"+el.get('value'),
            method:"get",
            async:false,
            onRequest:function() {
                
            },
            onSuccess:function(r) {
                if(r == "1") {
                    retVal = true;
                } 
            },
            onFailure:function() {
                retVal = false;
            }
        }).send();
        if(retVal == false) {
            el.errors.push(formcheckLanguage.invalidCP);
        }
        return retVal;

        
    },
    validateCaptcha: function(el) {
        var retVal = false;
        var req = new Request({
            url:"/main/ajaxCheckCaptcha/"+el.get('value'),
            method:"get",
            async:false,
            onRequest:function() {
                
            },
            onSuccess:function(r) {
                if(r == "true") {
                    retVal = true;
                }
            },
            onFailure:function() {
                retVal = false;
            }
        }).send();
        if(retVal == false) {
            el.errors.push(formcheckLanguage.captcha);
        }
        return retVal;
    },
    
    validateSmsCode:function(el) {
    	retVal = true;
    	if(!$('notransfert')){
    		if(!el){
    			//validation SMS toujours valide pour group 1
    			retVal = true;
    		}else if(el.get('value') == ""){
    			//validation SMS pour group 3
    			el.errors.push(formcheckLanguage.required);
        		retVal = false;
    		}
    	}else{
    		//validation SMS pour group 2
    		if($('notransfert').get("checked") == false && (el.get('value') == "")) {
    			el.errors.push(formcheckLanguage.TransfertPoint);
                retVal = false;
    		}
    	}
    	return retVal;
    },
    
    validateConfirm: function(el,ruleArgs) {
        var confirm = ruleArgs[0];
        if(el.value != $(confirm).get('value')) {
            if (this.options.display.titlesInsteadNames)
                var msg = this.options.alerts.confirm.replace("%0",this.form[confirm].getProperty('title'));
            else
                var msg = this.options.alerts.confirm.replace("%0",confirm);
            el.errors.push(msg);
            return false;
        }
        return true;
    },
    
    validateLessThan: function(el,ruleArgs) {
        if(el.value!="" && (el.value*multiplicateur) <= max) {
            el.errors.push(formcheckLanguage.NotEnoughPoint);
            return false;
        }
        return true;
    },
    
    manageError : function(el, method) {
        var isValid = this.validate(el);
        if (method == 'testonly') return isValid;
        if ((!isValid && el.validation.contains('required')) || (el.value && !isValid)) {
            if(this.options.display.listErrorsAtTop && method == 'submit') this.listErrorsAtTop(el);
            if (this.options.display.indicateErrors == 2 ||this.alreadyIndicated == false || el.name == this.alreadyIndicated.name) {
                if(!this.firstError) this.firstError = el;
                this.alreadyIndicated = el;
                
                if (this.options.display.keepFocusOnError && el.name == this.firstError.name) (function(){el.focus();}).delay(10);
                this.addError(el);
                return false;
            }
        } else if ((isValid || (!el.validation.contains('required') && !el.value))) {
            this.removeError(el);
            return true;
        }
        return true;
    },
    genCitiesList:function(){
        //function test!!
        /*
        if ($$('input[id=cp]')){
            $$('input[id=cp]').addEvent("change",function(){
                var req = new Request.JSON({
                    url:"/libs/getcities/"+this.get('value'),
                    method:"get",
                    async:false,
                    onRequest:function() {
                        
                    },
                    onSuccess:function(r) {
                        var ville = $$('select[id=ville]')[0];
                        if (ville){
                            ville.empty();//
                            var maxLength = 0;
                            if (r.data.cp){

                                var myspan = $$('span[id^=selectuser]')[0];
                                myspan.set('html',r.data.cp[0].NomMin);
                                $each(r.data.cp,function(city,nothing){
                                    maxLength = Math.max(city.NomMin.length, maxLength);
                                    ville.adopt(
                                        new Element('option',{"value":city.NomMin}).set('html',city.NomMin)
                                    );
                                })
                            } else {
                                var myspan = $$('span[id^=selectuser]')[0];
                                myspan.set('html',ville.get('rel'));
                                ville.adopt(
                                    new Element('option').set('html',ville.get('rel'))
                                );
                            }
                            if (navigator.appName=='Microsoft Internet Explorer'){
                                ville.setStyle('width',(((maxLength * 6.8)>120)?(maxLength * 6.8):120)+'px');
                            }
                        }                        
                    },
                    onFailure:function() {
                    }
                }).send();
            })
        }*/
    }
});



