var survey_message ="";
var survey_error=false;
var survey_error2=false;




/*still works with mootools 1.11*/
/* VERSION 1.05*/

/* CHECK ALL FORM RULES */
function checkform(sform){
	survey_message="";
	survey_error="";
	
	
	var groups = $$('div.group_holder');
	groups.each(function(el3){
		if(!el3.hasClass('unvisible')){
		
		
			var message2="";
			survey_error2=false;
			if(el3.getElement('h2')){
				var h2 = el3.getElement('h2').get('text');
				message2 = message2 + h2 + '\nbreak;';
			}else{
			message2 = message2  + 'break;';
			}
			
			message2 += checkSurveyInputs(el3);	
			message2 += checkSurveyTextareas(el3);	
			message2 += checkSurveyNumbers(el3);	
			message2 += checkSurveyDropdowns(el3);
			message2 += checkSurveyCollections(el3);
			message2 += checkSurveyCollections2(el3);
			message2 += checkSurveyChoices(el3);	
			message2 += checkSurveyBooleans(el3);
			
			message2=message2+"--group--";
			
			if(survey_error2){
			  survey_error=true;
			  survey_message = survey_message + message2;
			}
			
		}
	});
	
	//checkSurveyDependencies();		
	
	var nowd = new Date();
	var t = nowd.getTime();
	document.getElementById('trace_date').value=t;
	
	if(survey_error){
		showErrors(survey_message);
		return false;
	}else{
		return true;
	}
}



function processFileUpload(uploadButton,id, filedir,allowedTypes){
	
	var fieldName= id;
	var count=1;
	
			var fileCount = $(fieldName+'_count');
			
			if(isNaN(fileCount.value)) {count=1;}
			else {count = new Number(fileCount.value);}
			
			
			var fileList = $(uploadButton).getParent();
			var newSpan = new Element("div");
			
			var delButton = new Element("button");
			delButton.addClass("buttonSmall");
			delButton.addClass("delete");
			delButton.addClass("delButton");
			
			delButton.addEvent('click', function(){
				return deleteFile(this);
			}.bind(delButton));
			delButton.appendText(" Remove");
			count++;
			var newFile = new Element("input");
			newFile.set("type","file");
			newFile.set("name",fieldName+'_'+count);
			
			
			newFile.addEvent('change', function(){
				checkFileValid(this,allowedTypes);
			}.bind(newFile));
			
			fileCount.value=""+count;
			delButton.inject(newSpan,'bottom');
			delButton.setStyle("display","inline");
			delButton.setStyle("margin-right","10px");
			
			newFile.inject(newSpan,'bottom');
			
			
			newSpan.inject(uploadButton,'before');

			if(oldBrowser){
				newSpan.setStyle("display","visible");
			}else{
				newSpan.setStyle("display","none");
				newSpan.reveal();
			}
			
	//}
	return false;
}

function deleteFile(button){
	
	var conf = confirm('Do you really want to delete this record?');
	if(conf){
        $(button).getParent().nix();
	}  
    return false;
}

function deleteUploadedFile(button,id){
	
	var conf = confirm('Do you really want to delete this record?');
	if(conf){
		var newHidden = new Element("input");
		newHidden.set("type", "hidden");
		newHidden.set("value", id);
		newHidden.set("name", $(button).get('name') + '_id');
		var item =$(button).getParent();
		var parent = $(button).getParent().getParent();
		item.getParent().adopt(newHidden);
		
		if(oldBrowser){
			item.setStyle("display","none");
		}else{
			item.nix();
			if(parent.getElements("div").length==1){
				parent.getParent().dissolve();
			}
		}
	}  
	
    return false;
}


function checkFileValid(field,allowedTypes){
	var value=field.value;
	
	if(value!=''){
		var allowed = fileTypesAllowed(value,allowedTypes);
		if(!allowed){
			alert("File type not allowed. Please select one of the following file types: "+allowedTypes);
		}
	}
}

function fileTypesAllowed(value,types){
	var types_array = types.split(",");
	value = value.slice(value.lastIndexOf(".")+1).toLowerCase();
	var allowed=false;
	
	for(i=0;i<=types_array.length;i++){
		
		if(types_array[i]==value){
		allowed=true;
		}
	}
	return allowed;
}



function checkFileTypes(button,types){
	var types_array = types.split(",");
	var value = button.value;
	value = value.slice(value.indexOf(".")+1).toLowerCase();
	var allowed=false;
	for(i=0;i<=types_array.length;i++){
	
		if(types_array[i]==value){
		allowed=true;
		}
	}
	if(!allowed){
	alert("File type not allowed. Please select one of the following file types: "+types);
	}
}

/* CHECK BASIC FORM RULES */
function checkform2(sform){
	survey_message ="";
	survey_error=false;
	
	
	
	var groups = $$('div.group_holder');
	groups.each(function(el3){
		if(!el3.hasClass('unvisible')){
			var message2="";
			survey_error2=false;
			if(el3.getElement('h2')){
				var h2 = el3.getElement('h2').get("text");
				message2 = message2 + h2 + '\nbreak;';
				
				message2 += checkSurveyNumbers(el3);	
				message2 += checkSurveyDates(el3);	
				message2=message2+"--group--";
				
				if(survey_error2){
				  survey_error=true;
				  survey_message = survey_message + message2;
				}
			}
		}
	});

		
	
	var nowd = new Date();
	var t = nowd.getTime();
	document.getElementById('trace_date').value=t;
	
	
	
	if(survey_error){
	   showErrors(survey_message);
	   return false;
	}else{
		//if($('save_type')) $('save_type').setProperty("value",save_type);
		return true;
		
	
	}
}



