var PhotoViewer =
{
  init: function() {
    if (document.getElementById("hwGuidesPhotoViewer") && photoViewerPics) {
      PhotoViewer.currentIndex = 0;
      PhotoViewer.maxIndex = photoViewerPics.length-1;

      Core.addEventListener(document.getElementById("hwGuidesPhotoViewerRightControl"), "click", PhotoViewer.nextPic);
      Core.addEventListener(document.getElementById("hwGuidesPhotoViewerLeftControl"), "click", PhotoViewer.prevPic);

      PhotoViewer.setImgIndex(PhotoViewer.currentIndex);    
    }

    if (document.getElementById("hwGuidesViewLarger")) {
      Core.addEventListener(document.getElementById("hwGuidesViewLarger"), "click", PhotoViewer.openWindow);
    }
  },

  openWindow: function(event) {
    var oWin = window.open(this.getAttribute('href'), "name" ,"menubar=1,resizable=1,width=430,height=460", '_blank');

    if (oWin && oWin.focus) {
      oWin.focus();
    }

    Core.preventDefault(event);
  },

  setImgIndex: function(index) {
    if (document.getElementById("hwGuidesPhotoViewerImgIndex")) {
      var index_str = ++index + " of " + photoViewerPics.length;
      document.getElementById("hwGuidesPhotoViewerImgIndex").innerHTML = index_str;
    }
  },

  setPic: function(index) {
    // set the pic
    if (photoViewerPics && photoViewerPics[index]) {
      var photoViewerPic = document.getElementById("photoViewerPic");
      if (photoViewerPic) {
        photoViewerPic.src = photoViewerPics[index];
      }
    }
  },

  prevPic: function(event) {
    PhotoViewer.currentIndex--;

    if (PhotoViewer.currentIndex <=0)
      PhotoViewer.currentIndex = 0;
    
    PhotoViewer.setPic(PhotoViewer.currentIndex);
    PhotoViewer.setImgIndex(PhotoViewer.currentIndex);

    Core.preventDefault(event);
  },

  nextPic: function(event) {
    PhotoViewer.currentIndex++;

    if (PhotoViewer.currentIndex >= PhotoViewer.maxIndex)
      PhotoViewer.currentIndex = PhotoViewer.maxIndex;

    PhotoViewer.setPic(PhotoViewer.currentIndex);
    PhotoViewer.setImgIndex(PhotoViewer.currentIndex);

    Core.preventDefault(event);
  }
};

var PopularPlaces =
{
  init: function() {
    
    if (document.getElementById("hwGuidesPopularPlaces") && document.getElementById("hwGuidesPopularPlacesPagingNav")) {

      var links = document.getElementById("hwGuidesPopularPlacesPagingNav").getElementsByTagName("a");
      var hostels = document.getElementById("hwGuidesPopularPlaces").getElementsByTagName("li");
      
      for (var i=0; i<links.length; i++) {
        if (hostels[i]) {
          Core.addClass(hostels[i], "hwGuidesHideHostel");
          links[i]._hostel = hostels[i];
          Core.addEventListener(links[i], "click", PopularPlaces.clickHandler);
        }
      }
      
      // set initial state after page load
      Core.removeClass(hostels[0], "hwGuidesHideHostel");
      Core.addClass(hostels[0], "hwGuidesShowHostel");
      Core.addClass(links[0].parentNode, "currentPopularPlace");

    }
  },
  
  clearClasses: function() {
    
    var pages = document.getElementById("hwGuidesPopularPlacesPagingNav").getElementsByTagName("li");
    var hostels = document.getElementById("hwGuidesPopularPlaces").getElementsByTagName("li");
    
    for (var i=0; i<pages.length; i++) {
      pages[i].className = "";
      hostels[i].className = "hwGuidesHideHostel";
    }
    
  },
  
  clickHandler: function(event) {
    PopularPlaces.clearClasses();
    
    Core.addClass(this.parentNode, "currentPopularPlace");
    Core.addClass(this._hostel, "hwGuidesShowHostel");
    Core.removeClass(this._hostel, "hwGuidesHideHostel");
    Core.addClass(this._hostel, "hwGuidesShowHostel");
    
    Core.preventDefault(event);
  }
  
};

