function inicialitzar() {
	try {
		if (window.initFormValidadors) {
			window.initFormValidadors();
		}
	} catch (e) {
		alert(e);
	}
	try {
		/* Run tabberAutomaticOnload() unless the "manualStartup" option was specified */
		if (window.mostrarContingutTabulat) {
			if (tabberAutomatic) {
				tabberAutomatic({});
			}
		}
	} catch (e) {
		alert(e);
	}
	try {
		if (window.arrayFormAcum) {
			initFormAcum();
		}
	} catch (e) {
		alert(e);
	}
	try {
		if (window.arrayFormTria) {
			initFormTria();
		}
	} catch (e) {
		alert(e);
	}
	try {
		if (window.arrayLlistaAjax) {
			initLlistaAjax();
		}
	} catch (e) {
		alert(e);
	}
	try {
		if (window.arrayCampsCalculats) {
			initCampsCalculats();
		}
	} catch (e) {
		alert(e);
	}
}

function initCampsCalculats() {
	try {
		for (var i=0;i<arrayCampsCalculats.length;i++) {
			eval("initCampCalculat"+arrayCampsCalculats[i]+"()");
		}
	} catch	(e) {}
}

window.initValidators = function() {
	for (var i=0;i < document.forms.length; i++) {
		str = "initFormValidator" + document.forms[i].id;
		try {
			if (eval(str)) {
				eval(str + "()");
			}
		} catch (e) {
			alert(e.message);
		}
	}
	try {
		if (arrayFakeFormValidators) {
			for (var fakeForm in arrayFakeFormValidators) {
				str = "initFakeFormValidator" + arrayFakeFormValidators[fakeForm];
				try {
					if (eval(str)) {
						eval(str + "()");
					}
				} catch (e) {
					alert(e.message);
				}
			}
		}
	} catch (e) {
		//alert(e.message);
	}
}

/**
	Retorna la posici?? de d'una cadena dins d'una altra.
	@param cadena La cadena on es realitzar?? la cerca.
	@param subcadena La cadena a buscar. Pot ser una regular expression.
	@parama posicio Punt inicial a partir d'on realitzar la cerca.
*/
function inString(cadena, subcadena, posicio) {
	var re = new RegExp(subcadena, "gm");
  var m = re.exec(cadena);
  if (m == null) {
    return -1;
  } else {
    return m.index;
  }
}

function removeAllChilds(element) {
	if (element && element.childNodes) {
		for (var i = element.childNodes.length -1; i >= 0; i--) {
			element.removeChild(element.childNodes[i]);
		}
	}
}

function startCountDown(counter, seconds) {
	//try {
		countDownCounter = document.getElementById(counter)
		countDownCounter.style.fontWeight = "bold";
		removeAllChilds(countDownCounter);
		countDownCounter.appendChild(document.createTextNode(seconds));;
		countDown('countDown', seconds);
	//	} catch (e) {
	//		alert(e.message);
	//	}
}

function countDown(counter, seconds, func) {
//	document.getElementById(counter).innerHTML = "<b>" + seconds + "</b>";
		countDownCounter = document.getElementById(counter);
		removeAllChilds(countDownCounter);
		countDownCounter.appendChild(document.createTextNode(seconds));;
	if (seconds == 0) {
		setTimeout(func, 0);		
	}
	else {
		setTimeout('countDown("' + counter + '", ' + eval(seconds - 1) + ', "redirect(\'/\');");', 1000);
	}
}

function redirect(path) {
	location.href = path;
}

function getRef(objecte,event) {
	if (objecte==window) {
		return event.srcElement;
	} else {
		return objecte;
	}
}

function refFuncioEvent (propietat, funcio, args) {
	return ( 
		function (event) {
			if (!event) {
				var event = window.event;
			}
			if (this == window) {
				var aquest = event.srcElement;
			} else {
				var aquest = this;
			}
			eval('aquest.' + propietat + '.' + funcio + '(' + args +');');
		}
	);	
}

function refFuncioObjecte (objecte, funcio, args) {
	return (
		function(){
			eval('objecte.' + funcio + '(' + args +');');
		}
	);
}

function demoraCridaRef (funcio) {
	return (
		function(){
			funcio();
		}
	);
}

function addListener(element, event, listener, bubble) {
  if(element.addEventListener) {
    if(typeof(bubble) == "undefined") bubble = false;
    element.addEventListener(event, listener, bubble);
  } else if(this.attachEvent) {
    element.attachEvent("on" + event, listener);
  }
}
/*
function addEvent(object, type, handler) {
	if (object.addEventListener) {
		object.addEventListener(type, handler, false);
	} else if (object.attachEvent) {
		object.attachEvent(['on',type].join(''),handler);
	} else {
		object[['on',type].join('')] = handler;
	}
}
*/

function dispatchEvent(element, eventType) {
	var eventObject;
	
	if (document.createEventObject) {
		//IE
		var event = document.createEventObject();
    element.fireEvent('on' + eventType,  event);
	} else if (document.createEvent) {
			//Gecko i Opera compatible
		switch (eventType) {
			case 'DOMActivate':
			case 'DOMFocusIn':
			case 'DOMFocusOut':
			// UIEvent
			eventObject = element.ownerDocument.createEvent('UIEvents');
			eventObject.initUIEvent(eventType, true, true, element.ownerDocument.defaultView, 1);
			break;
			
			case 'click':
			case 'mousedown':
			case 'mousemove':
			case 'mouseout':
			case 'mouseover':
			case 'mouseup':
			case 'contextmenu': // proprietary Gecko event
			// MouseEvent
			eventObject = element.ownerDocument.createEvent('MouseEvents');
			eventObject.initMouseEvent(eventType, true, true, element.ownerDocument.defaultView, 1, element.ownerDocument.getBoxObjectFor(element.ownerDocument.getElementsByTagName('body').item(0)).screenX, element.ownerDocument.getBoxObjectFor(element.ownerDocument.getElementByTagName('body').item(0)).screenY, 0, 0, false, false, false, false, 0, this);
			break;
			
			case 'keydown':
			case 'keypress':
			case 'keyup':
			// Gecko-only KeyEvent - to be replaced by TextEvent in DOM3 Events
			eventObject = element.ownerDocument.createEvent('KeyEvents');
			eventObject.initKeyEvent(eventType, true, true, element.ownerDocument.defaultView, false, false, false, false, 0, 0);
			break;
			
			case 'DOMAttrModified':
			case 'DOMCharacterDataModified':
			case 'DOMNodeInserted':
			case 'DOMNodeInsertedIntoDocument':
			case 'DOMNodeRemoved':
			case 'DOMNodeRemovedFromDocument':
			case 'DOMSubtreeModified':
			// MutationEvent
			eventObject = element.ownerDocument.createEvent('MutationEvents');
			eventObject.initMutationEvent(eventType, true, false, this, null, null, null, MutationEvent.MODIFICATION);
			break;
			
			case 'abort':
			case 'blur':
			case 'change':
			case 'error':
			case 'focus':
			case 'load':
			case 'reset':
			case 'resize':
			case 'select':
			case 'scroll':
			case 'submit':
			case 'unload':
			// HTMLEvent
			eventObject = element.ownerDocument.createEvent('HTMLEvents');
			eventObject.initEvent(eventType, true, true);
			break;
			
			default:
			// CustomEvent
			eventObject = element.ownerDocument.createEvent('Events');
			eventObject.initEvent(eventType, true, true);
		}
		
		element.dispatchEvent(eventObject);
	} else {
		return;
	}
}

function findPos(obj)
{
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
	}
	return [curleft,curtop];
}



