var gValidColor = "window";
var gErrorColor = "#ffdddd";
var gValid;
var gAlert;
var cmsFormChecks = {};

function getCheckField(obj, name) {
	for (var i = 0; i < obj.length; i++) {
		if (obj[i].name == name) {
			return obj[i];
		}
	}
	return null;
}

function MarkElement(elem, valid, msg, frmtmsg) {
	if (valid) {
		if (elem && elem.type != "checkbox" && elem.type != "radio") {
	 		elem.style.backgroundColor = gValidColor;
	    }
    	if (window.tabjs && !tabCheckFormat(elem)) { // tab.js loaded?
    	    valid = false;
    	    msg = frmtmsg || msg;
    	}
	}
	if (!valid){
		if (elem) {
		    elem.focus();
		    if (elem.type != "checkbox" && elem.type != "radio") {
			    elem.style.backgroundColor = gErrorColor;
				if (elem.tagName == "SELECT") {
					if (!elem.onchange) {
						elem.onchange = UnmarkElementOnEvent;
					}
				} else {
					elem.onkeyup = UnmarkElementOnEvent;
				}
	        }
	    }
		gValid = false;
		if (msg) gAlert = msg;
	}
	return valid;
}

function UnmarkElement(elem) {
	if (window.tabjs) { // tab.js loaded?
		tabEnableApplyButton(elem);
    	tabDoVisibility(null, elem);
    }
	if ((elem.type == "text" || elem.tagName == "TEXTAREA") && !elem.value) return;
	if (elem.type != "checkbox" && elem.type != "radio") {
	    elem.style.backgroundColor = gValidColor;
	}
}
function UnmarkElementOnEvent(evt) {
	evt = (evt) ? evt : ((event) ? event : null);
	if (evt) {
		var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
		var keycode;
		if (window.event) {
			keycode = window.event.keyCode;
		} else {
			keycode = evt.which;
		}
		//alert(keycode);
		if ((keycode ==  9 || // tab
		     keycode == 37 || // left
		     keycode == 38 || // up
		     keycode == 39 || // right
		     keycode == 40 || // down 
		     keycode == 16 || // shift
		     keycode == 17 || // ctrl
		     keycode == 18 || // alt
		     keycode == 20 || // caps
		     keycode == 33 || // pgup
		     keycode == 34 || // pgdn
		     keycode == 35 || // end
		     keycode == 36 || // home
		     keycode == 45 || // insert
		     //keycode == 120 || // F9
		     //keycode == 0 || 
		     //keycode == 8 || // backspace
		     (keycode == 13 && elem.tagName != "TEXTAREA"))
		) return true;
		//alert(keycode);
		
		if (elem) {
		    UnmarkElement(elem);
		}
	}
	return true;
}

var gspecialCharacterString = "' \" < > = & ? % | ;";
function checkSpecial(x) {
	var filter = /'|"|<|>|=|&|\?|%|\||;/;
	return !filter.test(x);
}

function checkAllTextFields(form) {
	var i, a;
	for (i=0; (a = form.getElementsByTagName("INPUT")[i]); i++) {
		if (a.type == "text" && a.value && !checkSpecial(a.value)) {
			return a;
		}
	}
	for (i=0; (a = form.getElementsByTagName("TEXTAREA")[i]); i++) {
		if (a.value && !checkSpecial(a.value)) {
			return a;
		}
	}
	return null;
}

function stripAllTextFields(form) {
	var i, a;
	for (i=0; (a = form.getElementsByTagName("INPUT")[i]); i++) {
		if (a.type != "file") { // value file input may not be set
			a.value = a.value.replace(/^\s+/,'');
			a.value = a.value.replace(/\s+$/,'');
		}
	}
	for (i=0; (a = form.getElementsByTagName("TEXTAREA")[i]); i++) {
		if (!a.getAttribute("tabnostrip")) {
		    a.value = a.value.replace(/^\s+/,'');
		    a.value = a.value.replace(/\s+$/,'');
		}
	}
	return null;
}

