/* VistLondon */
/*extern  CountdownDay, CountdownHour, CountdownMinute, currentMonth, currentYear, currentDay, currentSection, currentLocale, vidUrl, dcsMultiTrack */
/* Tradedoubler */
/*extern ProductID, organization, tduid, event */

/*  Sections in this file:
- Global variables
- Generic Functions
- Toggle Offer Sidebar
- Expanders
- Rollovers
- External Links
- Explorer
- Tabs
- Multi Selector
- Registration
- Top Nav
- Search
- Flash
- Adverts
- TradeDoubler
- Loader
*/

/* ################ Global variables ################  */
/* TODO: Do all of these need to be global? */
var whichVid, tl = false, monthName = ["January","February","March","April","May","June","July","August","September","October","November","December"], descHeight, descTempHeight, disableExt = 'false', hiddenDivs = [], allTubes = ['tubeparent','tubeCentral','tubeN','tubeNe','tubeNw','tubeEast','tubeWest','tubeS','tubeSe','tubeSw'], FadeInterval = 200, AttSteps = ['ffffff','fafeff','f5fdff','f0fbff','ebfaff','e6f9ff','e1f8ff'], AccSteps = ['ffffff','fefbfd','fcf7fc','f0f3fb','f8eefa','f6eaf0','f5e6f9'], EveSteps = ['ffffff','fffcfa','fefaf3','fef9ec','fef7df','fdf5d8','fdf2d0'], TraSteps = ['ffffff','f2f8ff','e0f1fe','dbe8fd','cde2fd','c0d8fc','abd0fc'], currentIndex, nextIndex, multiPanels = [], outerTimer, isPlay = false, showRev = false, navTimer, searchToggle = "simple", userReviewsToggle = 'closed', adlink_dcopt, adlink_randomnumber, adlink_tile, requiredVersion = 8, hasRightVersion = false, flash2Installed = false, flash3Installed = false, flash4Installed = false, flash5Installed = false, flash6Installed = false, flash7Installed = false, flash8Installed = false, flash9Installed = false, maxVersion = 9, actualVersion = 0, jsVersion = 1.0, isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false, isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false, timer, elHeight;


/* ################ Detect Flash ################  */
jsVersion = 1.1;
if(isIE && isWin){
  document.write('<scr' + 'ipt language="VBScript"> \n');
  document.write('on error resume next \n');
  document.write('flash2Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.2"))) \n');
  document.write('flash3Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.3"))) \n');
  document.write('flash4Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.4"))) \n');
  document.write('flash5Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5"))) \n');
  document.write('flash6Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.6"))) \n');
  document.write('flash7Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.7"))) \n');
  document.write('flash8Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.8"))) \n');
  document.write('flash9Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.9"))) \n');
  document.write('<\/scr' + 'ipt> \n');
}
function detectFlash() {
  if (navigator.plugins) {
    if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
      var isVersion2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "", flashDescription = navigator.plugins["Shockwave Flash" + isVersion2].description, flashVersion = parseInt(flashDescription.substring(16),10);
      flash2Installed = flashVersion == 2;
      flash3Installed = flashVersion == 3;
      flash4Installed = flashVersion == 4;
      flash5Installed = flashVersion == 5;
      flash6Installed = flashVersion == 6;
      flash7Installed = flashVersion == 7;
      flash8Installed = flashVersion == 8;
      flash9Installed = flashVersion >= 9;
    }
  }
  for (var i = 2; i <= maxVersion; i++) { if (eval("flash" + i + "Installed") === true) {actualVersion = i;} }
  if (actualVersion >= requiredVersion) {
    hasRightVersion = true;
  }
}

/* ################  Generic Functions  ################ */
document.getElementsByClassName = function(cl) {
   var retnode = [], myclass = new RegExp('\\b'+cl+'\\b'), classes, elem = this.getElementsByTagName('*');
   for (var i = 0; i < elem.length; i++) {
      classes = elem[i].className;
      if (myclass.test(classes)) {retnode.push(elem[i]);}
   }
   return retnode;
};
function isNumeric(p) { var pNum = p.toString(), regex = /[^0-9]/; return !regex.test(pNum); }
function removeChildren(node) {
   var child, next;
    for (child = node.firstChild; child !== null; ) {
      next = child.nextSibling;
        node.removeChild(child);
        child = next;
   }
}
function leapYear (inYear) { if ((inYear % 4 === 0) && ((inYear % 100 !== 0) || (inYear % 400 === 0))) {return true;}}

function createParam(pName,pValue) {
     var param = document.createElement("param");
     param.setAttribute("name",pName);
     param.setAttribute("value",pValue);
     return param;
}

/* Browser detection script. Use as a last resort when object detection won't work (mostly used for IE) */
var BrowserDetect = {
   init: function () {
      this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
      // we don't currently use the version and operating system values.
      this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version";
      this.OS = this.searchString(this.dataOS) || "an unknown OS";
   },
   searchString: function (data) {
      for (var i=0;i<data.length;i++)  {
         var dataString = data[i].string, dataProp = data[i].prop;
         this.versionSearchString = data[i].versionSearch || data[i].identity;
         if (dataString) {
            if (dataString.indexOf(data[i].subString) != -1) {return data[i].identity; }
         }
         else if (dataProp) { return data[i].identity; }
      }
   },
   searchVersion: function (dataString) {
      var index = dataString.indexOf(this.versionSearchString);
      if (index == -1) {return;}
      return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
   },
   dataBrowser: [
      {  string: navigator.userAgent,
         subString: "OmniWeb",
         versionSearch: "OmniWeb/",
         identity: "OmniWeb"
      },
      {
         string: navigator.vendor,
         subString: "Apple",
         identity: "Safari"
      },
      {
         prop: window.opera,
         identity: "Opera"
      },
      {
         string: navigator.vendor,
         subString: "iCab",
         identity: "iCab"
      },
      {
         string: navigator.vendor,
         subString: "KDE",
         identity: "Konqueror"
      },
      {
         string: navigator.userAgent,
         subString: "Firefox",
         identity: "Firefox"
      },
      {
         string: navigator.vendor,
         subString: "Camino",
         identity: "Camino"
      },
      {     // for newer Netscapes (6+)
         string: navigator.userAgent,
         subString: "Netscape",
         identity: "Netscape"
      },
      {
         string: navigator.userAgent,
         subString: "MSIE",
         identity: "Explorer",
         versionSearch: "MSIE"
      },
      {
         string: navigator.userAgent,
         subString: "Gecko",
         identity: "Mozilla",
         versionSearch: "rv"
      },
      {     // for older Netscapes (4-)
         string: navigator.userAgent,
         subString: "Mozilla",
         identity: "Netscape",
         versionSearch: "Mozilla"
      }
   ],
   dataOS : [
      {
         string: navigator.platform,
         subString: "Win",
         identity: "Windows"
      },
      {
         string: navigator.platform,
         subString: "Mac",
         identity: "Mac"
      },
      {
         string: navigator.platform,
         subString: "Linux",
         identity: "Linux"
      }
   ]
};
BrowserDetect.init();

function getHeight(el) {
   var d = el, h = '0px', o;
   if(d) {
      if((o = document.defaultView) && o.getComputedStyle) {
         h = o.getComputedStyle(d, null).height;
      } else if('number' == typeof d.offsetHeight) {
         h = d.offsetHeight + 'px';
      }
   }
   return h;
}
/* ################  End Generic Functions  ################ */

/* ################  Toggle Offer Sidebar  ################ */
function showOffers() {
   var whichOffer = document.getElementById('offer-category').options[document.getElementById('offer-category').selectedIndex].value, allOffers = document.getElementsByClassName("offersub"), theOffer = whichOffer + "-offers";
   for (var i = 0; i < allOffers.length; i++) { allOffers[i].style.display = 'none'; }
   document.getElementById(theOffer).style.display = "block";
   if (document.getElementById('moff')) {
      var m = document.getElementById('moff');
      switch (whichOffer) {
      case 'travel'      : m.href="/offers/"; m.innerHTML = "More Bookings &amp; Offers";    break;
      case 'maps'        : m.href="/offers/maps/"; m.innerHTML = "More Maps";  break;
      case 'eating-out'  : m.href="/offers/eating-out/"; m.innerHTML = "More Eating Out"; break;
      case 'attractions' : m.href="/offers/attractions/"; m.innerHTML = "More Attractions"; break;
      case 'tickets'     : m.href="/offers/tickets/"; m.innerHTML = "More Tickets"; break;
      case 'where-to-stay' :
         if (currentLocale.indexOf('_us') != -1 || currentLocale.indexOf('_ca') != -1) {
            m.href="http://visitlondon.wwte1.com/pubspec/scripts/eap.asp?goto=HOTLAUNCH&eapid=11539-30001&rfrr=-48567";
            m.innerHTML = "More hotels at great prices";
         } else {
            m.href="http://www.visitlondonoffers.com/"; m.innerHTML = "Book hotels online now";
         }
         break;
      case 'packages' :
         if (currentLocale.indexOf('_us') != -1 || currentLocale.indexOf('_ca') != -1) {
            m.href="http://visitlondon.wwte1.com/pubspec/scripts/eap.asp?goto=PKGLAUNCH&eapid=11539-30001&rfrr=-48568";
            m.innerHTML = "More Vacation Packages";
         } else {
            m.href="/offers/packages/"; m.innerHTML = "More Packages";
         }
         break;
      }
   }
}
/* ################ End Toggle Offer Sidebar  ################ */

