var TimeToFade = 1000.0;
var timeoutArr = new Array();

// Prototype Method to get the element based on ID
if(!window.$) {
	function $(d) {
		return document.getElementById(d);
	}
}

// Used to check if value really exists
 function _exists(value) {
	var re = /^\s*$/;
	if((typeof value === "object" && value === null) || (typeof value === "undefined" && value === undefined) || re.test(value))
		return false;
	
	return true;
 }

 /**
 * X-browser event handler attachment and detachment and detection
 * TH: Switched first true to false per http://www.onlinetools.org/articles/unobtrusivejavascript/chapter4.html
 *
 * @param {Object} obj -- the object to attach event to
 * @param {String} evType -- name of the event -DON'T ADD "on", pass only "mouseover", etc
 * @param {Function} fx -- function to call
 * @param {Boolean} [useCapture] -- optional, used attach the event in capture phase or in bubbling phase
 */
function addEvent(obj, evType, fx, useCapture) {
	if(!useCapture) useCapture = false;
	if(!obj.eventsHolder) obj.eventsHolder = [];
	obj.eventsHolder.push([evType, fx, useCapture]);
	if(obj.attachEvent) {
		obj['e' + evType + fx] = fx;
		obj[evType + fx] = function(){ return obj['e' + evType + fx](window.event); };
		var r = obj.attachEvent("on" + evType, obj[evType + fx]);
		return r;
	}
	else if(obj.addEventListener) {
		obj.addEventListener(evType, fx, useCapture);
		return true;
	}
	else {
		return false;
	}
}
function hasEvent(obj, evType, fx, useCapture) {
	var found = false;
	if(!useCapture) useCapture = false;
	if(!obj.eventsHolder) return found;
	for(var i = 0; i < obj.eventsHolder.length; i++) {
		if(obj.eventsHolder[i][0] == evType && obj.eventsHolder[i][1] == fx && obj.eventsHolder[i][2] == useCapture) {
			found = true;
			break;
		}
	}
	return found;
}
function removeEvent(obj, evType, fx, useCapture) {
	if(!useCapture) useCapture = false;
	if(!obj.eventsHolder) obj.eventsHolder = [];
	for(var i = 0; i < obj.eventsHolder.length; i++) {
		if(obj.eventsHolder[i][0] == evType && obj.eventsHolder[i][1] == fx && obj.eventsHolder[i][2] == useCapture) {
			obj.eventsHolder.splice(i, 1);
			break;
		}
	}
	if(obj.detachEvent) {
		if(!obj[evType + fx]) return;
		var r = obj.detachEvent("on" + evType, obj[evType + fx]);
		obj[evType + fx] = null;
		return r;
	}
	else if(obj.removeEventListener) {
		obj.removeEventListener(evType, fx, useCapture);
		return true;
	}
	else {
		return false;
	}
}
 
function fade(eid) {
	var element = $(eid);
	if(element == null)
		return;
	//if(element.FadeState == null){
		element.FadeState = -2;
	//}
	 
	if(element.FadeState == 1 || element.FadeState == -1){
		//alert('sono in if :' + element.FadeState);
		element.FadeState = element.FadeState == 1 ? -1 : 1;
		element.FadeTimeLeft = TimeToFade - element.FadeTimeLeft;
	}else{
		//alert('sono in else :' + element.FadeState);
		element.FadeState = element.FadeState == 2 ? -1 : 1;
		element.FadeTimeLeft = TimeToFade;
		timeoutArr[eid]=setTimeout("animateFade(" + new Date().getTime() + ",'" + eid + "')", 50);
	}
}
 
function animateFade(lastTick, eid){
	var curTick = new Date().getTime();
	var elapsedTicks = curTick - lastTick;
	var element = $(eid);
	 
	if(element.FadeTimeLeft <= elapsedTicks){
		element.style.opacity = element.FadeState == 1 ? '1' : '0';
		element.style.filter = 'alpha(opacity = ' + (element.FadeState == 1 ? '100' : '0') + ')';
		element.FadeState = element.FadeState == 1 ? 2 : -2;
		return;
	}
	 
	element.FadeTimeLeft -= elapsedTicks;
	var newOpVal = element.FadeTimeLeft/TimeToFade;
	if(element.FadeState == 1)
		newOpVal = 1 - newOpVal;
	 
	element.style.opacity = newOpVal;
	element.style.filter = 'alpha(opacity = ' + (newOpVal*100) + ')';
	timeoutArr[eid]=setTimeout("animateFade(" + curTick	+ ",'" + eid + "')", 33);
}

//function opacity(id, opacStart, opacEnd, millisec) { 
function opacity(id, millisec) { 
    //speed for each frame 
    var speed = Math.round(millisec / 100); 
    var timer = 0; 

    //determine the direction for the blending, if start and end are the same nothing happens 
    if(opacStart > opacEnd) { 
		alert('e magg s');
        for(i = opacStart; i >= opacEnd; i--) {
			
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed)); 
            timer++; 
        } 
    } else if(opacStart < opacEnd) { 
		alert('s magg e');
        for(i = opacStart; i <= opacEnd; i++) 
            { 
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed)); 
            timer++; 
        } 
    } 
} 

//change the opacity for different browsers 
function changeOpac(opacity, id) { 
    var object = $(id).style; 
    object.opacity = (opacity / 100); 
    object.MozOpacity = (opacity / 100); 
    object.KhtmlOpacity = (opacity / 100); 
    object.filter = "alpha(opacity=" + opacity + ")"; 
} 

// set the input value to upper case.  ie.:  nome cognome  --->  NOME COGNOME
function setToUpperCase(field) {
	if(!field) return false;
	field.value = field.value.toUpperCase();
	return true;
}

// set the first letter of each word into the input value to upper case. ie.:   nome cognome  --->  Nome Cognome
function setToCapitalized(field) {
	if(!field) return false;
	var arr = field.value.split(" ");
	for(var i = 0; i < arr.length; i++) {
		arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1).toLowerCase();
	}
	field.value = arr.join(" ");
	return true;
}

function visualize_map(linkto) {
	if (!linkto) return false;
	var header = $("topContainer");
	var shadow = $("bodyTopContainer");
	shadow.style.top = '546px';
	header.style.height = '380px';
	header.parentNode.style.height = '380px';
	while (header.childNodes[0]) {
		header.removeChild(header.childNodes[0]);
	}
	var iframe = document.createElement("iframe");
	iframe.setAttribute('width','100%');
	iframe.setAttribute('height','100%');
	iframe.setAttribute('frameborder','0');
	iframe.setAttribute('scrolling','no');
	iframe.setAttribute('marginheight','0');
	iframe.setAttribute('marginwidth','0');
	iframe.setAttribute('src',linkto);
	header.appendChild(iframe);
}