/* ############################################# */
/* #  Castiglion del Bosco                     # */
/* #  IconNicholson / P.Gold - 06/07           # */
/* ############################################# */



// Identify specific browser/platforms
var isMac = navigator.userAgent.toLowerCase().indexOf("mac") !=-1;
var isSafari = navigator.userAgent.toLowerCase().indexOf("safari") !=-1;
var isOpera = (window.opera);



function init() {
	// test that browser is DOM-capable
	if (!document.getElementById || !document.getElementsByTagName || !document.createElement)
		return;

	setDropShadow();
	if (isMac && (isSafari || isOpera)) {
		setNavOverFlash();
	}

	if (document.getElementById("historyList")) {
		collapseHistory();
	}
	
	collapseAmenities();
	
	//if (document.getElementById("villasList")) {
	//	collapseVillas();
	//}

	if (document.getElementById("pressReleaseList")) {
		collapsePress();
	}

	setImagePopup();
}
addEvent(window, 'load', init, false);	



/* ************************ */


function setDropShadow() {
	var oFooter;
	if (oFooter = document.getElementById('pageFooter')) {
		if (typeof oFooter.offsetLeft != 'undefined') {
			var footerCoords = findPos(oFooter);
			dropShadow((footerCoords[1]-13)%4);
			return true;
		}
	}
	return false;
}


findPos = function(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];
}


function dropShadow(shadowId) {
	document.getElementById('conBdrB').style.backgroundImage='url(/assets/images/con_bdr_b'+shadowId+'.png)';
	document.getElementById('conCnrBl').style.backgroundImage='url(/assets/images/con_cnr_bl'+shadowId+'.gif)';
	document.getElementById('conCnrBr').style.backgroundImage='url(/assets/images/con_cnr_br'+shadowId+'.gif)';
}




/* ************************ */








function setNavOverFlash() {
	getFlashContent();
	installListeners();
}

// grab alt content before SFWobject replaces it
var flashAltContent;
function getFlashAltContent() {
	var flashContainer;
	if (flashContainer = document.getElementById('flashBanner')) {
		flashAltContent = flashContainer.cloneNode(true);
		flashAltContent.id = "";
	}
}

// grab flash content after page load
var flashContent;
var contentHolder;
function getFlashContent(targetContainer) {
	if (contentHolder = document.getElementById('moduleFlashHeader')) {
		flashContent = contentHolder.cloneNode(true);
		return flashContent;
	}
	return null;
}

function updateContentHolder(targetContainer) {
	contentHolder = targetContainer;
}

function updateAltContent(targetContainer) {
	flashAltContent = targetContainer;
}


function installListeners() {
	var menuItems = getChildrenByTagName('mainNavArea','li');
	for (var i=0; i<menuItems.length; i++) {
		addEvent(menuItems[i], 'mouseover', listenerNavOver, false);	
		addEvent(menuItems[i], 'mouseout', listenerNavOut, false);	
	}
}



/* ********************************** */
/* *        EVENT HANDLERS          * */
/* ********************************** */

function listenerNavOver(e) {
	var flashObject;
	try {
		if (contentHolder && contentHolder && contentHolder.appendChild) {
			if (flashObject = contentHolder) {
				flashObject.style.position = 'absolute';
				flashObject.style.left = '-999em';
				if (flashAltContent) {
					displayElement(flashAltContent);
					contentHolder.parentNode.appendChild(flashAltContent);
				}
			}
		}
	} catch (err) {}
}

function listenerNavOut(e) {
	try {
		contentHolder.parentNode.removeChild(flashAltContent);
		hideElement(flashAltContent);
		var flashObject = contentHolder;
		flashObject.style.left = 'auto';
	} catch (err) {}
}



/* ********************************** */
/* *     UTILITY FUNCTIONS          * */
/* ********************************** */

// cross-browser event handling for IE5+, NS6+ and Mozzila/Gecko
// By Scott Andrew
function addEvent(elm, evType, fn, useCapture) {
	if (elm.addEventListener) {
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent) {
		var r = elm.attachEvent('on' + evType, fn);
		return r;
	} else {
		elm['on' + evType] = fn;
	}	
}


function getChildrenByTagName(oElementId, tagName) {
	if (document.getElementById(oElementId))
		return (document.getElementById(oElementId)).getElementsByTagName(tagName);
}


function cancelLink(e) {
	if (window.event) {
			window.event.cancelBubble = true;
			window.event.returnValue = false;
	}
	if (e && e.stopPropagation && e.preventDefault) {
		e.stopPropagation();
		e.preventDefault();
	}
	getEventTarget(e).blur();
}

function cancelClickSafari() {
	return false;
}


function createElement(tag) {
	if (document.createElement) {
		return document.createElement(tag);
	} else if (document.createElementNS) {
		return document.createElementNS('http://www.w3.org/1999/xhtml',tag);
	}
}

