
/**
* Get reusable DOM Elements
*/
g.init.elems=function(){
    g.elems={
        gal:$('#galerie ul.outer'),
        lis:$('#galerie ul.hidden li'),
        src_gal:$('#galerie ul.hidden'),
        gal_nav_inner:$('#gal_nav .inner'),
        gal_nav_list:$('#gal_nav ul'),
        footers:$('.footer')
    };
    if(typeof gal_data!='undefined'){
           
    }else{
        g.liNum=g.elems.lis.length;
    }
};
/**
* Check if a currentLi is applicable
*/
g.setCurLi=function(to){
    to=parseInt(to,10);   
    if(to < 0 || to >= g.liNum){
        return false;
    }else{
        g.currentLi=to;
        return true;
    }
};
g.doAnim=function(dir){
    g.elems.gal.find('li').each(function(){
        var newLeft=parseInt($(this).attr('left'),10)-($(window).width()*((dir=='left')?1:-1));
        if(newLeft<30 && newLeft>-30) newLeft=0;
        $(this).attr('left',newLeft);
        if(g.transition){
            this.style[g.transition] = 'all 0.5s ease-out';
            this.style[g.transform] = 'translate3d('+newLeft+'px, 0, 0)';
        }else{
            $(this).animate({
                'left':newLeft
            },500);
        }
    });
};
g.addLi=function(dir,num){
    var li=$(g.elems.lis[num]).clone();
    var left=$(window).width();
    if(dir=='left') left*=-1;
    if(dir=='none') left=0;
    li.attr('left',left);
    if(g.transition){
        li[0].style[g.transform] = 'translate3d('+left+'px, 0, 0)';
    }else{
        li.css('left',left);
    }
    g.elems.gal.append(li);
}
/**
* Jump to a specific image within a galerie
*/
g.jumpTo.li=function(noRemove){
    if(g.currentLi==g.activeItem) return;
    if(typeof gal_data!='undefined'){
        g.jumpTo.cv();
        return;
    }
    var footer_to_show=$('.footer[proj='+$(g.elems.lis[g.currentLi]).attr('belongs_to_project')+']');
    if(footer_to_show.length){
        g.elems.footers.hide();
        footer_to_show.show();
    };
    if(isiPad){
        var left=g.currentLi*($(window).width()+1)*-1;
        $('ul.hidden').css({
            '-webkit-transition-duration': '1169ms',
            '-webkit-transform': 'translate3d('+left+'px, 0px, 0px) scale(1)'
        });
        return;

		
    }
    for(var i=g.currentLi-2;i<g.currentLi+2;i++) {
        g.loadImg($(g.elems.lis[i]));
    }
   
    if(!noRemove || noRemove.type) g.elems.gal.find('li:first').remove();
    if(g.currentLi>g.activeItem){
        g.addLi('right',g.currentLi);
        setTimeout(function(){
            g.doAnim('left');
        },10);
    }else{
        g.addLi('left',g.currentLi);
        setTimeout(function(){
            g.doAnim('right');
        },10);
    }
    g.activeItem=g.currentLi;
};
/**
* Load an image
*/
g.loadImg=function(li){
    if(!li || li.hasClass('loaded')) return;
	(function(){
		var img=li.addClass('loaded').find('img');
		img.attr('src',img.attr('l_src'));
		
	}());
};
/**
* Set the surounding uls width
*/ 
g.setGalWidth=function(){
    loadedImgs=1+g.elems.gal.find('li.loaded:last').attr('gal_nr');
    g.elems.gal.css('width',(loadedImgs*$(window).width()));

};

/**
 * Slide the Gallery
 */
