var IYH = {
  dcTime: 250,     // doubleclick time
  dcDelay: 100,    // no clicks after doubleclick
  dcAt: 0,         // time of doubleclick
  savEvent: null,  // save Event for handling doClick()
  savEvtTime: 0,   // save time of click event
  savTO:null,      // handle of click setTimeOut
  
  hadDoubleClick: function() {
   var d = new Date();
   var now = d.getTime();
   if ((now - IYH.dcAt) < IYH.dcDelay) {
     return true;
   }
   return false;
 },
 
 smartClick: function(which) {
   switch (which) {
     case "click": 
       // If we've just had a doubleclick then ignore it
       if (IYH.hadDoubleClick()) return false;
         
       // Otherwise set timer to act.  It may be preempted by a doubleclick.
       IYH.savEvent = which;
       d = new Date();
       IYH.savEvtTime = d.getTime();
       IYH.savTO = setTimeout("IYH.doClick(IYH.savEvent)", IYH.dcTime);
       break;
     case "dblclick":
       return IYH.doDoubleClick(which);
       break;
     default:
   }
   
   return false;
 },
 
 doClick: function(which) {
   // preempt if DC occurred after original click.
   if (IYH.savEvtTime - IYH.dcAt <= 0) {
     return false;
   }
   
   window.location = $('logo_box').href;
 },
 
 doDoubleClick: function(which) {
   var d = new Date();
   IYH.dcAt = d.getTime();
   if (IYH.savTO != null) {
     clearTimeout( IYH.savTO );          // Clear pending Click  
     IYH.savTO = null;     
   }
   
   window.location = '/admin';
 }
}

