var NewWindow = {
  init: function(att,val) {
    if (!document.getElementById || !document.createElement || !document.appendChild) { return; }
    var strAtt   = ((typeof att == 'undefined') || (att == null)) ? 'class' : att;
    var strVal   = ((typeof val == 'undefined') || (val == null)) ? 'non-html' : val;
    var arrLinks = document.getElementsByTagName('a');
    var oRegExp  = new RegExp("(^|\\s)" + strVal + "(\\s|$)");
    var oLink;
    for (var i = 0; i < arrLinks.length; i++) {
      oLink = arrLinks[i];
      if ((strAtt == 'class') && (oRegExp.test(oLink.className)) || (oRegExp.test(oLink.getAttribute(strAtt)))) {
		oLink.onclick = NewWindow.openWin;
      }
    }
    oWarning = null;
  },
  openWin: function(e) {
    var event = (!e) ? window.event : e;
    if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey)
	  return true;
    else {
      var oWin = window.open(this.getAttribute('href'), '_blank');
      if (oWin) {
        if (oWin.focus) { oWin.focus(); return false; }
      }
      oWin = null;
      return true;
    }
  }
};  // end NewWindow


/*****global variables*******/
var staticServerPath="http://www.opentable.com";
var pInputMonth;
var pInputDay;
var pInputYear;
var today = new Date();
var javaDate=today;
var year = today.getFullYear();
var javaYear=year;
var month = today.getMonth();
var javaMonth=today.getMonth();
var inputDateField;
var inputDate;
var defaultDate;
var vertical;
var tInputMonth;
var tInputDay;
var tInputYear;
var calShim;
var kCal;
var kCalShim;
var defaultDateString = 'mm/dd/YY';
var pkId = "";
var pkJsMOver = " ";
var pkJsMOut = " ";
var pkJsOnClick = " ";
var activeCal = "";
var foo = true; //debugging var
var javaLimitYear = 2020;
// Utilities functions

function stopBubble(e) {
    if(e.stopPropagation) {
        e.stopPropagation();
    } else {
        e.cancelBubble = true;
    }
}

function wrtPkDayDtls(pkLabel){
    var tlabel = pkLabel.toString();
    document.getElementById('pkDayDtls').innerHTML = tlabel;
    clickLayer('pkDayDtls', 2, -15);
}

function killAllCalendars() {
        kCal = activeCal;
        kCalShim = activeCal+"Shim";
        setVisible(false,activeCal, activeCal+"Shim");
}

function parseToDoubleDigit(number) {
    return (number < 10) ? '0' + number : number;
}

function parseToSingleDigit(number) {
    var str = '' + number;
    return str = str.replace(/^0+/g, '');
}

function getAllDaysInMonth(month)  {
	var days;
    var year = (month >= javaMonth) ? javaYear : javaYear + 1;
	if (month==0 || month==2 || month==4 || month==6 || month==7 || month==9 || month==11)  { days=31; }
    else if (month==3 || month==5 || month==8 || month==10) { days=30; }
    else if (month==1)  {
        if (isThisLeapYear(year)) { days=29; }
        else { days=28; }
    }
    return (days);
}

function isThisLeapYear (Year) {
	if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) { return (true); }
    else { return (false); }
}