/* ################  Expanders  ################ */
function changeHeight(el,dir) {
   var c = document.getElementById(el).style.height, currentHeight = +c.substring(0,c.indexOf('px')), targetHeight = +elHeight.substring(0,elHeight.indexOf('px'));
   if (dir == "increase") {
      if (currentHeight >= targetHeight) {return false;}
      currentHeight = currentHeight + 6;
   } else {
      if (currentHeight <= 0) {return false;}
      currentHeight = currentHeight - 6;
   }
   document.getElementById(el).style.height = currentHeight + "px";
   timer = setTimeout("changeHeight('"+el+"','"+dir+"')",3);
}

function changeHeight2(dir) {
   var el = document.getElementById('prod-desc');
   for (var i = 0; i < el.childNodes.length; i++) {
      var node = el.childNodes[i];
      if (node.nodeName == 'DIV' && node.className == 'panel-middle' ) {
         var c = node.style.height, currentHeight = +c.substring(0,c.indexOf('px')), targetHeight = +descHeight.substring(0,descHeight.indexOf('px'));
         if (dir == "increase") {
            if (currentHeight >= targetHeight) {return false;}
            currentHeight = currentHeight + 6;
         } else {
            if (currentHeight <= 188) {return false;}
            currentHeight = currentHeight - 6;
         }
         node.style.height = currentHeight + "px";
         timer = setTimeout("changeHeight2('"+dir+"')",3);
      }
   }
}

function showHidden(el,lnk) {
   lnk.blur();
   for (var i = 0; i < hiddenDivs.length; i++) {
      if (hiddenDivs[i] == el) {elHeight = hiddenDivs[i+1]; }
   }
   var whichButton = "b" + el.substring(1);
   if (document.getElementById(el).style.height == "0px") {
      document.getElementById(whichButton).src = "http://static.visitlondon.com/images/button-minus-off.gif";
      changeHeight(el,"increase")   ;
   } else {
      document.getElementById(whichButton).src = "http://static.visitlondon.com/images/button-plus-off.gif";
      changeHeight(el,"decrease");
   }
}

function setupDescriptionExpander() {
   var dHeight;
   if (document.getElementById('prod-desc')) {
      var el = document.getElementById('prod-desc');
      for (var i = 0; i < el.childNodes.length; i++) {
         var   node = el.childNodes[i];
          if (node.nodeName == 'DIV' && node.className == 'panel-middle' ) {
            descHeight = getHeight(node);
            dHeight = +descHeight.substring(0,descHeight.indexOf('px'));
            if (dHeight > 188) {
               node.style.height = "188px";
               node.style.overflow = "hidden";
            }
         }
         if  (node.nodeName == 'DIV' && node.className == 'panel-foot' ) {
            if (dHeight > 188) {
            removeChildren(node);
            node.className += " foot-extend";
            node.innerHTML = '<a href="#" onclick="extendDesc(this); return false;" class="rollover"><img src="http://static.visitlondon.com/images/button-plus-off.gif" alt="" id="bprod-desc"/>Read More</a>';
            }
         }
      }
   }
}

function extendDesc(lnk) {
   if (disableExt == 'true') {return false;}
   lnk.blur();
   var el = document.getElementById('prod-desc');
   for (var i = 0; i < el.childNodes.length; i++) {
      var node = el.childNodes[i];
      if (node.nodeName == 'DIV' && node.className == 'panel-middle' ) {
         if (node.style.height == "188px") {
            document.getElementById('bprod-desc').src = "http://static.visitlondon.com/images/button-minus-off.gif";
            changeHeight2("increase");
         } else {
            document.getElementById('bprod-desc').src = "http://static.visitlondon.com/images/button-plus-off.gif";
            changeHeight2("decrease");
         }
      }
   }
}

function setupHidden() {
   var allHidden = document.getElementsByClassName("hidden"), i, k, whichHidden;
   for (i = 0; i < allHidden.length; i++) {
      whichHidden = allHidden[i].id;
      k = 2 * i;
      hiddenDivs[k] = whichHidden;
      hiddenDivs[k+1] = getHeight(allHidden[i]);
      allHidden[i].style.height = "0px";
      allHidden[i].style.overflow = "hidden";
   }
}


function hideUserReviews(whichReview) {
   var allReviews = document.getElementsByClassName("ta-full"), allSummaries = document.getElementsByClassName("ta-summary"), allLinks = document.getElementsByClassName("expand-this"), i;
   for (i = 0; i < allReviews.length; i++) {
      var j = i+1;
      if (whichReview != j) {
         allReviews[i].style.display = 'none';
         allSummaries[i].style.display = 'block';
         allLinks[i].style.display = 'inline';
         allLinks[i].className = allLinks[i].className.replace('minus', 'plus');
         removeChildren(allLinks[i]);
         allLinks[i].appendChild(document.createTextNode('Read full review'));
      }
   }
   document.getElementById("expand-all").className = document.getElementById('expand-all').className.replace('minus', 'plus');
   removeChildren(document.getElementById('expand-all'));
   document.getElementById('expand-all').appendChild(document.createTextNode('Expand all reviews'));
   userReviewsToggle = 'closed';
}


function showUserReview(e) {
var el = (e.target) ? e.target : e.srcElement, whichReview = el.id.substr(12);
hideUserReviews(whichReview);
if (document.getElementById("ta-full-"+whichReview).style.display == 'none') {
   document.getElementById("ta-summary-"+whichReview).style.display = 'none';
   document.getElementById("ta-full-"+whichReview).style.display = 'block';
   document.getElementById("expand-this-"+whichReview).className = document.getElementById("expand-this-"+whichReview).className.replace('plus', 'minus');
   removeChildren(document.getElementById("expand-this-"+whichReview));
   document.getElementById("expand-this-"+whichReview).appendChild(document.createTextNode('Hide full review'));

}  else {
   document.getElementById("ta-summary-"+whichReview).style.display = 'block';
   document.getElementById("ta-full-"+whichReview).style.display = 'none';
   document.getElementById("expand-this-"+whichReview).className = document.getElementById("expand-this-"+whichReview).className.replace('minus', 'plus');
   removeChildren(document.getElementById("expand-this-"+whichReview));
   document.getElementById("expand-this-"+whichReview).appendChild(document.createTextNode('Read full review'));
}
}

function showAllUserReviews() {
   if (userReviewsToggle == 'closed') {
   var allReviews = document.getElementsByClassName("ta-full"), allSummaries = document.getElementsByClassName("ta-summary"), allLinks = document.getElementsByClassName("expand-this"), i;
   for (i = 0; i < allReviews.length; i++) {
         allReviews[i].style.display = 'block';
         allSummaries[i].style.display = 'none';
         allLinks[i].className = allLinks[i].className.replace('plus', 'minus');
         removeChildren(allLinks[i]);
         allLinks[i].appendChild(document.createTextNode('Hide full review'));
   }
   document.getElementById("expand-all").className = document.getElementById("expand-all").className.replace('plus', 'minus');
   removeChildren(document.getElementById('expand-all'));
   document.getElementById('expand-all').appendChild(document.createTextNode('Hide all reviews'));
   userReviewsToggle = 'open';
   } else {
      hideUserReviews();
   }
}

function setupUserReviews() {
if (document.getElementById('expand-all')) {
   var whichReview = null, allLinks = document.getElementsByClassName("expand-this"), i;
   hideUserReviews(whichReview);
   for (i = 0; i < allLinks.length; i++) {
      removeChildren(allLinks[i]);
      allLinks[i].appendChild(document.createTextNode('Read full review'));
      if(window.addEventListener)   { allLinks[i].addEventListener('click', showUserReview, false); }
      else if(window.attachEvent) { allLinks[i].attachEvent('onclick', showUserReview, false); }
      allLinks[i].className += " plus";
   }
   removeChildren(document.getElementById('expand-all'));
   document.getElementById('expand-all').appendChild(document.createTextNode('Expand all reviews'));
   document.getElementById('expand-all').className += ' plus';
   if(window.addEventListener)   { document.getElementById('expand-all').addEventListener('click', showAllUserReviews, false); }
   else if(window.attachEvent) { document.getElementById('expand-all').attachEvent('onclick', showAllUserReviews, false); }
   userReviewsToggle = 'closed';
}
}
/* ################ End Expanders ################ */