var PocketGuideTreeNav =
{
  init: function() {
    
    if (document.getElementById("hwGuidesPocketGuideTreeNav")) {
      
      var continents = Core.getElementsByClass("hwGuidesPocketGuideContinent");
      var related = Core.getElementsByClass("hwGuidesPocketGuideRelatedGuides");
      
      if (continents.length = related.length) {
        for (var i=0; i<continents.length; i++) {
          continents[i]._related = related[i];
          // set initial state
          Core.addClass(continents[i], "hwGuidesPocketGuideNavItemClosed");
          Core.addClass(related[i], "hwGuidesHideBlock");
          
          Core.addEventListener(continents[i], "click", PocketGuideTreeNav.clickHandler);
        }
        
      }
      
    }
  },
  
  toggleRelated: function(continent) {
    
    if (continent._related) {

      if (Core.hasClass(continent, "hwGuidesPocketGuideNavItemClosed")) {
        Core.removeClass(continent, "hwGuidesPocketGuideNavItemClosed");
      } else {
        Core.addClass(continent, "hwGuidesPocketGuideNavItemClosed");
      }

      var related = continent._related;
      if (Core.hasClass(related, "hwGuidesHideBlock")) {
        Core.removeClass(related, "hwGuidesHideBlock");
      } else {
        Core.addClass(related, "hwGuidesHideBlock");
      }
    }
    
  },
  
  clickHandler: function(event) {
    PocketGuideTreeNav.toggleRelated(this);
    Core.preventDefault(event);
  }
  
};

var Accordion =
{
  init: function() {
    var accordions = Core.getElementsByClass("hwGuidesAccordianPanel");

    for (var i = 0; i < accordions.length; i++) {
      var folds = accordions[i].childNodes;
    
      for (var j = 0; j < folds.length; j++) {
        // make sure we have a element node
        if (folds[j].nodeType == 1) {
          // collapse the fold
          Accordion.collapse(folds[j]);
          // get a handle on the title link
          var foldLinks = folds[j].getElementsByTagName("a");
          var foldTitleLink = foldLinks[0];
      
          Core.addEventListener(foldTitleLink, "click", Accordion.clickListener);
        }
      }
    }
  },

  collapse: function(fold) {
    Core.removeClass(fold, "hwGuidesExpanded");
    Core.addClass(fold, "hwGuidesCollapsed");
  },

  collapseAll: function(accordion) {
    var folds = accordion.childNodes;
    for (var i = 0; i < folds.length; i++) {
      if (folds[i].nodeType == 1) {
        Accordion.collapse(folds[i]);
      }
    }
  },

  expand: function(fold) {
    Accordion.collapseAll(fold.parentNode);
    Core.removeClass(fold, "hwGuidesCollapsed");
    Core.addClass(fold, "hwGuidesExpanded");
  },

  clickListener: function(event) {
    var fold = this.parentNode.parentNode;

    if (Core.hasClass(fold, "hwGuidesCollapsed")) {
      Accordion.expand(fold);
    } else {
      Accordion.collapse(fold);
    }

    Core.preventDefault(event);
  }
};

var StarRating =
{
  init: function() {
    if (document.getElementById("hwGuidesRateTrip")) {
      var inputs = new Array("bad", "ok", "average", "good", "brilliant");
      var ratings = new Array("ratingOneStar", "ratingTwoStar", "ratingThreeStar", "ratingFourStar", "ratingFiveStar");
      var stars = document.getElementById("hwGuidesRateTrip").getElementsByTagName("a");

      if (stars) {
        for (var i=0; i<stars.length; i++) {
          if (ratings[i] && inputs[i]) {
            stars[i]._idName = inputs[i];
            stars[i]._className = ratings[i];
            Core.addEventListener(stars[i], "click", StarRating.clickHandler);
          }
        }
      }
    }
  },

  setStarRating: function(theLink) {
    var ul = document.getElementById("hwGuidesRateTrip").getElementsByTagName("ul")[0];
    ul.className = theLink._className;
    var inputElement = document.getElementById(theLink._idName);

    if (inputElement) {
      inputElement.checked = true;
    }
  },

  clickHandler: function(event) {
    StarRating.setStarRating(this);
    Core.preventDefault(event);
  }
};