function showDependentRows(elem,depend_value,name,dataType){

	
	
var rows = $$('input[name=dOn_'+name+']');

   
	rows.each(function(el3){
	    var parent = el3.getParent().getParent();
	    
	    var multiValue = false;
	    if(el3.hasClass("multipleValues")){ multiValue=true;}
	    	
	    //COLLECTION
	   if(dataType=="collection"){
	      
	       		if((multiValue && el3.value.contains(depend_value,";")) || (el3.value==depend_value)){
					 if(elem.checked){
						el3.addClass('show');
						el3.removeClass('hideRow');
					 }	else{
					   	el3.addClass('hideRow');
					   	el3.removeClass('show');
					 }
				 }
	      //CHOICE
	   }else if(dataType=="choice"){ 
		  
		   if((multiValue && el3.value.contains(depend_value,";")) || (el3.value==depend_value)){
				el3.addClass('show');
				el3.removeClass('hideRow');
				
			}else{
			   	el3.addClass('hideRow');
			   	el3.removeClass('show');
			}
	   }else{ 
		   //BOOLEAN
		    if(el3.value=="t"  && depend_value=="true"){ depend_value="t";}
		    else  if(el3.value=="f"  && depend_value=="false") {depend_value="f";}
		   
			if(el3.value==depend_value){
				el3.addClass('show');
				el3.removeClass('hideRow');
				
			}else{
			   	el3.addClass('hideRow');
			   	el3.removeClass('show');
			}
	   }	
		var showRow=true;
		//Check if all elements have show attribute
		$(parent).getElements('input[name*=dOn]').each(function(el2){
		    
		     if(el2.hasClass("hideRow")){
		         showRow=false;
		     }
		});
		
		
		if(Browser.Engine.trident || oldBrowser){
			 if(showRow  ){	
			    	parent.removeClass('unvisible');
					
			}else{
					parent.addClass('unvisible');
					
				}
		}else{
			parent.set('reveal',{mode:"horizontal", display:"table-row"});
			parent.removeEvents("hide");
			parent.removeEvents("show");
			parent.get('reveal').addEvent('hide',function(){
				   this.addClass('unvisible');
			   }.bind(parent));
			   
			    if(showRow  && parent.getStyle("display")=='none'){	
			    	parent.removeClass('unvisible');
					parent.reveal();
				}else if(showRow || parent.getStyle("display")=='none'){
					
				}else{
					parent.dissolve();
				}
		}
		
		
		
		
		
	});
	
	/*process entire groups */
	
var groups = $$('input[name=dOnGroup_'+name+']');
	groups.each(function(el3){
		
	    var parent = el3.getParent();
	    if(dataType=="boolean"){
	    	  if(el3.value=="t" && depend_value=="true") depend_value="t";
			  else  if(el3.value=="f" && depend_value=="false") depend_value="f";
	    }	
		if(el3.value==depend_value){
			el3.addClass('show');
			el3.removeClass('hideRow');
			
		}else{
		   	el3.addClass('hideRow');
		   	el3.removeClass('show');
		}
		var showRow=true;
		//Check if all elements have show attribute
		$(parent).getElements('input[name*=dOn]').each(function(el2){
		    
		     if(el2.hasClass("hideRow")){
		         showRow=false;
		     }
		});
		
		
		
    
    
   
		parent.set('reveal',{mode:"vertical", display:"block"});
		parent.removeEvents("hide");
		parent.removeEvents("show");
		parent.get('reveal').addEvent('hide',function(){
			   this.addClass('unvisible');
		   }.bind(parent));
		   
		    if(showRow  && parent.getStyle("display")=='none'){	
		    	
		    	parent.removeClass('unvisible');
				parent.reveal();
			}else if(showRow || parent.getStyle("display")=='none'){
				
			}else{
				parent.dissolve();
			}
	
    
    
		
	});	
}


/* for collection  and choice*/
function toggleOther(elem,hideType){
    var toggle = $(elem).getParent().getParent().getElement("input[type='text']");
	if(hideType=='disabled'){
		if($(elem).checked){
		    toggle.setProperty('disabled','');	
		}
		else {
			 toggle.setProperty('disabled','disabled');	
			 toggle.setProperty("value","");
		}
	}else if(oldBrowser){
		if($(elem).checked){
			
			toggle.setStyle("display","visible");
			toggle.removeClass('unvisible');
		}else{
			toggle.setStyle("display","hidden");
			toggle.addClass('unvisible');
		}
		
	}else{
		
		if(Browser.Engine.trident){
			toggle.set('reveal',{mode:"horizontal",display:"inline"});
		}else{
			toggle.set('reveal',{mode:"horizontal",display:"inline"});
		}
		
		toggle.removeEvents("hide");
		toggle.removeEvents("show");
	
		
		toggle.get('reveal').addEvent('hide',function(){
		   this.addClass('unvisible');
	   }.bind(toggle));
	   
	    
		if($(elem).checked){
			toggle.removeClass('unvisible');
			toggle.reveal();	
		}
		else {
			toggle.dissolve();
		}
	}
}

function toggleOtherDropdown(elem,hideType){
	var toggle = $(elem).getParent().getParent().getElement('input[type=text]');
	$(elem).getElements('option').each(function(el){
			if(el.value=='OTHER'){
		       
		       
			   if(hideType=='disabled'){
			   		if(el.selected){
			   		
			   		    toggle.setProperty('disabled','');	
			   			toggle.focus();
			   		}
			   		else {
			   			 toggle.setProperty('disabled','disabled');	
			   			 toggle.setProperty("value","");
			   		}
			   	}else{
			   		if(el.selected){
			   			
			   		    toggle.removeClass('unvisible');
			   		 toggle.focus();
			   		}
			   		else {
			   			 toggle.addClass('unvisible');
			   			 toggle.setProperty("value","");
			   		}
			   	}
			}
		});
	
}

function hideOther(elem,hideType){
    var toggle = $(elem).getParent().getParent().getElement("input[type='text']");
	if(hideType=='disabled'){
		
			 toggle.setProperty('disabled','disabled');	
			 toggle.setProperty("value","");
		
	}else{
		
			 toggle.addClass('unvisible');
			 toggle.setProperty("value","");
		
	}
}




