/*CHECKFIELD vars

vArgChecker v0.9

R	varchar veld verplicht
E	email, : option emailnamefield ,emailnamefield2 doublechecker
NE	email optioneel
P	Postcode verplicht
N	nummer verplicht
NN	nummer optioneel
T	telefoon verplicht
NT	telefoon optioneel
I	Radiobutton verplicht
C	checkbox verplicht
BL	Geboortedatum+ legal age check 18 jaar


function returns 
object.myStatus true or false
object.message = htmlmessage code
*/

// globals
var editors = [];
var actionAfterUpdate = function(){};
document.alerterTimeout = setTimeout;


// initialize first time
$(document).ready(function(){
	$("#preLoader").hide();
});

// functions ///////////////////////////////////////////////////////////////


function scriptLoader(url) {
	var script = document.createElement('script'); 
	script.type = 'text/javascript'; 
	script.src = document.WEBPATH+'js/'+url; 
	document.getElementsByTagName('head')[0].appendChild(script); 
}


function array_length(arr) {
	var length = 0;
    for(val in arr) {
    	length++;
    }
	return length;
}




function checkFields () {
	// ajax getter/setter for content of tinymce fields
	for (i=0;i<array_length(editors);i++) {
		ed = tinyMCE.get(editors[i]);
		$("#"+editors[i]).val(ed.getContent());
	}

	args= [];// hack for converting arguments to array
	for (i=0; i < arguments.length;i++) args.push(arguments[i]);
	// end hack
	
	args.splice(0,0,"form1","successDiv");
	formname = args[0];
	var successdiv = args[1];
	if ($("#"+formname).attr("translatefields") == undefined) {
		translateFields = {'title' : 'titel','menuname': 'menunaam'};
	}else {
		translateFields = {};
		var arr = $("#"+formname).attr("translatefields").split(",");
		for (i=0;i<arr.length;i=i+2) { eval('translateFields.'+arr[i]+' = \''+arr[i+1]+'\''); };
	}

	returnValue = vArgChecker(args,{'border':'1px solid #090'},{'border':'1px solid #C00'},translateFields);
	
	var status = returnValue.status;
	var message = returnValue.message;

	if (!status) {
		alert('Verplichte velden zijn niet ingevuld. Die worden als rood aangegeven.');
		alerter(message,"alerter_formerror","SLUIT");
	}


	// submit
	if ($("#form1").attr("xmlpost") && status) 
	{
	status = false;
	$("#preLoader").show();
	clearTimeout(document.alerterTimeout );
	document.alerterTimeout  = setTimeout(function() {

		var id_text;
		var error_text;
		$.ajax({
		type: $("#form1").attr("method"),
		url: $("#form1").attr("xmlpost"),
		data : $("#form1").serialize(),
		dataType: "xml",
		success: function(xml) {
				$(xml).find('item').each(function(){
					 id_text = $(this).attr('id');
					 index_text = $(this).attr('index');
					 publish_id_text = $(this).attr('publish_id');
					 page_url = $(this).find('page_url').text();
					 error_text = $(this).find('error').text();
				 }); //close each(
				$("#preLoader").hide();
				if (error_text == 'success') {
					if (id_text !="") $("#id").val(id_text);
					if (index_text !="") $("#index").val(index_text);
					if (publish_id_text !="") $('#publish_id').val(publish_id_text);
					
					if (page_url !="") $("#page_url").val(page_url);
					$("#action").val("update");
					alerter("Gegevens zijn succesvol opgeslagen. (id:"+$("#id").val()+")","alerter_success");
					actionAfterUpdate();
				}else {
					alerter("Fout bij opslaan van gegevens: (id:"+$("#id").val()+")<br><span style=\"font-size:9px\">("+error_text+")</span>","alerter_error","SLUIT");
				}
				
	
			},
			  error: function(data) {
				$("#preLoader").hide();
				alerter("Er is iets foutgegaan ("+data.status+")","alerter_error","SLUIT");
			  }
	
		}); //close $.ajax
	},1000);
	}
	return status;
}


function initAlerter() {
	alerterRemove();
	$("#topBox").append('<div id="alerterDiv"></div>');
}

function alerter(txt,myclass,button) {
	initAlerter();
	if (myclass) {
		$("#alerterDiv").addClass(myclass);
	}else {
		$("#alerterDiv").addClass("alerter");
	}
	if (button != undefined)
	{
		$("#alerterDiv").html(txt+'<div style="float:right;padding-right:50px"><input name="Login" type="button" class="button_lightgrey" onClick="$(\'#alerterDiv\').fadeOut()" value="'+button+'"></div>').fadeIn("slow");
	}else{
		$("#alerterDiv").html(txt).fadeIn("slow",function(){document.alerterTimeout = setTimeout(function(){$("#alerterDiv").fadeOut("slow")},3000);});
	}
}