function checkMail(x) {
	//var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	//var filter = /^[\w-]+(.[\w-]+)*@[\w-]+(.[\w-]+)*\.[\w-]{2,4}$/;
	var filter = /^[&'*+-.0-9=?a-zA-Z^_{}~]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,4}$/;
	return filter.test(x);
}

function checkWebsite(x) {
	return true;
}

function getParentObject(object, tag) {
	if (!tag) {
		tag = "DIV";
	}
	if (tag == "BLOCK") {
	    tag = "H1,H2,H3,TD,P,UL,OL,";
	} else {
       tag += ",";
    }

	while ((tag.indexOf(object.tagName+",") == -1) && object.parentNode) {
		object = object.parentNode;
	}

	return object.tagName ? ((tag.indexOf(object.tagName+",") != -1) ? object : null) : null;
}

function getCookie(cookieName) {
	var search = cookieName + "=";
	if (document.cookie.length > 0) { // if there are any cookies
		var offset = document.cookie.indexOf(search);
		if (offset != -1) { // if cookie exists
			offset += search.length;          // set index of beginning of value
			var end = document.cookie.indexOf(";", offset);          // set index of end of cookie value
			if (end == -1)
				end = document.cookie.length;
			return unescape(document.cookie.substring(offset, end));
		}
	}
}

function setCookie(cookieName,cookieValue,cookieExp,cookieExpSecs) { //cookieExp in days
	if (cookieExp) {
		var expire = new Date();
		expire.setTime(expire.getTime() + 3600000*24*cookieExp);
		cookieExp = "expires="+expire.toGMTString();
	}
	if (cookieExpSecs) {
		var expire = new Date();
		expire.setTime(expire.getTime() + 1000*cookieExpSecs);
		cookieExp = "expires="+expire.toGMTString();
	}
	//PS: overige cookies blijven ongewijzigd, wijzigt eventueel bestaand cookie
	document.cookie = cookieName+"="+escape(cookieValue)+";path=/;"+cookieExp;
}

function setSize(size) {
    setCookie("fontsize", size, 1000);
    location.reload(location.href);
}

function getParameter(parameterName) {
	var re = new RegExp("[?&;]"+parameterName+"=([^&;]*)");
	var r = re.exec(location.href);
	if (r) {
		return unescape(r[1]);
	} else {
		return "";
	}
}

function ShowCheckedOther(id) {
	var display = "none";
	var elem = document.getElementById(id+"othercb");
	if (elem.checked) {
		display = "inline";
	}
	document.getElementById("opt "+id+"other").style.display = display;
}

function ShowSelectOther(id) {
	var display = "none";
	var elem = document.getElementById(id);
	if (elem.options[elem.length-1].selected) {
		display = "inline";
	}
	document.getElementById("opt "+id+"other").style.display = display;
}

function InitSelects(formid) {
	var form = document.getElementById(formid);
	var i, elem;
	for (i=0; (elem = form.getElementsByTagName("SELECT")[i]); i++) {
		var toselect = document.getElementById("selected"+elem.id);
		if (toselect && toselect.value != "") {
			for (j=0; j < elem.length; j++) {
				if (toselect.value == (elem.options[j].value || elem.options[j].text)) {
					elem.options[j].selected = true;
				}
			}
		}
	}
}

function InitCheckboxes(formid) {
	var form = document.getElementById(formid);
	var i, elem;
	for (i=0; (elem = form.getElementsByTagName("INPUT")[i]); i++) {
		if (elem.type == "checkbox" && document.getElementById("selected"+elem.name)) {
			var tocheck = document.getElementById("selected"+elem.name);
			if (tocheck && tocheck.value != "") {
				if (tocheck.value.indexOf(elem.value) != -1) {
					elem.checked = true;
				}
			}
		}
	}
}

function InitRadios(formid) {
	var form = document.getElementById(formid);
	var i, elem;
	for (i=0; (elem = form.getElementsByTagName("INPUT")[i]); i++) {
		if (elem.type == "radio" && document.getElementById("selected"+elem.name)) {
			var tocheck = document.getElementById("selected"+elem.name);
			if (tocheck && tocheck.value != "") {
				if (tocheck.value == elem.value) {
					elem.checked = true;
				}
			}
		}
	}
}

function imagePopup(url, w, h) {
	w += 40;
	h += 40;
	var win = window.open(url,"imagePopup","scrollbars,status,resizable,width="+w+",height="+h);
	win.focus();
}

function moveToTop() {
    var totop = document.getElementById("totop");
    if ((document.body.scrollHeight > document.body.clientHeight) && (document.body.scrollTop > 100)) {
        totop.style.display = "block";
        totop.style.top = document.body.scrollTop+document.body.clientHeight-35+"px";
    } else {
        totop.style.display = "none";
    }
    setTimeout("moveToTop()",50);
}

function jumpToTop() {
    location.replace(location.href.split("#")[0]+"#top");
}

function DigitsOnly(e) {
	var keycode;
	if (window.event) {
		keycode = window.event.keyCode;
	} else {
		if (e) {
			keycode = e.which;
		} else {
			return true;
		}
	}
	if (keycode > 47 && keycode <= 58) {
	   return true;
	}
	return false;
}

function openHelp(site, jumpto, path) {
    if (!path) path = '/cms/beheer/';
    var url = path+"help.cgi";
    if (site) url += "?site="+site;
    if (jumpto) url += "#"+jumpto;
    var w = window.open(url,"xcmshelp");
    w.focus();
    return false;
}

function mySetFocus(id) {
	var elem = document.getElementById(id);
	if (elem) elem.focus();
}

function inCMS() {
	return /page\.cgi/.test(location.href);
}

/***** forms *****/
var gSubmitting;
function cmsFormSubmit(button, id, upload) {
	if (gSubmitting) return false;
	gSubmitting = true;
	if (cmsFormValidate(id)) {
		if (upload) cmsStartUploadProgress(id);
		document.getElementById(id).submit();		
	} else {
		gSubmitting = false;
	}
	return false;
}

function cmsFormValidate(id) {
	gValid = true;
	gAlert = '';

	var form = document.getElementById(id);

	stripAllTextFields(form);

	var checks = cmsFormChecks[id];
	for (var i = 0; i < checks.length; i++) {
		var elem = document.getElementById(checks[i].name);
		cmsFormValidateElem(elem, checks[i]);
	}
	
	// decrypt recipients if necessary
	if (form.recipient) {
		var recipient;
		while ((recipient = /decrypt:(\d+)/g.exec(form.recipient.value))) {
			form.recipient.value = form.recipient.value.replace(/decrypt:(\d+)/, decrypt_string(recipient[1], 0, 0, true));
		}
	}
		
	/// alert?!
	if (!gValid && gAlert) alert(gAlert);

	return gValid;
}

function cmsFormValidateElem(elem, check) {
	if (elem) {
		if (check.required && !cmsFormElemHasValue(elem)) {
			MarkElement(elem, false, check.required_err);
			return;
		}
		if (cmsFormElemHasValue(elem)) {
			if (typeof check.validation == "string") {
				MarkElement(elem, eval(check.validation), check.validation_err);
			} else if (/^\//.test(check.validation)) {
				MarkElement(elem, check.validation.test(elem.value), check.validation_err);
			} else {
				check.validation(elem);
			}
		} else {
			MarkElement(elem, true);
		}
	}
}

function cmsFormElemHasValue(elem) {
	if (elem.type == 'radio' || elem.type == 'checkbox') {
		var elems = document.getElementsByName(elem.name);
		var hasvalue = "";
		for (var i = 0; i < elems.length; i++) {
			if (elems[i].checked) {
				if (hasvalue != "") hasvalue += ", ";
				hasvalue += elems[i].value;
			}
		}
		return hasvalue;
	} else {
		return elem.value;
	}
}

var gUploadStart;
var gUploadFormId;
var gUploadId;
function cmsStartUploadProgress(formId) {
	if (!document.getElementById("File").value) return;
	gUploadId = (new Date()).getTime() % 1000000000;
	document.getElementById(formId).action = document.getElementById(formId).action+"?uploadid="+gUploadId;
	gUploadStart = (new Date()).getTime();
	gUploadFormId = formId;
   	document.getElementById(formId+"uploadprogress").style.display = "block";
    BrowserDetect.init();
    if (BrowserDetect.OS != "Mac") {
    	setTimeout("cmsGetUploadProgress()", 1000);
    } else {
    	document.getElementById(formId+"uploadprogress").innerHTML = "Bestand wordt verstuurd... even geduld a.u.b."
    }
}  
function cmsGetUploadProgress() {
	var unique = (new Date()).getTime() % 1000000000;
	xcmsAJAX("cgi/formmail_status.cgi?uploadid="+gUploadId+";unique="+unique, cmsUploadProgressProcessor);
}
function cmsUploadProgressProcessor() {
	if (httpRequest.readyState == 4) {
		try	{
			if (httpRequest.status == 200) {
                var r = /<data>(.*?)</.exec(httpRequest.responseText);
                r = r[1].split("/");
				var bytesRead = r[0];
				var bytesTotal = r[1];
				if (bytesRead != "" && bytesTotal != "") {
					var progress_bar_width = document.getElementById(gUploadFormId+"uploadprogress").offsetWidth;
					var timeLapsed = ((new Date()).getTime() - gUploadStart)/1000;
					var speed = 0, remaining = 0;
					if (timeLapsed) speed = bytesRead/timeLapsed;
					if (speed) remaining = parseInt((bytesTotal - bytesRead) / speed);
					
					var percent_float = bytesRead / bytesTotal;
					var info_width = Math.round(percent_float * progress_bar_width);
					var percent = Math.round(100 * percent_float);
					
					var remainingf = cmsGetTimeString(remaining); 

					bytesRead = Math.round((bytesRead / 1048576) * 10) / 10;
					bytesTotal = Math.round((bytesTotal / 1048576) * 10) / 10;
					document.getElementById(gUploadFormId+"progressbar").style.width = info_width + "px";
					document.getElementById(gUploadFormId+"progressbarbytes").innerHTML = bytesRead+"Mb/"+bytesTotal+"Mb";
					document.getElementById(gUploadFormId+"progressbartime").innerHTML = remainingf;
					
					setTimeout("cmsGetUploadProgress()", 1000);
				}
			}
		}
		catch(e){}
	}
}
function cmsGetTimeString(seconds) {
	var time_sec = seconds % 60; 
	var time_min = (((seconds - time_sec) % 3600) / 60); 
	var time_hours = ((((seconds - time_sec) - (time_min * 60)) % 86400) / 3600); 
	
	if (time_sec < 10) { time_sec = "0"+time_sec; }
	if (time_min < 10) { time_min = "0"+time_min; }
	if (time_hours < 10) { time_hours = "0"+time_hours; }
	
	var time = time_hours+":"+time_min+":"+time_sec; 
	return time;
}

function myInitSkypeLink() {
  if (/page.cgi/.test(location.href) || (typeof skypeCheck == 'undefined')) return;
  var a = document.getElementsByTagName("A");
  var re = /^skype:/;
  for (var i = 0; i < a.length; i++) {
  	if (re.test(a[i].href)) a[i].onclick=skypeCheck;
  }
}
if (typeof AddToInitArray != 'undefined') AddToInitArray(myInitSkypeLink);

function xcmsPollVote(site, id, vote) {
	var votes = document.getElementsByClassName("poll"+id+"v", "poll"+id);
	var percs = document.getElementsByClassName("poll"+id+"p", "poll"+id);
	var bars = document.getElementsByClassName("poll"+id+"b", "poll"+id);
	
	var totalvotes = parseInt(document.getElementById("poll"+id+"t").innerText)+1;
	votes[vote].innerText = parseInt(votes[vote].innerText)+1;
	
	var up = new Array();
	var down = new Array();
	var totperc = 0;
	for (var i = 0; i < votes.length; i++) {
		var perc = (parseInt(votes[i].innerText)/totalvotes)*100;
		percs[i].innerText = parseInt(perc+0.5);
		var fperc = perc - Math.floor(perc);
		if (fperc >= 0.5) {
			up[up.length] = {
				item: percs[i],
				fperc: fperc
			};
		} else {
			down[down.length] = {
				item: percs[i],
				fperc: fperc
			};
		}
		totperc += parseInt(percs[i].innerText);
	}

	function pollsort(a, b) {
		if (a.fperc == b.fperc) {
			return 0;
		} else if (a.fperc > b.fperc) {
			return 1;
		} else {
			return -1;
		}
	}
	up.sort(pollsort);
	down.sort(pollsort);

	var dev = parseInt(totperc - 100);
	if (dev < 0) {
		for (var i = 0; i < (-1 * dev); i++) {
			var item = down[down.length - i - 1].item;
			item.innerText = parseInt(item.innerText)+1;
		}
	} else if (dev > 0) {
		for (var i = 0; i < dev; i++) {
			var item = up[i].item;
			item.innerText = parseInt(item.innerText)-1;
		}
	}

	for (var i = 0; i < bars.length; i++) {
		bars[i].style.width = percs[i].innerText+"%";
	}
	
	document.getElementById("poll"+id+"t").innerText = totalvotes;		

	document.getElementById("pollquestion"+id).style.display = "none";
	document.getElementById("pollresults"+id).style.display = "block";
	var unique = (new Date()).getTime() % 1000000000;
	xcmsAJAX("/cgi/poll.cgi?site="+site+";id="+id+";vote="+vote+";unique="+unique);
		
	return true;
}