function isChosen(select) {
	if (select.selectedIndex == 0) {
		return true;
	}
	else {
		return false;
	}
}


function notDate(field){
	if(isValidDate(field.value)) return false;
	else return true;
}


function isValidDate(str) 
{
     var IsoDateRe =  new RegExp("^([0-9]{4})-([0-9]{2})-([0-9]{2})$");

     var matches = IsoDateRe.exec(str);
     if (!matches) return false;
    
     var composedDate = new Date(matches[1], (matches[2] - 1), matches[3]);
     
  
     return ((composedDate.getMonth() == (matches[2] - 1)) &&
      (composedDate.getDate() == matches[3]) &&
      (composedDate.getFullYear() == matches[1]));
}



function isDate(day,month,year){
	if(isNumber(day) && isNumber(month) && isNumber(year)){
		return true;
	}else{
		return false;
	}
}

function isChoiceSelected(name2,notvalue){
	var elems = document.getElementsByName(name2);
	var i=0;
	var selected = false;
	while(i != elems.length){
		if(elems[i].name==name2){
			if(elems[i].checked==true){
				if(elems[i].value!=notvalue){
					selected=true;
				}
			}
		}
		i++;
	}
	return selected;
}


function isChecked(collection){
	var checked = false;
	collection.each(function(el){
		if(el.checked){
			checked=true;
		}
	});
	return checked;
}
function isChecked2(collection){
	var checked = false;
	
	collection.each(function(el){
	    if(!el.getParent().getParent().getParent().hasClass('unvisible')){
		    if(el.checked){
				checked=true;
			}
		}
	});
	return checked;
}


function getCheckedObject(collection){
	var checked;
	collection.each(function(el){
		if(el.checked){
			checked=el;
		}
	});
	return checked;
}


function getOtherInput(collection){
	
	collection.each(function(el){
	    if(el.value=='OTHER'){
	     
	       if(el.checked){ 
	        
			   return el.parentNode.getElement('input[type=text]');  
		   }
	    }
		
	});
	return '';
}


function isOtherSelected(select) {
	var test=false;
	$(select).getElements('option').each(function(el){
		if(el.value=='OTHER'){
	       if(el.selected){
	     
	          test= true;
	       }else{
	          test= false;
	       }
		}
	});
	
 return test;
}
function getOtherSelected(select) {
	
	$(select).getElements('option').each(function(el){
		if(el.value=='OTHER'){
	       if(el.selected){
	          return el;
	       }else{
	          return 'null';
	       }
		}
	});
	
 return 'null';
}

function StringBuilder(value)
{
    this.strings = new Array("");
    this.append(value);
}

// Appends the given value to the end of this instance.
StringBuilder.prototype.append = function (value)
{
    if (value)
    {
        this.strings.push(value);
    }
};

// Clears the string buffer
StringBuilder.prototype.clear = function ()
{
    this.strings.length = 1;
};

// Converts this instance to a String.
StringBuilder.prototype.toString = function ()
{
    return this.strings.join("");
};


function addHiddenItem(name,input,place){
var sb = new StringBuilder();
var inp = document.getElementById(input);
var plac = document.getElementById(place);
place.className='';
sb.append('<div class=" " style="margin:0px;margin-left:10px;"><table class=" " cellspacing="0" cellpadding="0" style="margin:0px;"><tr><td class=" " style="padding:0px;width:1%;border-color:white;"><input title="Remove item" alt="Remove item" src="/shared/images/famfamfam/cancel.png" type="image" value="remove" onclick="removeHiddenItem(this);"/></td><td style="font-size:12px;border-color:white;"><input type="hidden" name="' + name + '" value="'+inp.value+'"/>');
sb.append(''+inp.value+'</td></tr></table></div>');
plac.innerHTML = plac.innerHTML + sb.toString();
inp.value='';
}
function removeHiddenItem(but){
var td = but.parentNode;
var tr = td.parentNode;
var table = tr.parentNode;
var div = table.parentNode;
var ul = div.parentNode;
ul.removeChild(div);
}



function confirm_delete(delbutton,del_id,dataset,position){
	var conf = confirm('Do you really want to delete this record?');
	
	if(position!=''){
		delbutton.form.action = delbutton.form.action + "#group_front_" + position;
	}
	if(conf){
		
		$$('input[name=delete_id_'+dataset+']').each(function(el){
				el.value=del_id;
		});
		delbutton.form.submit();
		$('body').spin({
			message:'Please wait while the form is being saved ...',
			containerPosition:{
			    relativeTo: $('body')
			}
		});
		return true;
	}
	else{
		return false;
	}
}

function confirm_delete2(delbutton){
	var conf = confirm('Do you really want to delete this record?');
	if(conf){
		$(delbutton).getParent().getParent().addClass('unvisible');
		$(delbutton).getParent().getElement("input[name^=delete_]").setProperty('value','true');
		return true;
	}else{
		return false;
	}
}

function confirm_delete3(delbutton){
	var conf = confirm('Do you really want to delete this record?');
	if(conf){
		$(delbutton).getParent().getParent().addClass('unvisible');
		$(delbutton).getParent().getElement("input[name^=delete_]").setProperty('value','true');
		return true;
	}else{
		return false;
	}
}

function confirm_delete4(delbutton,del_id,position){
	var conf = confirm('Do you really want to delete this record?');
	
	if(position!=''){
		delbutton.form.action = delbutton.form.action + "#group_front_" + position;
	}
	if(conf){
		
		$$('input[name=del_oid]').each(function(el){
	
	el.value=del_id;
	
	});
	delbutton.form.submit();
		return true;
	}
	else{
		return false;
	}
}




function deleteGroup(delbutton){
	var conf = confirm('Do you really want to delete this record?');
	if(conf){
		$(delbutton).getParent().getParent().getParent().addClass('unvisible');
		$(delbutton).getParent().getElement("input[name^=delete_]").setProperty('value','true');
	}
}