function confirmer(txt,myclass,doFunction) {
	initAlerter();
	document.confirmation = 2;
	if (myclass) {
		$("#alerterDiv").addClass(myclass);
	}else {
		$("#alerterDiv").addClass("confirmation");
	}
	$("#alerterDiv").html('<div style="float:right;padding-right:40px"><input name="Login" type="button" class="button_darkgrey" onClick="document.confirmation=true" value="BEVESTIGEN">&nbsp;&nbsp;<input name="Login" type="button" class="button_lightgrey" onClick="document.confirmation=false" value="ANNULEREN"></div>'+txt).fadeIn("slow");
	document.alerterTimeout = setInterval(function(){if (document.confirmation<2) { $("#alerterDiv").fadeOut("slow");if (document.confirmation){
alerterRemove();doFunction();
}}},100);
}

function alerterRemove()
{
	clearTimeout(document.alerterTimeout);
	clearInterval(document.alerterTimeout);$("#alerterDiv").stop();
	$("#alerterDiv").remove();
}


function linkpicker(id)
{
	for (i=0;i < pageurltotal;i++ ) {
		$("#"+id).next().append("<option value=\""+pageurls[i].value+"\">"+pageurls[i].title+"</option>")
	}
	$("#"+id).next().change(function(){ $("#"+id).val($(this).val())})
}

function statusChange()
{
	$("#statusChange").remove();
	$("#topBox").prepend("<div id='statusChange'>Er zijn wijzigingen doorgevoerd maar nog niet opgeslagen.<div id=\"closeme\" onClick=\"$(this).parent().remove()\">x</div></div>");

}

function removeLang(mydbtable)
{
	var matches = mydbtable.match(/^CMS_([a-z][a-z])_/g);
	if (matches != null) {
		mydbtable = "CMS_"+mydbtable.substr(7, mydbtable.length);
	}
	return mydbtable;
}

function changeLanguage(l)
{
	alerter("Huidige taalcode: "+l,"alerter_success");
	$.cookie("LANG", l, { path: '/', expires: 10 });
	document.location.reload();
}

function validate_columnfield(id,dbtable,field,input)
{
	if (field != "" && field != undefined)
	{
		if (id == "") id = 0;
	$.ajax({
	  url: document.WEBPATH+'internals/db/validate_columnfield.php?id='+id+'&dbtable='+dbtable+'&field='+field+"&input="+escape(input),
	  dataType: 'json',
	  success: function(data) {
		if (data.error!= 0)
		{
			$("#"+field+"_error").show();
			$("input[type=submit]").hide();
		}else
		{
			$("#"+field+"_error").hide();
			$("input[type=submit]").show();
		}
	  },error : function(data){ alerter("error:"+data.error) }
	  })
	}else {
		$("input[type=submit]").show();
	}
}

function vArgChecker(myArgs,cssOk,cssError,translateFields) {
	if (translateFields == undefined) translateFields = {};

	function isEmail( email ) {
		var re1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\,)/;
		var re2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
		var l = true;
		if (email.length < 8) l = false;
		return ( !re1.test(email) && re2.test(email) && l );
	}
	
	function isPostcode( postcode ) {
		var re2 = /^([1-9])([0-9]){3}\h*([a-zA-Z]){2}$/;
		return (re2.test(postcode));
	}
	
	function isTelefoon( telefoon ) {
		var tel = telefoon.replace("-","").replace(" ","");
		var re2 = /^([0]|[0]{2}[3][1]|[+][3][1])[0-9]{9}$/;
		return (re2.test(tel));
	}
	
	
	function checkBirthDay(v) {
		if (Number(v) && v > 0 && v < 32 ){
			return true;
		}else {
			return false;
		};
	}
	
	
	function checkBirthMonth(v) {
		if (Number(v) && v > 0 && v < 13 ){
			return true;
		}else {
			return false;
		};
	}
	
	function checkBirthYear(v) {
		var now_date = new Date();
		if (Number(v) && v > 1900 && v < now_date.getFullYear() ){
			return true;
		}else {
			return false;
		};
	}
	
	function checkBirthLegal(d,m,y,legalAge) {
		var check = false;
		var now_date = new Date();
		var currentDate = {day:now_date.getDate() ,month:(now_date.getMonth()+1),year:now_date.getFullYear(),hour:now_date.getHours()};
		if (y <(currentDate.year-legalAge) ||(y ==(currentDate.year-legalAge) && (m < currentDate.month ||(m== currentDate.month && d <= currentDate.day)))) {
			check = true;
		}
		return check;
	
	}

