////////////////////////////////////////////////////////////////////////////
//   Script Name: Form validation script                                 //
//   Version: 0.01                                                      //
//   Author: Bracsek  (bracsek(at)dweb(dot)ro)                         //
//   Author URI: http://bracsek.extra.hu                              //
//   Last update 2009/05/23                                          //
//   Copyright(c) 2009 DWEB(R)                                      //
//   External lybrarys: Jquery.js                                  //
//                                                                //
//   changlog:                                                   //
//                                                              //
//                                                             //
//                                                            //
//                                                           //            
//////////////////////////////////////////////////////////////




// usage:

//<form req="onchange" > //recomanded (keyup,mouseup and change event listenered)
//<form req="onkeyup" >  
//<form req="onsubmit" >

// <input req="num,,2" >    legalabb
// <input req="num,,2,,5" > legalabb,legtobb
// <input req="text,,2" >
// <input req="text,,2,,5" >
// <input req="text,,2,,5,,csoport" > ellenorizi a csoportban levo imputok egyezoseget
// <input req="email" >
// <input req="regexp,,[0-9]{4}\/[0-9]{1,2}\/[0-9]{1,2}" >
// <input req="regexp,,[0-9]{4}\/[0-9]{1,2}\/[0-9]{1,2},,Kerem a megfelelo adatot adja meg." >

// ugyanez a select es textareara is.


var dwbFormValidator;
$(document).ready(function() {
	dwbFormValidator = new formValidator({});
});
var kuldheto = true;