function parseDate(dateString){
    
    /****utitility and subfunctions*******/
    function trim(sString){
    	var re1 = /\s{2,10}/g;  //precompile reg ex's for performance
    	sString = sString.replace(re1, ' ');
    	while(sString.substring(0,1) == ' '){
    	sString = sString.substring(1, sString.length);
    	}
    	while(sString.substring(sString.length-1, sString.length) == ' '){
    	sString = sString.substring(0,sString.length-1);
    	}
    
    return sString;
    }
    /******/
    
    function delimit(sString){
    	var thisString;
    	var re1 = /,\s/g;
    	var re2 = /([|]|[.]|[,]|[;]|[\s]|[\/])/g; //BUG: ugly, but mozilla has problems with some character class formations 
    	thisString = sString.replace(re1, ',');
    	thisString = thisString.replace(re2, '|');
    	thisString = thisString.toLowerCase();
    	
    	return thisString;
    }
    
    /*****/
    function convertMonthAbbreviation(inputString){
    	var alphaMonth;
    	var numericMonth;
    	var numericString;
    	var re1 = /^[a-zA-Z]*/;
    	var re2 = /^[a-zA-Z]{3}/;
    	var alphaMonthArray = new Array("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec" );
    	
        if(inputString.length < 3) return;
    	if(inputString.match(re1)){
    	alphaMonth = inputString.match(re2);
    		for(i=0;i<alphaMonthArray.length;i++){
    			if(alphaMonth == alphaMonthArray[i]) {
    			numericMonth = i + 1;
    			numericString = inputString.replace(re1, numericMonth);
    			return numericString;
    			}
    		}
    	}
    }
    /*****/
    function matchPattern(sString){
    	var normString = sString;
    	var normStringTwo = sString;
    	var testPattern =  /^(\d{1,2})([|]\d{1,2})([|](\d{2}){1,2})?$/i;//check if input conforms to allowed input patterns
        var re2 = /^([a-zA-z])/;
            
    	if(normString.match(re2)){
    	    normStringTwo = convertMonthAbbreviation(normString);
    	} 
        
        if(normStringTwo.match(testPattern)) {
    	    return normStringTwo;
        }
        
        return;
    }
    /****************Main Function-Accepts initial Inputs*****************************/
    function parseDateMain(dateString){
    	var inputString;
    	var normString;
    	var normStringTwo;
    	
    	inputString = trim(dateString);
    	normString = delimit(inputString);
    	normStringTwo = matchPattern(normString);
    	setDateInputs(normStringTwo);
    
    }
    /****Output Function***/
    
    function setDateInputs(dateString){
    	var re1 = "|";
    	
    	if(dateString != null){
    	var dateTokenArray = dateString.split(re1);//tokenize input into array
    		 pInputMonth = dateTokenArray[0];
    		 pInputDay = dateTokenArray[1];
    		 pInputYear = dateTokenArray[2];
    	}else{
    	    return;
    	}
    }
    
    parseDateMain(dateString);
}


function processMonth(startMonthField,endMonthField) {
	endMonthField.selectedIndex = startMonthField.selectedIndex;
}

function process(num,cal) {


	if(num == -1) {
		if(month == 0) {
			month = 11;
			year--;
			today.setFullYear(year);
		}
		else { month--; }
	}
	if(num == 1) {
		if(month == 11) {
			month = 0;
			year++;
			today.setFullYear(year);
		}
		else { month++; }
	}
	// month set twice for bug #10002
	today.setMonth(month);
    today.setMonth(month);    
	writeCalendar(cal);
}

function returnMonth(thismonth) {
	monthArray = new Array('JANUARY', 'FEBRUARY', 'MARCH', 'APRIL', 'MAY', 'JUNE','JULY', 'AUGUST', 'SEPTEMBER', 'OCTOBER', 'NOVEMBER', 'DECEMBER');
	return monthArray[thismonth];
}

function setVisible(state,sCal,sCalShim) {
    if(!state) {
        sCal = kCal;
        sCalShim = kCalShim;
    }
    if(document.getElementById(sCal)) {
        var divRef = document.getElementById(sCal);
    } else { return; }
    if(document.getElementById(sCalShim)) {
        var ifrRef = document.getElementById(sCalShim);
    } else { return; }
    if(state) {
        divRef.style.display = "block";
        ifrRef.style.width = divRef.offsetWidth;
        ifrRef.style.height = divRef.offsetHeight;
        ifrRef.style.top = divRef.style.top;
        ifrRef.style.left = divRef.style.left;
        ifrRef.style.zIndex = divRef.style.zIndex - 1;
        ifrRef.style.display = "block";
        ifrRef.onClick = true;
    } else { 
        divRef.style.display = "none";
        ifrRef.style.display = "none";
    }
}

function closeCalendar(cCal, cCalShim) {
    kCal = cCal;
    kCalShim = cCalShim;
    setVisible(false);
}