/*  ################ Rollovers ################ */
function doRollover(e) {
   var el = (e.target) ? e.target : e.srcElement;
   if (el.nodeName == 'IMG' ) {
      if (el.src.indexOf('-off.') != -1) {el.src = el.src.replace('-off.', '-on.');}
      else { el.src = el.src.replace('-on.','-off.'); }
   } else if (el.nodeName == 'A' ) {
      for (var i = 0; i < el.childNodes.length; i++) {
         var node = el.childNodes[i];
          if (node.nodeName == 'IMG' ) {
            if (node.src.indexOf('-off.') != -1) { node.src = node.src.replace('-off.', '-on.');}
            else { node.src = node.src.replace('-on.','-off.');}
         }
      }
   }
}
function setupRollovers() {
var allRolls = document.getElementsByClassName("rollover");
for (var i = 0; i < allRolls.length; i++) {
      if(window.addEventListener)   { allRolls[i].addEventListener('mouseover', doRollover, false); allRolls[i].addEventListener('mouseout', doRollover, false);}
      else if(window.attachEvent) { allRolls[i].attachEvent('onmouseover', doRollover, false); allRolls[i].attachEvent('onmouseout', doRollover, false); }
   }
}
/* ################  End Rollovers  ################ */

/* ################  Explorer  ################ */
function showTube(whichTube) {
    for (var i=0;i<allTubes.length;i++) { document.getElementById(allTubes[i]).style.display = 'none'; }
    document.getElementById(whichTube).style.display = 'block';
}
function overMap(whLink,whText,whCoords) {
   var chooser, chooseLink, chooseImg, points = whCoords.split(','), chooserW = (+points[2]) - (+points[0]), chooserH = (+points[3]) - (+points[1]);
   if (!document.getElementById('chooser')) {
      chooser= document.createElement("div");
      chooser.setAttribute("id", "chooser");
      chooseLink = document.createElement("a");
      chooseLink.setAttribute("id", "chooseLink");
      chooseLink.setAttribute("href", "");
      chooseImg = document.createElement("img");
      chooseImg.setAttribute("id", "chooseImg");
      chooseImg.setAttribute("alt", "");
      chooseImg.setAttribute("src","http://static.visitlondon.com/images/explorer-map/view-larger.gif");
      chooseLink.appendChild(chooseImg);
      chooser.appendChild(chooseLink);
      document.getElementById('tubeparent').appendChild(chooser);
   }
   document.getElementById("chooseLink").href = "javascript:showTube('"+whLink+"')";
    document.getElementById("chooseImg").alt = "View Larger Map - " + whText;
   document.getElementById('chooser').style.width= chooserW + "px";
    document.getElementById('chooser').style.height= chooserH + "px";
    document.getElementById('chooser').style.top = points[1] + "px";
    document.getElementById('chooser').style.left = points[0] + "px";
    document.getElementById('chooser').style.display = "block";
    document.getElementById('chooser').style.position = "absolute";
}
/* ################  End Explorer  ################ */

/* ################ Tabs  ################ */
function trackSwitchTabs(el) {
var tab_title;
switch (el) {
      case 'prod-menu'       : tab_title="Menu";           break;
      case 'prod-desc'       : tab_title="Description";  break;
      case 'prod-fac'        : tab_title="Information";  break;
      case 'prod-rev'        : tab_title="Reviews";       break;
      case 'prod-user'       : tab_title="User Reviews"; break;
      case 'prod-event'      : tab_title="Events";     break;
      default: tab_title="Unknown";
}
   dcsMultiTrack('DCS.dcsuri','/showTab/'+tab_title,'WT.ti','Show Tab: '+tab_title , 'WT.cg_n', 'Internal','WT.cg_s','JavaScript Action','WT.si_n','','WT.si_p','','DCSext.vlEviivo','','WT.mc_id','');
}

function doFade(colorId, targetId) {
    if (colorId >= 1) {
      colorId--;
      for (var i = 0; i < document.getElementById(targetId).childNodes.length; i++) {
         if (document.getElementById(targetId).childNodes[i].nodeType == 1) {
            if (location.pathname.indexOf('foodandwine') != -1) { document.getElementById(targetId).childNodes[i].style.backgroundColor = "#" + AttSteps[colorId];}
            else if (location.pathname.indexOf('accommodation') != -1) {document.getElementById(targetId).childNodes[i].style.backgroundColor = "#" + AccSteps[colorId];}
            else if (location.pathname.indexOf('events') != -1) { document.getElementById(targetId).childNodes[i].style.backgroundColor = "#" + EveSteps[colorId];}
            else if (location.pathname.indexOf('travel') != -1) { document.getElementById(targetId).childNodes[i].style.backgroundColor = "#" + TraSteps[colorId];}
         }
      }
      if (colorId >= 1) {
         setTimeout("doFade("+colorId+",'"+targetId+"')", FadeInterval);
      }
   }
}
function showtab(el) {
   var whichTab, allTabs = document.getElementsByClassName("tabcnt");
   if(BrowserDetect.browser == "Explorer" && whichVid && whichVid !== "" && hasRightVersion === true){
      document.getElementById("vidO").setVariable("mytext",1);
   }
   for (var i = 0; i < allTabs.length; i++) {
      allTabs[i].style.display = 'none';
      whichTab = allTabs[i].id + "-tab";
      document.getElementById(whichTab).className = "";
   }
   document.getElementById(el).style.display = "block";
   trackSwitchTabs(el);
   whichTab = el + "-tab";
   document.getElementById(whichTab).className = "current";
   doFade(7, el);
}
function setupTabs() {
   var allTabs = document.getElementsByClassName("tabcnt"), allLnks = document.getElementsByClassName("tablnk"), i, whichTab;
   if (allTabs.length > 0) {
   if (!showRev) {
      for (i = 1; i < allTabs.length; i++) {
         allTabs[i].style.display = 'none';
         allLnks[i].removeAttribute("href");
         allLnks[i].style.cursor = "pointer";
      }
      for (i = 0; i < allLnks.length; i++) {
         allLnks[i].removeAttribute("href");
         allLnks[i].style.cursor = "pointer";
      }
      whichTab = allTabs[0].id + "-tab";
      document.getElementById(whichTab).className = "current";
      } else {
         for (i = 0; i < allTabs.length; i++) {
            allTabs[i].style.display = 'none';
         }
         for (i = 0; i < allLnks.length; i++) {
            allLnks[i].removeAttribute("href");
            allLnks[i].style.cursor = "pointer";
         }
         document.getElementById('prod-rev').style.display = "block";
         document.getElementById('prod-rev-tab').className = "current";
      }
   }
}
/* ################ End Tabs ################ */