var formValidator = function(settings){

this.settings = settings;

this.lang = "ro";

this.langTxt = {
	hu : {
		num1:     'Legkevessebb %valtozo számmal kell kitölteni a mezőt.',
		num2:     'Legkevessebb %valtozo, legtöbb %valtozo2 számmal kell kitölteni a mezőt.',
		text1:    'Legkevessebb %valtozo karakterrel kell kitölteni a mezőt.',
		text2:    'Legkevessebb %valtozo, legtöbb %valtozo2 karakterrel kell kitölteni a mezőt.',
		email:    'Kérem valós email címet adjon meg.',
		regexp:   'Kérem a mező értékét töltse ki a megfelelő módon',
		nosubmit: 'Kérem a mezők értékét töltse ki a megfelelő módon',
		egyezes:  'Mező tartalma nem azonos a másik mező tartalmával'
	},
	ro : {
		num1:  'Rubrica se va completa cu minimum patru %valtozo caractere.',
		num2:   'Legkevessebb %valtozo, legtöbb %valtozo2 számmal kell kitölteni a mezőt.',
		text1:  'Rubrica se va completa cu minimum patru %valtozo caractere.',
		text2:  'Legkevessebb %valtozo, legtöbb %valtozo2 karakterrel kell kitölteni a mezőt.',
		email:  'Kérem valós email címet adjon meg.',
		regexp: 'Kérem a mező értékét töltse ki a megfelelő módon',
		nosubmit: 'Kérem a mezők értékét töltse ki a megfelelő módon',
		egyezes:  'Mező tartalma nem azonos a másik mező tartalmával'
	},
	en :{
		num1:  'The field will be filled in with minimum %valtozo characters.',
		num2:   'Legkevessebb %valtozo, legtöbb %valtozo2 számmal kell kitölteni a mezőt.',
		text1:  'The field will be filled in with minimum %valtozo characters.',
		text2:  'Legkevessebb %valtozo, legtöbb %valtozo2 karakterrel kell kitölteni a mezőt.',
		email:  'Kérem valós email címet adjon meg.',
		regexp: 'Kérem a mező értékét töltse ki a megfelelő módon',
		nosubmit: 'Kérem a mezők értékét töltse ki a megfelelő módon',
		egyezes:  'Mező tartalma nem azonos a másik mező tartalmával'
	},	
	de :{
		num1:  'Das Feld wird mit minimum %valtozo Charaktere ausgefüllt.',
		num2:   'Legkevessebb %valtozo, legtöbb %valtozo2 számmal kell kitölteni a mezőt.',
		text1:  'Das Feld wird mit minimum %valtozo Charaktere ausgefüllt.',
		text2:  'Legkevessebb %valtozo, legtöbb %valtozo2 karakterrel kell kitölteni a mezőt.',
		email:  'Kérem valós email címet adjon meg.',
		regexp: 'Kérem a mező értékét töltse ki a megfelelő módon',
		nosubmit: 'Kérem a mezők értékét töltse ki a megfelelő módon',
		egyezes:  'Mező tartalma nem azonos a másik mező tartalmával'
	}
	
	
}

this.init = function(){
	this.loadVars();
	this.initForms();
}


this.initForms = function(){

	$('form[req=onchange] input,form[req=onchange] select,form[req=onchange] textarea').each(function(){
		$(this).change(function(){dwbFormValidator.validate(this);});
		$(this).keyup(function(){dwbFormValidator.validate(this);});
		$(this).mouseup(function(){dwbFormValidator.validate(this);});
	});
	
	$('form[req] input,form[req] select,form[req] textarea').each(function(){
		if (typeof($(this).attr('req'))=="undefined"&&$(this).attr('type')!="submit"&&$(this).attr('type')!="image"){
			$(this).change(function(){$(this).addClass('joinput');});
			$(this).keyup(function(){$(this).addClass('joinput');});
			$(this).mouseup(function(){$(this).addClass('joinput');});
		}
	});
	
	$('form[req=onkeyup] input,form[req=onchange] select,form[req=onchange] textarea').each(function(){
		$(this).keyup(function(){dwbFormValidator.validate(this);});
	});
	
	$('form[req=onsubmit],form[req=onkeyup],form[req=onchange]').each(function(){
		$(this).submit(function(){
			kuldheto = true;
			$(this).find("input,select,textarea").each(function(){
				var tmp = dwbFormValidator.validate(this);
				
				kuldheto = kuldheto && tmp;
			});
			if (!kuldheto) dwbFormValidator.alertBig();
			return kuldheto;
		});
	});
}

this.alertBig = function(){
	if (typeof(shbox)=="undefined"){ alert (dwbFormValidator.langTxt[dwbFormValidator.lang].nosubmit) ;}
	else {
		shbox.sh({type:'html',width:350,height:120,html : '<div style="font-size:14px;padding:30px;" >'+dwbFormValidator.langTxt[dwbFormValidator.lang].nosubmit+'</div>' });
	}
}

this.alert = function(elem,mit){

	var pos = $(elem).offset();    
	var left = (pos.left) *1;
	var top = $(elem).height()+10+pos.top + "px";
	var top = -17+pos.top *1;
	
	if(elem.tagName=="TEXTAREA")left -= 4;
	
	if(!$(elem).attr('predived')){
		$(elem).attr('predived','igen');
		
		$(elem).after('<div class="rosszinputText" style="position:absolute;left:'+(left+$(elem).width()*1+9)+'px;top:'+(top+20)+'px;" >'+
		'<span onmousemove="magyarazat(event,\''+mit+'\')" onmouseout="magyarazat(event,false);" >'+
		'<img src="images/ix.gif" />'+
		'</span>'+
		'&nbsp;&nbsp;</div>');
		$(elem).next('div').css({display:'block',opacity:0.9});
	} else {
		$(elem).next('div').css({display:'block',opacity:0.9,left:(left+$(elem).width()*1+9)+'px',top:(top+20)+'px'}).html('<div class="rosszinputText" style="position:relative;" >'+
		'<span onmousemove="magyarazat(event,\''+mit+'\')" onmouseout="magyarazat(event,false);" >'+
		'<img src="images/ix.gif" />'+
		'</span>'+
		'&nbsp;&nbsp;</div>');
	}
	$(elem).addClass('rosszinput');
	$(elem).removeClass('joinput');
	
	//alert(mit);
	
}


this.validate = function(elem){
//novalidat 
	if (typeof($(elem).attr('req'))=="undefined"){
		return true;
	}
//num
	if($(elem).attr('req').substr(0,3)=='num'){
		if($(elem).attr('req').split(",,").length==2){
			var pattern = new RegExp('^[0-9]{'+$(elem).attr('req').split(",,")[1]+',5000}$');
			if(!pattern.test($(elem).val())){
				this.alert(elem,dwbFormValidator.langTxt[dwbFormValidator.lang].num1.replace('%valtozo',$(elem).attr('req').split(",,")[1]));
				return false;
			} else {
				if($(elem).attr('predived')) { $(elem).removeClass('rosszinput'); $(elem).next('div').css('display','none').html('')};
				$(elem).addClass('joinput');
				return true;
			}
		}
		
		if($(elem).attr('req').split(",,").length==3){
			var pattern = new RegExp('^[0-9]{'+$(elem).attr('req').split(",,")[1]+','+$(elem).attr('req').split(",,")[1]+'}$');
			if(!pattern.test($(elem).val())){
				this.alert(elem,dwbFormValidator.langTxt[dwbFormValidator.lang].num2.replace('%valtozo',$(elem).attr('req').split(",,")[1]).replace('%valtozo2',$(elem).attr('req').split(",,")[2]));
				return false;
			} else {
				if($(elem).attr('predived')) { $(elem).removeClass('rosszinput'); $(elem).next('div').css('display','none').html('')};
				$(elem).addClass('joinput');
				return true;
			}
		}
	}
	
//text	
	if($(elem).attr('req').substr(0,4)=='text'){
		if($(elem).attr('req').split(",,").length==2){
			var pattern = new RegExp('^.{'+$(elem).attr('req').split(",,")[1]+',5000}$');
			if(!pattern.test(($(elem).val()+"").replace(/\n/g,''))){
				this.alert(elem,dwbFormValidator.langTxt[dwbFormValidator.lang].text1.replace('%valtozo',$(elem).attr('req').split(",,")[1]));
				return false;
			} else {
				if($(elem).attr('predived')) { $(elem).removeClass('rosszinput'); $(elem).next('div').css('display','none').html('')};
				$(elem).addClass('joinput');
				return true;
			}
		}
		
		if($(elem).attr('req').split(",,").length==3){
			var pattern = new RegExp('^.{'+$(elem).attr('req').split(",,")[1]+','+$(elem).attr('req').split(",,")[2]+'}$');
			if(!pattern.test(($(elem).val()+"").replace(/\n/g,''))){
				this.alert(elem,dwbFormValidator.langTxt[dwbFormValidator.lang].text2.replace('%valtozo',$(elem).attr('req').split(",,")[1]).replace('%valtozo2',$(elem).attr('req').split(",,")[2]));
				return false;
			} else {
				if($(elem).attr('predived')) { $(elem).removeClass('rosszinput'); $(elem).next('div').css('display','none').html('')};
				$(elem).addClass('joinput');
				return true;
			}
		}
		
		if($(elem).attr('req').split(",,").length==4){
			var pattern = new RegExp('^.{'+$(elem).attr('req').split(",,")[1]+','+$(elem).attr('req').split(",,")[2]+'}$');
			if(!pattern.test($(elem).val())){
				this.alert(elem,dwbFormValidator.langTxt[dwbFormValidator.lang].text2.replace('%valtozo',$(elem).attr('req').split(",,")[1]).replace('%valtozo2',$(elem).attr('req').split(",,")[2]));
				return false;
			} else {
				
				var egyezes = true;
				var ertek   = $(elem).val();
				var csoportazonosito = $(elem).attr('req').split(",,")[3];
				$(elem).attr('ellenorzo','igen');
				
				$('select[ellenorzo!=igen],input[ellenorzo!=igen],textarea[ellenorzo!=igen]').each(function(){
					if (typeof($(this).attr('req'))=="undefined"){
						return true;
					}
					if($(this).attr('req').substr(0,4)=='text'){
						if($(this).attr('req').split(",,").length==4){
							if($(this).attr('req').split(",,")[3]==csoportazonosito){
								if (ertek != $(this).val()) {
									egyezes = false;
									dwbFormValidator.validate(this);
								}
							}
						}
					}
					
				});
				
				$(elem).attr('ellenorzo','nem');
				
				if(!egyezes) {
					this.alert(elem,dwbFormValidator.langTxt[dwbFormValidator.lang].egyezes); 
					return false;
				} else {
					if($(elem).attr('predived')) { $(elem).removeClass('rosszinput'); $(elem).next('div').css('display','none').html('')};
					$(elem).addClass('joinput');
					return true;
				}
				
			}
		}
		
	}

//email	
	if($(elem).attr('req').substr(0,5)=='email'){
			var pattern = new RegExp('^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,6})+$');
			if(!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,6})+$/.test($(elem).val())){
				this.alert(elem,dwbFormValidator.langTxt[dwbFormValidator.lang].email);
				return false;
			} else {
				if($(elem).attr('predived')) { $(elem).removeClass('rosszinput'); $(elem).next('div').css('display','none').html('')};
				$(elem).addClass('joinput');
				return true;
			}
	}