function setField(userDateField, userSiblingDate, userDate, userVertical) {
    // First off, lets kill all calendars if any.
    killAllCalendars();
	inputDateField = userDateField;
    inputDate = userDate;
	vertical = userVertical;

    var dToday = today;
    defaultDate = dToday.getMonth()+1+'/'+dToday.getDate()+'/'+javaYear;

    if (inputDate == defaultDateString) {
        if (userSiblingDate == defaultDateString) {
            inputDate = defaultDate;
        } else {
            inputDate = userSiblingDate;
        }
    } else if (inputDate.length < 1) {
        inputDate = defaultDate;
    }
    
    try {
        parseDate(inputDate);
    } catch(e) {
        parseDate(defaultDate);
    }
    
    if (parseToSingleDigit(pInputMonth) > 12) {
        parseDate(defaultDate);
    }
    
    tInputMonth =  parseToSingleDigit(pInputMonth);
    tInputDay = parseToSingleDigit(pInputDay);
    tInputYear = ((pInputYear.length <= 2) ? '20' + pInputYear : pInputYear);

    month = tInputMonth - 1;
    today.setMonth(month);
    year = tInputYear;
    today.setFullYear(year);
}

function returnDate(inDay,cal) {
	var thisDay = inDay;
	var thisMonth = month + 1;
    var thisYear = year;
    var thisYearString = '' + thisYear;
    inputDateField.value = parseToDoubleDigit(thisMonth) + '/' + parseToDoubleDigit(thisDay) + '/' + ((thisYearString.length == 4) ? thisYearString.substring(0) : thisYear);
	closeCalendar(cal, calShim);
}