/* ################  Multi Selector  ################ */
function trackStopPanels() {
   dcsMultiTrack('DCS.dcsuri','/msclick/panelStop','WT.ti','MultiSelector Stop', 'WT.cg_n', 'Internal','WT.cg_s','JavaScript Action','WT.si_n','','WT.si_p','','DCSext.vlEviivo','','WT.mc_id','');
}
function trackPlayPanels() {
   dcsMultiTrack('DCS.dcsuri','/msclick/panelPlay','WT.ti','MultiSelector Play', 'WT.cg_n', 'Internal','WT.cg_s','JavaScript Action','WT.si_n','','WT.si_p','','DCSext.vlEviivo','','WT.mc_id','');
}
function multiPanel2(whichPanel) {
   var whLink; var currentIndex = 0;
   for (var j=0;j<multiPanels.length;j++) { if (document.getElementById(multiPanels[j]).style.display == 'block') { currentIndex = j; } }
   if (whichPanel == 'next') {
      if (currentIndex == multiPanels.length - 1) { nextIndex = 0; }
      else { nextIndex = currentIndex + 1;   }
   } else if (whichPanel == 'prev') {
      if (currentIndex === 0) { nextIndex = multiPanels.length - 1;}
      else {   nextIndex = currentIndex  - 1;   }
   } else { nextIndex = whichPanel; }
   for (var k=0;k<multiPanels.length;k++) {
      document.getElementById(multiPanels[k]).style.display = 'none';
      var allO = document.getElementById(multiPanels[k]).getElementsByTagName("object");
      for (var m=0;m<allO.length;m++) {
         allO[m].parentNode.innerHTML = " - ";
      }
      whLink = "link" + k;
      document.getElementById(whLink).firstChild.src = 'http://static.visitlondon.com/images/home/ms-dot-off.gif';
      document.getElementById(whLink).className = "rollover";
      if(window.addEventListener)   { document.getElementById(whLink).addEventListener('mouseover', doRollover, false); document.getElementById(whLink).addEventListener('mouseout', doRollover, false);}
      else if(window.attachEvent) { document.getElementById(whLink).attachEvent('onmouseover', doRollover, false); document.getElementById(whLink).attachEvent('onmouseout', doRollover, false); }
   }
   document.getElementById(multiPanels[nextIndex]).style.display =  "block";
   try {
      eval('redo' + document.getElementById(multiPanels[nextIndex]).id + "()");
   } catch(e) {}
   whLink = "link" + nextIndex;
   document.getElementById(whLink).firstChild.src = 'http://static.visitlondon.com/images/home/ms-dot-on.gif';
   document.getElementById(whLink).className = "";
   if(window.addEventListener)   { document.getElementById(whLink).removeEventListener('mouseover', doRollover, false); document.getElementById(whLink).removeEventListener('mouseout', doRollover, false);}
      else if(window.attachEvent) { document.getElementById(whLink).detachEvent('onmouseover', doRollover, false); document.getElementById(whLink).detachEvent('onmouseout', doRollover, false); }
}

function multiPanelLink2(e) {
   var nextPanel, whichPanel, el = (e.target) ? e.target : e.srcElement;
   if (el.nodeName == 'IMG' ) {
      el = el.parentNode;
   }
   whichPanel = el.id.substring(4);
   switch (whichPanel) {
      case 'prev'       : nextPanel = 'Previous';          break;
      case 'next'       : nextPanel = 'Next';   break;
      default: nextPanel = +whichPanel+1;
}
   if (e.type == 'click') { multiPanel2(whichPanel);}
   else if (e.type == 'mousedown') {dcsMultiTrack('DCS.dcsuri','/msclick/panel'+nextPanel,'WT.ti','MultiSelector Panel '+nextPanel, 'WT.cg_n', 'Internal','WT.cg_s','JavaScript Action','WT.si_n','','WT.si_p','','DCSext.vlEviivo','');}
}

function setupMultiPanel2() {
   document.getElementById('selector-panel-middle').className= "withJS";
   var multiPanelsRaw = document.getElementById('selector-window').childNodes, pLink, pImg, nLink, nImg,
   theListContainer, theList
   for (var i=0;i<multiPanelsRaw.length;i++) {
      if (multiPanelsRaw[i].nodeName == 'DIV') {
            multiPanels[multiPanels.length] = multiPanelsRaw[i].id;
      }
   }
      pLink = document.createElement("a");
      pLink.setAttribute("id", "linkprev");
      pImg = document.createElement("img");
      pImg.setAttribute("alt","Previous");
      pImg.setAttribute("src","http://static.visitlondon.com/images/home/ms-prev-off.gif");
      pLink.appendChild(pImg);
      if(window.addEventListener)   {
         pLink.addEventListener('click', function(e) {multiPanelLink2(e); }, false); pLink.addEventListener('mousedown', function(e) {multiPanelLink2(e); }, false);
      } else if(window.attachEvent) {
         pLink.attachEvent('onclick', function(e) {multiPanelLink2(e); }, false); pLink.attachEvent('onmousedown', function(e) {multiPanelLink2(e); }, false);
      }

      nLink = document.createElement("a");
      nLink.setAttribute("id", "linknext");
      nImg = document.createElement("img");
      nImg.setAttribute("alt","Next");
      nImg.setAttribute("src","http://static.visitlondon.com/images/home/ms-next-off.gif");
      nLink.appendChild(nImg);
      if(window.addEventListener)   {
         nLink.addEventListener('click', function(e) {multiPanelLink2(e); }, false); nLink.addEventListener('mousedown', function(e) {multiPanelLink2(e); }, false);
      } else if(window.attachEvent) {
         nLink.attachEvent('onclick', function(e) {multiPanelLink2(e); }, false); nLink.attachEvent('onmousedown', function(e) {multiPanelLink2(e); }, false);
      }
   theListContainer = document.createElement("div");
   theListContainer.setAttribute("id", "linklist");
   theList = document.createElement("ul");
   for (var j=0;j<multiPanels.length;j++) {
      var nextList = document.createElement("li"), nextLink = document.createElement("a"), nextImg = document.createElement("img");
      document.getElementById(multiPanels[j]).style.display = 'none';
      document.getElementById(multiPanels[j]).style.position = 'absolute';
      document.getElementById(multiPanels[j]).style.top =  "0px";
      document.getElementById(multiPanels[j]).style.left =  "0px";
      nextList.appendChild(nextLink);
      nextLink.setAttribute("id", "link"+j);
      nextImg.setAttribute("alt","View panel "+(+j+1));
      nextImg.setAttribute("src","http://static.visitlondon.com/images/home/ms-dot-off.gif");
      nextLink.appendChild(nextImg);
      theList.appendChild(nextList);
      if(window.addEventListener)   {
         nextLink.addEventListener('click', function(e) {multiPanelLink2(e); }, false); nextLink.addEventListener('mousedown', function(e) {multiPanelLink2(e); }, false);
      } else if(window.attachEvent) {
         nextLink.attachEvent('onclick', function(e) {multiPanelLink2(e); }, false); nextLink.attachEvent('onmousedown', function(e) {multiPanelLink2(e); }, false);
      }
      nextLink.setAttribute("class","rollover");
   }
   theListContainer.appendChild(theList);
   document.getElementById('selector-controls').appendChild(pLink);
   document.getElementById('selector-controls').appendChild(theListContainer);
   document.getElementById('selector-controls').appendChild(nLink);
   document.getElementById('linknext').className = "rollover";
   document.getElementById('linkprev').className = "rollover";
   multiPanel2(0);
}
/* ################ End Multi Selector  ################ */

/* ################ Registration  ################ */
/* TODO: move form validation to here? */
function showUkOnly(el) {
   var allUk = document.getElementsByClassName("ukOnly"), i;
   if (el.options[el.selectedIndex].value == 'gb' || el.options[el.selectedIndex].value == 'GB') {
      for (i = 0; i < allUk.length; i++) {
         allUk[i].style.visibility = 'visible';
      }
   } else {
      for (i = 0; i < allUk.length; i++) {
         allUk[i].style.visibility = 'hidden';
      }
   }
}
function showLondonOnly(el) {
   if (el.checked) {
      document.getElementById('notLondon').style.display = "none";
   } else {
      document.getElementById('notLondon').style.display = "table-row";
   }
}
/* ################ End Registration ################ */

/* ################ Top Nav ################ */
function topmenuClear() {
   var navRoot = document.getElementById("topmenu");
      for (var i=0; i<navRoot.childNodes.length; i++) {
         var node = navRoot.childNodes[i];
         if (node.nodeName=="LI") {
            node.className=node.className.replace("over", "");
            node.childNodes[0].className="";
         }
      }
}
function topmenuHover() {
   if(document.getElementById("topmenu")) {
      var navRoot = document.getElementById("topmenu");
      for (var i=0; i<navRoot.childNodes.length; i++) {
         var node = navRoot.childNodes[i];
         if (node.nodeName=="LI") {
            node.onmouseover=function() {
               clearTimeout(navTimer); topmenuClear();
               this.className+=" over";
               this.childNodes[0].className="over";
            };
            node.onmouseout=function() {
               navTimer = setTimeout(topmenuClear,2000);
            };
         }
      }
   }
}
function showlang() {
   if(document.getElementById('lang-list').style.display == "none") {
      document.getElementById('lang-list').style.display = "block";
   } else if (document.getElementById('lang-list').style.display == "block") {
   document.getElementById('lang-list').style.display = "none";
}
}
function setupLangs() {
   if (document.getElementById('lang-list')) {
      document.getElementById('lang-list').style.display = "none"; /* doing this is less work then querying computed styles */
   }
}
/* ################ End Top Nav ################ */

