// test stefano
/* var viewpt= document.viewport.getDimensions();
alert("Viewport width: "+viewpt['width']+"\nViewport height: "+viewpt['height']); */

function xhrError(xhrReq) {
	var mssg = 'XHR Error - Code ' + xhrReq.status + ' ';
	switch (xhrReq.status) {
	case 301:
		mssg += 'Content Moved';
		break;
	case 400:
		mssg += 'Bad Request';
		break;
	case 401:
		mssg += 'Unauthorized';
		break;
	case 403:
		mssg += 'Forbidden';
		break;
	case 404:
		mssg += 'Not Found';
		break;
	case 500:
		mssg += 'Internal Server Error';
		break;
	case 503:
		mssg += 'Service Unavailable';
		break;
	case 504:
		mssg += 'Gateway Timeout';
		break;
	case 505:
		mssg += 'HTTP Version Not Supported';
		break;
	}
	mssg += "\n\nPlease clear your browser's cache,\nreload the page and try your request again."
	alert(mssg);
}

var LazyLoad = {
	loadJS: function(url, callback, customEvt) {
		var url = url.replace(/[^a-zA-Z0-9.\-_\/]/g, "");
		if (!url) return;
		if (navigator.userAgent.match(/MSIE 6.0/)) {
			var llIE = new LazyLoadIE6(url, callback);
			llIE.load();
		}
		else {
			var script = new Element("script", {
				type: "text/javascript",
				src: url
			});
			if (callback && customEvt) {
				document.observe(customEvt, callback);
			}
			document.body.appendChild(script);
		}
	},
	loadCSS: function(url) {
		var url = url.replace(/[^a-zA-Z0-9.\-_\/]/g, "");
		if (!url) return;
		var head = $$("head")[0];
		var css = new Element("link", {
			type: "text/css",
			rel: "stylesheet",
			href: url
		});
		head.appendChild(css);
	}
};

var LazyLoadIE6 = Class.create();
LazyLoadIE6.prototype = {
	initialize: function(url, callback) {
		this.maxTries = 3;
		this.numTries = 0;
		this.url = url.replace(/[^a-zA-Z0-9.\-_\/]/g, "");
		this.callback = callback;
	},
	load: function() {
		var script = new Element("script", {
			type: "text/javascript",
			src: this.url
		});
		script.onreadystatechange = function() {
			if (script.readyState === "loaded" || script.readyState === "complete") {
				try {
					this.callback();
				} catch(e) {
					if (this.maxTries <= this.numTries) {
						return;
					}
					this.numTries++;
					this.load();
				}
			}
		}.bind(this);
		document.body.appendChild(script);
	}
};

ajaxWin = {
	contents: '',
	json: [],
	loaded: false,
	show: function(json) {
		ajaxWin.json = json;
		ajaxWin.buildContents();
		if (this.loaded) {
			ajaxWin.activateWindow();
		} else {
			Event.observe(window, 'load', ajaxWin.activateWindow);
		}
	},
	buildContents: function() {
		json = ajaxWin.json;
		ajaxWin.contents = '<a onclick="' + (json.cnclFunc ? json.cnclFunc: '') + ' ajaxWin.cancelWindow(); return false" class="close_btn" title="' + (json.cnclText ? json.cnclText: 'Cancel') + '" ></a>';
		ajaxWin.contents += '<div class="hdr" id="ajaxWinHdr">';
		if (json.title) ajaxWin.contents += json.title;
		ajaxWin.contents += '</div>';
		ajaxWin.contents += '<div id="ajaxWinBody">';
		if (json.hdrTxt || json.hdrIcon) {
			ajaxWin.contents += '<table class="ndnt">';
			ajaxWin.contents += '<tr>';
			if (json.hdrIcon) {
				ajaxWin.contents += '<td class="m"><img src="' + json.hdrIcon + '" alt="" style="padding-right:6px" /></td>';
			}
			ajaxWin.contents += '<td class="m"><strong class="' + json.hdrTxtClass + '">' + json.hdrTxt + '</strong></td>';
			ajaxWin.contents += '</tr>';
			ajaxWin.contents += '</table>';
		}
		ajaxWin.contents += json.cntnt;
		ajaxWin.contents += '</div>';
		if (json.footer) {
			ajaxWin.contents += '<div class="clear"></div>';
			ajaxWin.contents += '<div id="ajaxWinFtr" class="ftr">';
			ajaxWin.contents += json.footer;
			ajaxWin.contents += '</div>';
		}
	},
	activateWindow: function() {
		json = ajaxWin.json;
		if (!$('ajaxWin')) {
			new Insertion.Bottom('wrapper', '<div id="ajaxWinBG" style="display:none;" ></div>');
			new Insertion.Bottom('wrapper', '<div id="ajaxWin" class="dropshadow" style="display:none;" ><div id = "ajaxWinWrapper">' + ajaxWin.contents + '</div></div>');
		} else {
			$('ajaxWin').hide();
			$('ajaxWinWrapper').update(ajaxWin.contents);
		}
		if (typeof(json.wdth) != 'undefined') {
			$('ajaxWin').style.width = json.wdth + 10 + 'px';
		}
		w = $('ajaxWin').getWidth();
		h = $('ajaxWin').getHeight();
		viewportDims = document.viewport.getDimensions();
		scrollOffsets = document.viewport.getScrollOffsets();
		$('ajaxWinBG').style.width = (viewportDims['width'] * 3) + scrollOffsets['left'] + 'px';
		$('ajaxWinBG').style.height = (viewportDims['height'] * 3) + scrollOffsets['top'] + 'px';
		$('ajaxWin').style.top = Math.max(0, parseInt((viewportDims['height'] / 2) - (h / 2) + scrollOffsets['top'])) + 'px';
		$('ajaxWin').style.left = Math.max(0, parseInt((viewportDims['width'] / 2) - (w / 2) + scrollOffsets['left'])) + 'px';
		$('ajaxWinBG').show();
		$('ajaxWin').show();
		draggable = new Draggable('ajaxWin', {
			handle: 'ajaxWinHdr'
		});
		if (draggable) $('ajaxWinHdr').setStyle('cursor:move');
		Event.observe(document, 'keypress', function(e) {
			if (e.keyCode == 27) ajaxWin.cancelWindow();
		});
		document.fire('ajax_widget_window:open');
	},
	cancelWindow: function() {
		if ($('ajaxWin')) $('ajaxWin').remove();
		if ($('ajaxWinBG')) $('ajaxWinBG').remove();
		document.fire('ajax_widget_window:closed');
		Event.stopObserving(document, 'keypress');
	}
}
Event.observe(window, 'load', function() {
	ajaxWin.loaded = true;
});
try {
	document.fire('ajax_widget_window:loaded');
} catch(e) {}