var Admin = {
  Results: {
    wrestlers: Array(),
    matches: 0,
    
    addWrestler:function(id, name) {
      if(id < 1 || !name) return;
      Admin.Results.wrestlers[Admin.Results.wrestlers.length] = {'id': id, 'name': name }
    },
    
    addMatch: function(winners, losers, type, after) {
      // Increment match count
      Admin.Results.matches++;
      
      // Get a box for the winners and a box for the losers
      var winners = Admin.Results.wrestlerSelectBox(winners, 'winners');
      var losers = Admin.Results.wrestlerSelectBox(losers, 'losers');
      
      // Get field and other objects
      var canvas       = $('canvas');
      var matchset     = Builder.node('div', {'className': 'matchSet', 'id': 'match_' + Admin.Results.matches});      
      var winner_field = Forms.addField('Winners', winners, true,'');
      var loser_field  = Forms.addField('Losers', losers, true,'');
      var type_field   = Admin.Results.typeField(type);
      var after_field  = Admin.Results.afterField(after);
      var remove_link  = Builder.node('a', {'className':'rightLink', 'onclick': "Element.remove('match_" + Admin.Results.matches + "');"} );
      var remove_wrap  = Builder.node('div', {'className':'rightLinkWrap'});
      remove_link.innerHTML = 'Remove This Match';
      remove_wrap.appendChild(remove_link);
            
      matchset.appendChild(winner_field);
      matchset.appendChild(loser_field);
      matchset.appendChild(type_field);
      matchset.appendChild(after_field);
      matchset.appendChild(remove_wrap);
      
      canvas.appendChild(matchset);
      
      return false;  // Don't let any links fire
    },
    
    wrestlerSelectBox: function(selections, type) {
      var box = Builder.node('select', { 'multiple': true, 'size': 5, 'name':type + '[' + (Admin.Results.matches - 1) + '][]' });
      for(var i = 0; i < Admin.Results.wrestlers.length; i++) {
        var wrestler = Admin.Results.wrestlers[i];
        var opt = new Option(wrestler.name, wrestler.id);
        if(Admin.Results.wrestlerInArray(wrestler.id, selections))
          opt.selected = true;        
        
        box.options[box.options.length] = opt;
      }
      
      return box;
    },
    
    wrestlerInArray: function(id, selected_ids) {
      var arr = selected_ids.split(',');
      for(var n = 0; n < arr.length; n++)
        if(id == arr[n]) return true;
      
      return false;
    },
    
    typeField: function(type) {
      var field = Builder.node('select', {'name':'type[' + (Admin.Results.matches - 1) + ']'});
      field.options[field.options.length] = new Option('Pinfall','pinfall');
      field.options[field.options.length] = new Option('Submission','submission');
      field.options[field.options.length] = new Option('Disqualification','disqual');
      field.options[field.options.length] = new Option('Referee Decision','decision');
      field.options[field.options.length] = new Option('Knockout','knockout');
      field.options[field.options.length] = new Option('Count Out','countout');
      
      for(var i = 0; i < field.options.length; i++)
        if(field.options[i].value == type)
          field.options[i].selected = true;
              
      return Forms.addField('Type of Victory', field, true, '');      
    },
    
    afterField: function(after) {
      var field = Builder.node('input', {'type':'text', 'value':after, 'name':'after[' + (Admin.Results.matches - 1) + ']' });
      return Forms.addField('Match Ending', field, true, 'The result will finish this sentence: (Winners) defeated (losers) by (type) after');
    }
  },
  
  Videos: {
    previousSection: null,
    linkCount: 0,
    
    toggleSection: function(box) {
      if(!box) return;
      var section = '';
      if(typeof(box) == 'string')
        section = box
      else {
        if(box.selectedIndex == -1 || box.selectedIndex == 0) return;
        section = box.options[box.selectedIndex].text;
      }
      
      // Remove all spaces and translate to lowercase
      section = section.toLowerCase();
      section = section.split(' ').join('');
      
      // Hide previous section
      if(Admin.Videos.previousSection != null)
        $(Admin.Videos.previousSection).style.display = 'none';
      
      // Show the current section and mark it
      Admin.Videos.previousSection = section + '_fields';
      $(section + '_fields').style.display = 'block';
    },
    
    addVideoLink: function(u, t, s) {
      Admin.Videos.linkCount++;
      var type = Builder.node('select', {'name': 'types[]'});
      var size = Builder.node('input', {'name': 'sizes[]', 'type':'text'});
      var url  = Builder.node('input', {'name':'urls[]', 'type':'text'});
      var surrounder = Builder.node('div', {'className':'linkSet', 'id':'link_' + Admin.Videos.linkCount});
      
      type.options[type.options.length] = new Option('Simple Video (default)');
      type.options[type.options.length] = new Option('Part 1');
      type.options[type.options.length] = new Option('Part 2');
      type.options[type.options.length] = new Option('Part 3');
      type.options[type.options.length] = new Option('Part 4');
      type.options[type.options.length] = new Option('Low Quality');
      type.options[type.options.length] = new Option('High Quality');
      
      url.value = u;
      size.value = s;
      type.selectedIndex = Forms.findByValue(type, t);
      
      var url_field = Forms.addField('Video URL', url, true, '');
      var type_field = Forms.addField('Type', type, true,'');
      var size_field = Forms.addField('Video Size (MB)', size, true,'');
      var remove_link  = Builder.node('a', {'className':'rightLink', 'onclick': "Element.remove('link_" + Admin.Videos.linkCount + "');"} );
      var remove_wrap  = Builder.node('div', {'className':'rightLinkWrap'});
      remove_link.innerHTML = 'Remove This Video Link';
      remove_wrap.appendChild(remove_link);
      
      
      surrounder.appendChild(url_field);
      surrounder.appendChild(type_field);
      surrounder.appendChild(size_field);
      surrounder.appendChild(remove_wrap);
      
      var canvas = $('linksCanvas');
      canvas.appendChild(surrounder);
            
      return false;  // Don't let any links fire
    }
  }
}

var Forms = {
  addField: function(title, field, required, field_description) {
    var div = Builder.node('div', {'className': 'form_row'});
    var title_span = Builder.node('span', {'className': 'title' + (required == true ? ' required' : '' ), 'innerHTML': title});    
    var field_div = Builder.node('div', {'className': 'field'});
    title_span.innerHTML = title;
    field_div.appendChild(field);
    if(field_description) {
      var br = Builder.node('br');
      var d = Builder.node('text', field_description);
      field_div.appendChild(br);
      field_div.appendChild(d);
    }
    
    div.appendChild(title_span);
    div.appendChild(field_div);
    
    return div;
  },
  
  findByValue: function(arr, val) {
    var ind = -1;
    for(var i = 0; i < arr.length; i++) {
      if(arr[i].value.toLowerCase() == val.toLowerCase()) {
        ind = i;
        break;
      }
    }
    
    return ind;
  }
}

var News = {
  expand: function(id) {
    var button = $('message_link_' + id);
    var box    = $('message_' + id);
    
    // Expand or contract the message box
    //Effect.toggle('message_' + id, 'blind', {'duration': 1, 'display':'inline'});
    Element.show('message_' + id);
        
    // Remove the button and ellipsis
    Element.remove(button);
    Element.hide('ellipsis_' + id);
  }
}