/* ################ Search  ################ */
function showStartsWith(formName) {
   if (!formName || formName === "") {formName = "search";}
   var   f = document.forms[formName];
   if (document.getElementById('c1o1') && document.getElementById('c1o2')) {
      document.getElementById('c1o2').style.display = 'block'; document.getElementById('c1o1').style.display = 'none';
      f.elements['keyword'].disabled = true; f.elements['title'].disabled = false;
   }
}
function showKeyword(formName) {
   if (!formName || formName === "") {formName = "search";}
   var   f = document.forms[formName];
   if (document.getElementById('c1o1') && document.getElementById('c1o2')) {
      document.getElementById('c1o1').style.display = 'block';  document.getElementById('c1o2').style.display = 'none';
      f.elements['keyword'].disabled = false; f.elements['title'].disabled = true;
   }
}
function showAreas(formName) {
   if (!formName || formName === "") {formName = "search";}
   var   f = document.forms[formName];
   if (document.getElementById('c2o2') && document.getElementById('c2o1')) {
      document.getElementById('c2o2').style.display = 'block';  document.getElementById('c2o1').style.display = 'none';
      f.elements['location'].disabled = true; f.elements['s-areas'].disabled = false;
   }
}
function showLocation(formName) {
   if (!formName || formName === "") {formName = "search";}
   var   f = document.forms[formName];
   if (document.getElementById('c2o2') && document.getElementById('c2o1')) {
      document.getElementById('c2o1').style.display = 'block';  document.getElementById('c2o2').style.display = 'none';
      f.elements['s-areas'].disabled = true; document.getElementById('sub-areas').disabled = true;
      f.elements['location'].disabled = false;
   }
}
function showPeriod(formName) {
   if (!formName || formName === "") {formName = "search";}
   var   f = document.forms[formName];
   if (document.getElementById('c3o2') && document.getElementById('c3o1')) {
      document.getElementById('c3o1').style.display = 'block';  document.getElementById('c3o2').style.display = 'none';
      f.elements['from.day'].disabled = true; f.elements['from.month-year'].disabled = true;
      f.elements['to.day'].disabled = true; f.elements['to.month-year'].disabled = true;
      f.elements['duration'].disabled = false; /*f.action = "/search"; */
   }
}
function showDates(formName) {
   if (!formName || formName === "") {formName = "search";}
   var   f = document.forms[formName];
   if (document.getElementById('c3o2') && document.getElementById('c3o1')) {
      document.getElementById('c3o2').style.display = 'block'; document.getElementById('c3o1').style.display = 'none';
      f.elements['from.day'].disabled = false; f.elements['from.month-year'].disabled = false;
      f.elements['to.day'].disabled = false; f.elements['to.month-year'].disabled = false;
      f.elements['duration'].disabled = true; /* f.action = "/events/search"; */
   }
}
function showFacs(formName) {
   if (!formName || formName === "") {formName = "search";}
   if (document.getElementById('facilities-inner')) {
   if (document.getElementById('facilities-inner').style.display == 'none') {
      document.getElementById('facilities-inner').style.display = 'block'; document.getElementById('facilities-link').className = 'minus';
   } else {
      document.getElementById('facilities-inner').style.display = 'none'; document.getElementById('facilities-link').className = 'plus';
   }
   }
}

function getMaxDay(selectedMonth,selectedYear) {
   var maxDay;
   if (selectedMonth == '2') { if (leapYear(selectedYear) ) {maxDay = 29;} else {maxDay = 28;} }    else { if  (selectedMonth == '4' || selectedMonth == '6' || selectedMonth == '9' || selectedMonth == '11') { maxDay = 30;} else { maxDay = 31; } }
  return maxDay;
}
function getMinDay(selectedMonth,selectedYear) {
   var minDay;
   if (selectedMonth == currentMonth && selectedYear == currentYear) { minDay = currentDay; }
   else { minDay = 1; }
   return minDay;
}
/* What's On Dates */
function checkMonths(whichEnd,dftOpt,formName) {
   if (!dftOpt || dftOpt === "") { dftOpt = 0; }
   if (!formName || formName === "") { formName = "search"; }
   var   f = document.forms[formName], whichMonth = f.elements[whichEnd + ".month-year"],  whichDay =  f.elements[whichEnd + ".day"],  inDateArray = whichMonth.options[whichMonth.selectedIndex].value.split("-"),  selectedMonth = parseInt(inDateArray[0],10),  selectedYear =  parseInt(inDateArray[1],10), selectedDay = whichDay.options[whichDay.selectedIndex].value,  maxDay = getMaxDay(selectedMonth,selectedYear), minDay = getMinDay(selectedMonth,selectedYear);
   while (whichDay.length > dftOpt) { whichDay.remove(dftOpt); }
   for (var k = minDay; k <= maxDay; k++) {
      var kpos = k - minDay + dftOpt, ksel = false;
      if (k == selectedDay) { ksel = true; }
      whichDay.options[kpos] = new Option(k, k, false, ksel);
   }
}
/* Accommodation Dates */
function getCheckOut(formName) {
if (!formName || formName === "") {formName = "search";}
var   f = document.forms[formName], whichMonth = f.elements["from.month-year"], inDateArray = whichMonth.options[whichMonth.selectedIndex].value.split("-"), selectedMonth = parseInt(inDateArray[0],10),  selectedYear =  parseInt(inDateArray[1],10),  jsMonth = parseInt(selectedMonth-1,10), whichDay =  f.elements['from.day'], selectedDay = parseInt(whichDay[whichDay.selectedIndex].text,10);
   if (whichMonth.selectedIndex > -1 && whichDay.selectedIndex > -1 && f.elements['duration'].selectedIndex > -1) {
      var inDate=new Date(selectedYear, jsMonth, selectedDay);
      inDate.setDate(parseInt(inDate.getDate(),10) + parseInt(f.elements['duration'].options[f.elements['duration'].selectedIndex].value,10));
      removeChildren(document.getElementById("check-out1")); removeChildren(document.getElementById("check-out2"));
      document.getElementById('check-out1').appendChild(document.createTextNode("Check Out:"));
      document.getElementById('check-out2').appendChild(document.createTextNode(inDate.getDate() + " " + monthName[inDate.getMonth()] + ", " + inDate.getFullYear()));
      if (formName == "search") { f.action = "/accommodation/search";}
   } else {
      if (formName == "search") { f.action = "/search"; }
   }
}

function checkAccMonths(formName) {
   if (!formName || formName === "") {formName = "search";}
   var selectedDay, f = document.forms[formName], whichMonth = f.elements["from.month-year"], inDateArray = whichMonth.options[whichMonth.selectedIndex].value.split("-"), selectedMonth = parseInt(inDateArray[0],10), selectedYear =  parseInt(inDateArray[1],10), whichDay =  f.elements['from.day'], maxDay, minDay, k, kpos, ksel;
   if (whichDay.selectedIndex > -1) {
      selectedDay =  whichDay.options[whichDay.selectedIndex].value;
   } else {
      selectedDay = currentDay;
   }
   maxDay = getMaxDay(selectedMonth,selectedYear);
   minDay = getMinDay(selectedMonth,selectedYear);
   while (whichDay.length > 0) { whichDay.remove(0); }
   for (k = minDay; k <= maxDay; k++) {
      kpos = k - minDay; ksel = false;
      if (k == selectedDay) { ksel = true; }
      whichDay.options[kpos] = new Option(k, k, false, ksel);
   }
   if (formName != "hpsearch") {
      getCheckOut(formName);
   }
}

/* Rooms related */
function deleteRoom(whRoom) {
   var oldRoom = document.getElementById(whRoom);
   oldRoom.parentNode.removeChild(oldRoom);
   return true;
}
function addNewRoom(formName) {
if (!formName || formName === "") {formName = "search";}
var searchSuffix,  f = document.forms[formName], parentEl, roomContent, totalRooms, newRoom, newLastRoom, nextRoom = document.createElement("div");
   if (formName == 'lpsearch') {searchSuffix = "lp";}
   if (formName == 'pdsearch') {searchSuffix = "pd";}
   if (formName == 'search') {searchSuffix = "sb";}
   parentEl = "roomsData-" + searchSuffix;
   totalRooms = +f.elements['totalRooms'].value;
   newRoom = totalRooms + 1;
   newLastRoom = "r" + newRoom + "-" + searchSuffix;
    nextRoom.setAttribute("id", newLastRoom);
    document.getElementById(parentEl).appendChild(nextRoom);
    document.getElementById(newLastRoom).className = "room";
   if (formName == 'lpsearch' || formName == 'pdsearch') {
      roomContent = '<b>Room '+newRoom+':</b>&#160; <label for="'+ newLastRoom +'a" class="tick">Adults:&#160;</label><select name="adults" id="'+ newLastRoom +'a" class="erd"><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option></select>&#160;<label for="'+ newLastRoom +'c" class="tick">Children:&#160;</label><select name="children" id="'+ newLastRoom +'c" class="erd"><option value="0">0</option><option value="1">1</option><option value="2">2</option><option value="3">3</option></select>' ;
   } else if (formName == 'search') {
      roomContent = 'Room '+newRoom+':<br /><label for="'+ newLastRoom +'a" class="tick">Adults:</label> <select name="adults" id="'+ newLastRoom +'a" class="adv erd"><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option></select>&#160;<label for="'+ newLastRoom +'c" class="tick">Children:</label> <select name="children" id="'+ newLastRoom +'c" class="adv erd"><option value="0">0</option><option value="1">1</option><option value="2">2</option><option value="3">3</option></select>' ;
   }
document.getElementById(newLastRoom).innerHTML = roomContent;
f.elements['totalRooms'].value = newRoom;
return true;
}