function getEventType(e) {
	if (window.event) {
		return window.event.type;
	}
	return e.type;
}

function getEventTarget(e) {
	if (window.event) {
		return window.event.srcElement;
	}
	return e.target;
}




/* ********* EXPAND/COLLAPSE TEXT *********** */

var amenitiesContentNodes;
function collapseAmenities() {
	var rootStructure;
	if (!document.getElementById('secondaryNav')) {
		return;
	}
	var secondaryNavAnchors = document.getElementById('secondaryNav').getElementsByTagName('A');
	for (var i=0; i<secondaryNavAnchors.length; i++) {
		if ((secondaryNavAnchors[i].className == 'navAmenities') && (secondaryNavAnchors[i].parentNode.className == 'current')) {
			var contentArea = document.getElementById('mainContentArea');
			var contentList = contentArea.getElementsByTagName('UL');
			for (var x=0; x<contentList.length; x++) {
				if (contentList[x].parentNode.className == 'contentList') {
					rootStructure = contentList[x];
					amenitiesContentNodes = contentList[x].getElementsByTagName('P');
					collapseText(amenitiesContentNodes, 70, rootStructure, false, true);
				}
			}
			break;
		}
	}
}

var historyContentNodes;
function collapseHistory() {
	var rootStructure;
	var secondaryNavAnchors = document.getElementById('secondaryNav').getElementsByTagName('A');
	for (var i=0; i<secondaryNavAnchors.length; i++) {
		if ((secondaryNavAnchors[i].className == 'navHistory') && (secondaryNavAnchors[i].parentNode.className == 'current')) {
			var contentArea = document.getElementById('mainContentArea');
			var contentList = contentArea.getElementsByTagName('table');

			for (var x=0; x<contentList.length; x++) {
				if (contentList[x].parentNode.className == 'contentList') {
					rootStructure = contentList[x];
					historyContentNodes = contentList[x].getElementsByTagName('TD');
					collapseText(historyContentNodes, 80, rootStructure, true, true);
				}
			}
			break;
		}
	}
}

var villasContentNodes;
function collapseVillas() {
	var rootStructure = document.getElementById('villasList');
	var contentList = rootStructure.getElementsByTagName('UL');
	for (var i=0; i<contentList.length; i++) {
		villasContentNodes = contentList[i].getElementsByTagName("P");
		collapseText(villasContentNodes, 55, rootStructure, true, false);
	}
}

function collapseText(contentNodes, charLimit, rootStructure, offsetByHeader, collapsed) {
	if (!rootStructure) {
		rootStructure = contentNodes.parentNode;
	}
	try {
		for (var i=0; i<contentNodes.length; i++) {
			var curNode = contentNodes[i];
			
			var maxLength = charLimit;
			if (offsetByHeader) {
				if (curNode.tagName == 'TD') {
					var rowHeader = rootStructure.getElementsByTagName('TH');
					maxLength = charLimit - rowHeader[i].childNodes[0].nodeValue.length;
				} else if (curNode.tagName == 'P') {
					var header = rootStructure.getElementsByTagName('H5');
					maxLength = charLimit - header[i].childNodes[0].nodeValue.length;
				}
			}
			
			if (curNode.childNodes.length > 1) {
				maxLength = (maxLength - curNode.childNodes[0].childNodes[0].length);
			}

			
			if (curNode.lastChild.length <= maxLength) {
				continue;
			}

			var splitTextNode = limitChars(curNode.lastChild, maxLength);
			var collapsedText = curNode.childNodes[0];
			var extendedText = curNode.lastChild;
			extendedText.nodeValue += " "; // add a &nbsp; to the end

			var ellipses = document.createTextNode('... ');
			
			var expandAnchor = createElement('a');
			expandAnchor.href="javascript:void(0)";
			expandAnchor.innerHTML = "&raquo;";
			expandAnchor.className = "expandText";
			
			var collapseAnchor = createElement('a');
			collapseAnchor.href="javascript:void(0)";
			collapseAnchor.innerHTML = " &laquo;";
			collapseAnchor.className = "collapseText";

			if (collapsed) {
				curNode.removeChild(extendedText);
				curNode.appendChild(ellipses);
	
				for (var c=0; c<curNode.childNodes.length; c++) {
					if (curNode.childNodes[c] == collapseAnchor) {
						curNode.removeChild(collapseAnchor);
					}
				}
				curNode.appendChild(expandAnchor);
			} else {
				curNode.appendChild(collapseAnchor);
			}

			// pass object pointers to external handlers
			expandAnchor.onclick 	= ftnExpandInnerText(curNode, extendedText, ellipses, expandAnchor, collapseAnchor, rootStructure);
			collapseAnchor.onclick 	= ftnCollapseInnerText(curNode, extendedText, ellipses, expandAnchor, collapseAnchor);
		}
	} catch (e) {}
}

