﻿/*

Wonderful Copenhagen
JavaScript functions

Author: Creuna Danmark A/S / www.creuna.dk
Copyright: 2010, Creuna Danmark A/S. All rights reserved

-----------------------------------------------------------------------*/

if (!WoCo)
{
    var WoCo = {};
}

// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
jQuery.fn.log = function (msg)
{
   /* if (!("console" in window) || !("firebug" in console))
    {
        var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
        window.console = {};
        for (var i = 0; i < names.length; ++i) window.console[names[i]] = function () { };
    }
    */

    return this;
};

// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: first parameter could be a selector, so EnsureMatches act as a .find method.
jQuery.fn.EnsureMatches = function (errorMessage)
{   /// <summary>Ensure jQuery array has one or more matches.</summary> 

    if (!jQuery(this).length)
    {
        var defaultText = "Selector: \"" + this.selector + "\" did not match any elements.";
        jQuery.error(errorMessage || defaultText);
    }

    return this;
};

// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
jQuery(document).ready(function ()
{   /// <summary>document ready function</summary>

    new WoCo.FormHints('.txtInput:not(.subscribeBox .txtInput)');
    new WoCo.Datepicker;
    new WoCo.Carousel('.carousel');
    new WoCo.RoundedBox('.roundedBox');
    new WoCo.RoundingBoxes;
    new WoCo.SuggestBoxes('.suggestBox');
    new WoCo.Tools;
    new WoCo.BookAccomodation('.box.accomodation');
    new WoCo.Header;
    new WoCo.PicturesBox('.picturesBox');
    new WoCo.NewsletterBox('.subscribeBox.simple');
    new WoCo.NewsletterBox('.subscribeBox.personalInfo');
    new WoCo.GATracking();
    new WoCo.Currency('a.currency');
    new WoCo.SearchBoxFix('fieldset');
    new WoCo.EditMode;
    new WoCo.SCFFix;
    new WoCo.Stuff();

    venue.updateHotelsAmount();
});

// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: first parameter is selector for book accommodation box
WoCo.BookAccomodation = function (selector) {   /// <summary>book accommodation box js functionality</summary>

    var rooms, lblRooms, roomsArea;
    var adultsAmount = 9;

    this.BookAccomodation = function () {
        if (!jQuery(selector).length) {
            return;
        }

        rooms = jQuery(selector + ' select.rooms');
        lblRooms = jQuery(selector + ' .lblRooms').text();
        lblAdults = jQuery(selector + ' .lblAdults').text();
        roomsArea = jQuery(selector + ' .roomsArea');
        btnSend = jQuery(selector + ' .btnWrapper input');

        new WoCo.FormHints('.accomodation .field');

        rooms.change(function () { // rooms dropdown list is changed
            var amount = rooms.val();
            var htmlForOne = '';
            for (i = 0; i < amount; i++) {
                htmlForOne += "<div class='fieldRow'><div class='lefter'>" + lblRooms + " " + (i + 1) + "</div><div class='righter'><label>" + lblAdults + "</label><select class=\"roomAdults\" name=\"roomAdults\">";
                for (j = 1; j <= adultsAmount; j++) {
                    htmlForOne += "<option value=\"" + j + "\">" + j + "</option>";
                }
                htmlForOne += "</select></div></div>";
            }
            if (!htmlForOne) {
                roomsArea.text('');
            }
            else {
                roomsArea.html(htmlForOne);
            }
        });

        btnSend.click(function () { // send button is clicked
            var acmtype = jQuery(selector + ' select.acmtype').val();
            var acmdate = jQuery(selector + ' input.acmdate').val();
            var isAcmNightsItemSelected = !jQuery(selector + ' select[id*="uiDdNights"] option').eq(0).is(':selected');
            var isAcmRoomsItemSelected = !jQuery(selector + ' select[id*="uiDdRooms"] option').eq(0).is(':selected');

            var alertMsg = jQuery(selector + ' .rules .msg').text();
            var alertStartDateMsg = jQuery(selector + ' .rules .msgStartDate').text();
            var alertNightsMsg = jQuery(selector + ' .rules .msgNights').text();
            var alertRoomsMsg = jQuery(selector + ' .rules .msgRooms').text();

            var rulesSetStr = jQuery.trim(jQuery(selector + ' .rules .mass').text());
            var today = new Date(), limitDay = new Date();
            var fl;
            var tmpRuleArr = new Array();

            var parDateFrom, parDateTo, parShowOn = 'list', parCategoryId;
            var urlToPost = jQuery.trim(jQuery(selector + ' .rules .urlToPost').text());

            if (!isAcmRoomsItemSelected) {
                alert(alertRoomsMsg);
                return false;
            }
            if (!isAcmNightsItemSelected) {
                alert(alertNightsMsg);
                return false;
            }
            if (!acmdate) {
                alert(alertStartDateMsg);
                return false;
            }

            acmdate = acmdate.match(/(.+)\.\s(.+)\.\s(.+)/);
            var chosenDate = new Date(acmdate[2] + ' ' + acmdate[1] + ", " + acmdate[3]);

            rulesSet = rulesSetStr.split('|');
            for (i = 0; i < rulesSet.length; i++) {
                rulesSet[i] = rulesSet[i].split(';');
            }

            fl = false;
            for (i = 0; i < rulesSet.length; i++) {
                tmpRuleForType = rulesSet[i][0].split(':');
                tmpRuleForDate = rulesSet[i][1].split(':');

                limitDay.setDate(today.getDate() + parseInt(tmpRuleForDate[1]));

                if ((acmtype == tmpRuleForType[1]) && (chosenDate <= limitDay)) {
                    fl = true;
                    break;
                }
            }
            if (fl) {
                alert(alertMsg);
                return false;
            }

            /*  */
            var endDate = new Date(chosenDate.getFullYear(), chosenDate.getMonth(), chosenDate.getDate() + parseInt(jQuery(selector + ' select[id*="uiDdNights"]').val()));

            parDateFrom = formatDate(chosenDate);
            parDateTo = formatDate(endDate);
            parCategoryId = parseInt(jQuery(selector + ' select[id*="uiDdAcmType"]').val());

            //making pr parameter
            var pr = '';
            jQuery(selector + ' select.roomAdults').each(function () {
                pr += jQuery(this).val() + 'r';
            });
            pr = pr.slice(0, -1);

            //create fake form to submit data
            var trackingCode = "_gaq.push(['_linkByPost', this]);";
            var fakeForm = '<div id="accForm" class="accessibility"><form action="' + urlToPost + '" method="post" onsubmit="' + trackingCode + '" accept-charset="UTF-8">';
            fakeForm += '<input type="hidden" name="cb_form_datefrom" value="' + parDateFrom + '" />';
            fakeForm += '<input type="hidden" name="cb_form_dateto" value="' + parDateTo + '" />';
            fakeForm += '<input type="hidden" name="cb_showon" value="' + parShowOn + '" />';
            fakeForm += '<input type="hidden" name="cb_categoryId" value="' + parCategoryId + '" />';
            fakeForm += '<input type="hidden" name="p" value="' + pr + '" />';
            fakeForm += '</form></div>';

            jQuery(fakeForm).appendTo('body');
            jQuery('#accForm form').submit();
            return false;
        });

        //format date to needed format yyyy-mm-dd
        var formatDate = function (currDate) {
            var day = currDate.getDate();
            var month = currDate.getMonth() + 1;
            var year = currDate.getFullYear();

            var formattedDate = year + '-' + (month < 10 ? "0" : "") + month + "-" + (day < 10 ? "0" : "") + day;

            return formattedDate;
        };
    };
    this.BookAccomodation();
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.Tools = function ()
{   /// <summary>tools box js (there is only print page link now)</summary>

    var lnkPrint = jQuery('.tools a.print');

    this.Tools = function ()
    {
        lnkPrint.click(function ()
        {
            if (jQuery('#hiddenPdfPageUrl').length)
            { //this element are present only on the My Guide page
                window.location.href = jQuery.trim(jQuery('#hiddenPdfPageUrl').text());
                return false;
            }
            else
            { //all other pages
                window.print();
            }
        });
    };
    this.Tools();
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.EditMode = function ()
{   /// <summary>js only for Sitecore Edit mode</summary>

    var editModeRibbon = jQuery('#scWebEditRibbon').length;

    if (editModeRibbon)
    { //this ribbon is present on the site only in Edit mode
        var fileref = document.createElement("link");
        fileref.setAttribute("rel", "stylesheet");
        fileref.setAttribute("type", "text/css");
        fileref.setAttribute("href", '/css/woco/editmode.css');
        document.getElementsByTagName("head")[0].appendChild(fileref);
    }
};
// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
// TODO: the first parameter is selector for currency converter link
WoCo.Currency = function (selector)
{   /// <summary>currency converter js</summary>

    this.Currency = function ()
    { // currency converter constructor

        var link = jQuery(selector);
        var converterBox = jQuery('.currencyConverter');
        var closeLink = converterBox.find('a.btnClose');

        link.click(function ()
        { // show/hide currency converter

            if (converterBox.is(":visible"))
            {
                converterBox.hide();
            }
            else
            {
                converterBox.show();
            }
            return false;
        });

        closeLink.click(function ()
        { // click event on currency converter link, always close the box

            link.click();
            return false;
        });
    };
    this.Update = function ()
    { // this function is called after currency converter panel update

        var converterBox = jQuery('.currencyConverter');
        var result = converterBox.find('.currencyResult');
        var form = converterBox.find('.currencyForm');
        var tryAgainLink = converterBox.find('a.tryAgain');
        var resultBox = converterBox.find('.resultBox');
        var anotherCurrencySelector = converterBox.find('select');

        if (jQuery.trim(result.text()))
        {
            form.hide();
            resultBox.show();
        }

        tryAgainLink.click(function ()
        { // let's convert again

            result.text('');
            converterBox.find('input[type="text"]').val("1");
            form.show();
            resultBox.hide();
            return false;
        });

        if (jQuery('input[type="radio"][name*="uiRblCurSelector"]:last').is(':checked'))
        { // enable another currency dropdown list if related checkbox is checked by default

            anotherCurrencySelector.attr('disabled', '');
        }

        jQuery('input[type="radio"][name*="uiRblCurSelector"]:last').click(function ()
        { // enable another currency dropdown if related checkbox is checked after page load

            anotherCurrencySelector.attr('disabled', '');
        });
        jQuery('input[type="radio"][name*="uiRblCurSelector"]').not(':last').click(function ()
        { // disable another currency dropdown if related checkbox is unchecked after page load

            anotherCurrencySelector.attr('disabled', 'disabled');
        });
    };
    this.Currency();
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.Header = function ()
{   /// <summary>js for elements in the page header</summary>

    this.Header = function ()
    { // header constructor

        language('.header .quickLinks li.lang');
        megaDropDowns('.topNav > ul > li');
    };
    var megaDropDowns = function (selector)
    { //mega dropdowns (below the top navigation) js

        var topNavLinks = jQuery(selector).children('a');
        topNavLinks.hover(function ()
        {
            jQuery(this).next('.megaDropDownBox').show();
        });
        jQuery(selector).mouseleave(function ()
        {
            jQuery(this).children('.megaDropDownBox').hide();
        });
    };
    var language = function (selector)
    { // language selector functionality in the page header

        var selectorLink = jQuery(selector + '>a');
        var selectorContainer = selectorLink.next('.langSelector');
        var langBox = jQuery(selector);
        selectorLink.hover(function ()
        {
            selectorContainer.show();
        });
        langBox
        .mouseleave(function ()
        {
            selectorContainer.hide();
        });

    };
    this.Header();
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.loading = function ()
{   /// <summary>loading layer that is shown during waiting forpostback everywhere on the site</summary>

    this.show = function (minTime)
    {
        boxHTML = "<div id=\"loading\"></div><div id=\"greyBg\"></div>";
        jQuery('#loading, #greyBg').remove();
        jQuery('.container').append(boxHTML);
    };
    this.hide = function ()
    {
        jQuery('#loading, #greyBg').remove();
    };
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.venueSearch = function ()
{   /// <summary>venue search js</summary>

    this.pageUpdate = function (postbackCount)
    { // update venue search panel

        var selector = '.venueSearch';
        var venueSearchOptionsBox = jQuery('.venueSearchOptionsBox');
        var venueList = jQuery(selector + ' .listPage dl.items');
        var venueListBox = jQuery(selector + ' .listPage');

        var requestedHotelsList = jQuery('#requestedHotelsList ul');
        var requestHotelsButtons = jQuery('.topBarVenueSearch .requestActions');
        var requestHotelsEmptyMsg = jQuery('.topBarVenueSearch #emptyRequestListMessage');

        if (requestedHotelsList.length)
        {
            requestHotelsButtons.show();
            requestHotelsEmptyMsg.hide();
        }
        else
        {
            requestHotelsButtons.hide();
            requestHotelsEmptyMsg.show();
        }

        if (!jQuery.trim(venueSearchOptionsBox.html()))
        {
            venueSearchOptionsBox.hide();
        }
        if (!venueList.length)
        {
            venueListBox.hide();
        }
        else
        {
            venueListBox.show();
        }

        if (postbackCount)
        { // if not the first call of this function
            new WoCo.RoundedBox(selector + ' .roundedBox');
        }

    };
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.cardDealers = function ()
{   /// <summary>card dealers box js</summary>

    this.pageUpdate = function (postbackCount)
    { //update  card dealers panel

        var selector = '.cardDealers';

        if (postbackCount)
        { // if not the first call of this function
            new WoCo.RoundedBox(selector + '.roundedBox');
        }

    };
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.employees = function ()
{   /// <summary>employees page js</summary>

    var list;
    var listOption;
    var listAmountEl;
    var listVals = {};

    this.pageUpdate = function (postbackCount)
    { //update a page after post back when user selects something

        list = jQuery('select[id*=uiDdlDepartments]');
        listID = list.attr('id');
        listOption = jQuery('select[id*=uiDdlDepartments] option');
        listAmountEl = listOption.length;

        for (i = 0; i < listAmountEl; i++)
        {
            listVals[list.find('option').eq(i).val().substr(37)] = i;
        }
        if (postbackCount)
        {
            new WoCo.RoundedBox('.employeesContainer .roundedBox');
        }
        selectList();
    };
    var selectList = function ()
    {
        var ourhash = new WoCo.SiteHash();
        var selectedEl = window.location.hash;
        selectedEl = selectedEl.substr(1);

        if (selectedEl && listVals[selectedEl])
        {
            listOption.eq(listVals[selectedEl]).attr('selected', 'selected');
        }

        list.change(function ()
        {
            if (jQuery(this).val() == '00000000-0000-0000-0000-000000000000')
            {
                window.location.hash = "#allemployees";
            }
            else
            {
                window.location.hash = jQuery(this).val().substr(37);
            }
        });

    };
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.place = function ()
{   /// <summary></summary>

    var minTime = 2000;
    var runningTimerId = 0;
    var loading = null;
    var donePostback = false;
    var isClearedTimeout = true;

    this.place = function ()
    {
        loading = new WoCo.loading;
        loadFirstTab();
    };
    this.pageUpdate = function (postbackCount)
    {
        //update place page after post back when user click on the tab
        if (postbackCount)
        {
            new WoCo.PicturesBox('.picturesBox');
            new WoCo.TripAdvisor('.tripAdvisorBox');
            new WoCo.RoundedBox('.placesWrapper .roundedBox');
            new WoCo.Tools;
            new WoCo.Datepicker;
            new WoCo.GoogleTransit;
            new WoCo.BookAccomodation('.placesWrapper .box.accomodation');

            if (window.location.hash == '#about' || window.location.hash == '#' || !window.location.hash)
            {
                wocoGMap = new WoCo.GoogleMap();
                wocoGMap.init();
            }

            donePostback = true;
            if (isClearedTimeout)
            {
                loading.hide();
            }
        }
        tabs();
    };
    var loadFirstTab = function ()
    {
        var requestedTab = window.location.hash;
        requestedTab = requestedTab.substr(1);
        if (requestedTab)
        {
            jQuery(function ()
            {
                var currLink = jQuery('.placesWrapper .tabs ul a.' + requestedTab);
                if (!currLink.parent('li').hasClass('selected'))
                {
                    currLink.click();
                    eval(currLink.attr('href'));
                }

            });
        }
    };
    var tabs = function ()
    {
        var tabs = jQuery('.placesWrapper .tabs ul a');

        tabs.click(function ()
        {
            if (jQuery(this).parent('li').hasClass('selected'))
            {
                return false;
            }
            jQuery(this).parents('ul').children('li').removeClass('selected');
            jQuery(this).parent('li').addClass('selected');

            window.location.hash = "#" + jQuery.trim(jQuery(this).attr('class'));

            loading.show();
            isClearedTimeout = donePostback = false;

            runningTimerId = setTimeout(function ()
            {
                if (donePostback)
                {
                    loading.hide();
                }
                clearTimeout(runningTimerId);
                isClearedTimeout = true;
            }, minTime);

        });
    };
    var showWarning = function ()
    {
        alert('Loading time is too much. Please, try again later...');
        loading.hide();
    };
    this.place();
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.GoogleMap = function () {   /// <summary></summary>

    this.init = function () {

        /* default pin and map center if there is no predefined options */
        if (typeof (window.mapLat) === 'undefined') {
            window.mapLat = 55.6756;
            window.mapLon = 12.5696;
	window.mapPins = new Array();
            window.mapPins[0] = [window.mapLat, window.mapLon];
        }


        var myLatlng = new google.maps.LatLng(window.mapLat, window.mapLon);

        var myOptions = {
            zoom: window.mapZoom,
            center: myLatlng,
            mapTypeId: window.mapMapType
        };
        map = new google.maps.Map(document.getElementById("googleMapCanvas"), myOptions);

        for (var i = 0; i < window.mapPins.length; i++) {
            addMarker(i);
        }

        jQuery('.googleMap a.changeMapView').click(function () {
            var parentBox = jQuery(this).parents('.googleMap');
            if (parentBox.hasClass('smallMap')) {
                classToRemove = 'smallMap';
                classToAdd = 'bigMap';
                linkText = 'View small map';
                staticMap = $(".googleMapStaticBig");
            }
            else {
                classToRemove = 'bigMap';
                classToAdd = 'smallMap';
                linkText = 'View large map';
                staticMap = $(".googleMapStatic");
            }
            parentBox.removeClass(classToRemove);
            parentBox.addClass(classToAdd);
            jQuery(this).text(linkText);
            google.maps.event.trigger(map, "resize");
            $(".googleMapStatic, .googleMapStaticBig").removeClass("googleMapStaticShow");
            staticMap.addClass("googleMapStaticShow");
            return false;
        });
    }; //add marker
    var addMarker = function (iterator) {

        var mapItem = window.mapPins[iterator];
        var marker = new google.maps.Marker({
            position: new google.maps.LatLng(mapItem[0], mapItem[1]),
            map: map,
            title: mapItem[2],
            draggable: false,
            animation: google.maps.Animation.DROP
        });

        if (mapItem[3])
        {
            var infowindow = new google.maps.InfoWindow({
                content: mapItem[3]
            });

            google.maps.event.addListener(marker, 'click', function ()
            {
                infowindow.open(map, marker);
            });
        }
    };
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.GoogleTransit = function ()
{   /// <summary></summary>

    this.GoogleTransit = function ()
    {
        if (window.location.hash != '#transport')
        {
            return;
        }
        var gMap = new GoogleMap();
        jQuery(".transitStarter").click(function ()
        {
            var transitInfo = new TransitInfo();
            transitInfo.language = jQuery('.transitLang').text();
            transitInfo.from = jQuery('input[id*=uiTxtStartAddress]').attr('value');
            transitInfo.to = jQuery('input[id*=uiTxtEndAddress]').attr('value');
            transitInfo.date = jQuery('input[id*=uiTxtDepartureDate]').attr('value');
            transitInfo.time = jQuery('input[id*=uiTxtDepartureTime]').attr('value');
            transitInfo.routeType = jQuery('select[id*=uiDdlDepartureType] :selected').val();

            jQuery.fancybox({
                'href': gMap.getTransitUrl(transitInfo),
                'width': '90',
                'height': '90',
                'autoScale': true,
                'transitionIn': 'none',
                'transitionOut': 'none',
                'type': 'iframe'
            });

            return false;
        });
    };
    this.GoogleTransit();

};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.NewsletterBox = function (selector)
{   /// <summary></summary>

    var box = jQuery(selector);

    var inputBox = box.find('input[type="text"]');
    var firstName = box.find('input[name*="uiTxtFirstName"]');
    var email = box.find('input[name*="uiTxtEmail"]');
    var organization = box.find('input[name*="uiTxtOrganization"]');
    var submitBtn = box.find('[name*="uiBtnSubmit"]');

    var okTitle = jQuery(selector + ' .subCaption.okHeader');
    var errorTitle = jQuery(selector + ' .subCaption.errorHeader');

    //newsletter box functionality
    this.NewsletterBox = function ()
    {
        var subscribeBox = jQuery(selector);
        
        if(subscribeBox.hasClass('simple'))
        {
            initSimpleSubscriptionBox();
        }

        if(subscribeBox.hasClass('personalInfo'))
        {
            initComplexPersonalInfoSubscriptionBox();
        }

        if(subscribeBox.hasClass('interests'))
        {
            initComplexInterestsSubscriptionBox();
        }
    };
    var initComplexPersonalInfoSubscriptionBox = function(){
        
        inputBox.keypress(function (e)
        {
            if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13))
            {
                if (checkComplexPersonalInfoSubscriptionFields())
                {
                    SubscribePersonalInfo(submitBtn);
                }
                return false;
            }
        });

        submitBtn.click(function ()
        {
            if (checkComplexPersonalInfoSubscriptionFields("submit"))
            {
                SubscribePersonalInfo(submitBtn);
            }

            return false;
        });

    };
    var initComplexInterestsSubscriptionBox = function(){
        
        submitBtn.click(function ()
        {
            if (checkComplexInterestsSubscriptionFields("submit"))
            {
                SubscribeInterests(submitBtn);
            }

            return false;
        });

    };
    var initSimpleSubscriptionBox = function(){
        inputBox.keypress(function (e)
        {
            if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13))
            {
                if (checkSimpleSubscriptionFields())
                {
                    SubscribeSimple(submitBtn);
                }

                return false;
            }
        });

        submitBtn.click(function ()
        {
            if (checkSimpleSubscriptionFields("submit"))
            {
                SubscribeSimple(submitBtn);
            }

            return false;
        });
    };
    var SubscribeSimple = function(button){
        if (typeof (newsletter) != 'undefined') {
            var targetAudienceId = button.parents('div.subscribeBox').find('input[id*="uiHfTargetAudienceId"]').val();

            newsletter.subscribe(email.val(), firstName.val(), targetAudienceId, box);
        }

        return false;
    };
    var SubscribePersonalInfo = function(button){
        
        if (typeof (newsletter) != 'undefined') {
            
            var request = new NewsletterSubscribeRequest();
            request.email = email.val();
            request.userName = firstName.val();
            request.organization = organization.val();
            request.subscriptionType = 'ByInterests';
            request.complexSubscriptionAction = 'SubmitPersonalInfo';
            request.subscriptionContainer = box;
            
            newsletter.submitComplexSubscription(request);
        }

        return false;
    };
    var SubscribeInterests = function(button){
        
        var checkedOption = box.find('input.audienceOption:checked');
        var idsList = '';
        checkedOption.each(function(index, element){
            idsList +=element.value + '|';
        });

        var request = new NewsletterSubscribeRequest();
            request.interests = idsList;
            request.subscriptionType = 'ByInterests';
            request.complexSubscriptionAction = 'SubmitInterests';
            request.subscriptionContainer = box;

        if (typeof (newsletter) != 'undefined') {
            
            newsletter.submitComplexSubscription(request);
        }

        return false;
    };
    var checkComplexInterestsSubscriptionFields = function (){
        
        var checkedOption = box.find('input.audienceOption:checked');

        if(!checkedOption.length)
        {   
            SetErrorTitle();
            return false;
        }

        SetOkTitle();
        return true;
    };
    var checkComplexPersonalInfoSubscriptionFields = function (){
      if (!checkSimpleSubscriptionFields() || !checkOrganization())
        {
            SetErrorTitle();
            return false;
        }
        
        SetOkTitle();
        return true;
    };
    var checkSimpleSubscriptionFields = function ()
    {
       jQuery(selector + ' .errorMark').removeClass('errorMark');

        if (!checkFirstName() || !checkEmail())
        {
            SetErrorTitle();
            return false;
        }
        
        SetOkTitle();
        return true;
    };
    var SetErrorTitle = function(){
            okTitle.hide();
            errorTitle.show();
    };
    var SetOkTitle = function(){
           errorTitle.hide();
            okTitle.show();
    };
    var checkFirstName = function(){

        if (!firstName.val())
        {
            firstName.parents('.txtInput').addClass('errorMark');
            return false;
        }

        return true;
    };
    var checkOrganization = function(){

        if (!organization.val())
        {
            organization.parents('.txtInput').addClass('errorMark');
            return false;
        }

        return true;
    };
    var checkEmail = function(){
        var emailVal = email.val();
        var reg = /^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})*$/;
               
        if (!emailVal || !reg.test(emailVal))
        {
            email.parents('.txtInput').addClass('errorMark');
            return false;
        }
        
        return true;
    };
    this.NewsletterBox();
};
WoCo.TripAdvisor = function (selector)
{   /// <summary>Trip advisor tab functionality</summary>

    var lnkReadFull = jQuery(selector + ' a.readFull');
    var lnkReadAll = jQuery(selector + ' a.all');
    this.TripAdvisor = function ()
    {
        lnkReadFull.click(function ()
        {
            var parentDD = jQuery(this).parents('dd');

            jQuery(this).queue(function ()
            {
                parentDD.next('dd.full').slideDown();
            }).hide();

            parentDD.slideUp();

            return false;
        });
        lnkReadAll.click(function ()
        {
            lnkReadFull.click();
            return false;
        });
    };
    this.TripAdvisor();
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.TopNAds = function ()
{   /// <summary></summary>

    var relatedAds;
    this.topNAds = function ()
    {
        relatedAds = jQuery('#adsRotating .ads');
    };
    this.shuffleAds = function ()
    {
        var adsAmount = relatedAds.length;

        if (!adsAmount)
        {
            return false;
        }
        var ads1 = Math.floor(Math.random() * adsAmount);
        var ads2;
        if (adsAmount == 1)
        {
            ads2 = 2;
        }
        else
        {
            for (; ; )
            {
                ads2 = Math.floor(Math.random() * adsAmount);
                if (ads1 != ads2)
                {
                    break;
                }
            }
        }

        relatedAds.hide();
        relatedAds.eq(ads1).show();
        relatedAds.eq(ads2).show();
    };
    this.isAdsHere = function ()
    {
        return !!relatedAds.length;
    };
    this.topNAds();
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.PicturesBox = function (selector)
{   /// <summary></summary>

    if (!jQuery(selector).length)
    {
        return false;
    }
    var pictures = jQuery(selector + ' .images li');
    var paginationBox = jQuery(selector + ' .pagination');
    var picturesBoxHeader = jQuery('.picturesBoxHeader');
    var picturesBoxDesc = jQuery('.picturesBoxDesc');
    var navbtn = jQuery(selector + ' a.navbtn');

    var topNAds = new WoCo.TopNAds();
    topNAds.shuffleAds();

    this.PicturesBox = function ()
    {
        paginationBox.find('a').click(function (n)
        {
            var currLi = jQuery(this).parent('li');
            if (currLi.hasClass('selected'))
            {
                return false;
            }

            var currIndex = jQuery(selector + ' .pagination li').index(currLi);
            paginationBox.find('li').removeClass("selected");

            currLi.addClass('selected');

            pictures.removeClass('selected');
            pictures.eq(currIndex).addClass('selected');

            pictures.find('span.copyright').hide().end().eq(currIndex).find('span.copyright').show();

            picturesBoxHeader.removeClass("selected");
            picturesBoxDesc.removeClass("selected");
            picturesBoxHeader.eq(currIndex).addClass("selected");
            picturesBoxDesc.eq(currIndex).addClass("selected");

            topNAds.shuffleAds();

            return false;
        });
        navbtn.click(function ()
        {
            var self = jQuery(this);
            var currNum = jQuery(selector + ' .pagination li').index(paginationBox.find('li.selected'));
            var callNum = currNum;
            var totalNum = jQuery(selector + ' .pagination li').length;
            if (self.hasClass('prev'))
            {
                if (currNum == 0)
                {
                    callNum = totalNum - 1;
                }
                else
                {
                    callNum--;
                }
            }
            else
            {//next
                if (currNum == (totalNum - 1))
                {
                    callNum = 0;
                }
                else
                {
                    callNum++;
                }
            }
            paginationBox.find('li').eq(callNum).children('a').click();
            return false;
        });
    };
    this.PicturesBox();
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.SuggestBoxes = function (selector)
{   /// <summary></summary>
    //suggest box hover effect
   //var suggestBoxes = jQuery(selector);
    this.SuggestBoxes = function ()
    {
        jQuery('body').delegate(selector, 'hover', function ()
        {
            jQuery(this).addClass('hovered');
        });
        jQuery('body').delegate(selector, 'mouseleave', function ()
        {
            jQuery(this).removeClass('hovered');
        });
    };
    this.SuggestBoxes();
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.RoundingBoxes = function ()
{   /// <summary></summary>
    //make rounded corners
    this.RoundingBoxes = function ()
    {
        RoundingTop10('.top10box');
        RoundingWeather('.weatherBox');
        RoundingFactBox('.factBox');
    };
    var RoundingWeather = function (selector)
    {
        jQuery(selector).find('a.goto').corner("bottom 7px");
        jQuery(selector).find('a.goto').click(function ()
        {
            jQuery.fancybox({
                'width': '100%',
                'height': '100%',
                'autoScale': true,
                'transitionIn': 'none',
                'transitionOut': 'none',
                'href': jQuery(this).attr('href'),
                'type': 'iframe'
            });
            return false;
        });
    };
    var RoundingTop10 = function (selector)
    {
        jQuery(selector + ' .subCarousel a img').each(function ()
        {
            jQuery(this).css('visibility', 'hidden');
            var neededUrl = jQuery(this).attr('src');
            neededUrl = neededUrl.replace(/\s/g, '%20');
            jQuery(this).parent().css('background-image', 'url("' + neededUrl + '")');
        });
        jQuery(selector + ' .subCarousel a').corner("bottom 7px");
        jQuery(selector + ' .subCarousel span').corner("bottom 7px");
    };
    var RoundingFactBox = function (selector)
    {
        jQuery(selector + ' a.boxFooter, ' + selector + ' span.boxFooter').corner("bottom 7px");
        jQuery(selector + '.allImage .content a.image img').each(function ()
        {
            jQuery(this).css('visibility', 'hidden');
            jQuery(this).parent().css('background-image', 'url("' + jQuery(this).attr('src') + '")');
            jQuery(this).parent().corner("bottom 7px");
        });
        jQuery(selector + '.textImage .content .rightCol img').each(function ()
        {
            jQuery(this).css('visibility', 'hidden');
            jQuery(this).parents(".rightCol").css('background-image', 'url("' + jQuery(this).attr('src') + '")');
            jQuery(this).parents(".rightCol").corner("bottom 7px");
        });
    };
    this.RoundingBoxes();
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: selector is which block should be with rounded corners
WoCo.RoundedBox = function (selector)
{   /// <summary></summary>
    //make rounded corners for containers
    var topHTML = '<div class="top"><div class="leftTop"></div><div class="rightTop"></div></div>';
    var bottomHTML = '<div class="bottom"><div class="leftBottom"></div><div class="rightBottom"></div></div>';
    this.RoundedBox = function ()
    {
        jQuery(selector).each(function ()
        {
            if (!jQuery(this).hasClass('noTop'))
            {
                jQuery(this).prepend(topHTML);
            }
            if (!jQuery(this).hasClass('noBottom'))
            {
                jQuery(this).append(bottomHTML);
            }

            var amountBoxes = jQuery(this).find('> .subRoundedBox > .box').length;
            if (amountBoxes)
            {
                if (amountBoxes % 2)
                {
                    jQuery(this).find('> .subRoundedBox > .box').last().css('margin-bottom', '0');
                }
                else
                {
                    jQuery(this).find('> .subRoundedBox > .box').slice(-2).css('margin-bottom', '0');
                }
                jQuery(this).find('> .subRoundedBox').css('padding-bottom', '14px');
            }
            if (jQuery(this).hasClass('relativeBox'))
            {
                if (jQuery.trim(jQuery(this).children('.subRoundedBox').html()))
                {
                    jQuery(this).show();
                }
            }
        });
    };
    this.RoundedBox();
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: the first parameter is selector to find box with carousel functionality
WoCo.Carousel = function (selector)
{   /// <summary>carousel functionality js</summary>

    var carouselContainer = jQuery(selector);

    this.Carousel = function ()
    { // init
        carouselContainer.each(function ()
        {
            CarouselWork(jQuery(this));
        });
    };
    var CarouselWork = function (currCarousel)
    {
        var carouselUL = currCarousel.find('ul', this);
        var carouselLI = currCarousel.find('li', this);
        var btnNext = currCarousel.find('a.navbtn.next', this);
        var btnPrev = currCarousel.find('a.navbtn.prev', this);

        if (!carouselLI.length)
        {
            return false;
        }

        var singleBoxWidth = carouselLI.width();
        var singleBoxMargin = carouselLI.css('margin-right').replace("px", "");

        if (singleBoxMargin == "auto")
        {
            singleBoxMargin = 0;
        }

        var isAutoMoving = !!currCarousel.find('span.autoMoving').text();
        var autoMovindPeriod = parseInt(currCarousel.find('span.autoMovingPeriod').text());

        var carouselIntervalId;

        var steps = currCarousel.find('span.step').text();
        var stepWidth = parseInt(singleBoxWidth) + parseInt(singleBoxMargin);
        var moveWidth = steps * stepWidth;

        var isScrolling = false;

        carouselUL.width((parseInt(singleBoxWidth) + parseInt(singleBoxMargin)) * (carouselLI.length + parseInt(steps)));

        currCarousel.removeClass('loading');

        if (isAutoMoving)
        {
            carouselIntervalId = setInterval(function () { btnNext.click(); }, autoMovindPeriod);
        }

        btnNext.click(function ()
        {
            if (isScrolling)
            {
                return false;
            }
            isScrolling = true;
            clearInterval(carouselIntervalId);
            carouselIntervalId = setInterval(function () { btnNext.click(); }, autoMovindPeriod);

            var currLeftPos = carouselUL.css('left').replace("px", "");
            carouselUL.animate({ 'left': "-=" + moveWidth + 'px' }, 500, function ()
            {
                for (i = 0; i < steps; i++)
                {
                    currCarousel.find('li:first').clone().appendTo(carouselUL);
                    currCarousel.find('li:first').remove();
                }
                carouselUL.css('left', 0);
                isScrolling = false;
            });
            return false;
        });

        btnPrev.click(function ()
        {
            if (isScrolling)
            {
                return false;
            }
            isScrolling = true;
            clearInterval(carouselIntervalId);
            carouselIntervalId = setInterval(function () { btnNext.click(); }, autoMovindPeriod);

            var currLeftPos = carouselUL.css('left').replace("px", "");
            carouselUL.css('left', (currLeftPos - moveWidth) + 'px');
            for (i = 0; i < steps; i++)
            {
                currCarousel.find('li:last').clone().prependTo(carouselUL); ;
                currCarousel.find('li:last').remove();
            }
            carouselUL.animate({ 'left': '+=' + moveWidth + 'px' }, 500, function () { isScrolling = false; });
            return false;
        });
    };
    this.Carousel();
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.Datepicker = function ()
{   /// <summary>datepicker</summary>

    //Danish
    jQuery.datepicker.regional['DA'] = {
        closeText: 'Luk',
        prevText: '&#x3c;Forrige',
        nextText: 'Næste&#x3e;',
        currentText: 'Idag',
        monthNames: ['Januar', 'Februar', 'Marts', 'April', 'Maj', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'December'],
        monthNamesShort: ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
        dayNames: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'],
        dayNamesShort: ['Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør'],
        dayNamesMin: ['Sø', 'Ma', 'Ti', 'On', 'To', 'Fr', 'Lø'],
        weekHeader: 'Uge',
        firstDay: 1,
        isRTL: false,
        showMonthAfterYear: false,
        yearSuffix: ''
    };

    //Norwegian
    jQuery.datepicker.regional['NO'] = {
        closeText: 'Lukk',
        prevText: '&laquo;Forrige',
        nextText: 'Neste&raquo;',
        currentText: 'I dag',
        monthNames: ['Januar', 'Februar', 'Mars', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Desember'],
        monthNamesShort: ['jan', 'feb', 'mar', 'apr', 'mai', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'des'],
        dayNamesShort: ['Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør'],
        dayNames: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'],
        dayNamesMin: ['Sø', 'Ma', 'Ti', 'On', 'To', 'Fr', 'Lø'],
        weekHeader: 'Uke',
        firstDay: 1,
        isRTL: false,
        showMonthAfterYear: false,
        yearSuffix: ''
    };

    //Swedish
    jQuery.datepicker.regional['SV'] = {
        closeText: 'Stäng',
        prevText: '&laquo;Förra',
        nextText: 'Nästa&raquo;',
        currentText: 'Idag',
        monthNames: ['Januari', 'Februari', 'Mars', 'April', 'Maj', 'Juni', 'Juli', 'Augusti', 'September', 'Oktober', 'November', 'December'],
        monthNamesShort: ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
        dayNamesShort: ['Sön', 'Mån', 'Tis', 'Ons', 'Tor', 'Fre', 'Lör'],
        dayNames: ['Söndag', 'Måndag', 'Tisdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lördag'],
        dayNamesMin: ['Sö', 'Må', 'Ti', 'On', 'To', 'Fr', 'Lö'],
        weekHeader: 'Ve',
        firstDay: 1,
        isRTL: false,
        showMonthAfterYear: false,
        yearSuffix: ''
    };

    //German
    jQuery.datepicker.regional['DE'] = {
        closeText: 'schließen',
        prevText: '&#x3c;zurück',
        nextText: 'Vor&#x3e;',
        currentText: 'heute',
        monthNames: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
        monthNamesShort: ['Jan', 'Feb', 'Mrz', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
        dayNames: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
        dayNamesShort: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
        dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
        weekHeader: 'Wo',
        firstDay: 1,
        isRTL: false,
        showMonthAfterYear: false,
        yearSuffix: ''
    };


    this.Datepicker = function ()
    { //init

        jQuery(".dateField").each(function ()
        {
            var locale = '';
            var re = /^.+lang(\w+)$/;
            var self = jQuery(this);
            var str = self.attr('class');
            if (re.test(str))
            {
                locale = str.replace(re, "$1");
            }
            else
            {
                locale = '';
            }
            if (jQuery.datepicker.regional[locale] == undefined)
            {
                locale = '';
            }

            if (self.hasClass('dateFieldTransport'))
            {
                jQuery.datepicker.regional[locale]['dateFormat'] = 'dd/mm/y';
            }
            else
            {
                jQuery.datepicker.regional[locale]['dateFormat'] = 'dd. M. yy';
            }

            self.datepicker(jQuery.datepicker.regional[locale]);
            self.datepicker("option", { onClose: function (dateText) { DatepickerClose(jQuery(this, this), dateText); } });
            if (self.hasClass('acmdate'))
            {
                self.datepicker("option", { minDate: 0 });
            }
        });
    };
    var DatepickerClose = function (input, dateText)
    { // calling when datepicker closed

        var currInput = input.parent().find('input[type="text"]');
        var currLabel = input.parent().find('label');
        if (currInput.parents('.dateFields').length)
        {
            var toDateFld = currInput.parents('.dateFields').find('dd.toDate input[type="text"]');
            var toDate = toDateFld.datepicker('getDate');
            var fromDateFld = currInput.parents('.dateFields').find('dd.fromDate input[type="text"]');
            var fromDate = fromDateFld.datepicker('getDate');
            if (toDate < fromDate)
            {
                var tmpDateVal = fromDateFld.val();
                fromDateFld.val(toDateFld.val());
                toDateFld.val(tmpDateVal);
            }
        }
        if (currInput.hasClass('dateField') && !dateText)
        {
            currLabel.show();
        }
    };
    this.Datepicker();
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: the first parameter is what fiels should be with hints
WoCo.FormHints = function (selector)
{   /// <summary>hints functionality for input text form fields</summary>

    this.FormHints = function ()
    { // init
        var lblTitles = jQuery(selector + " label");
        var txtInputs = jQuery(selector + " input[type='text']");

        lblTitles.click(function ()
        { // click on a label
            jQuery(this).hide();
            jQuery(this).parents(selector).find("input, select").focus();
        });

        txtInputs.blur(function ()
        { // leave a focus from a focused field
            if (!jQuery.trim(jQuery(this).val()))
            {
                if (!jQuery(this).hasClass('dateField'))
                {
                    jQuery(this).parents(selector).find("label").show();
                }
            }
            else
            {
                jQuery(this).parents(selector).find("label").hide();
            }
        });

        txtInputs.change(function ()
        {
            jQuery(this).blur();
        });

        txtInputs.focus(function ()
        {
            jQuery(this).parents(selector).find("label").hide();
        });

        txtInputs.each(function ()
        {
            if (jQuery.trim(jQuery(this).val()))
            {
                jQuery(this).parents(selector).find("label").hide();
            }
        });
    };
    this.FormHints();
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.GATracking = function ()
{   /// <summary>google analytics tracking js</summary>

    this.GATracking = function ()
    { // constructor
        DownloadTracking("a");
        ShareBtnTracking();
        SendToFriendTracking();
        TrackWoCoDomains();
    };
    var TrackWoCoDomains = function ()
    {
        var WoCoDomains = Array("onsdagskoncerter.dk", "visitcopenhagen.dk", "visitcopenhagen.com", "visitcopenhagen.no", "visitcopenhagen.se", "visitcopenhagen.de", "wonderfulcopenhagen.dk", "cruisecopenhagen.dk", "cruisecopenhagen.com", "meetincopenhagen.dk", "meetincopenhagen.com", "opencopenhagen.dk", "opencopenhagen.com", "copenhagencooking.com", "copenhagencooking.dk", "cruisebaltic.com");
        var currentDomain = window.location.hostname;

        var i;

        jQuery("a").each(function ()
        {
            var self = jQuery(this);
            var hrefDomain = self.attr('href');
            if(hrefDomain != null && hrefDomain.indexOf("http://") > -1)
            {
		var hrefs = hrefDomain.match(/:\/\/(www\.)?(.[^/:]+)/);
		if(hrefs!=null)
		{
                var externalDomain = hrefs[2]; // hrefDomain.match(/:\/\/(www\.)?(.[^/:]+)/)[2];
                if(currentDomain != externalDomain)
                {
                    for (i = 0; i < WoCoDomains.length; i++)
                    {
                        if(externalDomain.indexOf(WoCoDomains[i]) > -1)
                        {
                            self.addClass("WoCoDomain");
                            break;
                        }
                    }
                }
		}
            }

        });
        jQuery("a.WoCoDomain").live("click", function(){
            _gaq.push(['_link', jQuery(this).attr("href")]);
        });
    };
    var DownloadTracking = function (selector)
    { // links to download files tracking
        var anchors = jQuery(selector);

        anchors.click(function ()
        {
            var href = jQuery(this).attr("href");
            var extensions = [".ashx", ".pdf", ".ppt", ".doc", ".xls"]; // The extensions to look for
            var isDocument = false;

            if (!href || jQuery(this).hasClass('navbtn'))
            {
                return;
            }
            jQuery.each(extensions, function (index, value)
            {
                if (href.indexOf(value) > 0)
                {
                    isDocument = true;
                }
            });

            //alert('href: ' + href + ', is document:' + isDocument);

            if (isDocument && typeof _gaq != 'undefined')
            {
                var docName = href.substring(href.lastIndexOf('/') + 1, href.length);

                _gaq.push(['_trackPageview', href]);
                _gaq.push(['LocalRollup._trackPageview', href]);
                _gaq.push(['GlobalRollup._trackPageview', href]);
                _gaq.push(['_trackEvent', 'Download', '', docName]);
                _gaq.push(['LocalRollup._trackEvent', 'Download', '', docName]);
                _gaq.push(['GlobalRollup._trackEvent', 'Download', '', docName]);
            }
        });
    };
    var ShareBtnTracking = function ()
    { // share button tracking
        var add_button = null;
        var pageHeader = jQuery('h1').text();

        if (typeof addthis != 'undefined')
        {
            addthis.addEventListener('addthis.menu.share', shareEventHandler);
            jQuery('.addthis_button').mouseover(function ()
            {
                add_button = jQuery(this);
            });
        }
        function shareEventHandler(evt)
        {
            if (evt.type == 'addthis.menu.share' && typeof _gaq != 'undefined')
            {
                _gaq.push(['_trackEvent', 'Share', pageHeader, evt.data.service]);
                _gaq.push(['LocalRollup._trackEvent', 'Share', pageHeader, evt.data.service]);
                _gaq.push(['GlobalRollup._trackEvent', 'Share', pageHeader, evt.data.service]);
            }
        }
    };
    var SendToFriendTracking = function ()
    { // send to friend form tracking
        var btnToFriendPopup = jQuery('a.toFriendPopupLink');

        btnToFriendPopup.click(function ()
        {
            if (typeof _gaq != 'undefined')
            {
                _gaq.push(['_trackPageview', 'Send to friend box has been just opened']);
                _gaq.push(['LocalRollup._trackPageview', 'Send to friend box has been just opened']);
                _gaq.push(['GlobalRollup._trackPageview', 'Send to friend box has been just opened']);
            }
        });
    };
    this.GATracking();
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: the first parameter is selector to find search box on a page
WoCo.SearchBoxFix = function (selector)
{   /// <summary>search box js</summary>

    var searchBoxes = jQuery(selector);

    this.SearchBoxFix = function ()
    { // search box fix constructor

        var self = this;

        searchBoxes.each(function ()
        {
            var searchInput = jQuery(this).find(".query");
            var searchBtn = jQuery(this).find(".submit");
            var hiddenSearchUrl = jQuery(this).find(".hiddenSearchUrl").text();

            searchInput.keydown(function (e)
            {
                if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13))
                { // if Enter key was pressed
                    if (searchInput.val() != "" || searchInput.parents(".allowEmpty", this).length)
                    {
                        searchBtn.click();
                    }
                    else
                    {
                        searchInput.focus();
                    }

                    return false;
                }
            });

            searchBtn.click(function ()
            {
                if (searchInput.val() == "" && !searchInput.parents(".allowEmpty", this).length)
                {
                    searchInput.focus();
                    return false;
                }
                else
                {
                    var separator = hiddenSearchUrl.indexOf('?') > 0
                                    ? '&'
                                    : '?';
                    
                    window.location = hiddenSearchUrl + separator + 'q=' + searchInput.val();
                }

            });

        });
    };
    this.SearchBoxFix();
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.SiteHash = function ()
{   /// <summary>work with hash in url</summary>

    this.SetHash = function (ourHash)
    {
        hash = ourHash.replace(/^#/, '');
        if (hash)
        {
            var fx, node = jQuery('#' + hash);
            if (node.length)
            {
                fx = jQuery('<div></div>').css({ position: 'absolute', visibility: 'hidden', top: jQuery.scroll().top + 'px' }).attr('id', hash).appendTo('body');
                node.attr('id', '');
            }
            document.location.hash = hash;
            if (node.length)
            {
                fx.remove();
                node.attr('id', hash);
            }
        }
        else
        {
            document.location.hash = hash;
        }
    };
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.SCFFix = function ()
{   /// <summary>fixes for Webforms for Marketers</summary>

    /* variables section */
    var submitBtnHolder = jQuery('.scfForm .scfSubmitButtonBorder');
    var spanHolder = '<span></span>';
    submitBtnHolder.addClass('btnWrapper btnBig').append(spanHolder);
};
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TODO: no parameters
WoCo.Stuff = function ()
{   /// <summary>stuff not included to any other function but needed for site</summary>

    //show venue search box to proper placeholder if there is any content inside. Otherwise keep it hidden
    var venueSearchBox = jQuery('.venueSearch.separated');
    if (jQuery.trim(venueSearchBox.html()))
    {
        venueSearchBox.show();
    }

    //venue search mark requied fields
    jQuery('.requestForm .row .cell .errorM').each(function ()
    {
        jQuery(this).parent().prev().append('*');
    });

    //show Order card form in the fancybox overlay
    var orderCardBtn = jQuery('.copenCardBox .rightArea a[id*=uiLnkOrderForm]');
    if (orderCardBtn.length)
    {
        orderCardBtn.click(function()
            {
            jQuery.fancybox({
                    'href': orderCardBtn.attr('href'),
                    'autoScale': 'true',
                    'type': 'iframe',
                    'width': '100%',
                    'height': '100%'
                });
            return false;
        });
        
        if(window.location.hash == '#order') {
            orderCardBtn.trigger('click');
        }
    }

    //venue list margin fixes
    jQuery('.meetingRoomFacilities').css({"margin-right": "10px", "margin-left": "-10px"});
};