function writeCalendar(cal) {
    activeCal = cal;
    calShim = cal + "Shim";
	blankColumn = "<td class='clickableDays partOfCal'>&nbsp;</td>"
	tableOutput = "<table cellpadding='0' cellspacing='0' border='0'><tr><td class='partOfCal' colspan='7'></td></tr><tr><td class='weekdays partOfCal'>S</td><td class='weekdays partOfCal'>M</td><td class='weekdays partOfCal'>T</td><td class='weekdays partOfCal'>W</td><td class='weekdays partOfCal'>T</td><td class='weekdays partOfCal'>F</td><td class='weekdays partOfCal'>S</td></tr><tr align='right'>"

 	var days = getAllDaysInMonth(month);
	var firstOfMonth = new Date (year, month, 1);
	var startingPos  = firstOfMonth.getDay();
	days += startingPos;
	var columnCount = 0;

	for (i = 0; i < startingPos; i++) {
		tableOutput += blankColumn;
		columnCount++;
    }

	var currentDay = 0;
   	for (i = startingPos; i < days; i++) {
		currentDay = i-startingPos+1;
		var pStyle = " ";
        var pStyleCode = " ";
        var sltdDt = " ";
		var sltdDtA= " ";

		var pkMonth = parseToDoubleDigit(month + 1); //modify date segments for peak date id's
		var pkCurrentDay;
		pkCurrentDay = parseToDoubleDigit(currentDay);
		year = "" + year;  //javascript internal bug; force type to year
		pkYear = year.substring(2,4);
        var pkId = " ";
        
      
        
          pkId = "pk" + pkMonth  + pkCurrentDay + pkYear;
          pkJsMOver = " ";
          pkJsMOut = " ";
          pkJsOnClick = " ";
            
            if(vertical == "flights"){ // Render peak days for AIR only  
			
            // Private function to pop peak day bubble
            function checkPkDays(pkId){
            var label = " ";
            var showLabel
            	for (var i in peakDays){
            	label = peakDays[i];
            	
                    if(pkId == i){
					
                            pkJsMOver = " onmouseover='wrtPkDayDtls(\"" + label + "\");' ";
                    		pkJsMOut =  " onmouseout='javascript:hideLayer(\"pkDayDtls\");' ";
                    		pkJsOnClick = " onclick='javascript:hideLayer(\"pkDayDtls\");' "
							pStyleCode = " pkD "
                    }
            	}
            }
    		
    	    
            checkPkDays(pkId);
        }
        
        if(month + 1 == tInputMonth && (currentDay == tInputDay)) { sltdDt = "style=\"border:1px solid #9CADBD; background-color:#FFEF9C;\""
     sltdDtA="style=\"background-color:#FFEF9C;\""
 } 

		var verticalDate = javaDate;
		
        var nonClickableDayString = "<td " + pkJsMOver + pkJsMOut + pkJsOnClick + " class='nonclickableDays partOfCal " + pStyleCode + "' " + ">" + currentDay + "</td>";

        var clickableDayString = "<td " + pkJsMOver + pkJsMOut + pkJsOnClick + " class='clickableDays partOfCal " +  pStyleCode +  "' " + " id='" + pkId + "' " + sltdDt + "><a href=javascript:returnDate(" + currentDay + ",'" + cal + "'); class='clickableDays partOfCal " + pStyleCode + "' " + " id=' " + pkId   + "' " + sltdDtA + ">" + currentDay + "</a></td>"

//alert (nonClickableDayString);
//alert(clickableDayString);
//For Past Purchase vertical we have to show the previous/past date, the below check is done for that.
        if(vertical != 'pastpurchase') {
        //alert("javamonth = " + javaMonth + " javaYear :" + javaYear + " current day : " + currentDay + " vertical date: " + verticalDate);
		if (month <= javaMonth && year == javaYear) {
            if (month == javaMonth && currentDay >= verticalDate.getDate()) {
				tableOutput += clickableDayString;
			} else {
				tableOutput += nonClickableDayString;
			}
		} else if (year >= javaLimitYear) {
            if ((month > javaLimitMonth) || (month == javaLimitMonth && currentDay >= javaLimitDate) || (year > javaLimitYear)){
                tableOutput += nonClickableDayString;
            } else {
                tableOutput += clickableDayString;
            }
        } else if (year < javaYear) {
            tableOutput += nonClickableDayString;
		} else {
            tableOutput += clickableDayString;
        }
         } else {
                tableOutput += clickableDayString;
         }

		columnCount++;
		if (columnCount % 7 == 0) {
            tableOutput += "</tr><tr>";
        }
    }

	for (i=days; i<42; i++)  {
		tableOutput += blankColumn;
		columnCount++;

        if (columnCount % 7 == 0) {
            tableOutput += "</tr>";
            if (i<41) {
                tableOutput += "<tr>";
            }
        }
    }

var leftarrow;
var rightarrow;


if(vertical == 'pastpurchase') {
    //Show left arrow of the calendar as the customer can go and check any past dates for past purchase vertical
    leftarrow="<a class='partOfCal' href='javascript:process(-1,\"" + cal + "\")'><img class='partOfCal' src='"+staticServerPath +"/img/dnbase/left.gif' width='11' height='17' border='0'></a>"
}
else {
    if(month==javaMonth && year==javaYear) leftarrow="<img class='partOfCal' src='"+staticServerPath +"/img/dnbase/spacer.gif' width='11' height='17' border='0'>"
    else leftarrow="<a class='partOfCal' href='javascript:process(-1,\"" + cal + "\")'><img class='partOfCal' src='"+staticServerPath +"/img/dnbase/left.gif' width='11' height='17' border='0'></a>"

}

//Show right arrow of the calendar as the customer can go and check any future dates for past purchase vertical
if(vertical == 'pastpurchase') {
    rightarrow="<a class='partOfCal' href='javascript:process(1,\"" + cal + "\")'><img class='partOfCal' src='"+staticServerPath +"/img/dnbase/right.gif' width='11' height='17' border='0'></a>"
}
else {
    if((month==javaMonth-1) && (year==javaYear+1)) rightarrow="<img class='partOfCal' src='"+staticServerPath +"/img/dnbase/spacer.gif' width='11' height='17' border='0'>"
    else rightarrow="<a class='partOfCal' href='javascript:process(1,\"" + cal + "\")'><img class='partOfCal' src='"+staticServerPath +"/img/dnbase/right.gif' width='11' height='17' border='0'></a>"
}


tableOutput += "</table>";

//alert(tableOutput)

monthOutput = "<table cellspacing='0' cellpadding='0' border='0' id=imageCal><tr><td class='partOfCal' bgcolor='#333333' colspan='5'><img class='partOfCal' src='"+staticServerPath +"/img/dnbase/spacer.gif' width='1' height='1' border='0'></td></tr><tr><td class='partOfCal' bgcolor='#333333'><img class='partOfCal' src='"+staticServerPath +"/img/dnbase/spacer.gif' width='1' height='1' border='0'></td><td class='partOfCal' bgcolor='#FFFFFF'><img class='partOfCal' src='"+staticServerPath +"/img/dnbase/spacer.gif' width='1' height='1' border='0'></td><td class='partOfCal'><img class='partOfCal' src='"+staticServerPath +"/img/dnbase/spacer.gif' width='150' height='1' border='0'><br class='partOfCal' /><table cellpadding='0' cellspacing='0' border='0' bgcolor='#9CADBD'><tr><td class='partOfCal' bgcolor='#9CADBD' height='15' valign='top'>" + leftarrow + "</td><td align='center' valign='middle' class='months partOfCal' bgcolor='#9CADBD'>" + returnMonth(month) + " " + year + "</td><td class='partOfCal' align='right' bgcolor='#9CADBD' valign='top'>" + rightarrow + "</td></tr></table>";

disclaimer = "<table cellspacing='0' cellpadding='0' border='0'><tr><td class='partOfCal' bgcolor='#333333' colspan='2'><img class='partOfCal' src='"+staticServerPath +"/img/dnbase/spacer.gif' width='1' height='1' border='0'></td></tr><tr><td class='partOfCal' align='center' valign='bottom'></td><td class='partOfCal' align='right' valign='bottom'><a class='partOfCal' href='javascript:closeCalendar(\"" + cal + "\",\"" + calShim + "\")'><img class='partOfCal' src='"+staticServerPath +"/img/dnbase/close.gif' width='16' height='12' border='0' vspace=3 align=right></a></td></tr></table></td><td class='partOfCal' bgcolor='#FFFFFF'><img class='partOfCal' src='"+staticServerPath +"/img/dnbase/spacer.gif' width='1' height='1' border='0'></td><td class='partOfCal' bgcolor='#333333'><img class='partOfCal' src='"+staticServerPath +"/img/dnbase/spacer.gif' width='1' height='1' border='0'></td></tr><tr><td class='partOfCal' bgcolor='#333333' colspan='5'><img class='partOfCal' src='"+staticServerPath +"/img/dnbase/spacer.gif' width='1' height='1' border='0'></td></tr></table>";
tableOutput = (monthOutput + tableOutput) + disclaimer;
    
    document.getElementById(cal).innerHTML=tableOutput;
    setVisible(true,cal,calShim);

}