function deleteGroup2(delbutton){
	var conf = confirm('Do you really want to delete this record?');
	if(conf){
		$(delbutton).getParent().getParent().getParent().getParent().addClass('unvisible');
		$(delbutton).getParent().getElement("input[name^=delete_]").setProperty('value','true');
	}
}
function deleteGroup3(delbutton){
	var conf = confirm('Do you really want to delete this record?');
	if(conf){
		$(delbutton).getParent().getParent().getParent().getParent().addClass('unvisible');
		$(delbutton).getParent().getElement("input[name^=delete_]").setProperty('value','true');
	}
}

function copyNewRow(subformname){
	var clone = $('template_'+subformname).clone().injectBefore($('template_'+subformname));
	var count = $('newcount_'+subformname).getProperty('value');
	var count2 = count.toInt();
	count2++;
	clone.setProperty('id','row_'+subformname+'__new_'+count2);
	clone.removeClass('unvisible');
	clone.addClass('record_row');
	clone.getElementsBySelector('input,select').each(function(el){
	   if(!el.hasClass('across')){
		  el.name=el.name+count2;
		  el.id=el.id+count2;
		}else{
		  el.value='_new_'+count2;
		}
	});
	$('newcount_'+subformname).setProperty('value',""+count2);
}

function copyNewGroup(groupname){
	var clone = $('template_'+groupname+'_dependon').clone().injectBefore($('template_'+groupname+'_dependon'));
	var count2 = $$('div.gh_'+groupname+'_d').length;
	var newcount=$('newcount_'+groupname).getProperty('value');
	var count= parseInt(newcount);
	count++;
	count2=count2+count;
	clone.setProperty('id','gh_'+groupname+'_new_'+count);
	
	clone.removeClass('unvisible');
	clone.removeClass('template');
	clone.getElementsBySelector('h2').each(function(el){
	el.setText(el.get("text")+count2);
	});
	clone.getElementsBySelector('input,select,textarea').each(function(el){
	el.name=el.name+''+count;
	el.id=el.id+''+count;
	});
	var holder = clone.getElement('div[class=surveyHolder]'); 
	holder.id=holder.id+'_new_'+count;
	$('newcount_'+groupname).setProperty('value',""+count);
	
	/* SLIDING EFFECT group */
	var myTransition = new Fx.Transition(Fx.Transitions.Quad.easeOut, 3);
	var acccerSlide = new Fx.Slide(holder.id, {duration: 500, transition: myTransition, wait: false});
	var hidegroup = clone.getElement('img.hide_group')
	var div = hidegroup.getParent().getParent().getParent().getParent().getParent().getParent();
	var holder = div.getElement('div[class=surveyHolder]'); 
	hidegroup.addEvent('click', function(e){
	acccerSlide.toggle();
	new Event(e).stop().preventDefault();
	});
	holder.getParent().setStyle('overflow-x','auto');
	return false;
}



function setSlides(){
	
var myTransition = new Fx.Transition(Fx.Transitions.Quad.easeOut, 3);

$$('img.hide_group').each(function(el){
	
	var div = el.getParent().getParent().getParent().getParent().getParent().getParent();
	
	var holder = div.getElement('div[class=surveyHolder]'); 

	var acccerSlide = new Fx.Slide(holder.id, {duration: 500, transition: myTransition, wait: false});
	
	el.addEvent('click', function(e){
		acccerSlide.toggle();
		new Event(e).stop().preventDefault();
	});
	
	holder.getParent().setStyle('overflow-x','auto');
	
});

$$('img.hide_filter').each(function(el){
var acccerSlide2 = new Fx.Slide('hide_fieldset', {duration: 500, transition: myTransition, wait: false});
el.addEvent('click', function(e){
acccerSlide2.toggle();
new Event(e).stop().preventDefault();
});
});

/**
	 * The tooltips.
	 * Usage: Add class 'show-tooltip' to the tooltip and add title 'title::content' and it should work!
	 */

$$('.show-tooltip').each(function(element,index) { 
	
	    var content = element.get('title').split('::'); 
	    
	    element.store('tip:title', content[0]); 
	   
	    element.store('tip:text', content[1]); 
	
	  }); 

	if(!ie9){
		var myTips = new Tips('.show-tooltip', {
			timeOut: 200,
			showDelay: 150 ,
			hideDelay: 150, 
			windowPadding: {'x': -100, 'y': -150} ,
			offset: {'x': 0, 'y': 30}
		});
		
		myTips.addEvents({ 
			'show': function(tip) { 
			    tip.fade('in'); 
			}, 
			
			'hide': function(tip) { 
				tip.fade('out'); 
			} 
		});
	}	

}


function setTooltips(){


/**
	 * The tooltips.
	 * Usage: Add class 'show-tooltip' to the tooltip and add title 'title::content' and it should work!
	 */
var myTips = new Tips('.show-tooltip', {
	timeOut: 200,
	maxTitleChars: 50,
	maxOpacity: .9,
	hideDelay: 150, 
	showDelay: 150 ,
	windowPadding: {'x': -100, 'y': -150} ,
	offset: {'x': 0, 'y': 30}
   
});

myTips.addEvents({ 
	'show': function(tip) { 
	    tip.fade('in'); 
	}, 
	
	'hide': function(tip) { 
	  tip.fade('out'); 
	} 
});

}





function showRows(choice,name){
var group = $(choice).getParent().getParent().getParent().getParent();
group.getElements("span.dependon").each(function(el){
if(el.get("text")==name){
el.getParent().getParent().removeClass('unvisible');
}
});
}

function hideRows(choice,name){
	var group = $(choice).getParent().getParent().getParent().getParent();
	group.getElements("span.dependon").each(function(el){
		if(el.get("text")==name){
			el.getParent().getParent().addClass("unvisible");
		}
	});
}