function checkRooms(formName) {
if (!formName || formName === "") {formName = "search";}
var searchSuffix, f = document.forms[formName], rInit, r, oldTotalRooms, newTotalRooms
if (formName == 'lpsearch') {searchSuffix = "lp";}
if (formName == 'pdsearch') {searchSuffix = "pd";}
if (formName == 'search') {searchSuffix = "sb";}
oldTotalRooms = +f.elements['totalRooms'].value;
newTotalRooms = +f.elements['roomsNum'].options[f.elements['roomsNum'].selectedIndex].value;
   if (newTotalRooms == oldTotalRooms) {
      return false;
   } else if (newTotalRooms < oldTotalRooms) {
      rInit = newTotalRooms + 1;
      for (r = rInit; r <= oldTotalRooms; r++) {
         var rpos = "r" + r + "-" + searchSuffix;
         deleteRoom(rpos);
      }
   f.elements['totalRooms'].value = newTotalRooms;
   } else if (newTotalRooms > oldTotalRooms) {
      rInit = oldTotalRooms + 1;
      for (r = rInit; r <= newTotalRooms; r++) {
         addNewRoom(formName);
      }
   }
}

function advancedSearch(formName) {
   if (!formName || formName === "") {formName = "search";}
   var searchSuffix, allAdv = document.getElementsByClassName('adv'), linktxt, asid, alid, i;
   if (formName == 'lpsearch') {searchSuffix = "lp";}
   if (formName == 'pdsearch') {searchSuffix = "pd";}
   if (formName == 'search') {searchSuffix = "sb";}
   asid = 'advanced-search-' + searchSuffix;
   alid = 'advanced-link-' + searchSuffix;
   searchToggle = "advanced";
   showPeriod(formName); showAreas(formName);
   document.getElementById(asid).style.display = 'block';
   document.getElementById(alid).className="minus";
   document.getElementById(alid).href="javascript:whichSearch('"+ formName +"')";
   removeChildren(document.getElementById(alid));
   linktxt = document.createTextNode("Fewer Search Options");
   document.getElementById(alid).appendChild(linktxt);
   for (i = 0; i < allAdv.length; i++) { if(allAdv[i].id != "sub-areas") { allAdv[i].disabled = false; } }
}

function simpleSearch(formName) {
   if (!formName || formName === "") {formName = "search";}
   var searchSuffix, f = document.forms[formName], asid, alid, allAdv = document.getElementsByClassName('adv'), linktxt = document.createTextNode("More Search Options"), i;
   if (formName == 'lpsearch') {searchSuffix = "lp";}
   if (formName == 'pdsearch') {searchSuffix = "pd";}
   if (formName == 'search') {searchSuffix = "sb";}
   asid = 'advanced-search-' + searchSuffix;
   alid = 'advanced-link-' + searchSuffix;
   searchToggle = "simple";
   if (formName != "lpsearch") { f.action = "/search"; }
   if(document.getElementById('c1o2') && document.getElementById('keyword')) { showKeyword(formName); }
   document.getElementById(asid).style.display = 'none';
   document.getElementById(alid).className="plus";
   document.getElementById(alid).href="javascript:whichSearch('"+ formName +"')";
   removeChildren(document.getElementById(alid));
   document.getElementById(alid).appendChild(linktxt);
   for (i = 0; i < allAdv.length; i++) { allAdv[i].disabled = true; }
}
function whichSearch(formName) {
   if (searchToggle == "simple") {searchToggle = "advanced"; advancedSearch(formName);}
   else {searchToggle = "simple"; simpleSearch(formName);}
}

function restrictSearch() {
   if (currentSection === "") {return false; }
   var whichSection =   document.getElementById('section').options[document.getElementById('section').selectedIndex].value, subSections = whichSection.split("."), allAdv, i, linktxt = document.createTextNode("More Search Options");
   if (subSections[0] == currentSection) {
      allAdv = document.getElementsByClassName('adv');
      for (i = 0; i < allAdv.length; i++) {
         if(allAdv[i].id != "sub-areas") {
            allAdv[i].disabled = false;
         }
      }
      document.getElementById('advanced-control-sb').style.block = "block";
      advancedSearch();
   } else {
      simpleSearch();
      if (subSections[0] !== "") {
         document.getElementById('advanced-control-sb').style.block = "block";
         document.getElementById('advanced-link-sb').className = "plus";
         document.getElementById('advanced-link-sb').href = "/"+subSections[0]+"/";
         document.getElementById('advanced-link-sb').innerHTML = "";
         document.getElementById('advanced-link-sb').appendChild(linktxt);
      } else {
         document.getElementById('advanced-control-sb').style.display = "none";
      }
   }
}

function setDate(formName,idate,oday,omonth) {
if (!formName || formName === "") {formName = "search";}
var f = document.forms[formName], mi, miVal, di, diVal, idateArray = f.elements[idate].value.split("."); // input should (d)d.mm-yyyy
   for (mi=0; mi < f.elements[omonth].options.length; mi++) {
      if (f.elements[omonth].options[mi].value.length == 6) {
         miVal = "0" + f.elements[omonth].options[mi].value;
      } else {
         miVal = f.elements[omonth].options[mi].value;
      }
      if (miVal == idateArray[1]) {
         f.elements[omonth].options[mi].selected = true;
      }
   }
   for (di=0; di < f.elements[oday].options.length; di++) {
      diVal = f.elements[oday].options[di].value;
      if (diVal == idateArray[0]) {
         f.elements[oday].options[di].selected = true;
      }
   }
   if(formName == "lpsearch" || formName == "pdsearch") { getCheckOut(formName); }
}

function setDropDownDate(cal) {
   if (cal.params.inputField.name == 'from.date') {
      setDate(cal.params.formName,'from.date','from.day','from.month-year');
      if (cal.params.formName == 'search') {
         checkMonths('from','search') ;
      } else if (cal.params.formName == 'lpsearch' || cal.params.formName == 'pdsearch') {
         checkAccMonths(cal.params.formName) ;
      }
   } else if (cal.params.inputField.name == 'to.date') {
      setDate(cal.params.formName,'to.date','to.day','to.month-year');
      checkMonths('to','search') ;
   }
}

/* Disallow dates in the past or prior to start date */
function dateStatusFrom(date) { var min = new Date(); min.setDate(min.getDate() - 1); if (date.getTime() < min.getTime() ) { return true; }  else { return false; } }

function setupAcc(formName) {
if (!formName || formName === "") {formName = "search";}
var f = document.forms[formName],searchSuffix, r2, r3, r4;
if (formName == 'hpsearch') {searchSuffix = "hp";}
if (formName == 'lpsearch') {searchSuffix = "lp";}
if (formName == 'pdsearch') {searchSuffix = "pd";}
if (formName == 'search') {searchSuffix = "sb";}
// setupSearchOverlay();
if (formName != 'hpsearch') {
   r2 = "r2-" + searchSuffix; r3 = "r3-" + searchSuffix; r4 = "r4-" + searchSuffix;
   switch (f.elements['roomsNum'].selectedIndex) {
      case 0 : deleteRoom(r2);  deleteRoom(r3);  deleteRoom(r4); break;
      case 1 : deleteRoom(r3); deleteRoom(r4); break;
      case 2 : deleteRoom(r4); break;
   }
   f.elements['totalRooms'].value = f.elements['roomsNum'].options[f.elements['roomsNum'].selectedIndex].value;
}
checkAccMonths(formName);
}

function setupNewAcc(formName) {
if (!formName || formName === "") {formName = "search";}
var f = document.forms[formName],searchSuffix, r2, r3, r4;
if (formName == 'hpsearch') {searchSuffix = "hp";}
if (formName == 'lpsearch') {searchSuffix = "lp";}
if (formName == 'pdsearch') {searchSuffix = "pd";}
if (formName == 'search') {searchSuffix = "sb";}
if (formName != 'hpsearch') {
   r2 = "r2-" + searchSuffix; r3 = "r3-" + searchSuffix; r4 = "r4-" + searchSuffix;
   switch (f.elements['roomsNum'].selectedIndex) {
      case 0 : deleteRoom(r2);  deleteRoom(r3);  deleteRoom(r4); break;
      case 1 : deleteRoom(r3); deleteRoom(r4); break;
      case 2 : deleteRoom(r4); break;
   }
   f.elements['totalRooms'].value = f.elements['roomsNum'].options[f.elements['roomsNum'].selectedIndex].value;
}
checkMonths('from',0,formName);
checkMonths('to',0,formName);
}