function ftnExpandInnerText(oContainer, expandedText, ellipses, expandAnchor, collapseAnchor, rootStructure) {
	return function() {
		//collapseAllSiblings(oContainer, rootStructure);
		oContainer.appendChild(expandedText);
		oContainer.removeChild(ellipses);
		oContainer.removeChild(expandAnchor);
		oContainer.appendChild(collapseAnchor);
		if (oContainer.tagName == 'TD') {
			oContainer.parentNode.className = 'open';
		}
	}
}

function ftnCollapseInnerText(oContainer, expandedText, ellipses, expandAnchor, collapseAnchor) {
	return function() {
		oContainer.removeChild(expandedText);
		oContainer.appendChild(ellipses);

		for (var c=0; c<oContainer.childNodes.length; c++) {
			if (oContainer.childNodes[c] == collapseAnchor) {
				oContainer.removeChild(collapseAnchor);
			}
		}
		oContainer.appendChild(expandAnchor);
		if (oContainer.tagName == 'TD') {
			oContainer.parentNode.className = '';
		}
	}
}

function getFirstAncestorByTagName(oElement,tagName) {
	if (oElement.tagName.toLowerCase() == tagName.toLowerCase()) {
		return oElement;
	}
	else if (oElement.parentNode && (oElement.parentNode != document)) {
		return getFirstAncestorByTagName(oElement.parentNode, tagName);
	}		
	return null;
}

function collapseAllSiblings(oCurChild, rootStructure) {
	siblingLinks = rootStructure.parentNode.getElementsByTagName('a');
	for (var i=0; i<siblingLinks.length; i++) {
		if (siblingLinks[i].className == 'collapseText') {
			siblingLinks[i].onclick();
		}
	}
}


function limitChars(textNode, charLimit) {
	var remainder = textNode.splitText(charLimit);
	var collapsed = textNode;
	return [collapsed, remainder];
}


function collapsePress() {
	var pressContainer = document.getElementById("pressReleaseList");
	var pressList = pressContainer.getElementsByTagName("LI");

	if (pressList.length > 1) {
		for (var i=0; i<pressList.length; i++) {
			var listItem = pressList[i];
			for (var j=0; j<listItem.childNodes.length; j++) {
				var contentNode = listItem.childNodes[j];
				if (contentNode.tagName == 'H5') {
					for (var z=0; z<contentNode.childNodes.length; z++) {
						if (contentNode.childNodes[z].className == "releaseDate") {
							displayElement(contentNode.childNodes[z], 'inline');
						}
					}
				} else if (contentNode.className == 'pressAbstract') {
					displayElement(contentNode, 'inline');
				}  else if (contentNode.className == 'fullArticle') {
					hideElement(contentNode);				
				} else if (contentNode.className == 'documentLink') {
					displayElement(contentNode, 'inline');
				}
			}
		}
	}
}


function hasClassName( obj, objClass ) {
	return new RegExp( '\\b'+objClass+'\\b' ).test( obj.className )
}

function setImagePopup() {
	if ( document.getElementById( 'villasList' ) ) {
		var _oRoot = document.getElementById( 'villasList' );
		var allLinks = _oRoot.getElementsByTagName( 'a' );
		if ( allLinks.length <= 0 ) return;
		for ( var i = 0; i < allLinks.length; i++ ) {
			if ( hasClassName( allLinks[i], 'popImg' ) ) {
				allLinks[i].onclick = function() {
					popImg( this.href );
					return false;
				}
			}
		}
	}
}

// create popup window for images on the fly
var imgWindow = new Object;
var imgWindow = null;

function popImg( thepic ) {
	if ( imgWindow ) {
		imgWindow.close();
	}

	imgWindow = window.open('','','width=800, height=386, location=0, toolbar=0, menubar=0, directories=0, scrollbars=0, status=0, resizable=0'); 

	doc = imgWindow.document;
	doc.open( 'text/html' );
	doc.write( '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" \n\t"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n' ); 
	doc.write( '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\n' ); 
	doc.write( '<head>\n<title>Castiglion del Bosco</title>\n' ); 
	doc.write( '<style type="text/css">\n<!--\n' ); 
	doc.write( 'html, body { background: #fff; padding: 0; margin: 0; }\n' ); 
	doc.write( 'img { display: block; padding: 0; border: 0; margin: 0; }\n' ); 
	doc.write( '-->\n</style>\n</head>\n' ); 
	doc.write( '<body>\n' ); 
	doc.write( '<div><img src="' + thepic + '" width="800" height="386" alt="" /></div>\n' ); 
	doc.write( '</body>\n</html>' ); 
	doc.close(); 
	imgWindow.focus();
}


function cdb_fnWindowOpen(url, name, options){
	winLeft = (screen.width-560)/2; 
	winTop = (screen.height-(440+110))/2; 
	newWindow = window.open(url, name,'left=' + winLeft + ',top=' + winTop + ',' + options);
	newWindow.focus();
}


