
var Photo365Nice = function(){
    
    this.count2level = [1,3,5,7,9,11,13,15,17,20];
    
    this.vote_images = new Array(
        "/files/photo365/nice_lv0.gif",
        "/files/photo365/nice_lv1.gif",
        "/files/photo365/nice_lv2.gif",
        "/files/photo365/nice_lv3.gif",
        "/files/photo365/nice_lv4.gif",
        "/files/photo365/nice_lv5.gif",
        "/files/photo365/nice_lv6.gif",
        "/files/photo365/nice_lv7.gif",
        "/files/photo365/nice_lv8.gif",
        "/files/photo365/nice_lv9.gif",
        "/files/photo365/nice_lv10.gif"
    );
    
    this.todays_vote_count = 0;
    
    this.elem_nice_button      = null;
    this.elem_total_count_area = null;
    this.elem_total_count      = null;
    this.elem_vote_image       = null;
    this.elem_photo_id         = null;
    this.elem_swf_id           = null;
    
    this.resetVoteCount = null;
    
    if ( arguments.length ){
        var args = arguments[0];
        if ( args.vote_images ){
            this.vote_images = args.vote_images;
        }
        if ( args.elem_nice_button ){
            this.elem_nice_button = args.elem_nice_button;
        }
        if ( args.elem_total_count_area ){
            this.elem_total_count_area = args.elem_total_count_area;
        }
        if ( args.elem_total_count ){
            this.elem_total_count = args.elem_total_count;
        }
        if ( args.elem_vote_image ){
            this.elem_vote_image = args.elem_vote_image;
        }
        if ( args.elem_photo_id ){
            this.elem_photo_id = args.elem_photo_id;
        }
        if (args.elem_swf_id){
            this.elem_swf_id = args.elem_swf_id;
        }
    }
    
    var _self = this;
    
    
    // 画像の先読み
    for ( var i = 0; i < this.vote_images.length; i++ ){
        jQuery("<img>").attr("src", this.vote_images[i]);
    }
    
    
    jQuery(function($){
        /********************************
         * Utility
         ********************************/
        var getSwfName = function(str) {
            if (navigator.appName.indexOf("Microsoft") != -1) {
                return window[str];
            }else {
                return document[str];
            }
        }
        /**
         * todays_vote_countを制御するオブジェクトを返す
         */
        var setVoteCount = function(img) {
            var $void_img = jQuery(img);
            var vote_count = Number($void_img.attr('alt'));
            
            return {
                get : function() {
                    return vote_count;
                },
                set : function(n) {
                    vote_count = n;
                    changeLevel($void_img, vote_count);
                },
                add : function() {
                    vote_count += 1;
                    //alert(_self.elem_swf_id);
                    getSwfName(_self.elem_swf_id).setTodaysVoteCount( vote_count );
                    _self.tc.add();
                    changeLevel($void_img, vote_count);
                }
            }
        }
        /**
         * total_count を制御するオブジェクト
         */
        var setTotalCount = function(elem) {
            var $tc = jQuery(elem);
            var total_count = Number($tc.text()) || 0;
            return {
                get : function() {
                    return total_count;
                },
                add : function() {
                    total_count += 1;
                    $tc.text( total_count );
                }
            }
        }
        /**
         *    カウント・レベルの変更
         */
        var changeLevel = function($img, c) {
            _self.todays_vote_count = c;
            
            var level = 10;
            for ( var i=0, l=_self.count2level.length; i < l; i+=1 ){
                if ( c < _self.count2level[i] ){
                    level = i;
                    break;
                }
            }
            var src = _self.vote_images[level];
            $img.attr('alt', c).attr("src", src);
            
            return this;
        }
       
        /********************************
         * initialize
         ********************************/
        var init = function() {
            _self.vc = setVoteCount(_self.elem_vote_image);
            _self.todays_vote_count = _self.vc.get();
            
            _self.tc  = setTotalCount(_self.elem_total_count);
            
            _self.resetVoteCount = function(c) {
            	c = Number(c);
            	if(!c) { c = 0; }
            	if(_self.todays_vote_count < c) {
            		_self.vc.set( c );
            	}
            }
            var $btn = jQuery(_self.elem_nice_button);
            $btn.bind('click',{self:_self}, niceClickEventListener);
            if(_self.vc.get() >= 20) {
            	$btn.addClass('disabled');
            }
        }
        
        /********************************
         * EventListener
         ********************************/
        var niceClickEventListener = function(evt) {
            var t = evt.data.self;
            var c = _self.vc.get();

            if( c >= 20 ) {
            	jQuery(_self.elem_nice_button).addClass('disabled');
                return false;
            }
            if(jQuery(_self.elem_total_count_area)[0].style.display == 'none') {
                jQuery(_self.elem_total_count_area).show();
            }
            
            t.vc.add();
            $.get("/photo365/nice/" + _self.elem_photo_id);
            return false;
        }
        
        init();
        
    });
    
};