var NewWindowPhotoViewer =
{
    
  init: function() {
    var ol = document.getElementsByTagName("ol")[0];

    if (ol) {
      NewWindowPhotoViewer.picLinks = ol.getElementsByTagName("a");

      if (NewWindowPhotoViewer.picLinks) {
        for (var i=0; i<NewWindowPhotoViewer.picLinks.length; i++) {
          Core.addEventListener(NewWindowPhotoViewer.picLinks[i], "click", NewWindowPhotoViewer.clickHandler);
        }
      }
      
      NewWindowPhotoViewer.showPic(NewWindowPhotoViewer.picLinks[0]);
    }
  },

  clearCurrent: function() {
    for (var i=0; i<NewWindowPhotoViewer.picLinks.length; i++) {
      if (Core.hasClass(NewWindowPhotoViewer.picLinks[i], "current")) {
        Core.removeClass(NewWindowPhotoViewer.picLinks[i], "current");
      }  
    }
  },

  showPic: function(whichPic) {
     if (document.getElementById("hwGuidesImgPlaceholder")) {
      NewWindowPhotoViewer.clearCurrent();
      document.getElementById("hwGuidesImgPlaceholder").src = whichPic.href;

      if (whichPic.title) {
         document.getElementById("hwGuidesImgCaption").childNodes[0].nodeValue = whichPic.title;
      }

      Core.addClass(whichPic, "current");
    }
  },
  
  clickHandler: function(event) {
    NewWindowPhotoViewer.showPic(this);
    Core.preventDefault(event);
  }
};

var PrintThisPage =
{
	init: function() {
		
		//Make sure the browser supports print function
		if (window.print) {
			if (document.getElementById("hwGuidesVideoFactsWrap")) {
				var h2Elem = document.getElementById("hwGuidesVideoFactsWrap").getElementsByTagName("h2")[0];
				if (h2Elem) {
					//create the print button
					var printBtn = document.createElement('a');
					printBtn.className = "hwGuidesPrintBtn";
					printBtn.href = "#";
					printBtn.appendChild(document.createTextNode("Print this page"));
					Core.addEventListener(printBtn, "click", PrintThisPage.clickHandler);
					h2Elem.appendChild(printBtn);
					
				}
			}
		}
	},
	
	clickHandler: function(event) {
		window.print();
		Core.preventDefault(event);
	}
	
};

var TrustRating =
{
		init: function() {
			if (document.getElementById("hwGuidesCityReviewListing")) {
				
				var hwGuidesCityReviewListing = document.getElementById("hwGuidesCityReviewListing");
				var trMembers = Core.getElementsByClass("hwGuidesTRMember");
				var reviewPopUps = Core.getElementsByClass("hwGuidesCityReviewPopup");
				
				if (trMembers && trMembers.length > 0) {
					for (var i=0; i<trMembers.length; i++) {
						if (reviewPopUps[i]) {
							trMembers[i]._popUp = reviewPopUps[i];
							Core.addEventListener(trMembers[i], "mouseover", TrustRating.showListener);
							Core.addEventListener(trMembers[i], "mouseout", TrustRating.hideListener);
							
						}
						
					}
					
				}
			}
			
		},
		
		findPos: function(elem) {
			var curleft = curtop = 0;
			
			if (elem.offsetParent) {
				do {
					curleft += elem.offsetLeft;
					curtop += elem.offsetTop;
				} while (elem = elem.offsetParent);

				return [curleft,curtop];
			}
			
		},
		
		show: function(elem) {
		
			//pos is calculated relative to the browser window
			var pos = TrustRating.findPos(elem);
			//get the y pos
			var yPos = pos[1];
			//offset = height of site header - height of link
			var offset = 115;
			yPos-= offset;
			
			elem._popUp.style.left = "10px";
			elem._popUp.style.top = yPos  + "px";
		
		},
		
		hide: function(elem) {
			elem._popUp.style.left = "-9999px";
			elem._popUp.style.top = "0px";
		},
		
		showListener: function(event) {
			TrustRating.show(this);
			//alert(pos[0] + ", " + pos[1]);
			//alert (this._popUp.className);
			//alert (this._popUp.style.top + ", " + this._popUp.style.left);
			Core.preventDefault(event);
		},
		
		hideListener: function(event) {
			TrustRating.hide(this);
		}
		
};

