//*********************************************************************
//****** FULLMOON HANDY JAVASCRIPPIES *********************************
//*********************************************************************
//*********************************************************************
 
	function sajax_init_object() {
		var A;
		try {
			A=new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				A=new ActiveXObject("Microsoft.XMLHTTP");
			} catch (oc) {
				A=null;
			}
		}
		if(!A && typeof XMLHttpRequest != "undefined")
			A = new XMLHttpRequest();
		if (!A)
			alert("Error:Could not create connection object.");
		return A;
	}
  
  function openStats(aurl)
  {
  	var w=window.open(aurl,'stats_window','width=660,height=600,toolbar=no,location=no,status=no,menubar=0,scrollbars=yes,resizable=yes');
  	w.focus();
  	return false;
  }
  	
  //convert a dd-mm-yyyy date to a yyyy-mm-dd date, returns an empty string if date is invalid
  function dutchDateToMySQLDate(adutchDate)
  {
    var a=adutchDate.split("-");
    if (a.length==3)
    {
      if (isValidDate(a[2],a[1],a[0]))
      {
        return a[2]+"-"+a[1]+"-"+a[0];
      }
      else
      {
        return "";
      }     
    }
  }  

	function isValidDate(year,month,day) 
	{
    //javascript months are 0 based
    corrected_month=month-1;
    var test = new Date(year,corrected_month,day);
    return ((test.getFullYear() == year) && (corrected_month == test.getMonth()) && (day == test.getDate()));
	}

  function isValidEmail(email) 
  {
    var re = new RegExp("^[0-9a-zA-Z][-_0-9a-zA-Z.]*@[-_0-9a-zA-Z.]+[.][a-zA-Z]+$");
    return re.test(email);
  }

	function highlightRow(arow,setColor)
	{
		if(setColor == null)
		{
			setColor = "#E8E8E8";
		}
		arow.style.backgroundColor=setColor;	
		arow.style.cursor='hand';
	}	
	
	function dimRow(arow)
	{
		arow.style.backgroundColor='#FFFFFF';	
	}
	
	function logout()
	{
		if (confirm("Are you sure you want to logout?"))
		{
			window.location.href="logout.php";
		}	
	}
		
	function openWindow(aurl) 
	{
		var w=window.open(aurl,'fm_full_window','');
		w.focus();
	}
    
	function openPopupWindow(aurl) 
	{
		var w=window.open(aurl,'fm_popup','left=0,top=0,width=650,height=400,scrollbars=yes,status=yes,menubar=no,location=no,resizable=yes,titlebar=no');
		w.focus();
	}

  function printerWindow(aurl)
  {
		var w=window.open(aurl,'printer_window','');
		w.focus();
  }
    
	//version 20031213
	function focusFirstFormElement(formname)
	{
		var f= (formname) ? f=document.forms[formname] : document.forms[0];
		for (i=0;i<f.length;i++) 
		{
			//original textareas are disabled by wysiwyg editor, trying to set focus raises exception
			if (f[i].type!="hidden" && f[i].type!="textarea")
			{
				try 
				{ 
					f[i].focus();	
				} 
				catch(e) {}
				
				break; 
			}
		}	
		document.body.scrollTop = 0;
	}	

	function poll_vote(formname) 
	{
	  if (validateForm(document.forms[formname]))
	  {
		  //var strURL = 'about:blank';
		  //var strFeatures = 'width=500,height=330,scrollbar=yes';
		  //var subWindow = window.open(strURL,'fm_poll_popup',strFeatures);
		  document.forms[formname].submit();
		}	  
	}

 	function setCookie (name,value,expires,path,domain,secure) 
	{
	  document.cookie = name + "=" + escape (value) +
	    ((expires) ? "; expires=" + expires.toGMTString() : "") +
	    ((path) ? "; path=" + path : "") +
	    ((domain) ? "; domain=" + domain : "") +
	    ((secure) ? "; secure" : "");
	}

	function readCookie(cookieName) 
	{
	  var theCookie=""+document.cookie;
	  var ind=theCookie.indexOf(cookieName);
	
	  if (ind==-1 || cookieName=="") return ""; 
	  var ind1=theCookie.indexOf(';',ind);
	  if (ind1==-1) ind1=theCookie.length; 
	  return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
	}

	//validates a 9-digit banknumber with mod-11
	function isValidBankNumber(thenum) 
	{
		var n=0;
		var sum=0;
		var multiplier=9;
		if (thenum.length==9) {
			for (i=0; i<9; i++) {
				sum+=(multiplier*Number(thenum.charAt(i)));
				multiplier--;
			}
	
			if ((sum!=0) && (sum%11== 0)) {
				return true;
			}	
			else {
				return false;
			}
		}	
		else {
			return false;
		}	
	}

	//selects an option with value anOptionValue for radiogroup aradioName
	function setRadioOption(aradioName,anOptionValue)
	{
		var chkArray=MM_findObj(aradioName);
		
		//exception for a single radiobutton (data is stored as value not as array)
		if (chkArray.value!=null)
		{
			if (chkArray.value==anOptionValue)
			{
				chkArray.checked=true;
			}
		}
		
		for (i=0;i<chkArray.length;i++)
		{
			if (chkArray[i].value==anOptionValue)
			{
				chkArray[i].checked=true;
			}
		}
		
	}
		
	//Retrieves the selected values for aradioName, -1 if none selected
	function getSelectedRadio(aradioName)
	{
		var chkArray = MM_findObj(aradioName);
		
		//exception for a single radiobutton
		if ((chkArray.value != null) && (chkArray.checked))
		{
			return chkArray.value;
		}
		
		for (i=0;i<chkArray.length;i++)
		{
			if (chkArray[i].checked)
			{
				return chkArray[i].value;
			}
		}

		return -1;
	}
	
  function unsetRadio(aradioName)
  {
    f=document.forms[0];
    r=f[aradioName];
    //r=MM_findObj(aradioName);
    if (!r.value)
    {
  		for (i=0;i<r.length;i++)
      {		
  		  r[i].checked=false;
  		}  
    }
  }
	
	//Finds nearest radioItem in or above senderNode
	function setCurrentRadio(senderNode)
	{
		var currNode=senderNode;
		while (currNode!=null)
		{
			var col= currNode.getElementsByTagName("INPUT");
			if (col.length==0)
			{
				currNode=currNode.parentNode;
			}	
			else
			{
				col[0].checked = true;
				return;
			}	
		}	
	}

	//Pass a form element (not just the name) and a regular expression pattern
	function validateField(formElem,pattern) 
	{
	  var re = new RegExp(pattern);
	  var fv = formElem.value;

	  return re.test(fv);
	}

	//Pass a value and a regular expression pattern
	function validateValue(fv,pattern) 
	{
	  var re = new RegExp(pattern);

	  return re.test(fv);
	}

	function getPatternByName(patternName)
	{
    switch (patternName) {
      case "empty_or_email":
        return "^$|^[0-9a-zA-Z][-_0-9a-zA-Z.]*@[-_0-9a-zA-Z.]+[.][a-zA-Z]+$";
        break;
    	case "empty_or_url":
        return "^$|^http://.{2,}";
        break;
    	case "empty_or_time":
        return "^$|^00:00$|^[012][0-9]:[0-9][0-9]$";
        break;
    	case "empty_or_date":
        return "^$|^0000-00-00$|^[12][0-9]{3}[-][01]?[0-9]-[0-3]?[0-9]$";
        break;
    	case "empty_or_float":
        return "^$|[+-]?[0-9]+([.][0-9]+)?$";
        break;
    	case "notempty":
        return "^.";
        break;
      case "email":
        return "^[0-9a-zA-Z][-_0-9a-zA-Z.]*@[-_0-9a-zA-Z.]+[.][a-zA-Z]+$";
        break;
    	case "pagename":
        return "^[_a-z0-9]{1,50}$";
        break;
    	case "username":
        return "^[_a-z0-9]{1,50}$";
        break;
    	case "pass":
        return "^[a-zA-Z0-9 ]{3,20}$";
        break;
     	//dd-mm-yyyy
     	case "nldate":
        return "^[0-3]?[0-9][-][01]?[0-9][-][12][0-9]{3}$";
        break;
     	//yyyy-mm-dd
     	case "date":
        return "^[12][0-9]{3}[-][01]?[0-9]-[0-3]?[0-9]$";
        break;
    	case "integer":
        return "^[-]?[0-9]+$";
        break;
    	case "posinteger":
        return "^[0-9]+$";
        break;
    	case "float":
        return "^[+-]?[0-9]+([.][0-9]+)?$";
        break;
    	case "nlfloat":
        return "^[+-]?[0-9]+([,][0-9]+)?$";
        break;    	
			case "url":
        return "^http://.{2,}";
        break;    	
    	default: 
     		alert("Unknown validator added to a form element: '" + patternName+"'");
		} 	   
	}
		
	function validateForm(aform)
	{
		var s="";

		//check if form has validator arr
		if (aform.validatorArr)
		{
			
			//Iterate over Form elements
			for (var i=0;i<aform.validatorArr.length;i++)
			{
				eval("var anelem=document.forms."+aform.name+"."+aform.validatorArr[i][1]);
				var pattern=getPatternByName(aform.validatorArr[i][2]);
				
				if (aform.validatorArr[i][4]=="radio")
				{
					var fv="";

					eval("var chkArray=aform."+aform.validatorArr[i][1]+";");
					
					for (j=0;j<chkArray.length;j++)
					{
						if (chkArray[j].checked)
						{
							fv=chkArray[j].value;
						}
					}

					if (validateValue(fv,pattern) == false)
					{
						s+=aform.validatorArr[i][3]+"\n";
					}	
					
				}
				else
				{	
					if (validateField(anelem,pattern) == false)
					{
						s+=aform.validatorArr[i][3]+"\n";
					}	
				}	
			}	
			
			//Report errors
			if (s!="")
			{
				alert(s);
				return false;
			}	

		}	
		
		return true;
	}
		
	//addValidator("mainform","naam","notempty","Uw naam mag niet leeg zijn.");
	function addValidator(aformname,aformelement,avalidator,anerrormsg)
	{
		eval("var anelem=document.forms."+aformname+"."+aformelement);
			
		//Radiogroup or a single element
		if (anelem[0])
		{
			atype=anelem[0].type;
		}
		else
		{
			atype=anelem.type;
		}	
		
		//check if validatorArr has been added to the form
		if (!document.forms[aformname].validatorArr)
		{
			document.forms[aformname].validatorArr= new Array();	
		}	
		
		//add new array to a new last position in the array
		document.forms[aformname].validatorArr[document.forms[aformname].validatorArr.length]=
			new Array(aformname,aformelement,avalidator,anerrormsg,atype);
	}
	
	function initForm(formname,formvalues)
	{
		//parse the formdata field

		var formentries=String(formvalues).split("&");

		for (var i=0;i<formentries.length;i++)
		{
			var formentry=String(formentries[i]).split("=");
			
			if ((formentry[0]!=null)&&(formentry[0]!=""))
			{
				eval("var comp=document."+formname+"."+formentry[0]);
				if ((comp!=null)&&(formentry[1]!=null))
				{
					if ((comp.type=="text")||(comp.type=="textarea"))
					{
						comp.value=unescape(formentry[1]);
					}
					else if (comp.type=="checkbox")
					{
						if (comp.value==formentry[1])
						{
							comp.checked=true;	
						}	
					}
					else if (comp[0].type=="radio")
					{
						initRadio(formname,formentry[0],formentry[1]);
					}
					else if (comp.type=="select-one")
					{
						initSelect(formname,formentry[0],formentry[1]);
					}	
				}
			}	
		}
	}

	function initRadio(formname,obj,v)
	{
		eval("var rd=document.forms['"+formname+"']."+obj);
	
		if (rd==null)
		{
			alert("Error: " + obj + " does not exist on form "+formname+".");
		}
		
		if (rd.length>1)
		{
			for (var i=0; i<rd.length; i++)
			{
				if (rd[i].value==v)
				{
					rd[i].checked=true;
					break;
				}
			}
		}
		else
		{
			//exception for single radiobutton
			if (rd.value==v)
			{
				rd.checked=true;		
			}
		}	
	}
	
	function initSelect(formname,obj,v)
	{
		eval("var rd=document.forms['"+formname+"']."+obj);
		if (rd==null)
		{
			alert("Error: " + obj + " does not exist on form "+formname+".");
		}
		if (rd.length>1)
		{
			for (var i=0; i<rd.length; i++)
			{
				if (rd[i].value==v)
				{
					rd[i].selected=true;		
					break;
				}
			}
		}
		else
		{
			//exception for single radiobutton
			if (rd.value==v)
			{
				rd.selected=true;		
			}
		}
	}

	function logout()
	{
		if (confirm("Are you sure you want to log out?"))	
		{
			document.location.href="login.php?cmd=logout";	
		}	
	}
		
	function replaceParamsInUrl(uri,paramArr,paramValueArr)
	{
		for (var i=0;i<paramArr.length;i++)
		{
			//search in parent uri for parameter
			if (uri.search(paramArr[i])!=-1)
			{
				//replace param in parent uri
				var re=new RegExp(paramArr[i]+"=[\\w]+", "");
			
				uri=uri.replace(re, paramArr[i]+"="+paramValueArr[i]);
			}	
			else
			{
				//add param to parent uri
				if (uri.search("\\?")==-1)
				{
					uri+="?"+paramArr[i]+"="+paramValueArr[i];
				}	
				else
				{
					uri+="&"+paramArr[i]+"="+paramValueArr[i];
				}	
			}
		}	
		return uri;
	}
	
	function submitForm(formname)
	{
	  var f=document.forms[formname];
   	if (validateForm(f))
    {
      f.submit();
    }  
	}
	  	
	//**************** Macromedia Dreamweaver functions ********************
	function MM_preloadImages() { //v3.0
	  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
	    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
	    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
	}

	function MM_findObj(n, d) { //v4.0
	  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
	    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
	  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
	  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
	  if(!x && document.getElementById) x=document.getElementById(n); return x;
	}
	
	function MM_showHideLayers() { //v3.0
	  var i,p,v,obj,args=MM_showHideLayers.arguments;
	  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
	    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
	    obj.visibility=v; }
	}

	function MM_displayStatusMsg(msgStr) { //v1.0
	  status=msgStr;
	  document.MM_returnValue = true;
	}

	function MM_swapImgRestore() { //v3.0
	  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
	}

	function MM_swapImage() { //v3.0
	  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
	   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
	}

