// JPL - FRIENDLY ALIAS
var location_units_toggle;

var AccordionMenu = (function() {
    var YUD = YAHOO.util.Dom;
    var YUE = YAHOO.util.Event;
    var oMenuSetting = {};
    var oMenuCache = {};
    var dLastHoverTitle;
    YUD.addClass(document.documentElement, 'accordion-menu-js');

    function getDT(e) {
        var dEl = YUE.getTarget(e);

        if ((e.tagName + '').toUpperCase() == 'DD') {
            var dt = e.previousSibling;
            while (dt) {
                if (dt.tagName && dt.tagName.toUpperCase() == 'DT') { break; };
                dt = dt.previousSibling
            };

            if (!dt || dt.tagName.toUpperCase() != 'DT') { return; }
            else { return (dt.tagName === 'DT') ? dt : null };
        }
        else if (e.clientX) {
            var found = false;
            if(dEl != null) 
            {
            while (dEl.parentNode) {
                if (YUD.hasClass(dEl, 'a-m-t')) { found = true; break; };
                dEl = dEl.parentNode;
            };
            }
            if (!found) { return null }
            else { return (dEl.tagName === 'DT') ? dEl : null };
        };
    };



    function getDD(dt) {
        if (!dt) { return null; };
        var dd = dt.nextSibling;

        while (dd) {
            if (dd.tagName && dd.tagName.toUpperCase() == 'DD' && !YUD.hasClass(dd, 'placeHolder')) { break; };
            dd = dd.nextSibling;

        };
        if (!dd || dd.tagName.toUpperCase() != 'DD') { return; }
        else { return dd };
    };

    function expand(dl, dt, dd, result_index) {
        if (!result_index) result_index = dd.replace('dd', '');

        dl.hasAnimation += 1;
        YUD.addClass(dd, 'a-m-d-before-expand');
        var oAttr = { height: { from: 0, to: dd.offsetHeight} };

        YUD.removeClass(dd, 'a-m-d-before-expand');

        var onComplete = function() {
            // CHANGE GRAPHIC
            if (result_index) {
                //var location_details = YAHOO.util.Dom.get('location_details_' + result_index);
                var location_details = YAHOO.util.Dom.getElementsByClassName('location_details_' + result_index)[0];
                location_details.src = location_details.src.replace('orange', 'white'); //'images/search_details_show_white.png';
                var location_units = YAHOO.util.Dom.get('location_units_' + result_index);
                location_units.src = 'images/search_units_hide_white.gif';
            }

            oAnim.onComplete.unsubscribe(onComplete);
            oAnim.stop();
            YUD.removeClass(dd, 'a-m-d-anim');
            YUD.addClass(dd, 'a-m-d-expand');
            //added for IE6

            onComplete = null;
            dl.hasAnimation -= 1;
            var dt = getDT(dd);
            YUD.addClass(dt, 'a-m-t-expand');
            if (oMenuCache[dl.id] && oMenuCache[dl.id].onOpen && dd.style.height != '') {
                oMenuCache[dl.id].onOpen({ dl: dl, dt: dt, dd: dd });
            };
            dd.style.height = '';

        };

        var onTween = function() {
            if (dd.style.height) {
                YUD.addClass(dd, 'a-m-d-anim');
                oAnim.onTween.unsubscribe(onTween);
                onTween = null;
                dd.oAnim = null;
            };

        };

        if (dd.oAnim) {
            dd.oAnim.stop();
            dd.oAnim = null;
            dl.hasAnimation -= 1;
        };
        var oEaseType = YAHOO.util.Easing.easeOut;
        var seconds = 0.5;
        if (oMenuCache[dl.id]) {
            oEaseType = oMenuCache[dl.id]['easeOut'] ? oEaseType : YAHOO.util.Easing.easeIn;
            seconds = oMenuCache[dl.id]['seconds'];

            if (!oMenuCache[dl.id]['animation']) {
                var oAnim = { onComplete: { unsubscribe: function() { } }, stop: function() { } };
                onComplete();
                return;
            };
        };


        var oAnim = new YAHOO.util.Anim(dd, oAttr, seconds, oEaseType);
        oAnim.onComplete.subscribe(onComplete);
        oAnim.onTween.subscribe(onTween);
        oAnim.animate();
        dd.oAnim = oAnim;

    };

    function collapse(dl, dt, dd, result_index) {
        // CHANGE GRAPHIC
        if (result_index) {
            //var location_details = YAHOO.util.Dom.get('location_details_' + result_index);
            var location_details = YAHOO.util.Dom.getElementsByClassName('location_details_' + result_index)[0];
            location_details.src = location_details.src.replace('white', 'orange'); //'images/search_details_show_orange.png';
            var location_units = YAHOO.util.Dom.get('location_units_' + result_index);
            location_units.src = 'images/search_units_show_orange.gif';
        }
        dl.hasAnimation += 1;
        YUD.addClass(dd, 'a-m-d-anim');
        var oAttr = { height: { from: dd.offsetHeight, to: 0} };


        if (!result_index) result_index = dd.replace('dd', '');

        var onComplete = function() {
            oAnim.onComplete.unsubscribe(onComplete);
            YUD.removeClass(dd, 'a-m-d-anim');
            YUD.removeClass(dd, 'a-m-d-expand');
            dd.style.height = '';
            dd.oAnim = null;
            onComplete = null;
            dl.hasAnimation -= 1;
            var dt = getDT(dd);
            YUD.removeClass(dt, 'a-m-t-expand');
            if (oMenuCache[dl.id] && oMenuCache[dl.id].onOpen) {
                oMenuCache[dl.id].onClose({ dl: dl, dt: dt, dd: dd });
            };


        };

        if (dd.oAnim) {
            dd.oAnim.stop();
            dd.oAnim = null;
            dl.hasAnimation -= 1;
        };

        var oEaseType = YAHOO.util.Easing.easeOut;
        var seconds = 0.5;
        if (oMenuCache[dl.id]) {
            oEaseType = oMenuCache[dl.id]['easeOut'] ? oEaseType : YAHOO.util.Easing.easeIn;
            seconds = oMenuCache[dl.id]['seconds'];
            if (!oMenuCache[dl.id]['animation']) {
                var oAnim = { onComplete: { unsubscribe: function() { } }, stop: function() { } };
                onComplete();
                return;
            };
        };

        var oAnim = new YAHOO.util.Anim(dd, oAttr, seconds, oEaseType);
        oAnim.onComplete.subscribe(onComplete);
        oAnim.animate();
        dd.oAnim = oAnim;
    };

    function collapseAll(dl, dt, dd) {
        var aOtherDD = YUD.getElementsByClassName('a-m-d-expand', 'dd', dl);
        for (var i = 0; i < aOtherDD.length; i++) {
            var otherDD = aOtherDD[i];
            if (otherDD != dd) {
                collapse(dl, null, otherDD);
            };
        };
    }


    var onMenuMouseover = function(e) {
        var dMenuTitle = getDT(e);
        if (!dMenuTitle) { return; };
        if (dLastHoverTitle) {
            YUD.removeClass(dLastHoverTitle, 'a-m-t-hover');
        };
        YUD.addClass(dMenuTitle, 'a-m-t-hover');
        dLastHoverTitle = dMenuTitle;
        YUE.preventDefault(e);
        return false;
    };

    var onMenuMouseout = function(e) {
        var dMenuTitle = getDT(e);
        if (!dMenuTitle) { return; };
        if (dLastHoverTitle && dLastHoverTitle != dMenuTitle) {
            YUD.removeClass(dLastHoverTitle, 'a-m-t-hover');
            YUD.removeClass(dLastHoverTitle, 'a-m-t-down');
        };
        YUD.removeClass(dMenuTitle, 'a-m-t-down');
        YUD.removeClass(dMenuTitle, 'a-m-t-hover');
        dLastHoverTitle = null;
        YUE.preventDefault(e);
        return false;
    };

    var onMenuMousedown = function(e) {
        var dMenuTitle = getDT(e);
        if (!dMenuTitle) { return; };
        YUD.addClass(dMenuTitle, 'a-m-t-down');
        YUE.preventDefault(e);
        return false;
    };

    var onMenuClick = location_units_toggle = function(e, result_index) {
        // JPL

        var dt;
        if ((typeof e).toLowerCase() == 'string') {
            dt = YAHOO.util.Dom.get(e);
        } else {
            //dt = getDT(e);
            // DISABLE NATURAL EVENT HANDLER
            //try {
            var target = null;
            if (!e) var e = window.event;
            if (e.target) target = e.target;
            else if (e.srcElement) target = e.srcElement;
            if (target.nodeType == 3) // defeat Safari bug
                target = targ.parentNode;

            if (target && psui.searchResults.helpDivRendered) {
                var rentDiv = YAHOO.util.Dom.getAncestorById(target, 'rentHelpDiv_c');
                var reserveDiv = YAHOO.util.Dom.getAncestorById(target, 'reserveHelpDiv_c');
                var qMark0 = YAHOO.util.Dom.getAncestorByClassName(target, 'showRentHelpLink');
                var qMark1 = YAHOO.util.Dom.getAncestorByClassName(target, 'showReserveHelpLink');

                if (!rentDiv && !reserveDiv && !qMark0 && !qMark1) {
                    if (psui.searchResults.rentHelpDiv) psui.searchResults.rentHelpDiv.hide();
                    if (psui.searchResults.reserveHelpDiv) psui.searchResults.reserveHelpDiv.hide();
                }
            }
            //} catch (exception) {
            //}
            return;
        }

        if (!dt) { return; };
        var dd = getDD(dt);

        if (!dd) { return; };
        var dl = dt.parentNode;

        if (dl.hasAnimation == null) {
            dl.hasAnimation = 0;
        }
        //if (dl.hasAnimation > 0) { return; };

        YUD.removeClass(dt, 'a-m-t-down');

        var hide = false;
        if (YUD.hasClass(dd, 'a-m-d-expand')) {
            collapse(dl, dt, dd, result_index);
            hide = true;
        }
        else {

            if (oMenuCache[dl.id] && oMenuCache[dl.id].dependent == false) { }
            else { collapseAll(dl, dt, dd); }
            expand(dl, dt, dd, result_index);

        };
        YUE.preventDefault(e);

        setAccordionCache(psui.searchResults.arrSiteIds[result_index], !hide);

        //toggle location details
        var img = YUD.getElementsByClassName('location_units_click', 'img', dt)[0];
        for (var j = 0; j < img.attributes.length; j++) {
            if (img.attributes[j].nodeName == 'class') {
                var siteID = img.attributes[j].nodeValue.replace('location_units_click site_id_', '');
                var elem = YUD.get('location_details_' + siteID);
                if (!hide) {
                    if (elem.src.indexOf('hide') > -1) {
                        location_details_toggle(siteID);
                    }
                }
                break;
            }
        }

        return false;
    };


    YUE.on(document, 'mouseover', onMenuMouseover);
    YUE.on(document, 'mouseout', onMenuMouseout);
    YUE.on(document, 'mousedown', onMenuMousedown);
    YUE.on(document, 'click', onMenuClick);

    var oApi = {

        openDtById: function(sId) {
            var dt = document.getElementById(sId);
            if (!dt) { return; };
            if (!YUD.hasClass(dt, 'a-m-t')) { return; };
            var dl = dt.parentNode;
            var dd = getDD(dt);
            if (dl.hasAnimation == null) { dl.hasAnimation = 0; };

            if (dl.hasAnimation > 0) { return; };
            if (YUD.hasClass(dd, 'a-m-d-expand')) { return; };
            if (oMenuCache[dl.id] && oMenuCache[dl.id].dependent == false) { }
            else { collapseAll(dl, dt, dd); }
            expand(dl, dt, dd);
        },

        closeDtById: function(sId) {
            var dt = document.getElementById(sId);
            if (!dt) { return; };
            if (!YUD.hasClass(dt, 'a-m-t')) { return; };
            var dl = dt.parentNode;
            var dd = getDD(dt);
            if (dl.hasAnimation == null) { dl.hasAnimation = 0; };
            if (dl.hasAnimation > 0) { return; };
            if (!YUD.hasClass(dd, 'a-m-d-expand')) { return; };
            collapse(dl, dt, dd);
        },


        setting: function(id, oOptions) {
            if (!oOptions) { return; };

            if (typeof (id) != 'string') { return; };

            var setMunu = function(dl) {
                dl = dl || this;
                dl.hasAnimation = 0;
                oMenuCache[dl.id] =
			{
			    element: dl,
			    dependent: true,
			    onOpen: function() { },
			    onClose: function() { },
			    seconds: 0.5,
			    easeOut: true,
			    openedIds: [],
			    animation: true
			};
                oMenu = oMenuCache[dl.id];

                if (typeof (oOptions['animation']) == 'boolean') {
                    oMenu['animation'] = !!oOptions['animation'];

                };


                if (typeof (oOptions['dependent']) == 'boolean') {
                    oMenu['dependent'] = !!oOptions['dependent'];
                };

                if (typeof (oOptions['easeOut']) == 'boolean') {
                    oMenu['easeOut'] = !!oOptions['easeOut'];
                };

                if (typeof (oOptions['seconds']) == 'number') {
                    oMenu['seconds'] = Math.max(0, oOptions['seconds']);
                };

                if (typeof (oOptions['onOpen']) == 'function') {
                    oMenu['onOpen'] = oOptions['onOpen'];
                };

                if (typeof (oOptions['onClose']) == 'function') {
                    oMenu['onClose'] = oOptions['onClose'];
                };

                if (oOptions['openedIds'].shift) {
                    oMenu['openedIds'] = oOptions['openedIds'];
                };


                for (var i = 0; i < oMenu['openedIds'].length; i++) {
                    var sId = oMenu['openedIds'][i];
                    var dt = document.getElementById(sId);

                    if (dt && dt.tagName.toUpperCase() == 'DT') {
                        var dl = dt.parentNode;
                        var dd = getDD(dt);
                        expand(dl, dt, dd);
                    }
                    else if (!dt) {
                        function onDtAvailable() {
                            var dt = this;
                            if (dt.tagName.toUpperCase() == 'DT') {
                                var dl = dt.parentNode;
                                var dd = getDD(dt);
                                expand(dl, dt, dd);
                            };
                        };

                        YUE.onAvailable(sId, onDtAvailable);
                    }
                };


            };

            if (document.getElementById(id)) {
                setMunu(document.getElementById(id))
            }
            else {
                YUE.onAvailable(id, setMunu);
            };
        }
    }; //endof api

    return oApi;

})();

