function findPos(obj) {

	var curleft = curtop = 0;

	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}

	return [curleft,curtop];
}

function downloadPopupHelper(x) {

	y = findPos(x);

	if(document.getElementById('product_dwnld_popup').style.top == (y[1] + 'px') && document.getElementById('product_dwnld_popup').style.left == (y[0] + 'px')) {
		if(document.getElementById('product_dwnld_popup').style.display == 'none') {
			document.getElementById('product_dwnld_popup').style.display = 'block'; }
		else {
	 		document.getElementById('product_dwnld_popup').style.display = 'none'; }
	}
	else {
		document.getElementById('product_dwnld_popup').style.display = 'block';
	}

	document.getElementById('product_dwnld_popup').style.top = y[1] + 'px';
	document.getElementById('product_dwnld_popup').style.left = y[0] + 'px';
}

function showPopup(objRef, idPopup){
	var pos = findPos(objRef);
	var popup = document.getElementById(idPopup);
	popup.style.top = pos[1] - 141 + 'px';
	popup.style.left = pos[0] - 57 + 'px';
	popup.style.display = (popup.style.display=='none' ? 'block' : 'none');
}

//l'ideale sarebbe parametrizzare showpopup qua sopra
function showPopup2(objRef, idPopup){
	var pos = findPos(objRef);
	var popup = document.getElementById(idPopup);
	popup.style.top = pos[1] - 141 + 'px';
	popup.style.left = pos[0] - 370 + 'px';
	popup.style.display = (popup.style.display=='none' ? 'block' : 'none');
}

//il cambio di posizione mette ko certi popup
function showPopup3(objRef, idPopup){
	var pos = findPos(objRef);
	var popup = document.getElementById(idPopup);
	popup.style.display = (popup.style.display=='none' ? 'block' : 'none');
}



//dynamic top navigation
initNav = function() {
	var divs = document.getElementsByTagName("ul");
	for (var j=0; j<divs.length; j++)
	{
		if (divs[j].className.indexOf("sub-nav") != -1)
		{
			var lis = divs[j].getElementsByTagName("li");
			for (var i=0; i<lis.length; i++)
			{
				
				lis[i].onmouseover = function()
				{
					this.className += " hover";
				}
				lis[i].onmouseout = function()
				{
					this.className = this.className.replace(" hover", "");
				}
			}
		}
	}
}
if (document.all && window.attachEvent)
	attachEvent("onload", initNav);
	
initMainNav = function() {
	var showPopup = document.getElementById("my-page");
	var popup = document.getElementById("popup");
	if (showPopup && popup)
	{
		showPopup.onclick = function()
		{
			if (popup.className.indexOf("open") != -1)
			{
				popup.className = popup.className.replace("open", "");
				showPopup.className = showPopup.className.replace("open", "");				
			}
			else
			{
				popup.className += " open";
				showPopup.className += " open";
			}
		}
	}
}
initForms = function() {
	var divs = document.getElementsByTagName("div");
	for (var i=0; i<divs.length; i++)
	{
		if (divs[i].className.indexOf("form-content") != -1)
		{
			var title = divs[i].getElementsByTagName("strong")[0];
			var links = title.getElementsByTagName("a");
			if (links.length != 0 )
			{
				links[0].parent = divs[i];
				links[0].onclick  = function()
				{
					if (this.parent.className.indexOf("close") != -1)
					{
						this.parent.className = this.parent.className.replace("close", "");						
					}
					else
					{
						this.parent.className += " close";
					}
				}
			}
		}
	}
}


resetHandsets = function() {
	var handsets = document.getElementById("handsets-box");
	var lis = handsets.getElementsByTagName("li");
	for (var i=0; i<lis.length; i++)
	{
		lis[i].className = lis[i].className.replace("selected", "");		
	}
}
initHandsets = function() {
	var handsets = document.getElementById("handsets-box");
	if (handsets)
	{
		var lis = handsets.getElementsByTagName("li");
		for (var i=0; i<lis.length; i++)
		{
			var links = lis[i].getElementsByTagName("a");
			for (var j=0; j<links.length; j++)
			{
				if (links[j].className.indexOf("name") != -1)
				{
					links[j].parent = lis[i];
					links[j].onclick = function()
					{
						resetHandsets();
						this.parent.className += " selected";
					}
				}
				else if (links[j].className.indexOf("remove") != -1)
				{
					links[j].parent = lis[i];
					links[j].onclick = function()
					{
						if (this.parent.className.indexOf("selected") != -1) lis[0].className += " selected";
						this.parent.className = " hidden";
					}
				}
			}
		}
	}
}

