var HouseGalleryBox_maxWidth = 900;
var HouseGalleryBox_maxHeight = 900;
var HouseGalleryBox_minMargin = 50;
var HouseGalleries = new Object();
var HouseGallery_started = false;
var preload_running = false;

HouseGallery = Class.create();
HouseGallery.prototype = {
    initialize: function() {
        if (!document.getElementsByTagName){return;}
        var divs = document.getElementsByTagName('div');
        for (var i=0; i<divs.length; i++) {
            if (hasClassName(divs[i],'housegallery,houselayouts')){
                var linkObjs = divs[i].getElementsByTagName('a');
                for (var ii=0; ii<linkObjs.length; ii++) {
                    if (linkObjs[ii].className!='houseprintlink'){
                        linkObjs[ii].onclick = function () {
                            myHouseGallery.start(this); return false;
                        }
                    }
                }
            }
        }
        objTemp = document.createElement("div");
        objTemp.id = 'HouseGalleryOverlay';
        objTemp.style.visibility = 'hidden';
        objTemp.onclick = function() { myHouseGallery.end(); return false;}
        objHouseGalleryOverlay = document.body.appendChild(objTemp);

        objTemp = document.createElement("div");
        objTemp.id = 'HouseGalleryBox';
        objTemp.style.display = 'none';
        objHouseGalleryBox = document.body.appendChild(objTemp);

        objTemp = document.createElement('div');
        objTemp.id = 'HouseGalleryBoxTitle';
        objHouseGalleryBoxTitle = objHouseGalleryBox.appendChild(objTemp);
        
        objTemp = document.createElement('a');
        objTemp.id = 'HouseGalleryPrint';
        objTemp.href = '#';
        objTemp.target = '_blank';
        objTemp.title = 'Drucken';
        objTemp.innerHTML = '<img src="' + HouseGalleryPicPrint + '" alt="Drucken" />';
        objHouseGalleryPrint = objHouseGalleryBox.appendChild(objTemp);
        
        objTemp = document.createElement('a');
        objTemp.id = 'HouseGalleryClose';
        objTemp.href = '#';
        objTemp.onclick = function() { myHouseGallery.end(); return false;}
        objTemp.innerHTML = 'x';
        objHouseGalleryClose = objHouseGalleryBox.appendChild(objTemp);
        
        objTemp = document.createElement('div');
        objTemp.id = 'HouseGalleryBoxNav';
        objTemp.style.visibility = 'hidden';
        objHouseGalleryBoxNav = objHouseGalleryBox.appendChild(objTemp);
        
        objTemp = document.createElement('a');
        objTemp.id = 'HouseGalleryBoxNavFirst';
        objTemp.href = '#';
        objTemp.onclick = function () {myHouseGallery.navFirst(); return false;}
        objTemp.innerHTML = 'Anfang';
        objHouseGalleryBoxNavFirst = objHouseGalleryBoxNav.appendChild(objTemp);

        objTemp = document.createElement('a');
        objTemp.id = 'HouseGalleryBoxNavBack';
        objTemp.href = '#';
        objTemp.onclick = function () {myHouseGallery.navBack(); return false;}
        objTemp.innerHTML = 'zurück';
        objHouseGalleryBoxNavBack = objHouseGalleryBoxNav.appendChild(objTemp);

        objTemp = document.createElement('a');
        objTemp.id = 'HouseGalleryBoxNavNext';
        objTemp.href = '#';
        objTemp.onclick = function () {myHouseGallery.navNext(); return false;}
        objTemp.innerHTML = 'weiter';
        objHouseGalleryBoxNavNext = objHouseGalleryBoxNav.appendChild(objTemp);

        objTemp = document.createElement('a');
        objTemp.id = 'HouseGalleryBoxNavLast';
        objTemp.href = '#';
        objTemp.onclick = function () {myHouseGallery.navLast(); return false;}
        objTemp.innerHTML = 'Ende';
        objHouseGalleryBoxNavLast = objHouseGalleryBoxNav.appendChild(objTemp);

        objTemp = document.createElement('div');
        objTemp.id = 'HouseGalleryBoxEntityLoad';
        objHouseGalleryBoxEntityLoad = objHouseGalleryBox.appendChild(objTemp);
        
        objTemp = document.createElement('img');
        objTemp.src = HouseGalleryPicLoading;
        objTemp.alt = 'lade';
        objHouseGalleryBoxEntityLoad.appendChild(objTemp)
        

        objTemp = document.createElement('div');
        objTemp.id = 'HouseGalleryBoxEntity';
        objTemp.style.visibility = 'hidden';
        objHouseGalleryBoxEntity = objHouseGalleryBox.appendChild(objTemp);
        
        objTemp = document.createElement('div');
        objTemp.id = 'HouseGalleryBoxContainerPicture';
        objHouseGalleryBoxContainerPicture = objHouseGalleryBoxEntity.appendChild(objTemp);
        
        objTemp = document.createElement('div');
        objTemp.id = 'HouseGalleryBoxEntityText';
        objHouseGalleryBoxEntityText = objHouseGalleryBoxEntity.appendChild(objTemp);

        HouseGalleryOverlayEffect = $('HouseGalleryOverlay').effect('opacity');
        HouseGalleryOverlayEffect.hide();
        
        HouseGalleryBoxEntityEffect = $('HouseGalleryBoxEntity').effect('opacity');

    },
    start: function(element) {
        hideSelectBoxes();
        HouseGalleryOverlayEffect.custom(0,0.8);
        HouseGalleryBoxEntityEffect.hide();
        house_id = element.rel;
        if (!HouseGalleries[house_id]){
            HouseGalleries[house_id] = new Object();
            HouseGalleries[house_id].obj = document.getElementById('house_' + house_id);
            HouseGalleries[house_id].housetitle = document.getElementById('housetitle_' + house_id).innerHTML;
            HouseGalleries[house_id].sections = new Object();
            HouseGalleries[house_id].pictures = new Array();
            HouseGalleries[house_id].pictures_loaded = new Object();
            var childs = HouseGalleries[house_id].obj.getElementsByTagName('div');
            for (var i=0; i<childs.length; i++) {
                if (hasClassName(childs[i],'housegallery,houselayouts')){
                    HouseGalleries[house_id].sections[childs[i].id] = new Object();
                    var anchors = childs[i].getElementsByTagName('a');
                    for (var ii=0;ii<anchors.length;ii++){
                        if (anchors[ii].className!='houseprintlink'){
                            HouseGalleries[house_id].pictures.push(anchors[ii].id);
                        }
                    }
                }
            }
        }
        picsToHide = objHouseGalleryBoxContainerPicture.getElementsByTagName('img');
        for (var i=0;i<picsToHide.length;i++){
            picsToHide[i].style.visibility = 'hidden';
        }
        HouseGalleries[house_id].active_id = element.id;
        HouseGalleries[house_id].active_index = null;
        for (var i=0;i<HouseGalleries[house_id].pictures.length;i++){
            if (HouseGalleries[house_id].active_id==HouseGalleries[house_id].pictures[i]){
                HouseGalleries[house_id].active_index = i;
            }
        }
        myHouseGallery.onResize(true);
        myHouseGallery.navInit();
        objHouseGalleryBoxTitle.innerHTML = HouseGalleries[house_id].housetitle;
        objHouseGalleryBoxEntityLoad.style.visibility = 'visible';
        objHouseGalleryBox.style.display = 'block';
        myHouseGallery.preload(HouseGalleries[house_id].active_index);
        myHouseGallery.showFirst();
        HouseGallery_started = true;
    },
    showFirst: function () {
        loaded_picture_id = myHouseGallery.getLoadedPictureId();
        if (HouseGalleries[house_id].pictures_loaded[loaded_picture_id] && HouseGalleries[house_id].pictures_loaded[loaded_picture_id].loaded) {
            myHouseGallery.picture_change(loaded_picture_id,HouseGalleries[house_id].active_index);
            objHouseGalleryBoxNav.style.visibility = 'visible';
            myHouseGallery.preloadFirst();
            if (xIE4Up){
                busywaiter = window.setInterval(function () {
                    if (!preload_running){
                        window.clearInterval(busywaiter);
                        myHouseGallery.preloadPrevious();
                        busywaiter2 = window.setInterval(function () {
                            if (!preload_running){
                                window.clearInterval(busywaiter2);
                                myHouseGallery.preloadNext();
                                busywaiter3 = window.setInterval(function () {
                                    if (!preload_running){
                                        window.clearInterval(busywaiter3);
                                        myHouseGallery.preloadLast();
                                    }
                                }, 100);
                            }
                        }, 100);
                    }
                }, 100);
            }else{
                myHouseGallery.preloadPrevious();
                myHouseGallery.preloadNext();
                myHouseGallery.preloadLast();
            }
        }
        else {
            window.setTimeout(myHouseGallery.showFirst,100);
        }
    },
    getLoadedPictureId: function (picture_index) {
        if (isNaN(picture_index)){
            return 'HouseGalleryBoxPicture_' + HouseGalleries[house_id].active_id;
        } else {
            return 'HouseGalleryBoxPicture_' + HouseGalleries[house_id].pictures[picture_index];
        }
    },
    onResize: function(initGallery) {
        bodyHeight = document.body.offsetHeight;
        bodyWidth = document.body.offsetWidth;
        if (bodyHeight-(HouseGalleryBox_minMargin*2)>HouseGalleryBox_maxHeight){
            objHouseGalleryBox.style.top = (bodyHeight-HouseGalleryBox_maxHeight)/2 + 'px';
            objHouseGalleryBox.style.height = HouseGalleryBox_maxHeight + 'px';
            objHouseGalleryBox.style.bottom = 'auto';
        }
        else {
            objHouseGalleryBox.style.top = HouseGalleryBox_minMargin + 'px';
            objHouseGalleryBox.style.height = (bodyHeight-(HouseGalleryBox_minMargin*2)) + 'px';
            objHouseGalleryBox.style.bottom = 'auto';
        }
        if (bodyWidth-(HouseGalleryBox_minMargin*2)>HouseGalleryBox_maxWidth){
            objHouseGalleryBox.style.left = (bodyWidth-HouseGalleryBox_maxWidth)/2 + 'px';
            objHouseGalleryBox.style.width = HouseGalleryBox_maxWidth + 'px';
            objHouseGalleryBox.style.right = 'auto';
        }
        else {
            objHouseGalleryBox.style.left = HouseGalleryBox_minMargin + 'px';
            objHouseGalleryBox.style.width = (bodyWidth-(HouseGalleryBox_minMargin*2)) + 'px';
            objHouseGalleryBox.style.right = 'auto';
        }
        if (!initGallery){
            myHouseGallery.entityResize();
        }
    },
    entityResize: function() {
        posTop = objHouseGalleryBoxNav.offsetTop + objHouseGalleryBoxNav.offsetHeight + 10;
        posBottom = objHouseGalleryBoxEntityText.offsetHeight;
        if (posBottom==0){
            posBottom = 20;
        }
        objHouseGalleryBoxContainerPicture.style.top = posTop + 'px';
        objHouseGalleryBoxContainerPicture.style.height = (objHouseGalleryBox.offsetHeight - posTop - posBottom) + 'px';
        avail_width = objHouseGalleryBoxContainerPicture.offsetWidth-15;
        avail_height = objHouseGalleryBoxContainerPicture.offsetHeight-15;
        resizing_picture_id = myHouseGallery.getLoadedPictureId();
        current_picture = HouseGalleries[house_id].pictures_loaded[resizing_picture_id];
        if (current_picture && current_picture.loaded){
            if (current_picture.realwidth<=avail_width && current_picture.realheight<=avail_height){
                current_picture.obj.style.width = 'auto';
                current_picture.obj.style.height = 'auto';
                use_width = current_picture.realwidth;
                use_height = current_picture.realheight;
            }else{
                pc_width = avail_width/current_picture.realwidth;
                pc_height = avail_height/current_picture.realheight;
                if (pc_width<1 && pc_width<pc_height){ 
                    use_pc = pc_width;
                }else{
                    use_pc = pc_height;
                }
                use_width = Math.ceil(current_picture.realwidth*use_pc);
                use_height = Math.ceil(current_picture.realheight*use_pc);
                current_picture.obj.style.width = use_width + 'px';
                current_picture.obj.style.height = 'auto';
            }
            use_top = Math.ceil(((avail_height-use_height)/2))+5;
            use_left = Math.ceil(((avail_width-use_width)/2))+5;
            current_picture.obj.style.top = use_top + 'px';
            current_picture.obj.style.left = use_left + 'px';
        }
        else{
            window.setTimeout(myHouseGallery.entityResize, 100)
        }
    },
    preloadFirst: function () {
        if (HouseGalleries[house_id].active_index>0){
            myHouseGallery.preload(0);
        }
    },
    preloadPrevious: function () {
        if (HouseGalleries[house_id].active_index>1){
            previous_index = HouseGalleries[house_id].active_index-1;
            myHouseGallery.preload(previous_index);
        }
    },
    preloadNext: function () {
        if (HouseGalleries[house_id].active_index<HouseGalleries[house_id].pictures.length-2){
            next_index = HouseGalleries[house_id].active_index+1;
            myHouseGallery.preload(next_index);
        }
    },
    preloadLast: function () {
        if (HouseGalleries[house_id].active_index<HouseGalleries[house_id].pictures.length-1){
            myHouseGallery.preload(HouseGalleries[house_id].pictures.length-1);
        }
    },
    preload: function (picture_index) {
        picture_id = HouseGalleries[house_id].pictures[picture_index];
        loading_picture_id = 'HouseGalleryBoxPicture_' + picture_id;
        if (!HouseGalleries[house_id].pictures_loaded[loading_picture_id]){
            linkObj = document.getElementById(picture_id);
            HouseGalleries[house_id].pictures_loaded[loading_picture_id] = new Object();
            HouseGalleries[house_id].pictures_loaded[loading_picture_id].loaded = false;
            HouseGalleries[house_id].pictures_loaded[loading_picture_id].title = null;
            if (linkObj.title.length>0){
                HouseGalleries[house_id].pictures_loaded[loading_picture_id].title = linkObj.title;
            }
            HouseGalleries[house_id].pictures_loaded[loading_picture_id].description = null;
            objDescription = document.getElementById('description_' + picture_id);
            if (objDescription){
                HouseGalleries[house_id].pictures_loaded[loading_picture_id].description = objDescription.innerHTML;
            }
            HouseGalleries[house_id].pictures_loaded[loading_picture_id].realwidth = Math.ceil(document.getElementById('width_' + picture_id).innerHTML);
            HouseGalleries[house_id].pictures_loaded[loading_picture_id].realheight = Math.ceil(document.getElementById('height_' + picture_id).innerHTML);
            objTemp = document.createElement('img');
            objTemp.id = loading_picture_id;
            objTemp.src = linkObj.href;
            objTemp.alt = '';
            objTemp.style.visibility = 'hidden';
            if (xIE4Up){
                preload_running = true;
                obj_preload_pic = objHouseGalleryBoxContainerPicture.insertBefore(objTemp);
                HouseGalleries[house_id].preloadRunner = window.setInterval(function () {
                    if (!isNaN(obj_preload_pic.offsetWidth) && obj_preload_pic.offsetWidth == HouseGalleries[house_id].pictures_loaded[loading_picture_id].realwidth && !isNaN(obj_preload_pic.offsetHeight) && obj_preload_pic.offsetHeight == HouseGalleries[house_id].pictures_loaded[loading_picture_id].realheight){
                        window.clearInterval(HouseGalleries[house_id].preloadRunner);
                        myHouseGallery.picture_onload(obj_preload_pic);
                        preload_running = false;
                    }
                }, 100);
            } else {
                obj_preload_pic = objHouseGalleryBoxContainerPicture.appendChild(objTemp);
                obj_preload_pic.onload = function (event) {myHouseGallery.picture_onload(this);};
            }
        }
    },
    picture_onload: function (obj) {
        HouseGalleries[house_id].pictures_loaded[obj.id].obj = obj;
        HouseGalleries[house_id].pictures_loaded[obj.id].loaded = true;
    },
    navInit: function () {
        if (HouseGalleries[house_id].active_index>0){
            objHouseGalleryBoxNavFirst.className = '';
            objHouseGalleryBoxNavBack.className = '';
        }else{
            objHouseGalleryBoxNavFirst.className = 'disabled';
            objHouseGalleryBoxNavBack.className = 'disabled';
        }
        if (HouseGalleries[house_id].active_index<HouseGalleries[house_id].pictures.length-1){
            objHouseGalleryBoxNavLast.className = '';
            objHouseGalleryBoxNavNext.className = '';
        }else{
            objHouseGalleryBoxNavLast.className = 'disabled';
            objHouseGalleryBoxNavNext.className = 'disabled';
        }
    },
    navFirst: function() {
        if (HouseGalleries[house_id].active_index>0){
            loaded_picture_id = myHouseGallery.getLoadedPictureId(0);
            if (HouseGalleries[house_id].pictures_loaded[loaded_picture_id] && HouseGalleries[house_id].pictures_loaded[loaded_picture_id].loaded){
                myHouseGallery.picture_change(loaded_picture_id,0);
                myHouseGallery.preloadNext();
            }else{
                window.setTimeout(myHouseGallery.navFirst,100);
            }
        }
    },
    navBack: function() {
        if (HouseGalleries[house_id].active_index>0){
            picture_index = HouseGalleries[house_id].active_index-1;
            loaded_picture_id = myHouseGallery.getLoadedPictureId(picture_index);
            if (HouseGalleries[house_id].pictures_loaded[loaded_picture_id] && HouseGalleries[house_id].pictures_loaded[loaded_picture_id].loaded){
                myHouseGallery.picture_change(loaded_picture_id,HouseGalleries[house_id].active_index-1);
                myHouseGallery.preloadPrevious();
            }else{
                window.setTimeout(myHouseGallery.navBack,100);
            }
        }
    },
    navNext: function() {
        if (HouseGalleries[house_id].active_index<HouseGalleries[house_id].pictures.length-1){
            picture_index = HouseGalleries[house_id].active_index+1;
            loaded_picture_id = myHouseGallery.getLoadedPictureId(picture_index);
            if (HouseGalleries[house_id].pictures_loaded[loaded_picture_id] && HouseGalleries[house_id].pictures_loaded[loaded_picture_id].loaded){
                myHouseGallery.picture_change(loaded_picture_id,HouseGalleries[house_id].active_index+1);
                myHouseGallery.preloadNext();
            }else{
                window.setTimeout(myHouseGallery.navNext,100);
            }
        }
    },
    navLast: function() {
        if (HouseGalleries[house_id].active_index<HouseGalleries[house_id].pictures.length-1){
            picture_index = HouseGalleries[house_id].pictures.length-1;
            loaded_picture_id = myHouseGallery.getLoadedPictureId(picture_index);
            if (HouseGalleries[house_id].pictures_loaded[loaded_picture_id] && HouseGalleries[house_id].pictures_loaded[loaded_picture_id].loaded){
                myHouseGallery.picture_change(loaded_picture_id,HouseGalleries[house_id].pictures.length-1);
                myHouseGallery.preloadPrevious();
            }else{
                window.setTimeout(myHouseGallery.navLast,100);
            }
        }
    },
    picture_change: function(loaded_picture_id,new_active_index) {
        HouseGalleryBoxEntityEffect.hide();
        old_index = HouseGalleries[house_id].active_index;
        if (!isNaN(old_index) && old_index !=new_active_index){
            old_loaded_picture_id = myHouseGallery.getLoadedPictureId(old_index);
            HouseGalleries[house_id].pictures_loaded[old_loaded_picture_id].obj.style.visibility = 'hidden';
        }
        objHouseGalleryBoxEntityLoad.visibility = 'visible';
        HouseGalleries[house_id].active_index = new_active_index;
        HouseGalleries[house_id].active_id = HouseGalleries[house_id].pictures[HouseGalleries[house_id].active_index];
        objHouseGalleryBoxEntityText.innerHTML = '';
        if (HouseGalleries[house_id].pictures_loaded[loaded_picture_id].title){
            objHouseGalleryBoxEntityText.innerHTML += '<div id="HouseGalleryBoxEntityTitle">' + HouseGalleries[house_id].pictures_loaded[loaded_picture_id].title + '</div>';
        }
        if (HouseGalleries[house_id].pictures_loaded[loaded_picture_id].description){
            objHouseGalleryBoxEntityText.innerHTML += '<div id="HouseGalleryBoxEntityDescription">' + HouseGalleries[house_id].pictures_loaded[loaded_picture_id].description + '</div>';
        }
        myHouseGallery.entityResize();
        HouseGalleries[house_id].pictures_loaded[loaded_picture_id].obj.style.visibility = 'visible';
        href_string = HouseGalleries[house_id].pictures_loaded[loaded_picture_id].obj.src
        href_splitted = href_string.split('/');
        new_href_string = href_string.replace(href_splitted[href_splitted.length-1],'') + 'house_printpic_ger.html';
        objHouseGalleryPrint.href = new_href_string;
        objHouseGalleryBoxEntityLoad.style.visibility = 'hidden';
        HouseGalleryBoxEntityEffect.custom(0,1);
        myHouseGallery.navInit();
    },
    end: function() {
        objHouseGalleryBoxEntity.style.visibility = 'hidden';
        objHouseGalleryBox.style.display = 'none';
        HouseGalleryOverlayEffect.custom(0.8,0);
        showSelectBoxes();
        HouseGallery_started = false;
    }
}

house_oldonload = window.onload;
window.onload = function(){
    myHouseGallery = new HouseGallery();
    if (house_oldonload){
        house_oldonload();
    }
}
