/** Requires: TGCommon.js **/

var tgUserImgCounter	= 0;
var tgUserImgTitle		= "";
var tgUserImgDivsName	= "";
var IMG_AUTHOR_DELIMIT	= " - by "; 	//default
var IMG_HOMETOWN_DELIMIT= " - from ";	//default
var IMG_URL_DELIMIT		= " - URL "		//default
var backFillerPresent	= false;
var backFillerColor		= "#000000";
var tgImgFolderNamesArr	= false;
var tgFooterText		= "";
var tgExtraHeight		= 0;
var tgImageLink			= false;

function tgGetBackFillerDivHtml () {
	if (!backFillerPresent) {
		backFillerPresent = true;
		return "<div id=\"tgBackFiller\" style=\"background-color:" + backFillerColor + "; height:100%;left:0;position:absolute;top:0;width:100%;z-index:100;visibility: hidden;display: none;\"></div>";
	} else
		return "";
}

function tgInitBackFiller () {
	var pageSizeArr = tgGetPageSize();
	var backFiller = getStyleObject ("tgBackFiller");
	backFiller.width = pageSizeArr[0] + 0 + 'px';
	backFiller.height = pageSizeArr[1] + 0 + 'px';
	changeOpacity (50, "tgBackFiller");
}

function tgAddLightBoxContent(divArrName, needClearBackGround, imgFolderNamesArr) {
	var arrContent = new Array();

	if (needClearBackGround == true) {
		backFillerColor = "none";
	}
	
	if (arguments.length > 2){
		tgImgFolderNamesArr = imgFolderNamesArr;
	}

	arrContent.push ('<div id="userImgDiv" name="userImgDiv" style="position: absolute; visibility: hidden; display: none; z-index: 105;">');
	arrContent.push ('<table cellpadding="0" cellspacing="0" border="0" align=center>');
	arrContent.push ('<tr><td valign=center align=center>');
	arrContent.push ('<div class="qtbox">');
		arrContent.push ('<div class="qtouter">');
			arrContent.push ('<div class="qtinner">');
				arrContent.push ('<div class="qtformouter">');
					arrContent.push ('<h1 id=userImgDivH1></h1>');
						arrContent.push ('<div align="center" style="padding-top:10px;">');
						
						if(tgImageLink == true){
							arrContent.push ('<a target=_blank href="#" id="imageLinkUrl">');
						}
						
						arrContent.push ('<img title="" border="0" id="tgUserImage" name="tgUserImage" />');
						
						if(tgImageLink == true){
							arrContent.push ('</a>');
						}
						
						arrContent.push ('<div id="userImgNavLinks" style="visibility: hidden; display: none;">');
								arrContent.push ('<a href="JavaScript: void();" id="tgPrevLink"></a><a href="JavaScript: void();" id="tgNextLink"></a></div>');
								arrContent.push ('<div id="userImgAuthor" stlye="padding-top:5px;" align="left"></div>');
						arrContent.push ('</div>');
						arrContent.push ('<br clear=all>');
		arrContent.push ('</div></div></div>');
		arrContent.push ('<span id=closeUserImgLink class="closewindow center"><a href="JavaScript: tgHideImage();">Close Window</a></span>');
	arrContent.push ('</td></tr></table></div>');
	arrContent.push (tgGetBackFillerDivHtml());

	document.writeln(arrContent.join(''));
	tgUserImgDivsName = divArrName;
	addEventHandler (document, "click", tgDocClickCloseImg);
}

function tgSetFooterText (footerText, extraHeight) {
	tgFooterText = footerText;
	tgExtraHeight = extraHeight;
}

function tgDocClickCloseImg(event) {
	var oImg = getStyleObject ("userImgDiv");
	
	if (!event) event = window.event;
	var target = (event.target) ? event.target : event.srcElement;
	
	var isDisplayAction = false;
	if (target.parentNode != null && target.parentNode.parentNode != null) {
		isDisplayAction = (target.parentNode.id == 'userImgNavLinks' || tgUserImgDivsName == target.parentNode.parentNode.id);
	}
	
	if (oImg.visibility != 'hidden' && !isDisplayAction)
		tgHideImage ();
}