initPage = function() {
	initMainNav();
	initForms();
	initHandsets();
}

if (window.addEventListener)
	window.addEventListener("load", initPage, false);
else if (window.attachEvent && !window.opera)
	window.attachEvent("onload", initPage);	


MobangoRequest = Class.create();
MobangoRequest.prototype = {
	initialize: function(options) {
			var service = options.service;
			var params = options.params;
			var resultName = options.resultName;
			var callback = options.callback;
			
			var url = document.BASE_URL+'index.php?json=' + options.service;
			params.each(
				function(item){
					url += '&' + item.name + '=' +item.value;
				}
			);
			
			url += '&cookie=' + Mobango.readSecurityCookie();

			new Ajax.Request(url, {
				method: 'get',
				onSuccess: function(transport) {
						if(transport.responseText){
							var obj = transport.responseText.evalJSON();
							if(obj.result) {
								if(obj.result=='error') {
									// TODO error
									if(obj.error)
										MobangoNotifier.showErrorMessage(obj.error);
									else
										MobangoNotifier.showErrorMessage('server error');
								}else if(obj.result==resultName && typeof(obj[resultName])!='undefined' ) 
								{
									callback( obj[resultName] );
								}else {
									// TODO error: THIS ERROR IS UNUSED!
									MobangoNotifier.showErrorMessage('wrong result name');
								}
							}else {
								//TODO error
								MobangoNotifier.showErrorMessage('server error');
							}
						}else {
							//prototype says that we had success (this is onSuccess)
							//btw responseText is null/empty
							//there is something wrong somewhere...
						} 
					}	
			});
		}
}


MobangoRating = Class.create();
MobangoRating.prototype = {
	initialize: function(idDiv, value, idSoftware,rated, ratingLocalizedStringValues, showText, callback ){
		var ratingControl = new Control.Rating(idDiv, {
			value: value,
			stringVals: ratingLocalizedStringValues,
			callback: callback,
			rated: rated,
			showText: showText,
			afterChange: function(value) {
				if(callback){
					callbackResult = eval(callback+"(ratingControl.container)");
					if(!callbackResult){
						//Exit if callback return false
						return;
					}	 
				}
				
				
				new MobangoRequest({
					service: 'rate_software',
					params: [	{name:'idSoftware', value:idSoftware},
								{name:'rate', value:value} ],
					resultName: 'rating',
					callback: function(obj){
								jQuery(ratingControl.valueShower).hide();
								ratingControl.setValue(obj,false,true);
								MobangoNotifier.showSuccessMessage(ratingSuccessMessage);
							}
				});
			}
		});
	}

}


MobangoNotifierClass = Class.create();
MobangoNotifierClass.prototype = {		
	
	initialize: function (){
		
	},	
		
	showSuccessMessage: function (msg){
			$('success_msg_text').innerHTML = msg;
			$('success_msg').show().visualEffect('move',{y: -Position.cumulativeOffset($('success_msg'))[1]-$('success_msg').getDimensions().height+MobangoNotifier.getScrollY(), duration: 0 }).show().visualEffect('move',{y: $('success_msg').getDimensions().height, duration: .7 });
			setTimeout('MobangoNotifier.hideSuccessMessage()','10000');
		},
		
		
	showErrorMessage: 	function (msg){
			$('error_msg_text').innerHTML = msg;
			$('error_msg').show().visualEffect('move',{y: -Position.cumulativeOffset($('error_msg'))[1]-$('error_msg').getDimensions().height+MobangoNotifier.getScrollY(), duration: 0 }).show().visualEffect('move',{y: $('error_msg').getDimensions().height, duration: .7 });
		    setTimeout('MobangoNotifier.hideErrorMessage()','10000');
		},	
		
	hideSuccessMessage: function (){
			$('success_msg').visualEffect('dropOut');
		},
		
	hideErrorMessage: function(){
			$('error_msg').visualEffect('dropOut');
		},
		
		
	getScrollY: function () {
		  
			  var scrOfX = 0, scrOfY = 0;
			  if( typeof( window.pageYOffset ) == 'number' ) {
			    //Netscape compliant
			    scrOfY = window.pageYOffset;
			    //scrOfX = window.pageXOffset;
			  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
			    //DOM compliant
			    scrOfY = document.body.scrollTop;
			    //scrOfX = document.body.scrollLeft;
			  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
			    //IE6 standards compliant mode
			    scrOfY = document.documentElement.scrollTop;
			    //scrOfX = document.documentElement.scrollLeft;
			  }
			  
			  return  scrOfY ;	
		}
};