var Gallery = {
  ajax: null,
  
  deleteImage: function() {
    var id = $('iid').value;
                
    window.location = '/gallery/delete_image/' + id;
    
    return false;                
  },
  
  sendDataChange: function() {
    var title   = $('title_field');
    var caption = $('caption_field');
                
    title   = title ? title.value : '';
    caption = caption ? caption.value : '';
                
    ar = new Array();
    ar['title'] = title;
    ar['caption'] = caption;
    ar['id'] = $('iid').value;
                
    str = Helpers.arrayToPOST(ar);
                
    ajax = new Ajax.Request('/gallery/change_data', {method: 'post', parameters: str, asynchronous: true, evalScripts: true, onComplete: Gallery.showEditResponse});
    
    return false;  // don't fire the form
  },
  
  changeThumb: function() {
    var url   = $('gallery_thumb_url').value;
    var id    = $('gallery_path').value;
                
    ar = new Array();
    ar['url'] = url;
    ar['id'] = id;
                
    str = Helpers.arrayToPOST(ar);
                
    ajax = new Ajax.Request('/gallery/assign_thumb', {method: 'post', parameters: str, asynchronous: true, evalScripts: true, onComplete: function(e) { alert(e.responseText); } } );
    
    return false;  // don't fire the form
  },
              
  showEditResponse: function() {
    ar = new Array();
    ar = ajax.transport.responseText.split("\n");
                
    var title   = ar[0];
    var caption = ar[1];
                
    $('title').innerHTML = "<h2>" + title + "</h2>";
    $('caption').innerHTML = caption;
    
    // Change the values in the form
    $('caption_field').value = caption;
    $('title_field').value = title;
  },
                  
  handleCheckboxes: function(do_clear) {
    // Loop through the form elements.  Find our checkboxes.  If they're checked, make note of it.  Clear them.
    var f = document.forms[0];
    var boxes = new Array;
    for(i = 0; i < f.elements.length; i++) {
      // If it is not a checkbox, keep moving
      if(f.elements[i].type != 'checkbox') continue;
      
      // It's a checkbox -- is it checked?
      if(f.elements[i].checked) {
        boxes[boxes.length] = f.elements[i].name;
        if(do_clear)
          f.elements[i].checked = false;
      }
    }
    
    // Let's loop through our array and submit the beast
    var ids = "";
    for(i = 0; i < boxes.length; i++) {
      if(ids) ids += "|";
      ids += boxes[i];
    }
    
    return ids;
  },
  
  labelImages: function() {
    // Figure out what checkboxes are checked.
    ids = Gallery.handleCheckboxes(false);
    
    // If there is nothing to do, stop now.  Otherwise fire our AJAX request to do the updating.
    if(!ids) return;
    
    var box = $('wrestlerChoice');
    ar = new Array();
    ar['ids'] = ids;
    ar['wrestler'] = box.options[box.selectedIndex].value;
    var str = Helpers.arrayToPOST(ar);
  
    ajax = new Ajax.Request('/gallery/label_images', {method: 'post', parameters: str, asynchronous: true, evalScripts: true, onComplete: Gallery.showLabelResponse});
    
    return false;
  },
    
  deleteLabels: function() {
    // Figure out what checkboxes are checked.
    ids = Gallery.handleCheckboxes(false);
  
    // If there is nothing to do, stop now.  Otherwise fire our AJAX request to do the updating.
    if(!ids) return;
  
    ar = new Array();
    ar['ids'] = ids;
    var str = Helpers.arrayToPOST(ar);
  
    ajax = new Ajax.Request('/gallery/delete_labels', {method: 'post', parameters: str, asynchronous: true, evalScripts: true, onComplete: Gallery.showLabelResponse});
  
    return false;
  },
  
  eventImages: function() {
    // Figure out what checkboxes are checked.
    ids = Gallery.handleCheckboxes(false);
    
    // If there is nothing to do, stop now.  Otherwise fire our AJAX request to do the updating.
    if(!ids) return;
    
    var box = $('eventChoice');
    ar = new Array();
    ar['ids'] = ids;
    ar['event'] = box.options[box.selectedIndex].value;
    var str = Helpers.arrayToPOST(ar);
  
    ajax = new Ajax.Request('/gallery/assign_event', {method: 'post', parameters: str, asynchronous: true, evalScripts: true, onComplete: Gallery.showLabelResponse});
    
    return false;
  },
  
  setAction: function(val) {
    // Figure out what checkboxes are checked.
    ids = Gallery.handleCheckboxes(false);
    
    // If there is nothing to do, stop now.  Otherwise fire our AJAX request to do the updating.
    if(!ids) return;
    
    ar = new Array();
    ar['ids'] = ids;
    ar['action'] = val;
    var str = Helpers.arrayToPOST(ar);
  
    ajax = new Ajax.Request('/gallery/set_action', {method: 'post', parameters: str, asynchronous: true, evalScripts: true, onComplete: Gallery.showLabelResponse});
    
    return false;
  },
  
  
  uncheckBoxes: function() {
    var f = document.forms[0];
    for(i = 0; i < f.elements.length; i++) {
      if(f.elements[i].type != 'checkbox') continue;
      
      f.elements[i].checked = false;
    }
  },
  
  checkAll: function() {
    var f = document.forms[0];
    for(i = 0; i < f.elements.length; i++) {
      if(f.elements[i].type != 'checkbox') continue;
  
      f.elements[i].checked = true;
    }
  },
  
  invertSelection: function() {
    var f = document.forms[0];
    for(i = 0; i < f.elements.length; i++) {
      if(f.elements[i].type != 'checkbox') continue;
  
      f.elements[i].checked = !f.elements[i].checked;
    }
  },
  
  showLabelResponse: function() {
    alert(ajax.transport.responseText);
  },
  
  markFavorite: function() {
    // Figure out what checkboxes are checked.
    ids = Gallery.handleCheckboxes(true);

    // If there is nothing to do, stop now.  Otherwise fire our AJAX request to do the updating.
    if(!ids) return;

    ar = new Array();
    ar['ids'] = ids;
    var str = Helpers.arrayToPOST(ar);
    
    ajax = new Ajax.Request('/gallery/mark_favorite', {method: 'post', parameters: str, asynchronous: true, evalScripts: true, onComplete: Gallery.showLabelResponse });

    return false;
  },
  
  deleteImage: function(id) {
    var url = '/gallery/delete_image/' + id;
    window.location = url;
    return false;
  }
}