function copyOptions(src,trg,firstO,lastO,dftText,dftValue) {
   var srcS =  document.getElementById(src),  trgS =  document.getElementById(trg), i;
   while (trgS.length > 0) { trgS.remove(0);}
   if (firstO && lastO) {
      if (dftText) {
         trgS.options[0] = new Option(dftText, dftValue, false, false);
      }
      for (i = firstO; i < lastO; i++) {
         trgS.options[trgS.options.length] = new Option(srcS.options[i].text, srcS.options[i].value, srcS.options[i].defaultSelected, srcS.options[i].selected);
      }
      trgS.disabled = false;
   } else {
      trgS.options[0] = new Option('Please select an area','', false, false);
      trgS.disabled = true;
   }
}

function popSubAreas(whSubArea) {
   switch (whSubArea) {
      case 0 : copyOptions('s-areas','sub-areas');
         break;
      case 1: copyOptions('s-areas','sub-areas',1,35,'All Central London','central');
            break;
      case 2: copyOptions('s-areas','sub-areas',36,70,'All North London','north');
            break;
      case 3: copyOptions('s-areas','sub-areas',71,99,'All East London','east');
            break;
      case 4: copyOptions('s-areas','sub-areas',100,135,'All South London','south');
            break;
      case 5: copyOptions('s-areas','sub-areas',136,167,'All West London','west');
            break;
   }
}

function searchOverlay() {
   detectFlash();
   var overlay = document.createElement("div"), obj = document.createElement("object"), em = document.createElement("embed"), overlayImg = document.createElement("img"), tags = ["applet", "iframe", "select"], i, k, ar;
   overlay.id = "search-overlay";
   document.body.appendChild(overlay);
   if(hasRightVersion) {
         obj.setAttribute("codebase","http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0");
         obj.setAttribute("width",'400');
         obj.setAttribute("height",'250');
         obj.id="vidO";
         obj.appendChild(createParam("allowScriptAccess","always"));
         obj.appendChild(createParam("movie",'http://static.visitlondon.com/images/booking-loader3.swf'));
         obj.appendChild(createParam("play","true"));
         obj.appendChild(createParam("wmode","transparent"));
         obj.appendChild(createParam("quality","high"));
         if(!window.ActiveXObject && BrowserDetect.browser != "Opera"){
            em.id="vidE";
            em.setAttribute("src",'http://static.visitlondon.com/images/booking-loader3.swf');
            em.setAttribute("quality","high");
            em.setAttribute("wmode","transparent");
            em.setAttribute("width",'400');
            em.setAttribute("height",'250');
            em.setAttribute("play","true");
            em.setAttribute("menu","false");
            em.setAttribute("allowscriptaccess","always");
            em.setAttribute("type","application/x-shockwave-flash");
            em.setAttribute("pluginspage","http://www.macromedia.com/go/getflashplayer");
         obj.appendChild(em);
         }
         overlay.appendChild(obj);
         obj.setAttribute("classid","clsid:d27cdb6e-ae6d-11cf-96b8-444553540000");
   } else {
      overlayImg.src = "http://static.visitlondon.com/images/checking-rates2.gif";
      overlayImg.alt="";
      overlayImg.width="400";
      overlayImg.height="250";
      overlay.appendChild(overlayImg);
   }
   if (BrowserDetect.browser == "Explorer") {
      for (k = tags.length; k > 0; ) {
         ar = document.getElementsByTagName(tags[--k]), cc = null;
         for (i = ar.length; i > 0;) {
            cc = ar[--i];
            cc.style.visibility = "hidden";
         }
      }
   }
   document.getElementById('search-overlay').className = "search-overlay2";
}
/* ################ End Search  ################ */

/* ################ Map  ################ */
function zoomMap() {
   var el = document.getElementById('venueMap');
   if (el.src.indexOf('scale=0.5') != -1) { el.src = el.src.replace('scale=0.5', 'scale=1.0');}
   else { el.src = el.src.replace('scale=1.0','scale=0.5');}
}

function scrollMap(direction) {
   var i, offsetx = 0, offsety = 0, newURL = "http://maps.visitlondon.com/?", newx, newy, elArray = document.getElementById('venueMap').src.split(/[\?\&]/);
   for (i = 0; i < elArray.length; i++) {
      if (elArray[i].indexOf('offset-x') != -1 ) { offsetx = elArray[i].substring(9);}
      else if (elArray[i].indexOf('offset-y') != -1 ) { offsety = elArray[i].substring(9);}
   }
   switch (direction) {
      case 'n'    : newx=offsetx;  newy=+offsety+500; break;
      case 'e'    : newx=+offsetx+500;  newy=offsety; break;
      case 'w'    : newx=+offsetx-500;  newy=offsety; break;
      case 's'    : newx=offsetx;  newy=+offsety-500; break;
      case 'ne'   : newx=+offsetx+500;  newy=+offsety+500; break;
      case 'nw'   : newx=+offsetx-500;  newy=+offsety+500; break;
      case 'se'   : newx=+offsetx+500;  newy=+offsety-500; break;
      case 'sw'   : newx=+offsetx-500;  newy=+offsety-500; break;
      default: newx=offsetx;  newy=offsety;
   }
   for (i = 1; i < elArray.length; i++) {
      if (elArray[i].indexOf('offset-x') == -1 && elArray[i].indexOf('offset-y') == -1 ) {newURL+= elArray[i]+'&';}
   }
   newURL+= 'offset-x='+newx+'&offset-y='+newy;
   document.getElementById('venueMap').src = newURL;
}
/* ################ End Map  ################ */


/* ################ Flash ################ */
function transcriptLink() {
   var theTranscript = "http://static.visitlondon.com/assets/video/transcripts/"+whichVid+".html";
   window.open(theTranscript, 'trans', 'width=550, height=550, location=no, scrollbars=yes');
   return false;
}
function drawTV(tagID, myMovie) {
var w, h, container = document.getElementById(tagID), obj = document.createElement("object"), em = document.createElement("embed"), trans = document.createElement("a"), transPic = document.createElement("img"), transText = document.createTextNode('read the transcript');
if (BrowserDetect.browser == "Explorer") { w = '540'; h = '352'; } else { w = '240'; h = '184'; }
   if(hasRightVersion && document.getElementById(tagID).innerHTML) {
      obj.setAttribute("codebase","http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0");
      obj.setAttribute("width",w);
      obj.setAttribute("height",h);
      obj.id="vidO";
      obj.appendChild(createParam("allowScriptAccess","always"));
      obj.appendChild(createParam("movie",myMovie));
      obj.appendChild(createParam("play","true"));
      obj.appendChild(createParam("wmode","transparent"));
      obj.appendChild(createParam("quality","high"));
      obj.appendChild(createParam("scale","noscale"));
      obj.appendChild(createParam("salign","rt"));
      if(!window.ActiveXObject && BrowserDetect.browser != "Opera"){
         em.id="vidE";
         em.setAttribute("src",myMovie);
         em.setAttribute("quality","high");
         em.setAttribute("wmode","transparent");
         em.setAttribute("width",w);
         em.setAttribute("height",h);
         em.setAttribute("play","true");
         em.setAttribute("allowscriptaccess","always");
         em.setAttribute("type","application/x-shockwave-flash");
         em.setAttribute("pluginspage","http://www.macromedia.com/go/getflashplayer");
         em.setAttribute("salign","rt");
         em.setAttribute("scale","noscale");
         obj.appendChild(em);
      }
      removeChildren(container);
      container.appendChild(obj);
      obj.setAttribute("classid","clsid:d27cdb6e-ae6d-11cf-96b8-444553540000");
      if (tl === true) {
         trans.setAttribute("href","#");
         trans.id="transcriptLink";
         transPic.setAttribute("src","http://static.visitlondon.com/images/icons/transcript.gif");
         transPic.setAttribute("alt","");
         trans.appendChild(transPic);
         trans.appendChild(transText);
         container.appendChild(trans);
         document.getElementById("transcriptLink").style.display = "block";
         document.getElementById("transcriptLink").style.marginTop = "188px";
         document.getElementById("transcriptLink").style.marginBottom = "10px";
         if(window.addEventListener)   {
            document.getElementById("transcriptLink").addEventListener('click', transcriptLink, false);
         } else if(window.attachEvent) {
            document.getElementById("transcriptLink").attachEvent('onclick', transcriptLink, false);
         }
      }
   }
}