function tgImageLightbox(aObj) {
	tgInitBackFiller ();
	tgDisplayFullImage (aObj.src, aObj.alt);
}

function tgDisplayFullImage (thumbNail, altText) {
	hideObject ("userImgDiv");

	getElemById("userImgDivH1").innerHTML = altText;
	tgUserImgTitle = altText;
	tgUserImgCounter = 0;

	document.tgUserImg = new Image;
	document.tgUserImg.src = tgGetFullImagePath (thumbNail);
	
	tgShowImage ('LOADING');
	tgLoadImage ();
}

function tgLoadImage() {
	if (document.tgUserImg.complete) {
		tgShowImage ();
	} else if (++ tgUserImgCounter >= 6) {
		return false;
	} else {
		window.setTimeout ("tgLoadImage()", 500);
	}
}

function tgGetFullImagePath (thumbNail) {
	var fullSrc = thumbNail;
	
	if (tgImgFolderNamesArr != false){
		fullSrc = fullSrc.replace (tgImgFolderNamesArr[0], tgImgFolderNamesArr[1]);
	} else {
		var li = fullSrc.lastIndexOf ("_tn.");
		if (li > 0) {
			fullSrc = fullSrc.substr (0, li) + fullSrc.substr(li+3);
		}
	}
	
	return fullSrc;
}

function tgShowImage(imagePath) {
	var WIDTH_PADDING	= 100;
	var HEIGHT_PADDING	= 130;
	var AUTH_HT_PADDING	= 10;
	var tgUserImage	= getElemById("tgUserImage");
	var imgW, imgH, imgTitleText, imgURL;

	var imgDiv		= getStyleObject("userImgDiv");
	var displayNavs	= false;

	if (imagePath == 'LOADING') {
		tgUserImage.src	= '/travelguides/content/graphics/loading.gif';
		imgW = 50 + WIDTH_PADDING;
		imgH = 32 + HEIGHT_PADDING;
		imgTitleText = "Loading";
		hideObject ("closeUserImgLink");
		hideObject ("userImgAuthor");
		hideObject ("userImgNavLinks");
	} else {
		tgUserImage.src	= document.tgUserImg.src;
		imgW = document.tgUserImg.width + WIDTH_PADDING;
		imgH = document.tgUserImg.height + HEIGHT_PADDING + tgExtraHeight;
		
		var d1 = tgUserImgTitle.indexOf (IMG_AUTHOR_DELIMIT);
		var d2 = tgUserImgTitle.indexOf (IMG_HOMETOWN_DELIMIT);
		var d3 = tgUserImgTitle.indexOf (IMG_URL_DELIMIT);
		
		if (d1 >= 0 || d2 >= 0 || d3 >= 0) {
			var creditStr = "";
			imgTitleText = tgUserImgTitle.substring (0, tgUserImgTitle.indexOf (IMG_AUTHOR_DELIMIT));
			if(d3 >= 0) {
				imgURL = tgUserImgTitle.substring (d3 + IMG_URL_DELIMIT.length);
				tgUserImgTitle = tgUserImgTitle.substring (0, d3);
			}
			if (d2 >= 0) {
				creditStr = " from <b>" + tgUserImgTitle.substring (d2 + IMG_HOMETOWN_DELIMIT.length) + "</b>" + creditStr;
				tgUserImgTitle = tgUserImgTitle.substring (0, d2);
			}
			if (d1 >= 0) {
				creditStr = " by <b>" + tgUserImgTitle.substring (d1 + IMG_AUTHOR_DELIMIT.length) + "</b>" + creditStr;
				tgUserImgTitle = tgUserImgTitle.substring (0, d1);
			}

			getElemById ("userImgAuthor").innerHTML = creditStr;
			showObject ("userImgAuthor");
			imgH += AUTH_HT_PADDING;
		} else {
			hideObject ("userImgAuthor");
			imgTitleText = tgUserImgTitle;
		}
		
		if (tgFooterText.length > 0) {
			showObject ("userImgAuthor");
			getElemById ("userImgAuthor").innerHTML += tgFooterText;
		}
		
		showObject ("closeUserImgLink");
		getStyleObject ("userImgNavLinks").width = imgW;

		var tgPrevLink = null, tgNextLink = null;
		var divArray = getElemByName (tgUserImgDivsName);
		for (var i=0; i<divArray.length; ++i) {
			if (tgUserImage.src == tgGetFullImagePath(divArray[i].firstChild.firstChild.src)) {
				if (i < divArray.length - 1) {
					tgNextLink = divArray[i+1];
				}
				break;
			}
			tgPrevLink = divArray[i];
		}

		if (tgPrevLink != null || tgNextLink != null) {
			for (var i=0; i<2; ++i) {
				if (i==0)	useElem = "Prev";
				else		useElem = "Next";

				if (eval("tg" + useElem + "Link") != null) {
					var oLink = getElemById("tg" + useElem + "Link");
					oLink.href = 'JavaScript: tgDisplayFullImage("' + eval("tg" + useElem + "Link").firstChild.firstChild.src + '", "' + eval("tg" + useElem + "Link").firstChild.firstChild.alt + '");';
					showObject ("tg" + useElem + "Link");
				} else
					hideObject ("tg" + useElem + "Link");
			}
			displayNavs = true;
		}
	}
	tgUserImage.title = tgUserImgTitle;

	tgCenterObject ("userImgDiv", imgW, imgH);
	getElemById ("userImgDivH1").innerHTML = imgTitleText;
	
	if(tgImageLink == true){
		getElemById ("imageLinkUrl").href = imgURL;
	}
		
	if (imagePath != 'LOADING')
		changeOpacity (0, "userImgDiv");

	tgShowObjectWithBackFiller ("userImgDiv");

	if (imagePath != 'LOADING')
		fadeEffect ("userImgDiv", 0, 100, 400);

		
	if (displayNavs)
		showObject ("userImgNavLinks");
}