document.observe("dom:loaded", function() {
	if (window.ajaxWin) ajaxWin.loaded = true;
	Event.observe(document, 'click', cntrlr.obsrv);
	Event.observe(document, 'mouseover', cntrlr.obsrv);
	Event.observe(document, 'mouseout', cntrlr.obsrv);
});

cntrlr = {
	evt: '',
	elm: '',
	id: '',
	clss: '',
	debug: 0,
	positioned: [],
	mX: 0,
	mY: 0,
	obsrv: function(e) {
		var classes = $w(e.element().className);
		if (classes[0] && classes[0].startsWith('e_')) {
			cntrlr.clss = classes[0];
			cntrlr.setNfo(e);
			switch (cntrlr.clss) {
				// unico caso contemplato nel nostro caso
				case 'e_loupe':
					if (e.type == 'mouseover' && window.showLoupe) showLoupe();
					else if (e.type == 'mouseout' && window.hideLoupe) hideLoupe();
				break;
			}
		}
	},
	setNfo: function(e) {
		cntrlr.mX = Event.pointerX(e);
		cntrlr.mY = Event.pointerY(e);
		cntrlr.elm = e.element();
		cntrlr.evt = e.type;
		cntrlr.id = $(cntrlr.elm).identify();
		if (cntrlr.debug && window.console) {
			console.log('EVT:' + cntrlr.evt + ' - ID:' + cntrlr.id + ' - CLASS: ' + cntrlr.clss + ' - ELM:' + cntrlr.elm);
		}
	}
}

function showLoupe() {
	var imgID = cntrlr.id;
	var aftID = imgID.replace('imageThumb_', '');
	var puID = 'loupe_' + aftID;
	if (loupe['img_' + aftID].ShowThumb == 0) return;
	if (!$(puID)) createLoupe(aftID);
	var vpDims = document.viewport.getDimensions();
	
	var vpPos = document.viewport.getScrollOffsets();
	var puDims = $(puID).getDimensions();
	var offset = [];
	offset['x'] = vpPos['left'] + 10;
	offset['y'] = vpPos['top'] - 10;
	//alert(offset['x']+" - "+offset['y']);
	
	var thmbPos = $(imgID).viewportOffset();
	var thmbDim = $(imgID).getDimensions();
	
	if ((thmbPos[0] + thmbDim['width'] + puDims['width'] + offset['x']) <= (vpDims['width']))
		puDims['x'] = thmbPos[0] + thmbDim['width'] + offset['x'];
	else
		puDims['x'] = thmbPos[0] - puDims['width'] - offset['x'];
	
	// puDims['x'] = thmbPos[0] + thmbDim['width'] + offset['x'];
	
	if ((thmbPos[1] + puDims['height']) <= (vpDims['height']))
		puDims['y'] = thmbPos[1] + offset['y']
	else
		puDims['y'] = offset['y'] + vpDims['height'] - puDims['height'];
	
	// puDims['y'] = thmbPos[1] + offset['y']
	
	if (puDims['y'] <= vpPos['top'])
		puDims['y'] = vpPos['top'] + 5;
	
	if ($(puID)) {
		
		/* alert ("thmbPos -> "+thmbPos[0]+' : '+thmbPos[1]+"\nthmbDim -> "+thmbDim['width']+' : '+thmbDim['height']+"\npuDims(xy) -> "+puDims['x']+' : '+puDims['y']+"\npuDims(wh) -> "+puDims['width']+' : '+puDims['height']+"\nvpDims -> "+vpDims['width']+' : '+vpDims['height']); */
		
		$(puID).style.left = puDims['x'] + 'px';
		$(puID).style.top = puDims['y'] + 'px';
		$(puID).show();
	}
}