function clearAccordionCache() {
    psui.eraseCookie('accordionCache');
}

function restoreAccordionCache() {
    if (psui.searchResults.arrSiteIds.length < 2) {
        return;
    }
    var cacheItems = psui.readCookie('accordionCache');
    var siteID = getURLParam('siteID');
    var sizeID = getURLParam('sizeID');
    var c = YAHOO.util.Cookie.get("AccordionCache_" + siteID + "_" + sizeID);
    if (c) {
        cacheItems = c;
    }
    var cache = {};
    if (cacheItems) {
        var items = cacheItems.split('-');
        for (var i = 0; i < items.length; i++) {
            cache[items[i] + ''] = true;
        }
    }
    for (var i in cache) {
        if (cache[i]) {
            //if (cacheItems.length > 0) cacheItems += '-';
            //cacheItems += i;
            var found = false;
            for (var j = 0; j < psui.searchResults.arrSiteIds.length; j++) {
                if (psui.searchResults.arrSiteIds[j] + '' == i + '') {
                    location_units_toggle('dt' + j, j + '');
                    found = true;
                }
            }
            if (!found) {
                setAccordionCache(i, false);
            }
        }
    }
}
function setAccordionCache(siteID, show) {
    var cacheItems = psui.readCookie('accordionCache');
    var cache = {};
    if (cacheItems) {
        var items = cacheItems.split('-');
        for (var i = 0; i < items.length; i++) {
            cache[items[i] + ''] = true;
        }
    }
    cache[siteID + ''] = show;
    cacheItems = '';
    for (var i in cache) {
        if (cache[i]) {
            if (cacheItems.length > 0) cacheItems += '-';
            cacheItems += i;
        }
    }
    //alert(cacheItems);
    psui.createCookie('accordionCache', cacheItems);
}

