var spaw_editors = new Array();
var tinymce_editors = new Array();
var checkobjects = new Array(); //name array
var nocheckobjects = new Array(); //id array
var alteridcheckobjects = new Array(); //mas hibauzenet alteridcheckobjects.push('regi|új');
var nochecktypes = new Array("select-one","hidden","reset","checkbox","button");
var formcheck=false;
var progressbar_exists=false;
var progressbar_id='progress_bar_div';
var hidediv_id='';
var dontmarkrequiredfields= false;
var precheckerror='';

// form check MAIN
function checkform(){
	try{
    if(document.getElementById(progressbar_id))
		progressbar_exists=true;
    var a=checkform.arguments;
    formname = a[0];
    posttype = a[1];

	var reqgroupsarray=new Array();
	var reqgroupdataarray=new Array();
	
	var optgroupsarray=new Array();
	var optgroupdataarray=new Array();
	
	var checkfailedobjects=new Array();
	
    var valuetypecheck=false;
    if(spaw_editors.length>0){ SPAW_UpdateFields(); }

    if(tinymce_editors.length>0){
      for(i=0;i<tinymce_editors.length;i++) {
        tinymce_editors[i].syncValue();
        nocheckobjects.push(tinymce_editors[i].textareaEl.id);
      }
    }

    aktform = document.forms[formname];
    if(checkobjects.length==0)
        numinputs = aktform.elements.length;
    else
        numinputs = checkobjects.length;

    var errorhead = checkmsg_errorhead + ":\n";
    var error=precheckerror;

	function markfailedobjects(fobjectarray){
		for(i=0;i<fobjectarray.length;i++){
			if(fobjectarray[i].style.background!="")
				fobjectarray[i].lang=fobjectarray[i].style.background;
			else
				fobjectarray[i].lang="#FFFFFF";			
			fobjectarray[i].style.background="#FFFCE8";
			fobjectarray[i].style.border="#FF0000 1px solid";
		}
		
		checkfailedobjects=new Array();
	}
	
	
    function checkvaluetype (string,valuename,type,minlimiter,maxlimiter){
        type = exploded[1];
        minlimiter = exploded[2];
        maxlimiter = exploded[3];
		success = true;
		
        // EMAIL ellenorzés
        if ((type=='email') && (!string.match(/\b(^(\S+@).+(\..{2,4})$)\b/gi))){
			error = error + " - " + string + ": " + checkmsg_mailerror +"\n";
			success=false;
		}

        // NUMBER ellenorzés
        if ((type=='number')&& (!string.match(/^\d*\.?\d*$/))){
            error = error + " - " + valuename + ": " + checkmsg_numerror +"\n";
			success=false;
		}
        else{
            if((parseFloat(string)>maxlimiter) && (maxlimiter>0)){
                error = error + " - " + valuename + ": " + checkmsg_nummaxerror +": " + maxlimiter + " \n";
				success=false;
			}
            if((parseFloat(string)<minlimiter) && (minlimiter>0)){
                error = error + " - " + valuename + ": " + checkmsg_numminerror +": " + minlimiter + " \n";
				success=false;
			}
        }

        // TEXT ellenorzés
        if(type=='text'){
            if((string.length>maxlimiter) && (maxlimiter>0)){
                error = error + " - " + valuename + ": " + checkmsg_maxchrlimit +": " + maxlimiter + " \n";
				success=false;
			}
            if((string.length<minlimiter) && (minlimiter>0)){
                error = error + " - " + valuename + ": " + checkmsg_minchrlimit +": " + minlimiter + " \n";
				success=false;
			}
        }
		return(success);
    }

	function replaceiderrormsg(id){
		var replacedid=id;
		var compdata= new Array();
		for(r=0;r < alteridcheckobjects.length;r++){
			compdata = alteridcheckobjects[r].split('|');
			if(compdata[0]==id) {replacedid=compdata[1];}
		}
		return replacedid;
	}
	
    if(formcheck==false){
        for (i=0;i<numinputs;i++){
            checkresult='success';
			
			if(checkobjects.length==0)
                aktformobject=aktform.elements[i];
            else
                aktformobject=document.all[checkobjects[i]];

            // ha van id-je
            if(aktformobject.id!=null){
                string=strip(aktformobject.value);
                exploded=aktformobject.id.split('|');
                if(!isnocheckobject(exploded[0]) && !isnochecktype(aktformobject.type)){
                    //ha kötelezően kitöltendő
                    if(aktformobject.id.indexOf('|optional')==-1){
						if(aktformobject.id.indexOf('|reqgroup')==-1 && aktformobject.id.indexOf('|optgroup')==-1){
	                        if ((string == "")&& ( exploded[0] !== '') && ( exploded[0] !== 'f_date_b') ){
	                            textareaError=true;
	                            if( (a[2]!=='') && (exploded[0].indexOf(a[2])!=-1))
	                                textareaError=false;
	                            if(textareaError==true){
									error = error + " - " + replaceiderrormsg(exploded[0]) + ": " + checkmsg_notfilled + "\n";
									checkresult='failed';
								}
	                        }
	                        else{
	                            if((string !== "")&& ( exploded[0] !=='')&& ( exploded[1] !=='')){
	                                if(!checkvaluetype (string,exploded[0],exploded[1],exploded[2],exploded[3]))
										checkresult='failed';
								}
	                        }
						}
						// ha legalabb egy elem szukseges csoport tagja
						else{
							if(aktformobject.id.indexOf('|reqgroup')!=-1){
								groupdata=aktformobject.id.split('reqgroup|');
								groupnamedata=groupdata[1].split('|');
								groupname=groupnamedata[0];
								
								if(!in_js_array(reqgroupsarray,groupname)){
									reqgroupsarray.push(groupname);
									reqgroupdataarray[groupname]=new Array();
									reqgroupdataarray[groupname].push(aktformobject);
								}
								else
									reqgroupdataarray[groupname].push(aktformobject);
							}
							if(aktformobject.id.indexOf('|optgroup')!=-1){
								groupdata=aktformobject.id.split('optgroup|');
								groupnamedata=groupdata[1].split('|');
								groupname=groupnamedata[0];
								
								if(!in_js_array(optgroupsarray,groupname)){
									optgroupsarray.push(groupname);
									optgroupdataarray[groupname]=new Array();
									optgroupdataarray[groupname].push(aktformobject);
								}
								else
									optgroupdataarray[groupname].push(aktformobject);							
							}
						}
                    }
                    //ha opcionális
                    else{
                        if(string !=""){
                            if(!checkvaluetype (string,exploded[0],exploded[1],exploded[2],exploded[3]))
								checkresult='failed';
						}
                    }
                }
            }
            // ha nincs id-je (checkobjectlista esetén)
            else{
                if(strip(aktformobject.value)==""){
                    error = error + " - " + aktformobject.name + ": " + checkmsg_notfilled +"\n";
					checkresult='failed';
				}
            }
			
			if(checkresult!='success')
				checkfailedobjects.push(aktformobject);
			else{
				if(aktformobject.lang!=""){
					aktformobject.style.background="";
					aktformobject.style.border="#739380 1px solid";
					aktformobject.lang="";
				}
			}
			
        }
		
		// legalabb 1 mezo szukseges csoport		
		for(i=0;i<reqgroupsarray.length;i++){
			groupname=reqgroupsarray[i];
			oneisvalid=false;
			for(j=0;j<reqgroupdataarray[groupname].length;j++){
				aktobject=reqgroupdataarray[groupname][j];
				if(aktobject.value!=""){
					exploded=aktobject.id.split('|');
					if(checkvaluetype (aktobject.value,exploded[0],exploded[1],exploded[2],exploded[3]))
						oneisvalid=true;
					else
						checkfailedobjects.push(reqgroupdataarray[groupname][j]);
				}
			}
			if(!oneisvalid){
				for(j=0;j<reqgroupdataarray[groupname].length;j++)
					checkfailedobjects.push(reqgroupdataarray[groupname][j]);
				error=error + " - " + groupname  + ': ' + checkmsg_reqgroupempty;
			}	
		}
		
		// ha 1 mezo kitoltve az osszes mezo szukseges csoport
		for(i=0;i<optgroupsarray.length;i++){
			groupname=optgroupsarray[i];
			allisvalid=true;
			oneisfilled=false;
			for(j=0;j<optgroupdataarray[groupname].length;j++){
				if(optgroupdataarray[groupname][j].value!=""){
					oneisfilled=true;
					break;
				}	
			}
			
			if(oneisfilled){
				for(j=0;j<optgroupdataarray[groupname].length;j++){
					aktobject=optgroupdataarray[groupname][j];
					exploded=aktobject.id.split('|');
					if(aktobject.value!=""){
						if(!checkvaluetype (aktobject.value,exploded[0],exploded[1],exploded[2],exploded[3])){	
							allisvalid=false;
							checkfailedobjects.push(optgroupdataarray[groupname][j]);
						}
					}
					else{
						allisvalid=false;
						error = error + " - " + exploded[0] + ": " + checkmsg_notfilled +"\n";
						checkfailedobjects.push(optgroupdataarray[groupname][j]);
					}
				}
				if(!allisvalid){
					error=error + " - " + groupname  + ': ' + checkmsg_optgroupempty;
				}
			}
		}		
		
		
        if(posttype=="button"){
            if (error != "") {
                error=errorhead + error;
                if(progressbar_exists==true){
                    document.getElementById(progressbar_id).style.display = 'none';
                }
                if(hidediv_id!=""){
                    document.getElementById(hidediv_id).style.visibility = 'visible';
                    document.getElementById(hidediv_id).style.display = 'block';
                }
				markfailedobjects(checkfailedobjects);
                alert(error);
            }
            else {aktform.submit();}
        }
        else{
            if (error != "") {
                error=errorhead + error;
                if(progressbar_exists==true){
                    document.getElementById(progressbar_id).style.display = 'none';
                }
                if(hidediv_id!=""){
                    document.getElementById(hidediv_id).style.visibility = 'visible';
                    document.getElementById(hidediv_id).style.display = 'block';
                }
 				markfailedobjects(checkfailedobjects);               
				alert(error);
                return false;
            }
            else {return true;}
        }
    }
    else{return true;}
    }
    catch(e){ alert(e.description);}
}