//regexp	
	if($(elem).attr('req').substr(0,6)=='regexp'){
		if($(elem).attr('req').split(",,").length==2){
			var pattern = new RegExp($(elem).attr('req').split(",,")[1]);
			if(!pattern.test($(elem).val())){
				this.alert(elem,dwbFormValidator.langTxt[dwbFormValidator.lang].regexp);
				return false;
			} else {
				if($(elem).attr('predived')) { $(elem).removeClass('rosszinput'); $(elem).next('div').css('display','none').html('')};
				$(elem).addClass('joinput');
				return true;
			}
		}
		
		if($(elem).attr('req').split(",,").length==3){
			var pattern = new RegExp($(elem).attr('req').split(",,")[1]);
			if(!pattern.test($(elem).val())){
				this.alert(elem,$(elem).attr('req').split(",,")[2]);
				return false;
			} else {
				if($(elem).attr('predived')) { $(elem).removeClass('rosszinput'); $(elem).next('div').css('display','none').html('')};
				$(elem).addClass('joinput');
				return true;
			}
		}
	}

	return true;
}

this.loadVars = function(){
	var scripts = document.getElementsByTagName("script");
	for (var i in scripts){
		if(typeof(scripts[i])!="undefined"&&typeof(scripts[i].src)!="undefined"&&scripts[i].src.indexOf('formvalidation.js')>0){
		
			  var keres = scripts[i].src.replace(/^[^\?]+\??/,'');
			  var valtozok = keres.split(/[;&]/);
			  for ( var i = 0; i < valtozok.length; i++ ) {
				var valtozo = valtozok[i].split('=');
				if ( ! valtozo || valtozo.length != 2 ) continue;
					var kulcs = unescape( valtozo[0] );
					var ertek = unescape( valtozo[1] );
					ertek = ertek.replace(/\+/g, ' ');
					if (kulcs == "lang") {
						lang = ertek;
						this.lang = ertek;
					}
			  }

		};
	}
}

this.init();
return this;
}