function onMyMenuOpen(obj)
{		
	var dl = obj.dl;
	var dt = obj.dt;
	var dd = obj.dd;
/*	var d = document.createElement('div');
	d.className = 'debug';
	d.innerHTML =  dt.innerHTML + ' is opened' ;
	document.body.insertBefore( d , dl.nextSibling);*/
	    YUD.setStyle(dd, 'display', 'block');
	    YUD.setStyle(dd, 'visibility', 'visible');
	    YUD.setStyle(YUD.getChildren(dd.id), 'display', 'block');
	    YUD.setStyle(YUD.getChildren(dd.id), 'visibility', 'visible');
};

function onMyMenuClose(obj)
{
	var dl = obj.dl;
	var dt = obj.dt;
	var dd = obj.dd;
/*	var d = document.createElement('div');
	d.className = 'debug';
	d.innerHTML =  dt.innerHTML + ' is closed' ;
	document.body.insertBefore( d , dl.nextSibling);*/
	YUD.setStyle(dd,'display','none');
	YUD.setStyle(dd,'visibility','hidden');			
	YUD.setStyle(YUD.getChildren(dd),'display','none');
	YUD.setStyle(YUD.getChildren(dd),'visibility','hidden');
	
};

var oOptions=
{	
	/*all options are optional*/
	/* [ bool ] if dependent is false, then each menu open/close independently*/
	dependent:false,
	
	/* [function] callback when a menu is opened*/
	onOpen:onMyMenuOpen,
	
	/* [function] ccallback when a menu is closed*/
	onClose:onMyMenuClose,
	
	/* [array] cdefault ids of opened menues dts*/
	/* openedIds:['my-dt-1'], */
	openedIds:[],
	
	/* [number ] seconds for animations
	seconds:0.5,*/
	
	/*[ bool ] set true if the animation is to be played slower and slower and vise versa*/
	easeOut:false,
	
	/*[ bool ] set true if the animation is to be played*/
	animation:true
}
var setting = new AccordionMenu.setting('my-dl',oOptions);