function strip(s)
{
    if((s)||(s=='')){
    while((s.indexOf(' ',0) == 0) && (s.length > 1))
    {
        s = s.substring(1,s.length);
    }
    while((s.lastIndexOf(' ') == (s.length - 1) && (s.length > 1)))
    {
        s = s.substring(0,(s.length - 1));
    }
    if((s.indexOf(' ',0) == 0) && (s.length == 1)) s = '';
    return s;
}
}


/// NOCHECK FÜGGVÉNYEK

function nocheck(){
    formcheck=true;
}

function addnocheckobject(objectid){
    nocheckobjects.push(objectid);
}

function removenocheckobject(objectid){
    for(i=0;i < nocheckobjects.length;i++){
        if(nocheckobjects[i]==objectid)
            nocheckobjects[i]="";
    }
}

function in_js_array(jsarray,value){
	for(s=0;s<jsarray.length;s++){
		if(jsarray[s]==value)
			return true;
	}
	return false;
}

function isnocheckobject(objectid){
    var nocheckobject=false;
    for(l=0;l< nocheckobjects.length;l++){
        if(nocheckobjects[l]==objectid)
            nocheckobject=true;
    }
    return nocheckobject;
}

function isnochecktype(type){
    var nochecktype=false;
    for(k=0;k < nochecktypes.length;k++){
        if(nochecktypes[k]==type) {nochecktype=true;}
    }
    return nochecktype;
}

function killenter(field, event){
    if(event.keyCode==13){
    return false;
    }	
}

function markrequiredfields(){
	if(dontmarkrequiredfields==false){
		for(i=0;i<document.forms.length;i++){
			if(document.forms[i].onsubmit!=null){
				for(j=0;j<document.forms[i].elements.length;j++){
					if(document.forms[i].elements[j].id!=""){
						exploded=document.forms[i].elements[j].id.split('|');
						if(!isnocheckobject(exploded[0]) && !isnochecktype(document.forms[i].elements[j].type))
							document.forms[i].elements[j].style.border="#739380 1px solid";
					}		
				}
			}	
		}
	}
}

setTimeout("markrequiredfields();",100);