var FeaturedTours =
{
		init: function() {
			if (document.getElementById("hwGuidesFeaturedToursNav") && document.getElementById("hwGuidesFeaturedToursListing")) {
				var featToursNav = document.getElementById("hwGuidesFeaturedToursNav");
				var links = featToursNav.getElementsByTagName("a");
				
				var featTours = document.getElementById("hwGuidesFeaturedToursListing");
				var tours = featTours.getElementsByTagName("li"); 
				
				for (var i=0; i<links.length; i++) {
					if (tours[i]) {
						links[i]._tour = tours[i];
					}
					
					Core.addEventListener(links[i], "click", FeaturedTours.clickListener);
				}
				
			}
			
		},
		
		clearSelected: function() {
			
			var featToursNav = document.getElementById("hwGuidesFeaturedToursNav");
			var links = featToursNav.getElementsByTagName("a");
				
			var featTours = document.getElementById("hwGuidesFeaturedToursListing");
			var tours = featTours.getElementsByTagName("li");
			
			for (var i=0; i<links.length; i++) {
			
				if (Core.hasClass(links[i], "hwGuidesFeaturedTourSelected")) {
					Core.removeClass(links[i], "hwGuidesFeaturedTourSelected");
				}
				
				if (Core.hasClass(tours[i], "selectedTour")) {
					Core.removeClass(tours[i], "selectedTour");
				}
				
			}
			
			
		},
		
		handleFeatTourClick: function(elem) {
			FeaturedTours.clearSelected();
			Core.addClass(elem, "hwGuidesFeaturedTourSelected");
			Core.addClass(elem._tour, "selectedTour");
			
		},
		
		clickListener: function(event) {
			FeaturedTours.handleFeatTourClick(this);
			Core.preventDefault(event);
		}
		
};

var CurrencyBtn = 
{
	init: function() {
			if (document.getElementById("hwGuidesToursListWidget")) {
				
				var widget = document.getElementById("hwGuidesToursListWidget");
				
				var btns = widget.getElementsByTagName("a");
				
				if (btns && btns.length > 0) {
					for (var i=0; i<btns.length; i++) {
						Core.addEventListener(btns[i], "click", CurrencyBtn.clickListener);
					}
				}
				
			}
			
		},
		
		clearSelected: function() {
			var btns = document.getElementById("hwGuidesToursListWidget").getElementsByTagName("a");
				
			for (var i=0; i<btns.length; i++) {
				if (Core.hasClass(btns[i], "hwGuidesCurrencyBtnSelected")) {
					Core.removeClass(btns[i], "hwGuidesCurrencyBtnSelected");
				}
			}
			
		},
		
		show: function(className) {
			
			var elems = Core.getElementsByClass(className);
			
			if (elems && elems.length >0) {
				for (var i=0; i<elems.length; i++) {
					if (Core.hasClass(elems[i], "hwTourHidePrice")) {
						Core.removeClass(elems[i], "hwTourHidePrice");
					}
				}
			}
			
		},
		
		hide: function(className) {
			
			var elems = Core.getElementsByClass(className);
			
			if (elems && elems.length >0) {
				for (var i=0; i<elems.length; i++) {
					if (!Core.hasClass(elems[i], "hwTourHidePrice")) {
						Core.addClass(elems[i], "hwTourHidePrice");
					}
				}
			}
			
		},
		
		showEuro: function() {
			CurrencyBtn.hide("hwTourDollarPrice");
			CurrencyBtn.hide("hwTourPoundPrice");
			CurrencyBtn.hide("hwTourCurrPrice");
			
			CurrencyBtn.show("hwTourEuroPrice");
		},
		
		showPound: function() {
			CurrencyBtn.hide("hwTourDollarPrice");
			CurrencyBtn.hide("hwTourEuroPrice");
			CurrencyBtn.hide("hwTourCurrPrice");
			
			CurrencyBtn.show("hwTourPoundPrice");
		},
		
		showDollar: function() {
			CurrencyBtn.hide("hwTourPoundPrice");
			CurrencyBtn.hide("hwTourEuroPrice");
			CurrencyBtn.hide("hwTourCurrPrice");
			
			CurrencyBtn.show("hwTourDollarPrice");
		},
		
		handleBtnClick: function(elem) {
			
			if (Core.hasClass(elem, "hwGuidesEuroBtn")) {
				CurrencyBtn.showEuro();
			} else if (Core.hasClass(elem, "hwGuidesPoundBtn")) {
				CurrencyBtn.showPound();
			} else if (Core.hasClass(elem, "hwGuidesDollarBtn")) {
				CurrencyBtn.showDollar();
			}
			
			CurrencyBtn.clearSelected();
			Core.addClass(elem, "hwGuidesCurrencyBtnSelected");
			
		},
		
		clickListener: function(event) {
			CurrencyBtn.handleBtnClick(this);
			Core.preventDefault(event);
		}
};