g.init.slide_gal_img=function(){ 
    var offset=0,
    goRight=function(noRemove){
        if(g.setCurLi(g.currentLi+1)){
            g.jumpTo.li(noRemove||false);
        };
    },
    goLeft=function(noRemove){
        if(g.setCurLi(g.currentLi-1)){
            g.jumpTo.li(noRemove||false);
        };
    };
    /**
    * Clicking
    */
    $('#gal_ctrl div.left,div.cur.left').click(goLeft);
    $('#gal_ctrl div.right,div.cur.right').click(goRight);
    $('div.cur.center').click(function(){
        var project_id=$('ul.hidden li[gal_nr="'+g.currentLi+'"]').attr('belongs_to_project');
		if(cfg.isStart){
            document.location.href=cfg.baseUrl+'grid/aktuelle_projekte';
        }else{
			document.location.href=cfg.baseUrl+'grid/proj_id/'+project_id;
        }
    });
    /**
     * iPad Behaviour
     */
    if(isiPad){
        /**
         * Global Drag-Flag
         **/
        g.galBeingDragged=false;
        /**
         * Sub Nav
         **/
        $('.footer').click(function(){
            g.htz_handler.bottom(true);
			g.gal_nav_out=true;
        });
		document.getElementById('galerie').addEventListener('touchstart',function(){
			if(g.gal_nav_out){
                g.gal_nav_out=false;
                g.htz_handler.bottom(false);
            }
		},false);
        $(window).click(function(){
            g.htz_handler.bottom_right(false);
        });
        $('#sub_nav_wrapper').css('width',$(window).width());

        var sub_width=0;
		
        $('#sub_nav li').each(function(){
            sub_width+=$(this).width()+1;
        });
        $('#sub_nav').css('width',sub_width);
        $('#gal_nav li').removeClass('anim');
        var sub_nav=new iScroll('sub_nav_wrapper',{
            vScroll:false
        });
        $('#galerie ul.hidden').css({
            'width':$(window).width()*($('#galerie ul.hidden li').length),
            'height':$(window).height()
        }).show();
        $('#galerie ul.hidden li').css({
            'width':$(window).width(),
            'height':$(window).height()
        }).show().each(function(){
            var img=$(this).find('img');
            img.attr('src',img.attr('l_src'));
        });
        $('#galerie ul.outer').remove();
        $(window).load(function(){
			
            var gal_scroll=new iScroll('galerie',{
                vScroll:true			
            });
            var sub_nav=new iScroll('sub_nav_wrapper',{
                vScroll:false
            });
            var full_left=($('ul.hidden').width()-$(window).width());
	
            $('ul.hidden').css({
                '-webkit-transition-duration': '200ms',
                '-webkit-transform': 'translate3d(-'+full_left+'px, 0px, 0px) scale(1)'
            });
		
            setTimeout(function(){
                g.init.setStartPos(true);
                setTimeout(function(){
                    $('#ipad_loader').fadeOut(600,function(){
                        $('#ipad_loader').remove();
                    });
                },300);
            },300);
        });
	

		
		
    };
};
/**
 * Initialize the Galerie
 */
g.init.galerie=function(){
    g.elems.lis.each(function(i){
        $(this).attr('gal_nr',i);
    });
};

/**
* Set the Dimensions
*/
g.init.setDimensions=function(){
    $('#galerie ul.outer li,#galerie,ul.hidden li').css({
        width: $(window).width(),
        height:$(window).height()
    });		
    g.elems.gal.css({
        'height':$(window).height(),
        'width':$(window).width()*2
    });		
    $('ul.hidden').css('width',$('ul.hidden li').length*$(window).width());
    $(window).resize(function(){
        g.init.setDimensions();
        g.jumpTo.li();
    });
};
/**
 * Galerie Subnavigation
 */
g.init.sub_nav=function(){
    sub_nav_z_index=8;      
    $('#gal_nav li').hover(function(){
        sub_nav_z_index++;
        $(this).css({
            'z-index':sub_nav_z_index
        });
    },function(){
        }).click(function(){
        if(typeof gal_data!="undefined"){
            var target=parseInt($(this).attr('img_id'),10);
            target=g.index_to_id[target];
        }else{
            var target=g.elems.src_gal.find('li[img_id="'+$(this).attr('img_id')+'"]').attr('gal_nr');
        }
        if(g.setCurLi(target)) g.jumpTo.li();
    });
};
/**
* Project-Wise Navigation
*/
g.init.projectNav=function(){
    $('.footer .proj_sel span.footer_outer').click(function(e){
        e.stopPropagation();
        if(g.setCurLi($('#galerie ul.hidden li[proj_id="'+$(this).parent().attr('proj_id')+'"]').attr('gal_nr'))) g.jumpTo.li();
    })
};
/**
 * Hotzones
 */