var MobangoNotifier = new MobangoNotifierClass();	


//requires script.aculo.us

if (!window.kiwiage) {
	window.kiwiage = {};
}

with (kiwiage) {

	kiwiage.MobangoLoading = function(overElement,imagePath,timeout) {
		this.overElement = overElement;
		this.active = false;
		this.image = imagePath;
		if (timeout) {
			this.timeout = timeout;
		}
		this.phase = 0;
	};

	MobangoLoading.prototype.showLoading = function() {
		
		if (this.active) {
			//this loader is already visible
			return;
		}
		this.phase++;
		this.active = true;

		this.loadingBox = document.createElement("div");
		//this.loadingBox.style.background = "black";

		var loadingImg = document.createElement("img");
		this.loadingBox.appendChild(loadingImg);
		loadingImg.src = this.image;

		document.getElementsByTagName("body")[0].appendChild(this.loadingBox);

		Position.absolutize(this.loadingBox);
		var p = Position.cumulativeOffset(this.overElement);
		var d = this.overElement.getDimensions();

		newT = (+Math.round(d.height/2)) - (Math.round(loadingImg.clientHeight/2));
		newL = (+Math.round(d.width/2)) - (Math.round(loadingImg.clientWidth/2));

		this.loadingBox.setStyle({top:p[1]+'px',left:p[0]+'px',width: d.width+'px', height: d.height+'px'});

		loadingImg.style.position = "relative";
		loadingImg.style.left = newL+'px';
		loadingImg.style.top = newT+'px';

		var that = this;
		var ph = this.phase;
		if (!isNaN(this.timeout)) {
			setTimeout(function() {
				that.hideLoading(ph);
			},this.timeout)
		}

	};

	MobangoLoading.prototype.hideLoading = function(ph) {
		if (ph && ph != this.phase) {
			//called by a timeout. It's out of phase so that we ignore it.
			return;
		}
		if (!this.active) {
			//this loader is not visible
			return;
		}
		this.phase++;
		this.active = false;

//---
		this.loadingBox.visualEffect('fade');
//---
	};


	MobangoLoading.prototype.startLoading =  function () {
	 loadingRequests++;
	 if (loadingRequests == 1) {
	 // alert('startLoading()');
	 loadingInterval = window.setInterval('loading()', 83);
	 document.getElementById('loading').style.visibility = 'visible';
	 }
	}



}


/**
 * @author Ryan Johnson <ryan@livepipe.net>
 * @copyright 2007 LivePipe LLC
 * @package Control.Tabs
 * @license MIT
 * @url http://livepipe.net/projects/control_tabs/
 * @version 2.1.1
 */

if(typeof(Control) == 'undefined')
	var Control = {};

Control.Tabs = Class.create();

