var jmycarousel=function()
{

    
    jmycarousel.parse_tpl=function(item)
    {
        var str=jmycarousel.tpl;
        var strFunc =
        "var p=[],print=function(){p.push.apply(p,arguments);};" +
                    "with(obj){p.push('" +
        str.replace(/[\r\t\n]/g, " ")
           .replace(/'(?=[^#]*#>)/g, "\t")
           .split("'").join("\\'")
           .split("\t").join("'")
           .replace(/<#=(.+?)#>/g, "',$1,'")
           .split("<#").join("');")
           .split("#>").join("p.push('")
           + "');}return p.join('');";

            var func = new Function("obj", strFunc);
            var str=func(item);
            return html=$(str);
    },
    this.init=function(ob)
    {
        // reset
    jmycarousel.carousel_item='';
    jmycarousel.url='';
    jmycarousel.tpl='\<div class="carousel_object">\
                            <a href="<#=url#>">\
                                    <img src="<#=image#>"  />\
                                    <#=title#>\
                            </a>\
                            <div>\
                            ';
                            
                            
    jmycarousel.visible=1;
    jmycarousel.scroll=1;
    jmycarousel.buttonNextHTML=true;
    jmycarousel.buttonPrevHTML=true;
    jmycarousel.vertical=false;
    jmycarousel.start=0;
    
    
    
        if (ob.carousel_item) jmycarousel.carousel_item=ob.carousel_item;
        if (ob.url) jmycarousel.url=ob.url;
        if (ob.tpl) jmycarousel.tpl=ob.tpl;
        if (ob.onLoadSuccess) jmycarousel.onLoadSuccess=ob.onLoadSuccess;
        if (ob.onBeforeAnimation) jmycarousel.onBeforeAnimation=ob.onBeforeAnimation;
        if (ob.buttonNextHTML) jmycarousel.buttonNextHTML=ob.buttonNextHTML;
        if (ob.buttonPrevHTML) jmycarousel.buttonPrevHTML=ob.buttonPrevHTML;
        if (ob.oninitCallback) jmycarousel.oninitCallback=ob.oninitCallback;
        if (ob.vertical) jmycarousel.vertical=ob.vertical;
        if (ob.visible) jmycarousel.visible=ob.visible;
        if (ob.scroll) jmycarousel.scroll=ob.scroll;
        if (ob.start) jmycarousel.start=ob.start;
        
        

    
        $(jmycarousel.carousel_item).jcarousel({
                itemLoadCallback: function(carousel,state)
                {
                    var total_items=0;
                    if (state!='init')
                    {
//                        console.log(carousel.last);
                        if (carousel.has(carousel.first)) 
                        {
//                            return;
                        }
                        return;
                    }
                    
                    
                        for (var i = carousel.first; i <= carousel.last; i++) {
                            var html=jmycarousel.parse_tpl({url: '', title: '', image: '', id: ''});
                            carousel.add(i, html);
                        }

                    var zdat=new Array();
                    $.ajax({
                      url: carousel.options['url'],
                      dataType: 'json',
                      data:
                            {
                                first: carousel.first, 
                                last: carousel.last, 
                                state: state
                            },
                      success: function(json) 
                      { 
                        carousel.size(jQuery.jcarousel.intval(json.total_items));
//                        carousel.options.size=json.total_items;
                        total_items=json.total_items;

                        $.each(json.items, function(i,item)
                        {
                            var html=jmycarousel.parse_tpl(item);
                            zdat.push(html);
                        });
                        

                        var mc=carousel.first;
                        
                        $.each(zdat,function(k,v)
                        {
                            carousel.add(mc, v);
                            mc++;
                        })
//                        console.log(zdat);
                          if (typeof jmycarousel.onLoadSuccess=="function")
                          {
                              jmycarousel.onLoadSuccess(carousel, json);
                          }
                      }
                    });
                }, 
                initCallback: function(carousel,state)
                {
                  carousel.size(2);



                    carousel.carouselid = this.carouselid;
                    if (typeof jmycarousel.oninitCallback=="function")
                    {
                      jmycarousel.oninitCallback(carousel,state);
                    }

                }, 
                itemVisibleOutCallback: 
                {
                  onBeforeAnimation: function(carousel, item, i, state, evt)
                    {
                          if (typeof jmycarousel.onBeforeAnimation=="function")
                          {
                              jmycarousel.onBeforeAnimation(carousel, item, i, state, evt);
                          }
                    },
                  onAfterAnimation: function(carousel, item, i, state, evt)
                  {
                          if (typeof jmycarousel.onBeforeAnimation=="function")
                          {
                              jmycarousel.onAfterAnimation(carousel, item, i, state, evt);
                          }
                  }
                },
                carouselid: jmycarousel.carousel_item,
                visible: jmycarousel.visible, 
                scroll:jmycarousel.scroll,
                start: jmycarousel.start,
                url: jmycarousel.url,
                vertical: jmycarousel.vertical
        }); 

    }

}
var mycarousel=new jmycarousel(); 

