
// add listeners
yuiEvent.onDOMReady(
    function() {
        // currency converter
        loadCurrencyConvertor();

        // rate selector
        var rateSelectorLinks = yuiDom.getElementsByClassName("rateSelectorLink", "a");
        for (var i=0; i < rateSelectorLinks.length; i++) {
            var link = rateSelectorLinks[i];
            YAHOO.util.Event.addListener(link, "click", showRateSelector);
        }
        
        rateSelectorLinks.push(yuiDom.get('rateSelectorContainer'));
        SW.domWidget.bodyClickHandler.add(hideRateSelector,rateSelectorLinks);

        YAHOO.util.Event.addListener("rateSelectorClose", "click", hideRateSelector);
        RatePrefPopupManager.validatePrefs();
    }

)

function loadCurrencyConvertor(){
    var container = yuiDom.get('currencyContainer');

    var loaderConfig = {
        componentName : 'currencyConverter',
        container : 'currencyContainer',
        trigger: 'currencyConverterLink',
        queryString : "returnPath=" + encodeURIComponent(document.location.pathname + document.location.search)
    };

    var currencyComponent = new SW.widget.Component(loaderConfig);

    YAHOO.util.Event.addListener("currencyConverterLink", "click", toggleCurrencyConverter,currencyComponent);

    SW.domWidget.bodyClickHandler.add(currencyComponent.hideComponent,[container, yuiDom.get('currencyConverterLink')],currencyComponent);
}

function toggleCurrencyConverter(event,currencyComponent) {
    var target = yuiDom.get(event.srcElement || event.currentTarget);

    var position = yuiDom.getXY(target);
   // alert("position "+position[0]+"---"+position[1])
    position[0]=parseInt(position[0])-9;
    position[1]=parseInt(position[1])+5;
    // alert("position after "+position[0]+"---"+position[1])
    if(yuiDom.hasClass(yuiDom.get('currencyContainer'),'underLink')){
        position[1]=parseInt(position[1])+15;            
    }
    //yuiDom.setXY('currencyContainer', position);
    
    currencyComponent.toggle();
}

function hideRateSelector(event, data) {
    var target = yuiDom.get(event.srcElement || event.currentTarget);

    if (!yuiDom.hasClass(target,'rateSelectorLink')){
        yuiDom.setStyle('rateSelectorContainer', 'display', 'none');
        var containerMask = yuiDom.get("compareRatesMask");

        if(containerMask){
            yuiDom.setStyle(containerMask, 'display', 'none');
        }
    }
}

function showRateSelector(event, data) {

    // hide pushpin popup on map
    if (yuiDom.getElementsByClassName("ero", "div")[0]){
       yuiDom.setStyle(yuiDom.getElementsByClassName("ero", "div")[0],"visibility","hidden");
    }
    // rate selector
    var containerMask = yuiDom.get("compareRatesMask");
    if(containerMask){
        yuiDom.setStyle(containerMask, 'height', containerMask.parentNode.offsetHeight+'px');
        yuiDom.setStyle(containerMask, 'display', 'block');
    }
    var container = yuiDom.get("rateSelectorContainer");
    yuiDom.setStyle(container, 'display', 'block');

    var target = yuiDom.get(event.currentTarget || event.srcElement);

    if (!target){
        //map view
        var mapContainer = yuiDom.get("mapContainer");
        var mapCoords = yuiDom.getXY(mapContainer);
        var mapMidHeight = (mapContainer.offsetHeight/2);
        var mapMidWidth = (mapContainer.offsetWidth/2);
        var containerMidHeight = (container.offsetHeight/2);
        var containerMidWidth = (container.offsetWidth/2);
        yuiDom.setXY(container,[((mapCoords[0] + mapMidWidth) - containerMidWidth),((mapCoords[1] + mapMidHeight) - containerMidHeight)]);
    }else{
        yuiDom.setXY(container,[0,0]);
        var x = fnGetOffsetLeft(target, container);
        var y = fnGetOffsetTop(target, container);
        yuiDom.setXY(container,[x,y]);
    }
}

// function to determine the offsetLeft of an element that is passed in
function fnGetOffsetLeft (pElement, pDiv) {
    var lsLeftOffset = pElement.offsetLeft;
    while ((pElement = pElement.offsetParent) != null){
        lsLeftOffset  += pElement.offsetLeft;
    }
    var lsViewPort = document.documentElement.clientWidth;
    if(pDiv){
        if((pDiv.offsetWidth + lsLeftOffset) > (lsViewPort)){
            lsLeftOffset = (lsLeftOffset - ((lsLeftOffset + pDiv.offsetWidth) - lsViewPort) - 10);
        }
    }
    return lsLeftOffset;
}
// function to determine the offsetTop of an element that is passed in
function fnGetOffsetTop (pElement, pDiv) {
    var lsTopOffset = pElement.offsetTop;
    while ((pElement = pElement.offsetParent) != null){
        lsTopOffset +=pElement.offsetTop;
    }
    var lsDocHeight = document.documentElement.scrollTop;
    if (lsDocHeight == 0) {
    	lsDocHeight = document.body.scrollTop;
    }
    
    var lsViewPort = document.documentElement.clientHeight;
    if(pDiv){
        if((pDiv.offsetHeight + lsTopOffset) > (lsDocHeight + lsViewPort)){
            lsTopOffset = (lsTopOffset - ((lsTopOffset + pDiv.offsetHeight) - (lsDocHeight + lsViewPort)) - 10);
        }
    }
    return lsTopOffset;
}



var sortDhtmlSelect = {
    setup:function(){
        var self = this;
        yuiDom.getElementsByClassName("customDhtmlSelect","div",yuiDom.get('viewHotelContainer')).forEach(function(container){
            var config = {
                container:container,
                trigger:yuiDom.getElementsByClassName("dhtmlSelectTrigger",null,container)[0]
            };
            yuiEvent.addListener(config.trigger,"click",sortDhtmlSelect.showBridge,config);
            SW.domWidget.bodyClickHandler.add(sortDhtmlSelect.hide,[config.trigger, config.container], sortDhtmlSelect);
            sortDhtmlSelect.config = config;
        });
    },
    show:function(config){
        yuiDom.addClass(config.container,"show");
        yuiDom.setStyle(config.container, 'zIndex', '501');
        yuiDom.setStyle(config.trigger, 'zIndex', '502');

    },
    hide:function(){
        yuiDom.removeClass(this.config.container,"show");
        yuiDom.setStyle(this.config.container, 'zIndex', '');
        yuiDom.setStyle(this.config.trigger, 'zIndex', '');
    },
    showBridge:function(e,config){
        var self = sortDhtmlSelect;
        self.show(config);
    }
};

yuiEvent.onContentReady('viewHotelContainer',sortDhtmlSelect.setup, true);

if (typeof SW.domWidget.inputLabels!="undefined") SW.domWidget.inputLabels.setEnabled(true);
if (typeof SW.domWidget.bodyClickHandler!="undefined") SW.domWidget.bodyClickHandler.setEnabled(true);
if (typeof SW.domWidget.dhtmlSelect!="undefined") SW.domWidget.dhtmlSelect.setEnabled(true);
if (typeof SW.domWidget.toolTips!="undefined") SW.domWidget.toolTips.setEnabled(true);

SW.domWidget.toolTips.addClassSettings("calUnavailTrigger",{
  triggerClassName:"calUnavailTrigger",
  stopEventOnClick:false
});

