function addClass(element, value){
	if(!element.className || element.className.length==0){
		element.className = value;
	}
	else
	{
		newClassName = element.className;
		newClassName=value+' '+newClassName;
		element.className = newClassName;
	}
}

function removeClass(element, value){
	if(element.className){
		newClassName = element.className;
		newClassName=newClassName.replace(value,'');
		newClassName=newClassName.replace(value+' ','');
		element.className = newClassName;
	}
}

function addEvent( obj, type, fn ){
	if(!obj){
		return;
	}
	if (obj.addEventListener){
		obj.addEventListener( type, fn, false );
	}
	else{
		if (obj.attachEvent){
			obj["e"+type+fn] = fn;
			obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
			obj.attachEvent( "on"+type, obj[type+fn] );
		}
	}
}

function removeEvent(obj,type,fn){
  if(obj.removeEventListener){
   obj.removeEventListener(type,fn,false);
  }
  else {
  	if(obj.detachEvent){
    	obj.detachEvent("on"+type,obj[type+fn]);
    	obj[type+fn]=null;
    	obj["e"+type+fn]=null;
    }
  }
}

function iterateMatrix(){
	var s=new Date();
	var temp=s+'\n';
	for(i=0;i<jsmatrix.length;i++){
		if(jsmatrix[i]){
			temp+=jsmatrix[i]+', ';
		}
	}
	s=new Date();
	temp+=s;
	//alert(temp);
}

function addEventHandlers(){
	addStandardEventHandlers();
	addNavigationColors();
	addImageEvents();
	if(jNOTA){
		addNOTAeventHandlers()
	}
	if(jdaocontrols){
		addDAOevents();
	}
}

function addStandardEventHandlers () {
	//IF IN PCCDESIGN MODE THEN DON'T ADD EVENT HANDLERS FOR FORM CONTROLS
		if(self.document.location.href.search('template.html')>-1){
			//designmode=true;
			//SHOW ALL HIDDEN PAGES
			var h2array=document.getElementsByTagName('h2');
			for (var h=0;h<h2array.length;h++){
			//	h2array[h].parentNode.parentNode.style.display='block';	
			}
			return;	
		}
	//USED FOR SURVEYS
	var targetID,targets,validation,numeric;
	var f=document.getElementById('survey');
	targets=f.elements;
	for(var t=0; t<targets.length; t++){
	  target=targets[t];
	  //addClass(target, 'liveryborder');
	  targetID=target.id.split('_')[1];
		validation=target.id.split('_')[2];
		numeric=(validation=='n' || validation=='N' || validation=='nn' || validation=='NN');
	  switch(target.type){
	  	case 'text':
	  		if(target.id.split('_')[0]=='x' && (validation=='nn' || validation=='NN') && target.className=='options'){
	  			// ONLY DO FOR NUMBER MATRIX CS NOT FOR PERCENTAGE SPLIT WHICH HAS DIFFERENT CLASS
	  			addEvent(target,'change',doConstantSumMatrix1);
	  		}
	  		else{
			  	if(target.id.split('_')[0]=='q'){
			  		//NON CONSTANT SUM AND IS A QUESTION
			  		addEvent(target,'focus',clearplaceholdertext);
			  		addEvent(target,'blur',putplaceholdertext);
			  	}
	  		}
	  		if(numeric==true){
	  			addEvent(target,'blur',checkIsNumber);
	  		}
	  	case 'textarea':
		  	if(target.id.split('_')[0]=='q'){
		  		if(numeric==false){
				  	addEvent(target,'focus',clearplaceholdertext);
				  	addEvent(target,'blur',putplaceholdertext);
		  		}
			  	if(jpipes[targetID]){
			  		addEvent(target,'blur',doPipe);
			  	}
			  	if(document.getElementById(target.id.replace('q','t')) && target.type=='textarea'){
			  		addEvent(target,'keyup',checkwordcount);
			  	}
			  }
	  		addClass(target, 'liveryborder');
		  	break;
		  case 'radio':
	  		//addClass(target, 'liveryborder');
		  	addEvent(target,'click',doQuestionConditions1);
		  	if(jpipes[targetID]){
		  		addEvent(target,'click',doPipe);
		  	}
		  	if(document.getElementById(target.id.replace('q_','i_'))){
		  		addEvent(target,'click',syncImageRadio);
		  	}
		  	break;
		  case 'checkbox':
	  		//addClass(target, 'liveryborder');
		  	//DO MAXCHECKBOXES FIRST IN CASE NOT ALLOWED
			  if(jmaxcheckboxed.length>0){
			  	if(jmaxcheckboxed[targetID]){
			  		addEvent(target,'click',maxcheckbox);
			  	}
			  }
		  	addEvent(target,'click',doQuestionConditions1);
		  	// CHECK IF HIDE SLIDER CHECKBOX
				if(target.id.split('_')[0]=='zx:q'){		  	
					addEvent(target,'click',showHideSlider);
				}
		  	if(document.getElementById(target.id.replace('q_','i_'))){
		  		addEvent(target,'click',syncImageCheckbox);
		  	}
		  	break;
		  case 'select-one':
	  		addClass(target, 'liveryborder');
		  	addEvent(target,'change',doQuestionConditions1);
		  	if(jpipes[targetID]){
		  		addEvent(target,'click',doPipe);
					// ### DC 25 October 2011 12:10:52 NEED AS IPAD DOESN'T RESPOND TO CLICK EVENT WHEN DROP-DOWN CHANGES
		  		addEvent(target,'change',doPipe);
		  	}
		  	//ALL SLIDER-LINKED DROP-DOWNS INITIALLY DISABLED TO PREVENT SUBMISSION OF DEFAULT VALUE
		  	if(isSlider(target.id.split('_')[1])==true){
		  		//alert('$$EH: '+target.id);
		  		//target.disabled=true;
		  	}
		  	break;
	  }
	}
	redrawSliders();
}

