/*  eventcontroller.js  CUSTOM side  v. 1.1.0

	BEQ-Web 2008, Ole Klinteb¾k (c)
	
	Ref.: Trigger 1.0.11 documentation.

*/


var Eventcontroller= 
{
	secondaryClickTriggers: [],
	secondaryChangeTriggers:['noteChange'],
	
	secondaryClickElements:[],
	secondaryChangeElements:[],
	formelements:[],
	anchors:[],
	divs:[],
	lis:[],
	spans:[],
	inputs:[],
	textareas:[],
	selects:[],
	buttons:[],
	
	ajaxObj:null,
	errorNr:'',
	
	init: function() 
	{
		var self=Eventcontroller;
		self._setupElements();
		self._setUpClickListeners();
		self._setUpChangeListeners();
		self._setUpFocusListeners();
		self._setupFormelements();
		self._needForScroll();
		self.ajaxObj = new AJAXobj();
	},
	
	_needForScroll: function() 
	{
		var self=Eventcontroller;
		var test='';
		var paramslist=[];
		for (var i=0;i<self.buttons.length;i++) {
			paramslist=E4Core.getTriggerParams(self.buttons[i],'ordinarySubmit');
			test=paramslist.join(' ');
			if (test.indexOf('keepScroll') !=-1) {
				Animation.getKeepScroll();
				break;
			}
		}
	},
	
/** Setups **/

	_setupElements: function() 
	{
		var self=Eventcontroller;
		var anchors=document.getElementsByTagName('a');
		for (var i=0;i<anchors.length;i++) {
			self.anchors.push(anchors[i]);
		}
		var divs=document.getElementsByTagName('div');
		for (var i=0;i<divs.length;i++) { 
			self.divs.push(divs[i]);
		}
		var lis=document.getElementsByTagName('li');
		for (var i=0;i<lis.length;i++) { 
			self.lis.push(lis[i]);
		}
		var spans=document.getElementsByTagName('span');
		for (var i=0;i<spans.length;i++) { 
			self.spans.push(spans[i]);
		}
		var inputs=document.getElementsByTagName('input');
		for (var i=0;i<inputs.length;i++) { 
			self.inputs.push(inputs[i]);
		}
		var textareas=document.getElementsByTagName('textarea');
		for (var i=0;i<textareas.length;i++) { 
			self.textareas.push(textareas[i]);
		}
		var selects=document.getElementsByTagName('select');
		for (var i=0;i<selects.length;i++) { 
			self.selects.push(selects[i]);
		}
		var buttons=document.getElementsByTagName('button');
		for (var i=0;i<buttons.length;i++) { 
			self.buttons.push(buttons[i]);
		}
	},
	
	_setupFormelements: function() 
	{
		var self=Eventcontroller;
		var formelements=self.inputs;
		formelement = E4Core.concatArrays(formelements,self.selects);
		formelement = E4Core.concatArrays(formelements,self.textareas);
		self.formelements=formelements;
	},

	_setUpClickListeners: function() 
	{
		var self=Eventcontroller;
		for (var i=0;i<self.anchors.length;i++) {
			E4Core.addEventListener(self.anchors[i],'click',self._clickListener);
		}
		for (var i=0;i<self.buttons.length;i++) {
			E4Core.addEventListener(self.buttons[i],'click',self._clickListener);
		}
		// Secondaries:
		var elements=self.divs;
		E4Core.concatArrays(elements,self.lis);
		E4Core.concatArrays(elements,self.spans);
		E4Core.concatArrays(elements,self.inputs);
		for (var i=0;i<elements.length;i++) {
			if (self._isClickRelevant(elements[i])) self.secondaryClickElements.push(elements[i]);
		}
	},
	
	_setUpChangeListeners: function()
	{
		var self=Eventcontroller;
		for (var i=0;i<self.inputs.length;i++) {
			E4Core.addEventListener(self.inputs[i],'change',self._changeListener);
		}
		for (var i=0;i<self.textareas.length;i++) {
			E4Core.addEventListener(self.textareas[i],'change',self._changeListener);
		}
		for (var i=0;i<self.selects.length;i++) {
			E4Core.addEventListener(self.selects[i],'change',self._changeListener);
		}
		// Secondarys:
		var elements=self.divs;
		E4Core.concatArrays(elements,self.lis);
		E4Core.concatArrays(elements,self.spans);
		E4Core.concatArrays(elements,self.inputs);
		for (var i=0;i<elements.length;i++) {
			if (self._isChangeRelevant(elements[i])) self.secondaryChangeElements.push(elements[i]);
		}
	},
	
	_setUpFocusListeners: function()
	{
		var self=Eventcontroller;
		for (var i=0;i<self.inputs.length;i++) {
			E4Core.addEventListener(self.inputs[i],'focus',self._focusListener);
		}
	},
	
	_isClickRelevant: function(target) {
		var relevant=false; /*
	  	var classes=target.className.split(' ');
		for (var i=0;i<classes.length;i++) {
				var classParts=classes[i].split('-');
				var trigger=classParts[0];
				if (trigger != ''  && trigger !='hide' && Eventcontroller.secondaryClickTriggers.indexOf(trigger)>-1 ) {
  					relevant=true;
  					break;
				}
		} */
		return relevant;
	},
	
	_isChangeRelevant: function(target) {
		var relevant=false; /*
		var classes=target.className.split(' ');
		for (var i=0;i<classes.length;i++) {
				var classParts=classes[i].split('-');
				var trigger=classParts[0];
				if (trigger != ''  && trigger !='hide' && Eventcontroller.secondaryChangeTriggers.indexOf(trigger)>-1 ) {
  					relevant=true;
  					break;
				}
		} */
		return relevant;
		
	},

/** Listeners **/	
	
	_clickListener: function(event) 
	{
		var self=Eventcontroller;
		var ok=true;
		var abortRest=false;
		// Primary element:
		var element=E4Core.getTarget(event);
		var parent=element.parentNode;
		if (element.tagName=='IMG' && parent.tagName=='A') {element=parent;}
		var classes=element.className.split(' ');
		for (var i=0;i<classes.length;i++) {
			var triggerParts=E4Core.getTriggerParts(classes[i]);
  			switch (triggerParts.trigger) {
  				case 'openInWindow':
  					self._openInWindow(element,triggerParts.triggerParams);
  					E4Core.preventDefault(event);
  					break;
  				case 'ordinarySubmit':
  					self._handleSubmit(triggerParts.triggerParams[0]);
  					break;
  					
  				default:
  					break;
  			}
  			if (abortRest) break;
		}
		// Handle secondaries:
		for (var j=0;j<self.secondaryClickElements.length;j++) {
			var secElement=self.secondaryClickElements[j];
			var classes=element.className.split(' ');
			for (var i=0;i<classes.length;i++) {
				var triggerParts=E4Core.getTriggerParts(classes[i]);
  				switch (triggerParts.trigger) {
  					
  					
  				}
  			}
		}
	},
	
	_changeListener: function(event) 
	{
		var self=Eventcontroller;
		var ok=true;
		var abortRest=false;
		// Primary element:
		var element=E4Core.getTarget(event);
		var classes=element.className.split(' ');
		for (var i=0;i<classes.length;i++) {
			var triggerParts=E4Core.getTriggerParts(classes[i]);
  			switch (triggerParts.trigger) {
  				case 'xxxxxx':
  					
  					break;
  				default:
  					break;
  			}
  			if (abortRest) break;
		}
		// Handle secondaries:
		for (var j=0;j<self.secondaryChangeElements.length;j++) {
			var secElement=self.secondaryChangeElements[j];
			var classes=secElement.className.split(' ');
			for (var i=0;i<classes.length;i++) {
				var triggerParts=E4Core.getTriggerParts(classes[i]);
  				switch (triggerParts.trigger) {
  					case 'noteChange':
  						if (element.id==triggerParts.triggerParams[0]) {
  							secElement.value=1;
  						}
  						break;
  					//<-next trigger
  				}
  			}
		}
	},
	
	_focusListener: function(event) 
	{
		var self=Eventcontroller;
		var ok=true;
		var abortRest=false;
		var element=E4Core.getTarget(event);
		var classes=element.className.split(' ');
		for (var i=0;i<classes.length;i++) {
			var triggerParts=E4Core.getTriggerParts(classes[i]);
  			switch (triggerParts.trigger) {
  				case 'clearOnMouseEnter':
  					element.value='';
  					break;
  				default:
  					break;
  			}
  			if (abortRest) break;
		}
	},

/** Validations **/
	
_validate: function(submitmode) 
{
	var self=Eventcontroller;
	var element;
	var classes;
	var abortRest;
	var classParts;
	var trigger;
	var triggerParams;
	var ok=true;
	self.errorNr='';
	// Elements:
	for (var i=0;i<self.formelements.length;i++) {
		element=Eventcontroller.formelements[i];
		// triggers:
		abortRest=false;
		classes=element.className.split(' ');
		for (var j=0;j<classes.length;j++) {
			classParts=classes[j].split('-');
  			trigger=classParts[0];
  			classParts.shift();
  			triggerParams=classParts;
			switch (trigger) {
  				case 'integerGtZero':
  						ok=self._handleIntegerGtZero(element);
  						break;
  				case 'required':
  						ok=self._handleRequired(submitmode,element,triggerParams);
  						break;
  						//<-next trigger
  				default:
  						break;
  			}
  			if (abortRest || !ok) break;
		}
		if (!ok) {
			// fejlhŒndtering....midlertidigt alert.
			window.alert('Kategorifeltet mangler at blive udfyldt!');	
			break;
		}
	}
},
	
	
/** Non-validation Handlers **/	

_openInWindow: function(anchor,triggerParams)
{
	if (triggerParams[0]!='') {
		var newWindow = window.open(anchor.getAttribute('href'),triggerParams[0]);
		newWindow.focus();
	}
},

_handleSubmit: function (formid) 
{
	var self=Eventcontroller;
	self._validate('submit');
	if (self.errorNr=='') {
		var formen=document.getElementById(formid);
		if (document.getElementById('smode')) {
			document.getElementById('smode').value=1;
		} else if (document.getElementById('ksup')) {
			document.getElementById('ksup').value=1;
		}
		formen.submit();
	}
},


/** Validation handlers **/

_handleIntegerGtZero: function(element) 
{
	var self=Eventcontroller;
	var ok=false;
	var value=E4Core.getValueOfElement(element);
	if (value==parseInt(value,10) && value>0) {
		ok=true;
	} else {
		self.errorNr='VN1';
	}
	return ok;
},

_handleRequired: function(submitmode,element,triggerParams) 
{
	var self=Eventcontroller;
	var ok=true;
	if (submitmode=='submit' && triggerParams[0]=='submit') {
		var value=E4Core.getValueOfElement(element);
		if (value=='') {
			ok=false;
			self.errorNr='GN1';
		}
	} else {
		// Ajax...
	}
	return ok;
}



}
E4Core.start(Eventcontroller);