/* JPL */

function location_details_toggle(siteID) {
    var dt = YAHOO.util.Dom.get("dd_details_" + siteID);
    var html = YAHOO.util.Dom.get("accordion_component_table_container_location_" + siteID).innerHTML;
    if (html.length > 0) {
        dt.innerHTML = html;
        YAHOO.util.Dom.get("accordion_component_table_container_location_" + siteID).innerHTML = "";
        eval("loadMap_" + siteID + "();");
    }
    
    var items = YAHOO.util.Dom.getElementsByClassName('location_units_click');
    var unitItem = null;var unitIndex = 0;
    for (var i = 0; i < items.length; i++) {
        if (YAHOO.util.Dom.hasClass(items[i], 'site_id_' + siteID)) {
            unitIndex = i;
            unitItem = items[i];
            break;
        }
    }
    
    var img = YAHOO.util.Dom.get("location_details_" + siteID);
    if (img.src.indexOf('show') > -1) {
        img.src = img.src.replace('show', 'hide');
        YAHOO.util.Dom.setStyle(dt, 'display', '');
        if (unitItem && unitItem.src.indexOf('hide') > 0) {
            location_units_toggle('dt' + unitIndex, unitIndex + '');
        }
    }
    else {
        img.src = img.src.replace('hide', 'show');
        YAHOO.util.Dom.setStyle(dt, 'display', 'none');
        //if (unitItem && unitItem.src.indexOf('show') > 0) {
        //    location_units_toggle('dt' + unitIndex, unitIndex + '');
        //}
    }
}