/* BOOLEANS */
function checkSurveyBooleans(el){
        var message2="";
        var error2=false;
       
		var booleans  = el.getElements('td.boolean');
		booleans.each(function(el2){
		 if(!hasParentClass(el2,'unvisible')){
				if(el2.hasClass('required')){
					var checkboxes = el2.getElements('input[type=radio]');
					if(!isChecked(checkboxes)){
						message2 = message2 + el2.getProperty('title')+ "\nbreak;";
						error2=true;
						el2.addClass('requiredCheck');
					}else{
						el2.removeClass('requiredCheck');	
					}	
				}
			}else{
						el2.removeClass('requiredCheck');	
				}
		});	
					
		
		if(error2){
		  survey_error2=true;
		  return message2;
		}else{
		  return ''; 
		}
}

function checkSurveyChoices(el){
        var message2="";
        var error2=false;
	/* CHOICES */
			var choices  = el.getElements('td.choice');
			choices.each(function(el2){
			if(!hasParentClass(el2,'unvisible')){
				if(el2.hasClass('required')){
					var checkboxes = el2.getElements('input[type=radio]');
					if(!isChecked(checkboxes)){
						message2 = message2 + el2.getProperty('title')+ "\nbreak;";
						error2=true;
						el2.addClass('requiredCheck');
					}else{
						el2.removeClass('requiredCheck');	
					}	
				}
				}else{
				el2.getParent().removeClass('requiredCheck');	
				}
			});		
	
		if(error2){
		  survey_error2=true;
		  return message2;
		}else{
		  return ''; 
		}
}

	
/* COLLECTIONS */
function checkSurveyCollections(el){
        var message2="";
        var error2=false;

		var collections = el.getElements('td.collection');
		
		collections.each(function(el2){
			var checkboxes = el2.getElements('input[type=checkbox]');
			if(!hasParentClass(el2,'unvisible')){
				if(el2.hasClass('required')){
					if(!isChecked(checkboxes)){
						message2 = message2 + el2.getProperty('title')+ "\nbreak;";
						error2=true;
						
						el2.addClass('requiredCheck');
					}else{
						el2.removeClass('requiredCheck');
					}	
				}
		   }else{
		       el2.removeClass('requiredCheck');
		   }
			checkboxes.each(function(el4){
			   
				if(el4.value.toUpperCase()=='OTHER'){
					if(el4.checked){
					var other=  el4.getParent().getParent().getElement('input[type=text]');
						if(isEmpty(other)){
							message2 = message2 + "Please fill in other for '"+el2.getProperty('title')+"'.\nbreak;";
							error2=true;
							other.getParent().addClass('requiredCheck');
						}else{
							other.getParent().removeClass('requiredCheck');
						}
					}
				}
			});
		
		});			
	
		if(error2){
		  survey_error2=true;
		  return message2;
		}else{
		  return ''; 
		}
}


function checkSurveyCollections2(el){
        var message2="";
        var error2=false;

		var collections = el.getElements('td.collection2');
		
		collections.each(function(el2){
			var checkboxes = el2.getElements('input[type=checkbox]');
			if(!hasParentClass(el2,'unvisible')){
				if(el2.hasClass('required')){
					if(!isChecked(checkboxes)){
						message2 = message2 + el2.getProperty('title')+ "\nbreak;";
						error2=true;
						
						el2.addClass('requiredCheck');
					}else{
						el2.removeClass('requiredCheck');
					}	
				}
		   }else{
		       el2.removeClass('requiredCheck');
		   }
			checkboxes.each(function(el4){
			   
				if(el4.value.toUpperCase()=='OTHER'){
					if(el4.checked){
					var other=  el4.getParent().getParent().getElement('input[type=text]');
						if(isEmpty(other)){
							message2 = message2 + "Please fill in other for '"+el2.getProperty('title')+"'.\nbreak;";
							error2=true;
							other.addClass('requiredCheck');
						}else{
							other.removeClass('requiredCheck');
						}
					}
				}
			});
		
		});			
	
		if(error2){
		  survey_error2=true;
		  return message2;
		}else{
		  return ''; 
		}
}


/* CHECKS IF AN ELEMENT HAS A PARENT CLASS WHICH IS UNVISIBLE
The check stops when the mainForm element is reached. */
function hasParentClass(elem,className){
	if(elem.get('tag')!='html'){
	
	var par = elem.getParent();
		if(par.id){
			if(par.id=='mainForm' || par.id=='cmForm'){
			    return false;
			}
		}	
		if($(elem).getParent().hasClass(className)){
		
	 		return true;
		}else if(par==null){
	    	return false;
		}else{
			return hasParentClass(par,className);
		}
	}else{
	return false;	
	}
}


/* DROPDOWNS 
Validates of all required dropdowns are filled in. */
function checkSurveyDropdowns(el){
        var message2="";
        var error2=false;
		var selects = el.getElements('select');
		selects.each(function(el2){
		
		    
		   if(!hasParentClass(el2,'unvisible')){
		     
				if(el2.hasClass('required')){
					if(isChosen(el2)){
						message2 = message2 + el2.getProperty('title')+ "\nbreak;";
						error2=true;
						el2.getParent().getParent().addClass('requiredCheck');
					}else{
						el2.getParent().getParent().removeClass('requiredCheck');	
					}/* END CHOSEN */
				}/* END REQUIRED */
			
			
			$(el2).getElements('option[value=OTHER]').each(function(el5){
			
				if(el5.selected){
					var input = el2.getParent().getParent().getElement('input[type=text]');
						      
					if(isEmpty(input)){
						message2 = message2 + "Please fill in other.\nbreak;";
						error2=true;
						input.getParent().addClass('requiredCheck');
					}else{
						input.getParent().removeClass('requiredCheck');
					}
				}
				
				});
		    }
		});		
	
		if(error2){
		  survey_error2=true;
		  return message2;
		}else{
		  return ''; 
		}
}

	/* NUMBERS */
	
