Effect.OpenUp = function(element) {
  element = $(element);
  new Effect.BlindDown(element, {duration:.4} || {});
}

Effect.CloseDown = function(element) {
  element = $(element);
  new Effect.BlindUp(element, {duration:.4} || {});
}
Effect.FadeUp = function(element) {
  element = $(element);
  new Effect.Appear(element, {duration:.4,delay:.4} || {});
}

Effect.FadeDown = function(element) {
  element = $(element);
  new Effect.Fade(element, {duration:.2} || {});
}
Effect.FadeUpf = function(element) {
  element = $(element);
  new Effect.Appear(element, {duration:.2,delay:0} || {});
}

Effect.FadeDownf = function(element) {
  element = $(element);
  new Effect.Fade(element, {duration:.2} || {});
}

Effect.Combo = function(element) {
  element = $(element);
  if(element.style.display == 'none') { new Effect.OpenUp(element, arguments[1] || {}); }
  else { new Effect.CloseDown(element, arguments[1] || {}); }
}
Effect.Viewer = function(element) {
  element = $(element);
  if(element.style.display == 'none') {  
  new Effect.OpenUp(element, arguments[1] || {}); 
  }
    else { new Effect.CloseDown(element, arguments[1] || {}); }
}
Effect.Viewerfade = function(element) {
  element = $(element);
  if(element.style.display == 'none') {  
  new Effect.FadeUpf(element, arguments[1] || {}); 
  }
    else { new Effect.FadeDownf(element, arguments[1] || {}); }
}
Effect.MultipleViewer = function(element,elementt,elementtt,elementttt,elementtttt,elements,elementss) {
  element = $(element);
  if(element.style.display == 'none') {  
  new Effect.FadeUp(element, arguments[1] || {}); 
  elementt = $(elementt);
    if(elementt.style.display != 'none') { 
  		new Effect.FadeDown(elementt, arguments[1] || {}); 
	}
  elementtt = $(elementtt);
    if(elementtt.style.display != 'none') { 
  		new Effect.FadeDown(elementtt, arguments[1] || {}); 
	}
  elementttt = $(elementttt);
    if(elementttt.style.display != 'none') { 
  		new Effect.FadeDown(elementttt, arguments[1] || {}); 
	}
  elementtttt = $(elementtttt);
    if(elementtttt.style.display != 'none') { 
  		new Effect.FadeDown(elementtttt, arguments[1] || {}); 
	}
  elements = $(elements);
    if(elements.style.display != 'none') { 
  		new Effect.FadeDown(elements, arguments[1] || {}); 
	}
  elementss = $(elementss);
    if(elementss.style.display != 'none') { 
  		new Effect.FadeDown(elementss, arguments[1] || {}); 
	}
  }
}


Effect.Multi = function(element,elementt) {
  elementt = $(elementt);
  element = $(element);
Effect.Combo(elementt);
Effect.Combo(element);
}



function checkform(of)
		{
		// Test if DOM is available and there is an element called required
			if(!document.getElementById || !document.createTextNode){return;}
			if(!document.getElementById('required')){return;}

		// Define error messages and split the required fields
			var errorID='errormsg';
			var errorClass='error'
			var errorMsg='Please enter or change the fields marked with a ';
			var errorImg='images/misc/error.gif';
			var errorAlt='Error';
			var errorTitle='This field has an error!';
			var reqfields=document.getElementById('required').value.split(',');

		// Cleanup old mess
			// if there is an old errormessage field, delete it
			if(document.getElementById(errorID))
			{
				var em=document.getElementById(errorID);
				em.parentNode.removeChild(em);
			}
			// remove old images and classes from the required fields
			for(var i=0;i<reqfields.length;i++)
			{
				var f=document.getElementById(reqfields[i]);
				if(!f){continue;}
				if(f.previousSibling && /img/i.test(f.previousSibling.nodeName))
				{
					f.parentNode.removeChild(f.previousSibling);
				}
				f.className='';
			}
		// loop over required fields
			for(var i=0;i<reqfields.length;i++)
			{
		// check if required field is there
				var f=document.getElementById(reqfields[i]);
				if(!f){continue;}
		// test if the required field has an error, 
		// according to its type
				switch(f.type.toLowerCase())
				{
					case 'text':
						if(f.value=='' && f.id!='email'){cf_adderr(f)}							
		// email is a special field and needs checking
						if(f.id=='email' && !cf_isEmailAddr(f.value)){cf_adderr(f)}							
					break;
					case 'textarea':
						if(f.value==''){cf_adderr(f)}							
					break;
					case 'checkbox':
						if(!f.checked){cf_adderr(f)}							
					break;
					case 'select-one':
						if(!f.selectedIndex && f.selectedIndex==0){cf_adderr(f)}							
					break;
				}
			}
			return !document.getElementById(errorID);

			/* Tool methods */
			function cf_adderr(o)
			{
				// create image, add to and colourise the error fields
				var errorIndicator=document.createElement('img');
				errorIndicator.alt=errorAlt;
				errorIndicator.src=errorImg;
				errorIndicator.title=errorTitle;
				o.className=errorClass;
				o.parentNode.insertBefore(errorIndicator,o);

			// Check if there is no error message
				if(!document.getElementById(errorID))
				{
				// create errormessage and insert before submit button
					var em=document.createElement('div');
					em.id=errorID;
					var newp=document.createElement('p');
					newp.appendChild(document.createTextNode(errorMsg))
					// clone and insert the error image
					newp.appendChild(errorIndicator.cloneNode(true));
					em.appendChild(newp);
					// find the submit button 
					for(var i=0;i<of.getElementsByTagName('input').length;i++)
					{
						if(/submit/i.test(of.getElementsByTagName('input')[i].type))
						{
							var sb=of.getElementsByTagName('input')[i];
							break;
						}
					}
					if(sb)
					{
						sb.parentNode.insertBefore(em,sb);
					}	
				} 
			}
			function cf_isEmailAddr(str) 
			{
			    return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
			}
		}