// any click outside of the calendar will hide all calendars
function exteriorCloseCal(e) {
    var myObj = new Object;
    if( !e ) {
        if( window.event ) {
            e = window.event;
        } else {
            return;
        }
    }
    if (document.all) {
        myObj = e.srcElement;
    } else {
        myObj = e.target;
    }
    // we close all calendars on every click on the document, UNLESS that click is:
    // 1) on a calendar, noted by a match to class name partOfCal or 2) is on a named input field (which call the calendar)
    // all objects in calendar must be part of class partOfCal
    if (myObj.className.indexOf("partOfCal") == -1 && myObj.name != 'startDate' && myObj.name != 'endDate' && myObj.name != 'travelStartDate') {
        killAllCalendars();
    }
}
document.onclick=exteriorCloseCal;


var loadingImage = '/public/images/loading.gif';		
var closeButton = '/public/images/close.gif';		


function getPageScroll(){

	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}

	arrayPageScroll = new Array('',yScroll) 
	return arrayPageScroll;
}



function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}


	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}


function pause(numberMillis) {
	var now = new Date();
	var exitTime = now.getTime() + numberMillis;
	while (true) {
		now = new Date();
		if (now.getTime() > exitTime)
			return;
	}
}


function getKey(e){
	if (e == null) { // ie
		keycode = event.keyCode;
	} else { // mozilla
		keycode = e.which;
	}
	key = String.fromCharCode(keycode).toLowerCase();
	
	if(key == 'x'){ hideLightbox(); }
}