function checkSurveyNumbers(el){
        var message2="";
        var error2=false;
		var inputs2 = el.getElements('input.number[type=text]');
		inputs2.each(function(el2){
		if(!hasParentClass(el2,'unvisible')){
			if(isEmpty(el2)){
				
			}else{
				
      			if(isNumber(el2)){
      				if(el2.hasClass("percentage")){
      					if(el2.value<=100 && el2.value>=0){
					        el2.getParent().removeClass('requiredCheck');
							el2.getParent().removeClass('requiredCheck');
					    }else{
						    message2 = message2 + el2.getProperty('title') + ". This is an impossible percentage"+ "\nbreak;";
							error2=true;
							el2.getParent().addClass('requiredCheck');
							el2.getParent().addClass('requiredCheck');
					    }
      				}else{
      			
						message2 = message2 + el2.getProperty('title')+ "\nbreak;";
						error2=true;
						el2.getParent().addClass('requiredCheck');
						el2.getParent().addClass('requiredCheck');
      				}
				}else{
				 	if(el2.hasClass("percentage")){
					    if(el2.value<=100 && el2.value>=0){
					        el2.getParent().removeClass('requiredCheck');
							el2.getParent().removeClass('requiredCheck');
					    }else{
					    	message2 = message2 + el2.getProperty('title') + ". This is an impossible percentage"+ "\nbreak;";
							
							error2=true;
							el2.getParent().addClass('requiredCheck');
							el2.getParent().addClass('requiredCheck');
					    }
					}else{
						el2.getParent().removeClass('requiredCheck');
						el2.getParent().removeClass('requiredCheck');
					}
				}
			
			}	
			}
		});
						
		if(error2){
		  survey_error2=true;
		  return message2;
		}else{
		  return ''; 
		}
}	



/* INPUTS */
function checkSurveyInputs(el){
        var message2="";
        var error2=false;
		var inputs = el.getElements('input.required[type=text]');
			inputs.each(function(el2){
			if(!hasParentClass(el2,'unvisible')){
				if(isEmpty(el2)){
					var title = el2.getParent().getProperty('title');
					if(title==null){
						title=el2.getProperty('title');
						message2 = message2 + title+ "\nbreak;";
					}else{
						
						message2 = message2 +"Please fill in '"+ el2.getParent().getProperty('title')+ "'\nbreak;";
					}
					
					
					error2=true;
					el2.getParent().addClass('requiredCheck');
					el2.getParent().addClass('requiredCheck');
				}else{
					el2.getParent().removeClass('requiredCheck');
					el2.getParent().removeClass('requiredCheck');
				}
			}		
			});		
	
	/* DATES */
			inputs = el.getElements('input.date[type=text]');
			inputs.each(function(el2){
			if(!hasParentClass(el2,'unvisible')){
				if(isEmpty(el2)){
				}else{
				
						if(notDate(el2)){
							 var tr = el2.getParent().getParent();
						    var lab = tr.getElement('label');
						    if(lab){ 
								message2 = message2 + "You entered an invalid date for '"+$(lab).get("text")+"'.\nbreak;";
							}else{
								message2 = message2 + "You entered an invalid date.\nbreak;";
							}
							error2=true;
							el2.getParent().addClass('requiredCheck');
							
						}else{
							el2.getParent().removeClass('requiredCheck');
							el2.getParent().removeClass('requiredCheck');
				        }
					
				}	
				}
			});		
			
			/* EMAILS */
			inputs = el.getElements('input.email[type=text]');
			inputs.each(function(el2){
			if(!hasParentClass(el2,'unvisible')){
				if(isEmpty(el2)){
				}else{
				
					if(isEmail(el2)){
						 var tr = el2.getParent().getParent();
						    var lab = tr.getElement('label');
						    if(lab){ 
								message2 = message2 + "You entered an invalid e-mail address for '"+$(lab).get("text")+"'.\nbreak;";
							}else{
								message2 = message2 + "You entered an invalid e-mail address.\nbreak;";
							}
						
						error2=true;
						el2.getParent().addClass('requiredCheck');
						el2.getParent().addClass('requiredCheck');
					}else{
						el2.getParent().removeClass('requiredCheck');
					}
					
				}	
				}
			});		
			
		if(error2){
		  survey_error2=true;
		  return message2;
		}else{
		  return ''; 
		}
}

/* DATES */
function checkSurveyDates(el){
        var message2="";
        var error2=false;
		
	
	/* DATES */
		var	inputs = el.getElements('input.date[type=text]');
			inputs.each(function(el2){
			if(!hasParentClass(el2,'unvisible')){
				if(isEmpty(el2)){
					
				}else{
				
					
						if(notDate(el2)){
						    var tr = el2.getParent().getParent();
						    var lab = tr.getElement('label');
						    if(lab){ 
								message2 = message2 + "You entered an invalid date for '"+$(lab).get("text")+"'.\nbreak;";
							}else{
								message2 = message2 + "You entered an invalid date.\nbreak;";
							}
							error2=true;
							el2.getParent().addClass('requiredCheck');
							
						}else{
							el2.getParent().removeClass('requiredCheck');
							el2.getParent().removeClass('requiredCheck');
				        }
					
				}	
				}
			});		
		if(error2){
		  survey_error2=true;
		  return message2;
		}else{
		  return ''; 
		}
}

/* TEXTAREAS */	
function checkSurveyTextareas(el){
        var message2="";
        var error2=false;
		var inputs = el.getElements('textarea');
			inputs.each(function(el2){
			
			if(!hasParentClass(el2,'unvisible') && el2.getParent().hasClass('required')){
				
				if(isEmpty(el2)){
					message2 = message2 +"Please fill in '"+ el2.getParent().getProperty('title')+ "'\nbreak;";
					
					error2=true;
					el2.getParent().addClass('requiredCheck');
					
				}else{
				
						el2.getParent().removeClass('requiredCheck');
				
				}
			}		
			});		
	
	
		if(error2){
		  survey_error2=true;
		  return message2;
		}else{
		  return ''; 
		}
}

/* CHECK ROWS of a subform
this is obsolete */

