/*jquery.lazybox
7/31/2009
*/
(function($) {
$.fn.lazybox=function(o){
       _init();
       options = $.extend({}, defaults, o || {});
       dbox=$.extend({},{
             wrapper:$("#lb_lazybox"),
             window:$("#lb_window"),
             imageholder:$("#lb_imageholder"),
             captionholder:$("#lb_caption"),
             close:$("#lb_closebutton a"),
             overlay:$("#lb_overlay"),
             loader:$('#lb_loader'),
             footer:$('#lb_footer'),
             previous:$('#lb_previous'),
             next:$('#lb_next'),
             prevImg:-1,
             actImg:0,
             nextImg:1,
             loaderdim:{width:options.ajaxwidth,height:options.ajaxheight}
           
       }); 
       var pictures=new Array();
       dbox.close.bind("click",function(e){dbox.wrapper.hide();return false;});
       dbox.next.bind("click",function(e){showHelper(dbox.nextImg,pictures);return false;});
       dbox.previous.bind("click",function(e){showHelper(dbox.prevImg,pictures);return false;}); 
       return this.each(function(id){
                var apic={idto:id,href:this.href,caption:this.title || $(this).text() || this.href,loaded:false,width:0,height:0};
                pictures.push(apic);
         $(this).bind("click",function(e){showHelper(id,pictures);return false;});
         });
};
var defaults={
        ajaxwidth:32,  //sirina na ajax slikata
        ajaxheight:32, //visina na ajax slikata
        paddingLR:5, //kolku px padding kje ima megu bordero i slikata sho kje se prikazuva
        footer:'<a href="http://adamantus.mk">Adamantus</a> &copy; All Rights Reserved' //tekst vo footero      
};
function getType(url){
                var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;
                var urlType = url.toLowerCase().match(urlString);
                return urlType;
            };
function printobj(object){
                var pr='';
                for (var key in object) {
                pr=pr+key+': '+object[key]+'<br>';
                }
               return pr;
            };
function viewport(){
                return {
                    x: $(window).scrollLeft(),
                    y: $(window).scrollTop(),
                    cx: $(window).width(),
                    cy: $(window).height()
                };
            };
function prepareHelper(imgobj,action){
          switch (action)
          {
              case 'show':
                        dbox.loader.hide();
                        dbox.captionholder.html(imgobj.caption);
                        dbox.captionholder.show();
                        dbox.footer.html(options.footer);
                        dbox.footer.show();
                        dbox.previous.show();
                        dbox.next.show();
                        dbox.imageholder.show();break;
              case 'loading':
                        dbox.loader.show();
                        dbox.imageholder.html("");
                        dbox.captionholder.hide();
                        dbox.close.hide();
                        dbox.next.hide();
                        dbox.previous.hide();
                        dbox.imageholder.hide();
                        dbox.footer.hide();
                        position(dbox.loaderdim);
                        dbox.wrapper.show();break;
          }
};
function showHelper(actImg,pictures){
                var imgobj=pictures[actImg]!=undefined?pictures[actImg]:'nopic';
                
                if (getType(imgobj.href)){
                    prepareHelper(imgobj,'loading');
                  if (imgobj.loaded){
                        var dimensions={width:imgobj.width,height:imgobj.height};

                        prepareHelper(imgobj,'show');
                        dbox.actImg=imgobj.idto;
                        var prevImg=dbox.actImg-1;
                        var nextImg=dbox.actImg+1;

                        preloadNext(nextImg,pictures);
                        preloadPrev(prevImg,pictures);
                        
                        dbox.imageholder.html("<img src='"+imgobj.href+"' alt='' />");
                        position(dimensions);
                        dbox.close.show();
                        dbox.wrapper.show();
                    }
                     else{
                         loadImg(actImg,pictures);
                     }
                }
             };
function loadImg(actImg,pictures,action){
           if (typeof action=='undefined') action='loading';
                     var imgobj=pictures[actImg]!=undefined?pictures[actImg]:'nopic';
                      //$('#status').html(printobj(imgobj));
                      if (getType(imgobj.href)){
                      if (!imgobj.loaded){
                            var img=new Image();
                            img.onload=function(){
                                    imgobj.loaded=true;
                                    imgobj.width=this.width;
                                    imgobj.height=this.height;
                                    if (action!='preload') showHelper(actImg,pictures);
                                    img.onload=function(){};
                            }
                            img.src=imgobj.href;
                        }
                    }
};
function preloadNext(nextImg,pictures){
    var nextPic=pictures[nextImg];
               if (nextPic!=undefined){
                   dbox.next.show();
                   if (!(getType(nextPic.href))){
                        preloadNext(nextImg+1,pictures);
                        //dbox.next.hide();
                    }
                    else{
                      dbox.nextImg=nextPic.idto;
                      loadImg(dbox.nextImg,pictures,'preload');
                      //dbox.next.show();
                    }
                }
                else{
                    dbox.next.hide();
                }
};
function preloadPrev(prevImg,pictures){
    var prevPic=pictures[prevImg];
            if(prevPic!=undefined){
                dbox.previous.show();
                if(!(getType(prevPic.href))){
                    preloadPrev(prevImg-1,pictures);
                }
                else{
                    dbox.prevImg=prevPic.idto;
                    loadImg(dbox.prevImg,pictures,'preload');
                }
            }
            else{
                dbox.previous.hide();
            }
};
function preload(actImg,pictures){
        var imgobj=pictures[actImg]!=undefined?pictures[actImg]:'nopic';
        
};
function position(dimensions){
                var de = document.documentElement;
                var w = self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
                var pos=viewport();
                dimensions.width=dimensions.width>0?dimensions.width:options.ajaxwidth;
                dimensions.height=dimensions.height>0?dimensions.height:options.ajaxheight-22;
                dbox.window.css({width:(dimensions.width)+"px",left: ((w - dimensions.width)/2)+"px",top:(pos.y+15)+"px",paddingLeft:options.paddingLR,paddingRight:options.paddingLR});
                dbox.imageholder.css({width:(dimensions.width)+"px",height:(dimensions.height)+"px"});
            };

function _init()
{
    $(document.body)
    .append("<div id='lb_lazybox'></div>")
    .children('#lb_lazybox').hide()
    .append("<div id='lb_overlay'></div>")
    .append("<div id='lb_window'></div>")
    .children('#lb_window')
    .append("<div id='lb_caption'></div><div id='lb_closebutton'><a href='#'>затвори</a></div>")
    .append("<div id='lb_imageholder'></div>")
    .append("<div id='lb_previous' class='ctrbtns'><a href='#'>претходна</a></div>")
    .append("<div id='lb_next' class='ctrbtns'><a href='#'>следна</a></div>")
    .append("<div id='lb_loader'></div>")
    .append("<div id='lb_footer'></div>");
    
};
})(jQuery);