g.init.hot_zones=function(){
    var gal_scroll_speed=200;
    var get_gal_width=function(){
        var ul_width=0;
        $('#gal_nav li').each(function(){
            ul_width+=$(this).width();
        });
        return ul_width-$(window).width();
    }
    g.htz_handler={
        'top_left':function(s){
            $('#gal_ctrl .left')["fade"+((s)?'In':'Out')](400);
        },
        'top_right':function(s){
            $('#gal_ctrl .right')["fade"+((s)?'In':'Out')](400);
        },
        'bottom_left':function(s){
            var dur=Math.abs(parseInt(g.elems.gal_nav_list.css('margin-left'),10)/100*gal_scroll_speed);
            if(s){
                g.elems.gal_nav_list.animate({
                    'margin-left':0
                },dur,'linear');
            }else{
                g.elems.gal_nav_list.stop();
            }
        },
        'bottom_right':function(s){
            var w=get_gal_width();
            var dur=(w-parseInt(g.elems.gal_nav_list.css('margin-left'),10))/100*gal_scroll_speed;
            if(s){
                g.elems.gal_nav_list.animate({
                    'margin-left':-w
                },dur,'linear');
            }else{
                g.elems.gal_nav_list.stop();
            }
        },
        'bottom':function(s){
            g.elems.gal_nav_inner.animate({
                'margin-top':((s)?0:140)
            },600);
        }
    };
    /**
     * Track Mouse Movements
     */
    g.hot_zone_state=false;
    if(isiPad) return;
    $(document).mousemove(function(e){
        var w=$(window).width()/5,
        h=$(window).height()/5,
        x=e.pageX,
        y=e.pageY,
        isIn=function(where){
            if(g.hot_zone_state==where) return;
            if(g.hot_zone_state) g.htz_handler[g.hot_zone_state](false);
            if(where) g.htz_handler[where](true);
            g.hot_zone_state=where;
        };
        if( x < w && y < 4*h){
            isIn('top_left');
            return;
        }
        if( x < w && y > (5*h)-140){
            isIn('bottom_left');
            return;
        }
        if(y > (5*h)-200){
            if(!g.showBottom){
                g.showBottom=true;
                g.htz_handler.bottom(true);
            }
        }else{
            if(g.showBottom){
                g.showBottom=false;
                g.htz_handler.bottom(false);
            }
        }
        if( x > 4*w && y < 4*h){
            isIn('top_right');
            return;
        }
        if( x > 4*w && y > (5*h)-140){
            isIn('bottom_right');
            return;
        }
        isIn(false);
    });
};
/**
* Sets the Start-Position
*/
g.init.setStartPos=function(now){
    var set=function(){
        if(typeof start_img_id!="undefined"){
            setTo=$('#galerie ul.hidden li[img_id="'+start_img_id+'"]').attr('gal_nr');
        }else{
            setTo=1;
        }
        g.setCurLi(setTo);
        g.jumpTo.li();
    };
    if(!isiPad || now) set();
};
/**
 * Initialize the entire site on document ready
 */
$(function(){
    var bootOrder=[
    "elems",
    "detect_device",
    "slide_gal_img",
    "galerie",
    "setDimensions",
    "sub_nav",
    "projectNav",
    "hot_zones",
    "process_gal_data"
    ];
    for(var i in bootOrder) {
        if(g.init[bootOrder[i]]) g.init[bootOrder[i]]();
    }
    g.loadImg($(g.elems.lis[0]));
    g.loadImg($(g.elems.lis[1]));
    g.addLi('none',0);
    g.addLi('right',1);
    g.init.setStartPos();
});