function createLoupe(aftID) {
	var tmpl = '';
	tmpl += '<div id="loupe_#{FileID}" class="loupe" style="display:none">';
	tmpl += '<img src="' + $('imageThumb_' + aftID).src + '" style="width:#{DimX}px; height:#{DimY}px" alt="" />';
	//tmpl += '<img src="#{ImgSRC}" style="width:#{DimX}px; height:#{DimY}px;margin-left:-#{DimX}px; margin-top:-#{DimY}px" alt="" />';
	tmpl += '<p style="padding-top:4px; font-size:12px; width:#{DimX}px">#{Title}</p>';
	tmpl += '</div>';
	
	var loupeTemplate = new Template(tmpl);
	var html = loupeTemplate.evaluate(loupe['img_' + aftID]);
	$('colonna_cx').insert({
		bottom: html
	});
}

function hideLoupe() {
	var loupeID = cntrlr.id.replace('imageThumb_', 'loupe_');
	var aftID = cntrlr.id.replace('imageThumb_', '');
	if ($(loupeID)) {
		if (loupe['img_' + aftID].isAudio || loupe['img_' + aftID].AFT == 8) {
			$(loupeID).remove();
		} else {
			$(loupeID).hide();
		}
	}
}

var AjaxUtil = {
	receiveArray: function(responseText) {
		if (typeof responseText != 'string') {
			return responseText;
		}
		eval('var ret = ' + responseText);
		return ret;
	},
	trim: function(str) {
		return str.replace(/^(\s+)?(\S*)(\s+)?$/, '$2');
	},
	ltrim: function(str) {
		return str.replace(/^\s*/, '');
	},
	rtrim: function(str) {
		return str.replace(/\s*$/, '');
	},
	xmldoc2string: function(xmlDocObject) {
		var xmlMod = null;
		try {
			var xmlMod = imprt("xml");
		} catch(e) {
			throw "importing of xml module failed.";
		}
		try {
			var xmlString = xmlMod.node2XML(xmlDocObject.documentElement);
		} catch(e) {
			throw e;
		}
		return xmlString;
	},
	xmlrpc_extractpayload: function(responseText) {
		var xmlrpcMod = null;
		try {
			var xmlrpcMod = imprt("xmlrpc");
		} catch(e) {
			throw "importing of xmlrpc module failed.";
		}
		try {
			var xmlPayload = xmlrpcMod.unmarshall(responseText);
		} catch(e) {
			if (e.constructor == xmlrpcMod.Fault) {
				throw e;
			} else {
				alert(e);
			}
		}
		return xmlPayload;
	},
	xmlrpc_formatrequest: function(methodName, methodParameters) {
		var message = new XMLRPCMessage(methodName);
		message.addParameter(methodParameters);
		return message.xml();
	},
	xmlrpc_receivepayload: function(responseText) {
		try {
			xmlPayload = this.xmlrpc_extractpayload(responseText);
			var xmlDoc;
			try {
				var xmlDOMParser = new DOMParser();
				xmlDoc = xmlDOMParser.parseFromString(xmlPayload, "text/xml");
			} catch(e) {
				try {
					xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
					xmlDoc.async = "false";
					xmlDoc.loadXML(xmlPayload);
				} catch(e) {
					throw e;
				}
			}
		} catch(e) {
			if (typeof e == 'object' && e.faultCode) {
				throw e;
			} else {
				alert(e);
			}
		}
		return xmlDoc;
	},
	requestState: function(req) {
		switch (req.readyState) {
		case 1:
		case 2:
		case 3:
			return true;
			break;
		default:
			return false;
			break;
		}
	},
	showTimeoutMessage: function() {
		alert('The request has timed out. Please try again.');
	},
	defaultOnFailure: function() {
		alert('The request has failed.');
	},
	isFailure: function(req) {
		if (AjaxFailure.isNotXmlHttpRequest(req)) {
			return true;
		}
		if (AjaxFailure.isHeaderlessContent(req)) {
			this.showTimeoutMessage();
			return true;
		}
		if (AjaxFailure.isFailureString(req)) {
			return true;
		}
		return false;
	}
}
var AjaxFailure = {
	isHeaderlessContent: function(req) {
		return (req.getResponseHeader('X-Headerless-Content') == 'YES' ? true: false);
	},
	isFailureString: function(req) {
		return (req.responseText == 'ajax_fail' ? true: false);
	},
	isNotXmlHttpRequest: function(req) {
		return (req.responseText ? false: true);
	}
}