function insertAfter(newElement, targetElement) {
    //target is what you want it to go after. Look for this elements parent.
    var parent = targetElement.parentNode;

    //if the parents lastchild is the targetElement...
    if (parent.lastchild == targetElement) {
        //add the newElement after the target element.
        parent.appendChild(newElement);
    } else {
        // else the target has siblings, insert the new element between the target and it's next sibling.
        parent.insertBefore(newElement, targetElement.nextSibling);
    }
}
//var toggleElements = new Array();
function closeAllLocationDetails() {
    /*    
    for (var i = 0; i < toggleElements.length; i++) {
        alert(toggleElements[i]);
        eval(toggleElements[i]);
    }
    */
    var els = YAHOO.util.Dom.getElementsByClassName('show_hide_details_section', 'tr');
    if (els) {
        for (var i = 0; i < els.length; i++) {
            var tr = els[i];
            tr.parentNode.removeChild(tr);
        }
    }
}
var toggleElementsArray = new Array();
var boolSetup = false;
function location_details_info_toggle(siteID, sizeID, el) {
    if (!boolSetup) {
        boolSetup = true;
        var els = YAHOO.util.Dom.getElementsByClassName('yui-dt-sortable', 'th');
        if (els) {
            for (var i = 0; i < els.length; i++) {
                //YAHOO.util.Event.on(els[i], 'click', closeAllLocationDetails);
                //var table = YAHOO.util.Dom.getAncestorByTagName(els[i], 'table');
                YAHOO.util.Event.on(els[i], 'click', function() {
                    /*
                    for (var j = 0; j < toggleElementsArray.length; j++) {
                    if (toggleElementsArray[j]) {
                    for (var k = 0; k < toggleElementsArray[j].length; k++) {
                    alert(toggleElementsArray[j][k]);
                    }
                    }
                    }
                    */
                    for (var key in toggleElementsArray) {
                        if (key.indexOf('_') > 0) {
                            var element = YAHOO.util.Dom.get('show_hide_details_section_' + key);
                            if (element) {
                                element.parentNode.removeChild(element);
                            }
                        }
                    }
                    toggleElementsArray = new Array();
                    /*
                    var els0 = YAHOO.util.Dom.getElementsByClassName('show_hide_details_section', 'tr', table);
                    if (els0) {
                    alert(els0.length);
                    for (var i = 0; i < els0.length; i++) {
                    var tr = els0[i];
                    tr.parentNode.removeChild(tr);
                    }
                    }
                    */
                });
            }
        }
    }
    
    var lnk = YAHOO.util.Dom.get("showhideMoreLink_" + siteID + "_" + sizeID);
    if (lnk.innerHTML.indexOf('Show') > -1) {
        lnk.innerHTML = lnk.innerHTML.replace('Show', 'Hide');

        //inject html
        var oldTr = YAHOO.util.Dom.getAncestorByTagName(YAHOO.util.Dom.getAncestorByTagName(lnk, 'tr'), 'tr');
        var dd = YAHOO.util.Dom.getAncestorByTagName(oldTr, 'dd');
        YAHOO.util.Dom.setStyle(dd, 'height', '');  //yui was setting height explicitly for dd. this was causing the overlap!

        var tr = document.createElement('tr');
        tr.setAttribute('class', 'show_hide_details_section');
        tr.setAttribute('id', 'show_hide_details_section_' + siteID + '_' + sizeID);
        var td = document.createElement('td');
        td.setAttribute('colSpan', 4);
        YAHOO.util.Dom.setStyle(td, 'padding', '0');
        YAHOO.util.Dom.setStyle(td, 'width', '100%');
        td.innerHTML = YAHOO.util.Dom.get("accordion_component_table_container_details_" + siteID + "_" + sizeID).innerHTML;
        tr.appendChild(td);
        insertAfter(tr, oldTr);
        toggleElementsArray[siteID + '_' + sizeID] = "location_details_info_toggle(" + siteID + "," + sizeID + ");";
    }
    else {
        lnk.innerHTML = lnk.innerHTML.replace('Hide', 'Show');
        var tr = YAHOO.util.Dom.get('show_hide_details_section_' + siteID + '_' + sizeID);
        tr.parentNode.removeChild(tr);
        toggleElementsArray[siteID + '_' + sizeID] = null;
    }
}

function showUnitImage(thumbnail, image_name) {
    // GET unit_photo DIV
    var unit_photo = YAHOO.util.Dom.getPreviousSiblingBy(thumbnail.parentNode, function(node) {
        return (node.className == 'unit_photo');
    });

    // SHOW LARGE IMAGE
    if (unit_photo) {
        unit_photo.style.backgroundImage = 'url(images/' + image_name + ')';
    }
}

if (!YAHOO.util.Dom.getAncestorById) {
    YAHOO.util.Dom.getAncestorById = function(node, id) {
        return YAHOO.util.Dom.getAncestorBy(node, function(el) {
            if (el.id === id) {
                return true;
            }
            return false;
        });
    };
}