var TourTabs = 
{
	init: function() {
			if (document.getElementById("hwTourDetailTabs")) {
				
				var links = document.getElementById("hwTourDetailTabs").getElementsByTagName("a");
			
				var contentBlocks = Core.getElementsByClass("hwTourDetailPanel");
				
				if (links.length > 0 && contentBlocks.length > 0 ) {
					
					/*lengthVar = links.length;*/
					
					/*if ( document.theForm.ShowReviews.value == "1" ) {
					  lengthVar = (links.length);
					} else {
					  lengthVar = (links.length); // modified from 'links.length - 1' in order to make the Cancelation policy tab to work on Tours Page -> Ivan
					}
					
					if ( lengthVar < 2 ) {
					  lengthVar = 2;	
					}*/
					
					for (var i=0; i < links.length; i++) { // it was lengthVar not link.length
	
						if (contentBlocks[i]) {
							links[i]._index = i;
							links[i]._content = contentBlocks[i];
						}
						
						Core.addEventListener(links[i], "click", TourTabs.clickListener);
					}
					
					//set initial page state
					if ( document.theForm.ShowReviews.value != "1" ) {
					  Core.addClass(contentBlocks[0], "hwGuidesShowBlock");
					  for (var i=1; i<contentBlocks.length; i++) {
						Core.addClass(contentBlocks[i], "hwGuidesHideBlock");
					  }
				    }
					
					
					
				}
				
			}
			
			var links = document.getElementById("itin").getElementsByTagName("a");
			for (var i=0; i<links.length; i++) {
			  
		     if (contentBlocks[1]) {
			    links[0]._index = 1;
			    links[0]._content = contentBlocks[1];
			  }	
				
			  Core.addEventListener(links[i], "click", TourTabs.clickLinkListener);
		    }
		    
		    var links = document.getElementById("itin2").getElementsByTagName("a");
			for (var i=0; i<links.length; i++) {
			  
		     if (contentBlocks[1]) {
			    links[0]._index = 1;
			    links[0]._content = contentBlocks[1];
			  }	
				
			  Core.addEventListener(links[i], "click", TourTabs.clickLinkListener);
		    }

      if (document.getElementById("ReviewsLink")) {
        var links = document.getElementById("ReviewsLink").getElementsByTagName("a");

        for (var i=0; i<links.length; i++) {
          if (contentBlocks[2]) {
            links[0]._index = 2;
            links[0]._content = contentBlocks[2];
          }

          Core.addEventListener(links[i], "click", TourTabs.clickReviewListener);
        }
      }
		},
		
		removeCurrentTab: function() {

			var tabs = document.getElementById("hwTourDetailTabs").getElementsByTagName("li");
			
			for (var i=0; i<tabs.length; i++) {
				if (Core.hasClass(tabs[i], "hwTourCurrTab")) {
					Core.removeClass(tabs[i], "hwTourCurrTab");
				}
			}
			
		},
		
		hideTabContents: function() {
			var contentBlocks = Core.getElementsByClass("hwTourDetailPanel");
			
			for (var i=0; i<contentBlocks.length; i++) {
				if (!Core.hasClass(contentBlocks[i], "hwGuidesHideBlock")) {
					Core.removeClass(contentBlocks[i], "hwGuidesShowBlock");
					Core.addClass(contentBlocks[i], "hwGuidesHideBlock");
				}
			}
			
		},
		
		showTab: function(tab) {
			TourTabs.removeCurrentTab();
			var li = document.getElementById("hwTourDetailTabs").getElementsByTagName("li")[tab._index];
			Core.addClass(li, "hwTourCurrTab");
			
			TourTabs.hideTabContents();
			Core.removeClass(tab._content, "hwGuidesHideBlock");
			Core.addClass(tab._content, "hwGuidesShowBlock");
			
		},
		
		showLinkTab: function(tab, i) {
			TourTabs.removeCurrentTab();
			var li = document.getElementById("hwTourDetailTabs").getElementsByTagName("li")[i];
			Core.addClass(li, "hwTourCurrTab");
			
			TourTabs.hideTabContents();
			Core.removeClass(tab._content, "hwGuidesHideBlock");
			Core.addClass(tab._content, "hwGuidesShowBlock");
			
		},
		
		clickListener: function(event) {
			TourTabs.showTab(this);
			//Core.preventDefault(event);
		},
		
		clickLinkListener: function(event) {
			//alert("here");
			TourTabs.showLinkTab(this, 1);
			//Core.preventDefault(event);
		},
		
		clickReviewListener: function(event) {
			//alert("here");
			TourTabs.showLinkTab(this, 2);
			//Core.preventDefault(event);
		}
}