function tgShowObjectWithBackFiller (objID) {
	hideDropDowns ();
	hideEmbedObjs ();
	showObject ("tgBackFiller");
	showObject (objID);
}

function tgHideObjectWithBackFiller (objID) {
	hideObject (objID);
	hideObject ("tgBackFiller");
	/*changeOpacity (0, "tgBackFiller");*/
	showDropDowns ();
	showEmbedObjs ();
}

function tgHideImage() {
	tgHideObjectWithBackFiller ("userImgDiv");
}

function tgGetScrollPos () {
	var xPos, yPos;

	if (self.pageYOffset) {
		yPos = self.pageYOffset;
		xPos = self.pageXOffset;
	} else if (document.documentElement && document.documentElement.scrollTop) {
		yPos = document.documentElement.scrollTop;
		xPos = document.documentElement.scrollLeft;
	} else if (document.body) {
		yPos = document.body.scrollTop;
		xPos = document.body.scrollLeft;	
	}

	arrXYPos = new Array(xPos,yPos) 
	return arrXYPos;
}

function tgGetPageSize(){
	var xScroll, yScroll;
	var winWidth, winHeight;
	var inrWidth, inrHeight;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else {
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	if (self.innerHeight) {
		if(document.documentElement.clientWidth){
			winWidth = document.documentElement.clientWidth; 
		} else {
			winWidth = self.innerWidth;
		}
		winHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		winWidth = document.documentElement.clientWidth;
		winHeight = document.documentElement.clientHeight;
	} else if (document.body) {
		winWidth = document.body.clientWidth;
		winHeight = document.body.clientHeight;
	}	

	if(yScroll < winHeight){
		pageHeight = winHeight;
	} else { 
		pageHeight = yScroll;
	}

	if(xScroll < winWidth){	
		pageWidth = xScroll;		
	} else {
		pageWidth = winWidth;
	}
	inrWidth	= (window.innerWidth?window.innerWidth:(document.body && document.body.clientWidth?document.body.clientWidth:(document.documentElement && document.documentElement.clientWidth?document.documentElement.clientWidth:800)));
	inrHeight	= (window.innerHeight?window.innerHeight:(document.body && document.body.clientHeight?document.body.clientHeight:(document.documentElement && document.documentElement.clientHeight?document.documentElement.clientHeight:600)));

	arrayPageSize = new Array(pageWidth, pageHeight, winWidth, winHeight, inrWidth, inrHeight); 
	return arrayPageSize;
}

var justHiddenDDs = new Array();
function hideDropDowns(){
	var ddElems = getElemByTagName("select");
	var oStyle;
	for (var i=0; i < ddElems.length; i++) {
		if (ddElems[i].id != null && ddElems[i].id != 'unknown') {
			oStyle = getStyleObject(ddElems[i].id);
			if (oStyle) {
				justHiddenDDs.push (ddElems[i].id);
				oStyle.visibility = "hidden";
			}
		}
	}
}

function showDropDowns(){
	for (var i=0; i < justHiddenDDs.length; ++i)
		getStyleObject (justHiddenDDs[i]).visibility = "visible";
}

function showEmbedObjs(){
	var embedObjs = getElemByTagName("object");
	for (var i = 0; i < embedObjs.length; i++)
		embedObjs[i].style.visibility = "visible";

	embedObjs = getElemByTagName("embed");
	for (var i = 0; i < embedObjs.length; i++)
		embedObjs[i].style.visibility = "visible";
}

function hideEmbedObjs(){
	var embedObjs = getElemByTagName("object");
	for (var i = 0; i < embedObjs.length; i++)
		embedObjs[i].style.visibility = "hidden";

	embedObjs = getElemByTagName("embed");
	for (var i = 0; i < embedObjs.length; i++)
		embedObjs[i].style.visibility = "hidden";
}

function fadeEffect (id, opacStart, opacEnd, millisec) {
    var speed = Math.round(millisec / 100);
    var timer = 0;

    if (opacStart > opacEnd) {
        for (i = opacStart; i >= opacEnd; i--) {
            setTimeout("changeOpacity(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    } else if(opacStart < opacEnd) {
        for (i = opacStart; i <= opacEnd; i++) {
            setTimeout("changeOpacity(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    }
}

function changeOpacity (opacity, id) {
    var object = getElemById(id).style;
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
    object.opacity = (opacity / 100);
}

function tgCenterObject (divId, divW, divH) {
	var pageSizeArr	= tgGetPageSize();
	var scrollPos	= tgGetScrollPos();
	var divStyle 	= getStyleObject (divId);
	if (isNaN(divW)) divW = divStyle.width;
	if (isNaN(divH)) divH = divStyle.height;
	var divL 		= (pageSizeArr[2] - divW) / 2;
	var divT 		= (pageSizeArr[3] - divH) / 2 + scrollPos[1];/*position: absolute*/

	if (divL < 0) divL = 0;
	if (divT < 0) divT = 0;

	divStyle.width	= divW + 'px';
	divStyle.height	= divH + 'px';
	divStyle.left	= divL + 'px';
	divStyle.top	= divT + 'px';
}

var backFillerTagged = false;
var tgLastOpenDiv;

function tgInitHtmlLightBox (needClearBackGround) {
	if (needClearBackGround == true) {
		backFillerColor = "none";
	}
	document.write (tgGetBackFillerDivHtml());
	var backFillerDiv = getElemById("tgBackFiller");
	addEventHandler (backFillerDiv, "click", tgCloseHtmlLightBox);
}

function tgHtmlLightBox (masterDivId, divW, divH) {
	tgInitBackFiller ();
	tgLastOpenDiv = masterDivId;
	var masterDiv = getElemById (masterDivId);

	tgCenterObject (masterDivId, divW, divH);
	tgShowObjectWithBackFiller (masterDivId);
}
function tgCloseHtmlLightBox () {
	tgHideObjectWithBackFiller (tgLastOpenDiv);
}

function tgSetImageLink(){
	tgImageLink = true;
}