function listenKey () {	document.onkeypress = getKey; }
	

function showLightbox(objLink)
{
	// prep objects
	var objOverlay = document.getElementById('overlay');
	var objLightbox = document.getElementById('lightbox');
	var objCaption = document.getElementById('lightboxCaption');
	var objImage = document.getElementById('lightboxImage');
	var objLoadingImage = document.getElementById('loadingImage');
	var objLightboxDetails = document.getElementById('lightboxDetails');

	
	var arrayPageSize = getPageSize();
	var arrayPageScroll = getPageScroll();

	// center loadingImage if it exists
	if (objLoadingImage) {
		objLoadingImage.style.top = (arrayPageScroll[1] + ((arrayPageSize[3] - 35 - objLoadingImage.height) / 2) + 'px');
		objLoadingImage.style.left = (((arrayPageSize[0] - 20 - objLoadingImage.width) / 2) + 'px');
		objLoadingImage.style.display = 'block';
	}

	// set height of Overlay to take up whole page and show
	objOverlay.style.height = (arrayPageSize[1] + 'px');
	objOverlay.style.display = 'block';

	// preload image
	imgPreload = new Image();

	imgPreload.onload=function(){
		objImage.src = objLink.href;

		// center lightbox and make sure that the top and left values are not negative
		// and the image placed outside the viewport
		var lightboxTop = arrayPageScroll[1] + ((arrayPageSize[3] - 35 - imgPreload.height) / 2);
		var lightboxLeft = ((arrayPageSize[0] - 20 - imgPreload.width) / 2);
		
		objLightbox.style.top = (lightboxTop < 0) ? "0px" : lightboxTop + "px";
		objLightbox.style.left = (lightboxLeft < 0) ? "0px" : lightboxLeft + "px";


		objLightboxDetails.style.width = imgPreload.width + 'px';
		
		if(objLink.getAttribute('title')){
			objCaption.style.display = 'block';
			//objCaption.style.width = imgPreload.width + 'px';
			objCaption.innerHTML = objLink.getAttribute('title');
		} else {
			objCaption.style.display = 'none';
		}
		
		// A small pause between the image loading and displaying is required with IE,
		// this prevents the previous image displaying for a short burst causing flicker.
		if (navigator.appVersion.indexOf("MSIE")!=-1){
			pause(250);
		} 

		if (objLoadingImage) {	objLoadingImage.style.display = 'none'; }

		// Hide select boxes as they will 'peek' through the image in IE
		selects = document.getElementsByTagName("select");
        for (i = 0; i != selects.length; i++) {
                selects[i].style.visibility = "hidden";
        }

	
		objLightbox.style.display = 'block';

		// After image is loaded, update the overlay height as the new image might have
		// increased the overall page height.
		arrayPageSize = getPageSize();
		objOverlay.style.height = (arrayPageSize[1] + 'px');
		
		// Check for 'x' keypress
		listenKey();

		return false;
	}

	imgPreload.src = objLink.href;
	
}



function hideLightbox()
{
	// get objects
	objOverlay = document.getElementById('overlay');
	objLightbox = document.getElementById('lightbox');

	// hide lightbox and overlay
	objOverlay.style.display = 'none';
	objLightbox.style.display = 'none';

	// make select boxes visible
	selects = document.getElementsByTagName("select");
    for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "visible";
	}

	// disable keypress listener
	document.onkeypress = '';
}