var Events = {
  card: Array(),
  results: Array(),
  
  addResult: function(card, result) {
    this.card[this.card.length] = card;
    this.results[this.results.length] = result;
  },
  
  toggleShowResults: function(ele) {
    var arr = ele.innerHTML == 'Show Results' ? this.results : this.card;    
    var n = arr.length;
    
    for(var i = 0; i < n; i++) {
      $('result_' + i).innerHTML = arr[i];
    }
    
    ele.innerHTML = ele.innerHTML == 'Show Results' ? 'Hide Results' : 'Show Results';
    
    return false;
  }
}

var Helpers = {
  arrayToPOST: function(info_array) {
    var ajax_data = "";
                  
    for(post_key in info_array) {
      value = info_array[post_key];
                        
      // Get rid of any ampersands in our value
      value = escape(value);
                                    
      // Append it to our list
      if(ajax_data)
        ajax_data = ajax_data + "&" + post_key + "=" + value;
      else
        ajax_data = post_key + "=" + value;
    }
                                                              
    return ajax_data;                                                                          
  },
  
  positionHalf: function(elemt) {
    dimensions = getWindowDimensions();
    windowWidth = 720;   windowHeight = dimensions[1];
    //windowWidth = dimensions[0];   windowHeight = dimensions[1];
                     
    w = getObjectWidth(elemt);              w = parseInt(w, 10);
    h = getObjectHeight(elemt);             h = parseInt(h, 10);
    elemt.style.position      = 'absolute';
    elemt.style.left          = parseInt((windowWidth - w) / 2, 10) + 'px';
    elemt.style.top           = parseInt((windowHeight - h) / 2, 10) + 'px';
  },             
  
  findPosX: function(obj) {
    var curleft = 0;
    if(obj.offsetParent) {
      while(obj.offsetParent) {
        curleft += obj.offsetLeft;
        obj = obj.offsetParent;
      }
    } else if(obj.x)
      curleft += obj.x;
  
    return curleft;
  },
  
  findPosY: function(obj) {
    var curtop = 0;
    if(obj.offsetParent) {
      while(obj.offsetParent) {
        curtop += obj.offsetTop;
        obj = obj.offsetParent;
      }
    } else if(obj.x)
      curtop += obj.y;
  
    return curtop;
  },
  
  getWindowDimensions: function() {
    arr = new Array();
    if(navigator.appName == "Netscape") {
      arr[0] = window.innerWidth;
      arr[1] = window.innerHeight;
    } else if(navigator.appName.indexOf("Microsoft") != -1) {
      arr[0] = document.body.offsetWidth;
      arr[1] = document.body.offsetHeight;
    } else if(window.innerHeight) {
      arr[0] = window.innerWidth;
      arr[1] = window.innerHeight;
    } else {
      arr[0] = document.body.offsetWidth;
      arr[1] = document.body.offsetHeight;
    }
  
    return arr;
  },
  
  getObjectWidth: function(obj) {
    return obj.offsetWidth;
  },
  
  getObjectHeight: function(obj) {
    return obj.offsetHeight;
  }  
}