function checkSurveyRows(el){
        var message2="";
        var error2=false;
		var recordRows = el.getElements('tr.record_row');
		
		recordRows.each(function(el){
			var testinput = el.getElements('input.testRequired');
			testinput.each(function(el2){
				if(!el.hasClass('unvisible')){
					if(isEmpty(el2)){
						message2 = message2 + el2.getProperty('title')+"\nbreak;";
						error2=true;
						el2.getParent().getParent().addClass('requiredCheck');
						el2.getParent().getParent().addClass('requiredCheck');
			
					}
					else{
						if(el2.hasClass('email')){
							if(isEmail(el2)){
							
								message2 = message2 + "You entered an invalid e-mail address.\nbreak;";
								error2=true;
								el2.getParent().getParent().addClass('requiredCheck');
								el2.getParent().getParent().addClass('requiredCheck');
							}else{
							  
								el2.getParent().getParent().removeClass('requiredCheck');
								el2.getParent().getParent().removeClass('requiredCheck');
			
							}
						}else{
							el2.getParent().getParent().removeClass('requiredCheck');
						    el2.getParent().getParent().removeClass('requiredCheck');
			            }
					}	
				}
			});
		
			var testselect = el.getElements('select.testRequired');
			testselect.each(function(el2){
				if(!el.hasClass('unvisible')){
					if(isChosen(el2)){
						message2 = message2 + el2.getProperty('title')+"\nbreak;";
						error2=true;
						el2.getParent().addClass('requiredCheck');
					}
					else{
						el2.getParent().removeClass('requiredCheck');
					}	
				}
			});
		});	
	
		if(error2){
		  survey_error2=true;
		  return message2;
		}else{
		  return ''; 
		}
}


/* CHECK DEPENDENCIES */
function checkSurveyDependencies(){
    var message2="";
    var error2=false;
	var booleans = $$('td.dependencies');
	
	booleans.each(function(el2){
	   var input = el2.getElement('input[value=yes]');
	 
	 
	   if(input){
	        if(input.checked){
	           
	            var count=0;
		   		var dependency_name = input.name;
		   		var groups = $$('input[value=dependon_'+ dependency_name + ']');
		   		groups.each(function(el3){
		   		    var div = el3.getParent();
		   		    
		   		    if(div){
		   		    	if(!div.hasClass('unvisible')){
		   		    		count++;
		   		    	}
		   		    }
		   		});
		   		
		   		if(count==0){
		   		  error2=true;
	              message2 = message2 + "Please add at least one "+dependency_name+"\nbreak;";
	   			}
	   		}
	   }
	   
	  
	});
	
	if(error2){
      survey_message = survey_message + "Other\nbreak;";
	  survey_error=true;
	  survey_message = survey_message + message2;
	  survey_message=survey_message+"--group--";
	}	
	
}		

function redo_trace(but,trace_id){
var conf = confirm('Are you sure you want to re-use this record?');
if(conf){
$('redo_trace_id').value=trace_id;
$('mainForm').submit();
}
}

function isEmpty(elem){
   
	var str = ""+elem.value;
	str=str.trim();
	var re = /.+/;
	if (!str.match(re)){
		return true;
	} else {
		
		return false;
	}
}

function isEmail(elem){

	var str = ""+elem.value;
	str=str.trim();
	var apos=str.indexOf("@");
	var spacepos=str.indexOf(" ");
	var dotpos=str.lastIndexOf(".");
	if (1>apos||2>dotpos-apos||spacepos!=-1) 
	{return true;}
	else {return false;}
}


function ajaxsubmit(sform){
	var log = $('ajaxinsert').addClass('ajax-loading');
	try{
	   if($('ajaxinsert').getElement('#results_table')){
	    $('ajaxinsert').getElement('#results_table').addClass('unvisible');
		$('wait').removeClass('unvisible');
		}
	} catch (err) {}
	$(sform).send({
		update: log,
		onComplete: function() {
			$('wait').addClass('unvisible');
			log.removeClass('ajax-loading');
			setTooltips();
	    }
	 });
	if(!(typeof _uacct == 'undefined')){
		urchinTracker('/method_ajax/'+$(sform).toQueryString());
	}
	return false;
}

function surveyFormSubmit(button,action,save_type,validate){
	
if(oldBrowser){
		
		alert("You are using an outdated browser. Some functions might not work well. Please upgrade to FireFox 3.0 or up.");
	}

    if($('save_type')) $('save_type').setProperty("value",save_type);
    var sform = button.form;
    var submit = false;
	if(validate){
	    submit = checkform(sform);
	}else{
		submit = checkform2(sform);
	}
	
	
    if(submit){
	    sform.action=action;
	    
	    
		var log = $('wait').addClass('ajax-loading');
		
		window.scrollTo(0,0);
	
		if(!(oldBrowser || ie9)){
			$('body').spin({
				message:'Please wait while the form is being saved ...',
				containerPosition:{
				    relativeTo: $('body')
				}
			});
		}
		
		if(save_type=='ajax'){
		    
			if(oldBrowser){
				var reqForm = new Form.Request(sform, log, {
					
					onComplete: function() {
						 $("darkenBackground").dissolve();
				       
				    }
				});
			}else{
			var reqForm = new Form.Request(sform, log, {
					requestOptions: {
						spinnerOptions: {
				            message: 'The page is loading. Please be patient. It will appear in a few seconds'
				        },
				        spinnerTarget: $('reportInject')
					},
					onComplete: function() {
						 $("darkenBackground").dissolve();
				       
				    }
			});

			}
		  }else{
			
		 	sform.submit();
		 }
		
	}
	
	return false;
}