Object.extend(Control.Tabs,{
	instances: [],
	findByTabId: function(id){
		return Control.Tabs.instances.find(function(tab){
			return tab.links.find(function(link){
				return link.key == id;
			});
		});
	}
});
Object.extend(Control.Tabs.prototype,{
	initialize: function(tab_list_container,options){
		this.activeContainer = false;
		this.activeLink = false;
		this.containers = $H({});
		this.links = [];
		Control.Tabs.instances.push(this);
		this.options = {
			beforeChange: Prototype.emptyFunction,
			afterChange: Prototype.emptyFunction,
			hover: false,
			linkSelector: 'li a',
			setClassOnContainer: false,
			activeClassName: 'active',
			defaultTab: 'first',
			autoLinkExternal: true,
			targetRegExp: /#(.+)$/,
			showFunction: Element.show,
			hideFunction: Element.hide
		};
		Object.extend(this.options,options || {});
		(typeof(this.options.linkSelector == 'string')
			? $(tab_list_container).getElementsBySelector(this.options.linkSelector)
			: this.options.linkSelector($(tab_list_container))
		).findAll(function(link){
			return (/^#/).exec(link.href.replace(window.location.href.split('#')[0],''));
		}).each(function(link){
			this.addTab(link);
		}.bind(this));
		this.containers.values().each(this.options.hideFunction);
		if(this.options.defaultTab == 'first')
			this.setActiveTab(this.links.first());
		else if(this.options.defaultTab == 'last')
			this.setActiveTab(this.links.last());
		else
			this.setActiveTab(this.options.defaultTab);
		var targets = this.options.targetRegExp.exec(window.location);
		if(targets && targets[1]){
			targets[1].split(',').each(function(target){
				this.links.each(function(target,link){
					if(link.key == target){
						this.setActiveTab(link);
						throw $break;
					}
				}.bind(this,target));
			}.bind(this));
		}
		if(this.options.autoLinkExternal){
			$A(document.getElementsByTagName('a')).each(function(a){
				if(!this.links.include(a)){
					var clean_href = a.href.replace(window.location.href.split('#')[0],'');
					if(clean_href.substring(0,1) == '#'){
						if(this.containers.keys().include(clean_href.substring(1))){
							$(a).observe('click',function(event,clean_href){
								this.setActiveTab(clean_href.substring(1));
							}.bindAsEventListener(this,clean_href));
						}
					}
				}
			}.bind(this));
		}
	},
	addTab: function(link){
		this.links.push(link);
		link.key = link.getAttribute('href').replace(window.location.href.split('#')[0],'').split('/').last().replace(/#/,'');
		this.containers[link.key] = $(link.key);
		link[this.options.hover ? 'onmouseover' : 'onclick'] = function(link){
			if(window.event)
				Event.stop(window.event);
			this.setActiveTab(link);
			return false;
		}.bind(this,link);
	},
	setActiveTab: function(link){
		if(!link)
			return;
		if(typeof(link) == 'string'){
			this.links.each(function(_link){
				if(_link.key == link){
					this.setActiveTab(_link);
					throw $break;
				}
			}.bind(this));
		}else{
			this.notify('beforeChange',this.activeContainer);
			if(this.activeContainer)
				this.options.hideFunction(this.activeContainer);
			
			this.links.each(function(item){
				(this.options.setClassOnContainer ? $(item.parentNode) : item).className = "";
			}.bind(this));
			(this.options.setClassOnContainer ? $(link.parentNode) : link).className = this.options.activeClassName;
			
			this.activeContainer = this.containers[link.key];
			this.activeLink = link;
			this.options.showFunction(this.containers[link.key]);
			this.notify('afterChange',this.containers[link.key]);
		}
	},
	next: function(){
		this.links.each(function(link,i){
			if(this.activeLink == link && this.links[i + 1]){
				this.setActiveTab(this.links[i + 1]);
				throw $break;
			}
		}.bind(this));
		return false;
	},
	previous: function(){
		this.links.each(function(link,i){
			if(this.activeLink == link && this.links[i - 1]){
				this.setActiveTab(this.links[i - 1]);
				throw $break;
			}
		}.bind(this));
		return false;
	},
	first: function(){
		this.setActiveTab(this.links.first());
		return false;
	},
	last: function(){
		this.setActiveTab(this.links.last());
		return false;
	},
	notify: function(event_name){
		try{
			if(this.options[event_name])
				return [this.options[event_name].apply(this.options[event_name],$A(arguments).slice(1))];
		}catch(e){
			if(e != $break)
				throw e;
			else
				return false;
		}
	}
});
if(typeof(Object.Event) != 'undefined')
	Object.Event.extend(Control.Tabs);


/**
 * @author Ryan Johnson <ryan@livepipe.net>
 * @copyright 2007 LivePipe LLC
 * @package Control.Rating
 * @license MIT
 * @url http://livepipe.net/projects/control_rating/
 * @version 1.0.1
 */

if(typeof(Control) == 'undefined')
	Control = {};
Control.Rating = Class.create();
Object.extend(Control.Rating,{
	instances: [],
	findByElementId: function(id){
		return Control.Rating.instances.find(function(instance){
			return (instance.container.id && instance.container.id == id);
		});
	}
});
Object.extend(Control.Rating.prototype,{
	container: false,
	value: false,
	options: {},
	initialize: function(container,options){
		Control.Rating.instances.push(this);
		this.value = false;
		this.links = [];
		this.container = $(container);
		this.container.update('');
		this.options = {
			min: 1,
			max: 5,
			rated: false,
			input: false,
			reverse: false,
			capture: true,
			multiple: false,
			stringVals: {},
			classNames: {
				off: 'rating_off',
				half: 'rating_half',
				on: 'rating_on',
				selected: 'rating_selected',
				valueshower: 'rating_show_vals'
			},
			updateUrl: false,
			updateParameterName: 'value',
			afterChange: Prototype.emptyFunction
		};
		Object.extend(this.options,options || {});
		if(this.options.value){
			this.value = this.options.value;
			delete this.options.value;
		}
		if(this.options.input){
			this.options.input = $(this.options.input);
			this.options.input.observe('change',function(input){
				this.setValueFromInput(input);
			}.bind(this,this.options.input));
			this.setValueFromInput(this.options.input,true);
		}
		var range = $R(this.options.min,this.options.max);
		(this.options.reverse ? $A(range).reverse() : range).each(function(i){
			var link = this.buildLink(i);
			this.container.appendChild(link);
			this.links.push(link);
		}.bind(this));
		this.valueShower  = $(document.createElement('span'));
		this.valueShower.className=this.options.classNames['valueshower'];
		//valueShower.innerHTML = "Hey...";
		this.container.appendChild(this.valueShower);
		if(this.options.showText) {
			this.valueShower.innerHTML = this.options.stringVals[this.value];
		}
		this.setValue(this.value || this.options.min - 1,false,true);
	},
	buildLink: function(rating){
		var link = $(document.createElement('a'));
		link.value = rating;
		if(this.options.multiple || (!this.options.rated && !this.options.multiple)){
			link.href = '';
			link.onmouseover = this.mouseOver.bind(this,link);
			link.onmouseout = this.mouseOut.bind(this,link);
			link.onclick = this.click.bindAsEventListener(this,link);
		}else{
			link.style.cursor = 'default';
			link.observe('click',function(event){
				Event.stop(event);
				return false;
			}.bindAsEventListener(this));
		}
		link.addClassName(this.options.classNames.off);
		return link;
	},
	disable: function(){
		this.links.each(function(link){
			link.onmouseover = Prototype.emptyFunction;
			link.onmouseout = Prototype.emptyFunction;
			link.onclick = Prototype.emptyFunction;
			link.observe('click',function(event){
				Event.stop(event);
				return false;
			}.bindAsEventListener(this));
			link.style.cursor = 'default';
		}.bind(this));
	},
	setValueFromInput: function(input,prevent_callbacks){
		this.setValue((input.options ? input.options[input.options.selectedIndex].value : input.value),true,prevent_callbacks);
	},
	setValue: function(value,force_selected,prevent_callbacks){
		this.value = value;
		if(this.options.input){
			if(this.options.input.options){
				$A(this.options.input.options).each(function(option,i){
					if(option.value == this.value){
						this.options.input.options.selectedIndex = i;
						throw $break;
					}
				}.bind(this));
			}else
				this.options.input.value = this.value;
		}
		this.render(this.value,force_selected);
		if(!prevent_callbacks){
			if(this.options.updateUrl){
				var params = {};
				params[this.options.updateParameterName] = this.value;
				new Ajax.Request(this.options.updateUrl,{
					parameters: params
				});
			}
			this.notify('afterChange',this.value);
		}
	},
	render: function(rating,force_selected){
		(this.options.reverse ? this.links.reverse() : this.links).each(function(link,i){
			if(link.value <= Math.ceil(rating)){
				link.className = this.options.classNames[link.value <= rating ? 'on' : 'half'];
				if(this.options.rated || force_selected)
					link.addClassName(this.options.classNames.selected);
			}else
				link.className = this.options.classNames.off;
		}.bind(this));
	},
	mouseOver: function(link){
		this.render(link.value,true);
		this.valueShower.innerHTML = this.options.stringVals[link.value];
		
	},
	mouseOut: function(link){
		this.render(this.value);
		this.valueShower.innerHTML = this.options.showText ? this.options.stringVals[this.value] : "";
	},
	click: function(event,link){
		this.options.rated = true;
		this.setValue((link.value ? link.value : link),true);
		if(!this.options.multiple)
			this.disable();
		if(this.options.capture){
			Event.stop(event);
			return false;
		}
	},
	notify: function(event_name){
		try{
			if(this.options[event_name])
				return [this.options[event_name].apply(this.options[event_name],$A(arguments).slice(1))];
		}catch(e){
			if(e != $break)
				throw e;
			else
				return false;
		}
	}
});
if(typeof(Object.Event) != 'undefined')
	Object.Event.extend(Control.Rating);


if (!window.Mobango) {
	window.Mobango = {};
}
with(Mobango) {
	Mobango.readSecurityCookie = function() {
		return readCookie("PHPSESSID");
	};
	
	Mobango.readCookie = function(name) {
		name+="="; 
		var cookiez=document.cookie.split(";");
		for(var i=0;i<cookiez.length;i++){
			while(cookiez[i].charAt(0)==" "){ 
				cookiez[i]=cookiez[i].substring(1);
			}
			
			if(cookiez[i].indexOf(name)==0){   
				var ret=cookiez[i].substring(name.length,cookiez[i].length);
				return ret;
			}
		}
		return null;
	};
}