function showlabel(){
	//alert(this.id);
}

function addNOTAeventHandlers () {
	targets=jNOTA;
	for(t=0;t<targets.length;t++){
	  controls=document.getElementsByName(targets[t]);
	  for(c=0;c<controls.length;c++){
		  addEvent(controls[c],'click',noneoftheabove);
	  	
	  }
	}
}

function addNavigationColors(){
	var navArray=document.getElementsByTagName('a');
	for(var a=0;a<navArray.length;a++){
		if(navArray[a].className.search('navigation')>-1){
			var livery=getStyle(navArray[a],'color');
			navArray[a].style.borderColor=livery;
			document.getElementById('buttondivtable').style.borderTopColor=livery;
		}
	}
}

function getStyle(incontrol,styleProp){
	if (incontrol.currentStyle)
		var y = incontrol.currentStyle[styleProp];
	else if (window.getComputedStyle)
		var y = document.defaultView.getComputedStyle(incontrol,null).getPropertyValue(styleProp);
	return y;
}

function addImageEvents(){
 var imgArray=document.getElementsByTagName('img');
	for(var i=0;i<imgArray.length;i++){
		im=imgArray[i];
		cl=im.className;
		switch(cl){
			case 'radioImage':
		  	// CHECK RADIO BUTTON
		  	addEvent(im,'click',syncImageRadio);
		  	addEvent(im,'click',doQuestionConditionsimage);
				r=im.id.replace('i_','q_');
				//CAN'T ADD DAO HERE AS EVENTS FIRE IN UNPREDICATBLE ORDER SO CHAIN ONTO SYNC
				//addEvent(im,'click',doDAOradioImage);
				//c=document.getElementById(r);
				//addEvent(c,'click', syncImageRadio);
				rID=r.split('_')[1];
				if(jpipes[rID]){
		  		// ADD PIPE EVENT TO IMAGE
		  		addEvent(im,'click',doPipe);
		  	}
				break;
			case 'checkboxImage':
		  	addEvent(im,'click',syncImageCheckbox);	
		  	addEvent(im,'click',doQuestionConditionsimage);
				r=im.id.replace('i_','q_');
				//CAN'T ADD DAO HERE AS EVENTS FIRE IN UNPREDICATBLE ORDER SO CHAIN ONTO SYNC
				//addEvent(im,'click',doDAOcheckboxImage);
				//c=document.getElementById(r);
				//addEvent(c,'click', checkImageBorder);
				break;
		}
	}
}

function addDAOevents(){
	var sourceQ,sourceControlsArray;
	for(var t=1;t<jdaocontrols.length;t++){
		sourceQ=qname2formname(qnames[Math.abs(jdaocontrols[t])]);
		sourceControlsArray=document.getElementsByName(sourceQ);
		for(s=0;s<sourceControlsArray.length;s++){
			switch(sourceControlsArray[s].type){
				case 'checkbox':
					addEvent(sourceControlsArray[s],'click',doDAOcheckbox);
					break;				
				case 'radio':
					addEvent(sourceControlsArray[s],'click',doDAOradio);
					break;				
			}
		}
	}
}

function addSurveyLinks(indiv){
	var container=document.getElementById(indiv);
	var surveyArray=container.getElementsByTagName('div');
	for(var s=0;s<surveyArray.length;s++){
		if(surveyArray[s].className.search('classSurveyName')>-1){
			//addEvent(surveyArray[s],'click',getSurveyLinks);	
			addEvent(surveyArray[s],'click',getsurveystatusdata);	
		}
	}
	var imageArray=container.getElementsByTagName('img');
	for(var s=0;s<imageArray.length;s++){
		if(imageArray[s].className.search('classSurveyName')>-1){
			//addEvent(surveyArray[s],'click',getSurveyLinks);	
			addEvent(imageArray[s],'click',getsurveystatusdata);	
		}
	}
}