// Main function


	function translate(id){
		if (translateFields[id] != undefined) {
			return translateFields[id];
		}else {
			return id;
		}
	}

	var myStatus = true;
	var formname = myArgs[0];
	var successdiv = myArgs[1];
	var myMessage = "<h1>Niet alle velden zijn correct ingevuld:</h1><br>";

	for (i = 2; i < myArgs.length; i=i+2 ) {

		if (myArgs[i+1] =="BL" || myArgs[i+1] =="B") {
			var myElement1 = eval('document.forms[\''+formname+'\'].'+myArgs[i]+"1");
			var myElement2 = eval('document.forms[\''+formname+'\'].'+myArgs[i]+"2");
			var myElement3 = eval('document.forms[\''+formname+'\'].'+myArgs[i]+"3");
			$("#"+myElement1.id+", #"+myElement2.id+", #"+myElement3.id).css(cssOk);
		}else {
			var myElement = eval('document.forms[\''+formname+'\'].'+myArgs[i]);
			if (myElement != undefined && myElement.style != undefined) {$("#"+myElement.id).css(cssOk)};
		}
		
		// check for wrong fieldnames
		if (myElement == undefined) {
				alert('fieldname not present in form: '+myArgs[i]);
		return false;
		}

// fieldname exists
		switch(myArgs[i+1]) {
			case 'R': //varfield
			if (myElement.value == ''){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.id)+"</span> is niet correct.";
				myStatus=false;
			};
			break;
			case 'E': //email 
			if (myElement.value == '' || !isEmail(myElement.value)){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">Email adres</span> is niet correct.";
				myStatus=false;
			};
			// email2 checkup
				if ($("#"+myElement.id).val() != $("#"+myElement.id+"2").val() && $("#"+myElement.id+"2").attr('id') != undefined){ 
					$("#"+myElement.id+"2").css(cssError);
					myMessage += "<br>- <span class=\"vBoxErrorField\">Bevestigingsemail</span> is niet gelijk.";
					myStatus=false;
				}else if($("#"+myElement.id+"2").attr('id') != undefined) {
					$("#"+myElement.id+"2").css(cssError);
				}
			break;
			case 'NE': //email 
			if (myElement.value != '' && !isEmail(myElement.value)){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">Email adres</span> is niet correct.";
				myStatus=false;
			};
			break;
			case 'P': //postcode 
			if (myElement.value == '' || !isPostcode(myElement.value)){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.id)+"</span> is niet correct.";
				myStatus=false;
			};
			break;
			case 'N': //Number 
			if (myElement.value == '' || isNaN(myElement.value)){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.id)+"</span> is niet correct.";
				myStatus=false;
			};
			break;
			case 'NN': //Number but not optional
			if (myElement.value != '' && isNaN(myElement.value)){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.id)+"</span> is niet correct.";
				myStatus=false;
			};
			break;
			case 'T': //Telephone 
			if (myElement.value == '' || !isTelefoon(myElement.value)){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.id)+"</span> is niet correct.";
				myStatus=false;
			};
			break;
			case 'NT': //Telephone
			if (myElement.value != '' && !isTelefoon(myElement.value)){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.id)+"</span> is niet correct.";
				myStatus=false;
			};
			break;

			case 'I': //radiobuttons
			var radioChecked = false;
			$('input[name='+myArgs[i]+']:radio:checked').each(function(c){
				if ($(this).val() != false)  radioChecked = true;												 
			});			 
			if (!radioChecked) {
				//eval('document.getElementById(\''+myArgs[i]+'_alert\').style.border = \'solid 1px #FF0000\';');
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myArgs[i])+"</span> is niet gekozen.";
				myStatus=false;
			}
			break;
			case 'C': //checkbox 
			if (!$("#"+myElement.id).attr('checked')){ 
				$("#"+myElement.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement.name)+"</span> is niet aangevinkt.";
				myStatus=false;
			};
			break;
			case 'BL': //birthcheck + legal age 
			var birthCheck = true;
			if (!checkBirthDay($("#"+myElement1.id).val()) ){ 
				$("#"+myElement1.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement1.id)+"</span> is niet correct.";
				birthCheck=false;
			}
			if ( !checkBirthMonth($("#"+myElement2.id).val())){ 
				$("#"+myElement2.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement2.id)+"</span> is niet correct.";
				birthCheck=false;
			}
			if ( !checkBirthYear($("#"+myElement3.id).val())){ 
				$("#"+myElement3.id).css(cssError);
				myMessage += "<br>- <span class=\"vBoxErrorField\">"+translate(myElement3.id)+"</span> is niet correct.";
				birthCheck=false;
			}
			if (birthCheck && !checkBirthLegal($("#"+myElement1.id).val(), $("#"+myElement2.id).val(), $("#"+myElement3.id).val(), 18) ){ 
				$("#"+myElement1.id+", #"+myElement2.id+", #"+myElement3.id).css(cssError);
				myMessage += "<br>- Je bent nog geen 18 jaar.";
				birthCheck=false;
			};
			myStatus = birthCheck;
			break;
		}
	}
	return {'status' : myStatus, 'message' : myMessage };
}