function easyFormSubmit(button,validate){
     var sform = button.form;
    var submit = false;
	if(validate){
	    submit = checkform(sform);
	}else{
		submit = checkform2(sform);
	}
	
	
    if(submit){
	    
		var log = $('wait').addClass('ajax-loading');
		
		window.scrollTo(0,0);
		
		$('body').spin({
			message:'Please wait while the form is being saved ...',
			containerPosition:{
			    relativeTo: $('body')
			}
		});
		
		if(save_type=='ajax'){
		    
			var reqForm = new Form.Request(sform, log, {
					requestOptions: {
						spinnerOptions: {
				            message: 'The page is loading. Please be patient. It will appear in a few seconds'
				        },
				        spinnerTarget: $('reportInject')
					},
					onComplete: function() {
						 $("darkenBackground").dissolve();
				       
				    }
			});

			
		  }else{
		    
		 	sform.submit();
		 }
		
	}
	
	return false;
}

function showErrors(message){
    //$("darkenBackground").setStyle('z-index','110');
	
	var newDiv = new Element('div');
	var newDiv2 = new Element('div');
	if($('cmsContent')){ newDiv.inject($('cmsContent'),"top");}
	else { newDiv.inject($('content-wrapper'),"top"); }
	
	
	
	
	newDiv.setStyle("display","none");
	newDiv2.inject(newDiv,"top");
	
	newDiv.addClass("popup");
	newDiv2.addClass("popuptext");
	
	var newH2 = new Element('h2');
	
	newDiv2.appendText("");
	newH2.appendText("Problems found");
	
	
	var groups= message.split('--group--');
	groups.each(function(el){
		var messages = el.split('break;');
		var ul=new Element('ul');
		messages.each(function(item, index){
		    if(index==0){
		   
			   if(item!=''){ var elem=new Element('h3');
				elem.appendText(item);
				elem.injectInside(newDiv2);
				}
		    }else{
		       if(item!=""){
				var elem=new Element('li');
				elem.appendText(item);
				elem.injectInside(ul);
				}
			}
			
		});
		ul.injectInside(newDiv2);
	});
	
	newH2.inject(newDiv,"top");
	
	var delButton = new Element("button");
	
	delButton.addEvent('click', function(){
		$("darkenBackground").dissolve();
		return this.getParent().nix();
	}.bind(delButton));
	
	delButton.inject(newDiv,"bottom");
	delButton.appendText(" Close this window");
	
	delButton.addClass("buttonSmall");
	delButton.addClass("button");
	delButton.addClass("delButton");
	delButton.setStyle("width","auto");
	if(oldBrowser){
		alert("Please correct the errors marked in red.");
	}else{
	$("darkenBackground").set("reveal", {duration: 'short'});
	$("darkenBackground").get("reveal").addEvent("show",function(){
		$("darkenBackground").removeClass("unvisible");
		newDiv.reveal();
		window.scrollTo(0,0);
	});
	$("darkenBackground").reveal();
	}
	
	
}







/*

PERSON FUNCTIONS

*/





function getOptionValue(obj){
	if(obj){
		return obj.options[obj.selectedIndex].value;
	}
	return null;
}

function getOptionText(obj){
	if(obj){
		return obj.options[obj.selectedIndex].text;
	}
	return null;
}

function hasOption(el,val){
var has_elem = false;
$(el).getElements('option').each(function(el2){
	if(el2.value==val){
		has_elem=true;
	}
});
return has_elem;
}

function getOption(el,val){
var option = false;
$(el).getElements('option').each(function(el2){
	if(el2.value==val){
		option=el2
	}
});
return option;
}


function clearSearchForm(button){
	var sform = $(button).form;
	$(sform).reset();
	var log = $('ajaxinsert').addClass('ajax-loading');
		try{
		    $('ajaxinsert').getElement('#results_table').addClass('unvisible');
			$('wait').removeClass('unvisible');
		} catch (err) {}
		$(sform).send({
			update: log,
			onComplete: function() {
				$('wait').addClass('unvisible');
				log.removeClass('ajax-loading');
		    }
		 });	
}



function checkContactForm(forms){
if(isEmpty(forms.name) || isEmpty(forms.ammaai) || isEmpty(forms.body) || isEmail(forms.ammaai)){
alert('Please fill in all required fields');

}else{
$("contact_form").submit();

}
}








function highlightElement(elem,type,className){
	if(className==null || className=='') className="highlight";
	if(type=="boolean"){
		$(elem).getNext().addClass(className);
	}else if(type=="select"){
		$(elem).getParent().addClass(className);
	}else if(type=="choice"){
		$(elem).getParent().getElement("label").addClass(className);

	}else if(type=="checkbox"){
		$(elem).getParent().getParent().getElement("label").addClass(className);

	}else{
		$(elem).addClass(className);
	}
}

function removeHighlightElement(elem,type,className){
	if(className==null || className=='') className="highlight";
	if(type=="boolean"){
		$(elem).getNext().removeClass(className);
	}else if(type=="select"){
		$(elem).getParent().removeClass(className);
		
	}else if(type=="choice"){
		$(elem).getParent().getElement("label").removeClass(className);
		
	}else if(type=="checkbox"){
		$(elem).getParent().getParent().getElement("label").removeClass(className);
		
	}else{
		$(elem).removeClass(className);
	}
}



Tips.implement({

});



//setStyle has issues with negative values or erronous display values: reveal uses negative value is some cases.
Element.implement({
	
	setStyle: function(property, value){
	switch (property){
		case 'opacity': return this.set('opacity', parseFloat(value));
		case 'float': property = (Browser.Engine.trident) ? 'styleFloat' : 'cssFloat';
	}
	property = property.camelCase();
	if ($type(value) != 'string'){
		var map = (Element.Styles.get(property) || '@').split(' ');
		value = $splat(value).map(function(val, i){
			if (!map[i]) return '';
			return ($type(val) == 'number') ? map[i].replace('@', Math.round(val)) : val;
		}).join(' ');
	} else if (value == String(Number(value))){
		value = Math.round(value);
	}
	try{
		//this is because of IE error with reveal.
		while(value.charAt(0) == '-')
		    value = value.substr(1);

	this.style[property] = value;
	} catch(e){
	alert("Error in property:"+property+value);	
	}
	return this;
}
});