function initLightbox()
{
	
	if (!document.getElementsByTagName){ return; }
	var anchors = document.getElementsByTagName("a");

	// loop through all anchor tags
	for (var i=0; i<anchors.length; i++){
		var anchor = anchors[i];

		if (anchor.getAttribute("href") && (anchor.getAttribute("rel") == "lightbox")){
			anchor.onclick = function () {showLightbox(this); return false;}
		}
	}

	
	var objBody = document.getElementsByTagName("body").item(0);
	
	// create overlay div and hardcode some functional styles (aesthetic styles are in CSS file)
	var objOverlay = document.createElement("div");
	objOverlay.setAttribute('id','overlay');
	objOverlay.onclick = function () {hideLightbox(); return false;}
	objOverlay.style.display = 'none';
	objOverlay.style.position = 'absolute';
	objOverlay.style.top = '0';
	objOverlay.style.left = '0';
	objOverlay.style.zIndex = '90';
 	objOverlay.style.width = '100%';
	objBody.insertBefore(objOverlay, objBody.firstChild);
	
	var arrayPageSize = getPageSize();
	var arrayPageScroll = getPageScroll();

	// preload and create loader image
	var imgPreloader = new Image();
	
	// if loader image found, create link to hide lightbox and create loadingimage
	imgPreloader.onload=function(){

		var objLoadingImageLink = document.createElement("a");
		objLoadingImageLink.setAttribute('href','#');
		objLoadingImageLink.onclick = function () {hideLightbox(); return false;}
		objOverlay.appendChild(objLoadingImageLink);
		
		var objLoadingImage = document.createElement("img");
		objLoadingImage.src = loadingImage;
		objLoadingImage.setAttribute('id','loadingImage');
		objLoadingImage.style.position = 'absolute';
		objLoadingImage.style.zIndex = '150';
		objLoadingImageLink.appendChild(objLoadingImage);

		imgPreloader.onload=function(){};	//	clear onLoad, as IE will flip out w/animated gifs

		return false;
	}

	imgPreloader.src = loadingImage;

	// create lightbox div, same note about styles as above
	var objLightbox = document.createElement("div");
	objLightbox.setAttribute('id','lightbox');
	objLightbox.style.display = 'none';
	objLightbox.style.position = 'absolute';
	objLightbox.style.zIndex = '100';	
	objBody.insertBefore(objLightbox, objOverlay.nextSibling);
	
	// create link
	var objLink = document.createElement("a");
	objLink.setAttribute('href','#');
	objLink.setAttribute('title','Click to close');
	objLink.onclick = function () {hideLightbox(); return false;}
	objLightbox.appendChild(objLink);

	// preload and create close button image
	var imgPreloadCloseButton = new Image();

	// if close button image found, 
	imgPreloadCloseButton.onload=function(){

		var objCloseButton = document.createElement("img");
		objCloseButton.src = closeButton;
		objCloseButton.setAttribute('id','closeButton');
		objCloseButton.style.position = 'absolute';
		objCloseButton.style.zIndex = '200';
		objLink.appendChild(objCloseButton);

		return false;
	}

	imgPreloadCloseButton.src = closeButton;

	// create image
	var objImage = document.createElement("img");
	objImage.setAttribute('id','lightboxImage');
	objLink.appendChild(objImage);
	
	// create details div, a container for the caption and keyboard message
	var objLightboxDetails = document.createElement("div");
	objLightboxDetails.setAttribute('id','lightboxDetails');
	objLightbox.appendChild(objLightboxDetails);

	// create caption
	var objCaption = document.createElement("div");
	objCaption.setAttribute('id','lightboxCaption');
	objCaption.style.display = 'none';
	objLightboxDetails.appendChild(objCaption);

	// create keyboard message
	var objKeyboardMsg = document.createElement("div");
	objKeyboardMsg.setAttribute('id','keyboardMsg');
	objKeyboardMsg.innerHTML = '';
	objLightboxDetails.appendChild(objKeyboardMsg);


}


function addLoadEvent(func) {	
	var oldonload = window.onload;
	if (typeof window.onload != 'function'){
    	window.onload = func;
	} else {
		window.onload = function(){
		oldonload();
		func();
		}
	}
}


addLoadEvent(initLightbox);
addLoadEvent(function(){NewWindow.init('rel', 'external')});