var RESOSCO_Match = new Class({
   initialize: function(struct) {
      if (null != struct.match_id) {
         this.id = struct.match_id;
      }
      this.setProperties(struct);
   },
   
   setProperties: function(struct) {
      this.events = new Array();
      if (null != struct.events) {
         this.events = struct.events;
      }
      var properties = {}
      $each(struct, function(value, key){
         properties[key] = value;
      });
      this.properties = properties;
      
   },

   onClose: function() {
   },
   
   updateMatch: function(properties) {
      this.setProperties(properties);
      this.onMatchUpdate();
   },
   
   onMatchUpdate: function() {
      var elementsToUpdate = new Array();
      var match = this;
      $ES('.resosco_standalone_match_id_' + this.id + ', .resosco_list_match_id_' + this.id).each(function(el){
         el = $(el);
         $ES('.resosco_match_score', el).each(function(ele){
            if (null == match.properties['score']) {
               return;
            }
            ele = $(ele);
            if (ele.innerHTML != match.properties['score']) {
               ele.innerHTML = match.properties['score'];
            }
         });
         
         $ES('.resosco_match_details', el).each(function(ele){
            if (null == match.properties['status']) {
               return;
            }
            if ('finished' == match.properties['status']) {
               if (ele.innerHTML != RESOSCO_Language.translate('finished')) {
                  ele.innerHTML = RESOSCO_Language.translate("finished");
                  ele.removeClass('resosco_match_active')
               }
            }
            
            if (null == match.properties['details'] || null == match.properties['details']['period'] || null == match.properties['details']['minute']) {
               return;
            }
            
            ele = $(ele);
            if ('first_half' == match.properties['details']['period'] || 'second_half' == match.properties['details']['period']) {
               if (ele.innerHTML != match.properties['details']['minute'] + "'") {
                  ele.innerHTML = match.properties['details']['minute'] + "'";
               }
               if (!ele.hasClass('resosco_match_active')) {
                  ele.addClass('resosco_match_active')
               }
            }
            
            if ('extra_time' == match.properties['details']['period']) {
               if (ele.innerHTML != RESOSCO_Language.translate('ET')) {
                  ele.innerHTML = RESOSCO_Language.translate("ET");
               }
               if (!ele.hasClass('resosco_match_active')) {
                  ele.addClass('resosco_match_active')
               }
            }
            
            if ('break' == match.properties['details']['period']) {
               if (ele.innerHTML != RESOSCO_Language.translate('HT')) {
                  ele.innerHTML = RESOSCO_Language.translate("HT");
               }
               ele.removeClass('resosco_match_active')
            }
            
            if ('penalty_shootout' == match.properties['details']['period']) {
               if (ele.innerHTML != RESOSCO_Language.translate('PEN')) {
                  ele.innerHTML = RESOSCO_Language.translate("PEN");
               }
               ele.removeClass('resosco_match_active')
            }
            
         });
         
         $ES('.resosco_match_events_outer', el).each(function(ele){
            if (null == match.properties['events'] || null == match.properties['events']['checksum'] || null == match.properties['events']['items']) {
               return;
            }
            
//            alert('zopa');
            
            ele = $(ele);
            var eventsChecksum = '';
            var checksumClass = '';
            var classes = ele.getProperty("class");
            $each(classes.split(' '), function(klass){
               if (-1 == klass.indexOf('resosco_match_events_checksum_')) {
                  return;
               }
               checksumClass = klass;
               eventsChecksum = klass.replace('resosco_match_events_checksum_', '');
            });
            
            if (match.properties['events']['checksum'] != eventsChecksum) {
               ele.removeClass(checksumClass);
               ele.addClass('resosco_match_events_checksum_' + match.properties['events']['checksum']);
               var eventsElement = match.renderEvents();
               if (null != eventsElement) {
                  ele.innerHTML = '';
                  ele.appendChild(eventsElement);
               }
            }
         });         
         
      });
   },
   
   renderMatch: function() {
      
      var matchWrapper = new Element('div');
      matchWrapper.addClass('resosco_standalone_match_wrapper');
      
      var matchContainer = new Element('div');
      matchContainer.addClass('resosco_standalone_match_outer');
      matchContainer.addClass('resosco_standalone_match_id_' + this.id);
      matchWrapper.appendChild(matchContainer);
      
      var closer = new Element('div');
      closer.addClass('resosco_standalone_match_closer');
      closer.innerHTML = RESOSCO_Language.translate('close');
      matchContainer.appendChild(closer);
      
      
      var matchObj = this;
      
      closer.addEvent('click', function(){
         if (null != matchObj.onClose) {
            matchObj.onClose();
         }
         matchWrapper.remove();
      });
      
      var matchInnerContent = new Element('div');
      matchContainer.appendChild(matchInnerContent);
      
      
      var detailsContainer = new Element('div');
      detailsContainer.addClass('resosco_standalone_match_details resosco_match_details');
      matchInnerContent.appendChild(detailsContainer);
      
      if ('not_started' == this.properties.status) {
         detailsContainer.innerHTML = ''; 
      }
      
      if ('finished' == this.properties.status) {
         detailsContainer.innerHTML = RESOSCO_Language.translate('finished'); 
      }
      
      if ('active' == this.properties.status && null != this.properties.details) {
         if ('first_half' == this.properties.details.period || 'second_half' == this.properties.details.period) {
            detailsContainer.addClass("resosco_match_active");
            detailsContainer.innerHTML = this.properties.details.minute + "'"; 
         }
         if ('extra_time' == this.properties.details.period) {
            detailsContainer.addClass("resosco_match_active");
            detailsContainer.innerHTML = RESOSCO_Language.translate('ET'); 
         }
         if ('break' == this.properties.details.period) {
            detailsContainer.innerHTML = RESOSCO_Language.translate('HT'); 
         }
         if ('penalty_shootout' == this.properties.details.period) {
            detailsContainer.innerHTML = RESOSCO_Language.translate('PEN'); 
         }
      }
      
      
      var teamsContainer = new Element('div');
      teamsContainer.addClass('resosco_standalone_match_teams');
      matchInnerContent.appendChild(teamsContainer);
      if (null != this.properties.teams) {
         teamsContainer.innerHTML = "<span class='resosco_standalone_match_team resosco_standalone_match_team_hosts'>" + RESOSCO_Language.translate(this.properties.teams.hosts) + '</span>'; 
         teamsContainer.innerHTML += "<span class='resosco_standalone_match_team resosco_standalone_match_team_guests'>" + RESOSCO_Language.translate(this.properties.teams.guests) + '</span>'; 
      }
      
      var scoreContainer = new Element('div');
      scoreContainer.addClass('resosco_standalone_match_score resosco_match_score');
      matchInnerContent.appendChild(scoreContainer);
      if (null != this.properties.score) {
         var score = this.properties.score;
         score = score.replace(/(\d+)[^\d](\d+)/, "$1 - $2");
         scoreContainer.innerHTML = score; 
      }
      
      var eventsContainer = new Element('div');
      eventsContainer.addClass('resosco_standalone_match_events_outer resosco_match_events_outer');
      if (null != this.events['checksum']) {
         eventsContainer.addClass('resosco_match_events_checksum_' + this.events['checksum']);
      }
      
      matchInnerContent.appendChild(eventsContainer);
      if (null != this.events) {
         var eventsElement = this.renderEvents();
         if (null != eventsElement) {
            eventsContainer.appendChild(eventsElement);
            eventsContainer.innerHTML = eventsContainer.innerHTML;
         }
      }
      return matchWrapper;
   },
   
   renderEvents: function() {
      if (null == this.events || null == this.events['items']) {
         return null;
      }
      var eventsContainer = new Element('table'); 
      eventsContainer.addClass("resosco_match_events_table");
      eventsContainer.setProperty('width', '99%');
      eventsContainer.setProperty('cellspacing', '0');
      eventsContainer.setProperty('cellpadding', '0');
      var i = 0;
      $each(this.events['items'], function(event){
         i++;
         var eventContainer = new Element('tr');
         eventContainer.addClass('resosco_match_events_table_row');
         
         if ((i%2)) {
            eventContainer.addClass('resosco_table_row_even');
         }
         
         if ('og' == event.type || 'pen' == event.type) {
            event.player += ' (' + RESOSCO_Language.translate(event.type) + ')';
            event.type = 'goal'
         }
         eventContainer.addClass('resosco_event_type_' + event.type);
         eventContainer.addClass('resosco_event_team_' + event.team.value);
         
         
         var eventPart = new Element('td');
         eventPart.addClass('resosco_match_events_table_cell');
         eventPart.addClass('resosco_match_events_table_cell_minute');
         eventPart.innerHTML = event.minute + "'";
         eventContainer.appendChild(eventPart);
         
         var eventPart = new Element('td');
         eventPart.addClass('resosco_match_events_table_cell');
         eventPart.addClass('resosco_match_events_table_cell_score');
         eventContainer.appendChild(eventPart);
         if ('goal' == event.type) {
            eventPart.innerHTML = "[" + event.score + "]";
         } else {
            eventPart.innerHTML = "&nbsp;";
         }
         
         var eventPart = new Element('td');
         eventPart.addClass('resosco_match_events_table_cell');
         eventPart.addClass('resosco_match_events_table_cell_player');
         eventContainer.appendChild(eventPart);
         eventPart.innerHTML = RESOSCO_Language.translate(event.player);
         
         eventsContainer.appendChild(eventContainer);
      });
      
      return eventsContainer;
   }
    
});

RESOSCO_Match.getInstance = function(matchId) {
   if (null == RESOSCO_matches[matchId]) {
      return null;
   } 
   return RESOSCO_matches[matchId];
}