function goBig() {
   var el, node, dHeight, i;
   if (BrowserDetect.browser != "Explorer") {
      if(document.getElementById('vidO')) {document.getElementById('vidO').style.width = "540px"; document.getElementById('vidO').style.height = "352px"; }
      if(document.getElementById('vidE')) { document.getElementById('vidE').style.width = "540px"; document.getElementById('vidE').style.height = "352px";}
      if(document.getElementById('prod-desc')) {
         el = document.getElementById('prod-desc');
         for (i = 0; i < el.childNodes.length; i++) {
            node = el.childNodes[i];
            if (node.nodeName == 'DIV' && node.className == 'panel-middle' ) {
               descTempHeight = getHeight(node);
               dHeight = +descHeight.substring(0,descTempHeight.indexOf('px'));
               if (dHeight < 350) {
                  node.style.height = "350px";
                  disableExt = 'true';
               }
            }
         }
      }
   }
}

function goSmall() {
   var el, i, node;
   if (BrowserDetect.browser != "Explorer") {
      if(document.getElementById('vidO')) {document.getElementById('vidO').style.width = "240px"; document.getElementById('vidO').style.height = "184px";}
      if(document.getElementById('vidE')) {document.getElementById('vidE').style.width = "240px"; document.getElementById('vidE').style.height = "184px"; }
      if(document.getElementById('prod-desc')) {
         el = document.getElementById('prod-desc');
         for (i = 0; i < el.childNodes.length; i++) {
            node = el.childNodes[i];
            if (node.nodeName == 'DIV' && node.className == 'panel-middle' ) {
               node.style.height = descTempHeight;
               disableExt = 'false';
            }
         }
      }
   }
}

function drawMovie(tagID, myMovie, w, h) {
var container = document.getElementById(tagID) ,obj = document.createElement("object"), em = document.createElement("embed");
      if(hasRightVersion && document.getElementById(tagID).innerHTML) {
         obj.setAttribute("codebase","http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0");
         obj.setAttribute("width",w);
         obj.setAttribute("height",h);
         obj.id="vidO";
         obj.appendChild(createParam("allowScriptAccess","always"));
         obj.appendChild(createParam("movie",myMovie));
         obj.appendChild(createParam("play","true"));
         obj.appendChild(createParam("wmode","transparent"));
         obj.appendChild(createParam("quality","high"));
         if(!window.ActiveXObject && BrowserDetect.browser != "Opera"){
            em.id="vidE";
            em.setAttribute("src",myMovie);
            em.setAttribute("quality","high");
            em.setAttribute("wmode","transparent");
            em.setAttribute("width",w);
            em.setAttribute("height",h);
            em.setAttribute("play","true");
            em.setAttribute("menu","false");
            em.setAttribute("allowscriptaccess","always");
            em.setAttribute("type","application/x-shockwave-flash");
            em.setAttribute("pluginspage","http://www.macromedia.com/go/getflashplayer");
         obj.appendChild(em);
         }
         removeChildren(container);
         container.appendChild(obj);
         obj.setAttribute("classid","clsid:d27cdb6e-ae6d-11cf-96b8-444553540000");
   }
}

function tutMovieHome() {
   var flashURL = "http://static.visitlondon.com/assets/homepage/tut-slot.swf";
   drawMovie("hpT", flashURL, '442', '182');
}

function flashBigDance() {
   var flashURL = "http://static.visitlondon.com/micro/big-dance/swfs/header.swf?CountdownDay=" + CountdownDay +"&CountdownHour=" + CountdownHour + "&CountdownMinute=" + CountdownMinute;
   drawMovie("bdf", flashURL, '769', '114')
}

function flashBigDancePanel() {
   var flashURL = "http://static.visitlondon.com/micro/big-dance/swfs/big-dance-video-player.swf";
   drawMovie("bdp", flashURL, '537', '327');
}
/* ################ End Flash ################ */

/* ################ Adverts ################ */
function adLink(adSection, adSize) {
   document.write('<scr'+'ipt src="http://ad.uk.doubleclick.net/adj/VisitLondon.com/'+adSection+';'+adlink_dcopt+'tile='+adlink_tile+';sz='+adSize+';ord='+adlink_randomnumber+'?"><\/scr'+'ipt>');
}
/* ################ End Adverts  ################ */

/* ################ Trade Doubler ################ */
function setCookie(name, value, expires, path, domain, secure) {
   if ( expires ) {
      expires = expires * 1000 * 60 * 60 * 24;
   }
   var today = new Date();
   today.setTime( today.getTime() );
   var expires_date = new Date( today.getTime() + (expires) );
   document.cookie= name + "=" + escape(value) + ((expires) ? "; expires=" + expires_date.toGMTString() : "") + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "");
}

function getVar(name) {
   var name_index, value, end_of_value, space, get_string = document.location.search, return_value = '';
   do {
      name_index = get_string.indexOf(name + '=');
      if(name_index != -1) {
         get_string = get_string.substr(name_index + name.length + 1,get_string.length - name_index);
         end_of_value = get_string.indexOf('&');
         if(end_of_value != -1) {
            value = get_string.substr(0, end_of_value);
         } else   {
            value = get_string;
         }
         if(return_value === '' || value === '') {
            return_value += value;
         } else {
            return_value += ', ' + value;
         }
      }
   }
   while(name_index != -1) {
      space = return_value.indexOf('+');
   }
   while(space != -1) {
      return_value = return_value.substr(0, space) + ' ' + return_value.substr(space + 1, return_value.length);
      space = return_value.indexOf('+');
   }
   return(return_value);
}
function getCookie(name) {
   var dc = document.cookie, prefix = name + "=", begin = dc.indexOf("; " + prefix), end = document.cookie.indexOf(";", begin);;
   if (begin == -1) {
      begin = dc.indexOf(prefix);
      if (begin !== 0) {return null;}
   } else {
      begin += 2;
   }
   if (end == -1) {
      end = dc.length;
   }
   return unescape(dc.substring(begin + prefix.length, end));
}
function writeTDtag() {
   var leadNumber = Math.round((new Date().getTime() * Math.random())), reportInfo = "";
   reportInfo = "f2="+ProductID;
   reportInfo = escape(reportInfo);
   document.write("<img src='http://tbl.tradedoubler.com/report?organization="+organization+"&event="+event+"&leadNumber="+leadNumber+"&orderValue=1&tduid="+tduid+"&reportInfo="+reportInfo+"' height='1' width='1' alt='' />");
}
/* ################ End Trade Doubler ################ */

/* ################ Start DART ################ */
function writeDart(src,type,cat,subd1,subd0,act) {
   var s0 = "ad.", s1 = "", ac = "activity", axel = Math.random()+"", a = axel * 10000000000000;
   if (subd0) {s0 = subd0 + ".";}
   if (subd1) {s1 = subd + ".";}
   if (act) {ac = act;}
   document.write('<img src="http://'+ s0 + s1 +'doubleclick.net/' + ac + ';src='+src+';type='+type+';cat='+cat+';ord=1;num='+ a + '?" width="1" height="1" alt="" />');
}
/* ################ End DART ################ */

/* ################ Loader ################ */
/* Leave this last */
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    };
  }
}

function init() {
   if (arguments.callee.done) {return;}
   arguments.callee.done = true;
   if (_timer) {clearInterval(_timer);}
   setupTabs();
   setupHidden();
   setupDescriptionExpander();
   setupUserReviews();
   setupLangs();
   topmenuHover();
   setupRollovers();
   if (whichVid && whichVid !== ""){
      detectFlash();
      vidUrl = "http://static.visitlondon.com/assets/video/vl-video-player.swf?xmltouse=" + whichVid + ".xml";
      drawTV("video", vidUrl);
   }
}
/* for Mozilla/Opera9 */
if (document.addEventListener) {
   document.addEventListener("DOMContentLoaded", init, false);
}
/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
   document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
   var script = document.getElementById("__ie_onload");
   script.onreadystatechange = function() {
      if (this.readyState == "complete") {
         init(); // call the onload handler
      }
   };
@else @*/
/*@end @*/
/* for Safari */
if (/WebKit/i.test(navigator.userAgent)) { // sniff
   var _timer = setInterval(function() {
      if (/loaded|complete/.test(document.readyState)) {
         init(); // call the onload handler
      }
   }, 10);
}
/* for other browsers */
window.onload = init;

