// Two digit padding
function zero_pad(num, radix) {
   if(parseInt(num,radix) < radix) {
      return '0' + num;
   }
   return '' + num; // Force string type
}

function get_style(element, property) {
   if(typeof(element) == 'string') {
      var elem = document.getElementById(element);
   }
   else
   {
      elem = element;
   }
   if(elem) {
      if(elem.currentStyle) { // Internet Explorer
         return elem.currentStyle[property];
      }
      else if(window.getComputedStyle) { // Opera
         return window.getComputedStyle(elem, null).getPropertyValue(property);
      }
   }
}

var fade_element = [];
function content_fade(element) {
   if(!element && !fade_element[element]) {
     return false;
   }
   if(!fade_element[element]) {
      fade_element[element] = [
         document.getElementById(element),
         get_style(element, 'backgroundColor')
      ];
      fade_element[element][0].style.color = fade_element[element][1];            
   }
   var colour = fade_element[element][1];
   var result = [parseInt(colour.substring(1, 3), 16), parseInt(colour.substring(3, 5), 16), parseInt(colour.substring(5, 7), 16)];
   result[0] -= 15;
   result[1] -= 15;
   result[2] -= 15;
   if(result[0] < 0) {
      result[0] = 0;
   }
   if(result[1] < 0) {
      result[1] = 0;
   }
   if(result[2] < 0) {
      result[2] = 0;
   }
   fade_element[element][1] = '#' + zero_pad(result[0].toString(16), 16) + zero_pad(result[1].toString(16), 16) + zero_pad(result[2].toString(16), 16);
   fade_element[element][0].style.color = fade_element[element][1]; 
   if(fade_element[element][1] != '#000000') {
      setTimeout(function() { content_fade(element); }, 40);
   }
   else
   {
      delete fade_element[element];
   }
}
function debug_print(input) {
   if(document.getElementById('debug')) {
      document.getElementById('debug').innerHTML = input + '<br />' +  document.getElementById('debug').innerHTML;
   }
}

var opacity = [];
function opacity_fade(arg_element, up) {
   if(typeof(arg_element) == 'string') {
      var element = document.getElementById(arg_element);
      opacity[arg_element] = [element, up, parseFloat(get_style(arg_element, 'opacity'))];
   }
   else
   {
      var element = arg_element;
   }
   if(up) {
      opacity[element.id][2] += 0.1;
      element.style.opacity = opacity[element.id][2];
      if(opacity[element.id][2] >= 1) {
         opacity[element.id][2] = 1;
         element.style.opacity = 1;
      }
   }
   else
   {
      opacity[element.id][2] -= 0.1;
      element.style.opacity = opacity[element.id][2];
      if(opacity[element.id][2] <= 0) {
        element.style.opacity = 0;
        element.style.display = 'none';
      }
   }
   if(opacity[element.id][2] < 1 && opacity[element.id][2] > 0) {
      setTimeout(function() { opacity_fade(element, up); }, 40);
   }
}
function doSpoiler(button) {
   var element = button.parentNode.getElementsByClassName('spoiler')[0];
   if(!element.id) {
      do {
         var elem_id = 'spoiler' + Math.floor(Math.random() * 32767);
      }
      while(document.getElementById(elem_id));
      element.id = elem_id;
   }
   if(button.value == 'Show') {
      var width = get_style(element.id, 'width') / 10;
      var height = get_style(element.id, 'height') / 10;
      element.style.display = 'block';
      opacity_fade(element.id, 1);
      button.value = 'Hide';
      content_fade(element.id, 1);
      button.disabled = 'true';
   }
   else
   {
      opacity_fade(element.id, 0);
      button.disabled = 'true';
      button.value = 'Show';
   }
   setTimeout(function() { button_toggle(element.id); }, 500);
}

function button_toggle(button) {
   if(document.getElementById(button).parentNode.getElementsByTagName('input')[0].disabled == true) {
      document.getElementById(button).parentNode.getElementsByTagName('input')[0].disabled = false;
   }
   else
   {
      document.getElementById(button).parentNode.getElementsByTagName('input')[0] = true;
   }
}

function image_rescale(element, up) {
   var images = element.getElementsByTagName('img');
   if(images && images.length && element.clientWidth) {
      var width = element.clientWidth;
      var node = images[0].parentNode;
      while(node && node.className != 'comment') {
         node = node.parentNode;
      }
      if(node) {
         node = node.getElementsByClassName('pad-in')[0];
      }
      for(var i = 0; i < images.length; ++i) {
         if(images[i].width > width) {
            images[i].style.width = '95%';
            images[i].onclick = function() { image_overlay(node, i); };
         }
      }
   }
}

function image_overlay(post, id) {
   var overlay;
   var width;
   var height;
   var navigation = '';
   var images;
   var content;
   if(typeof(post) == 'string') {
      post = document.getElementById(post);
   }
   images = post.getElementsByTagName('img');
   if(images && images.length) {
      overlay = document.getElementById('overlay');
      width = document.getElementsByTagName('body')[0].clientWidth;
      height = document.getElementsByTagName('body')[0].clientHeight;
      if(overlay) {
         overlay.innerHTML = '';
         content = 'Viewing image: <b>' + images[id].src + '</b><br />';
         if(images.length > 1) {
            content += 'Image ' + (id + 1) + ' of ' + images.length + '<br /><br />';
         }
         if(id > 0) {
            navigation += '<div style="margin-left: 30%; float: left;"><a href="#" onclick="image_overlay(' + post.id + ', ' + (id - 1) + '); return false;">&laquo; Previous</a></div>';
         }
         if(id + 1 < images.length) {
            navigation += '<div style="margin-right: 30%; float: right;"><a href="#" onclick="image_overlay(' + post.id + ', ' + (id + 1) + '); return false;">Next &raquo;</a></div>';
         }
         if(navigation) {
            navigation += '<br /><br />';
         }
         content += navigation;
         content += '<a href="#" onclick="overlay_close(); return false;"><img id="overlay_img" src="' + images[id].src + '" /></a>';
         overlay.innerHTML = content;
         if(document.getElementById('overlay_img').width > width) {
            document.getElementById('overlay_img').style.width = "99%";
         }
         overlay.style.display = 'block';
         if(window.pageYOffset) {
            overlay.style.top = window.pageYOffset + 5 + 'px';
         }
         else
         {
            overlay.style.top = document.documentElement.scrollTop + 5;
         }
         overlay.innerHTML += navigation;
         overlay.style.opacity = 1;
      }
   }
   alert(document.getElementById('main'));
   document.getElementById('main').style.opacity = 0.3;
}

function overlay_close() {
   document.getElementById('main').style.opacity = 1;
   document.getElementById('overlay').style.display = 'none';
}

function collapse_posts(path, skin_id) {
   var posts = document.getElementsByClassName('search_result');
   var fragment = document.createDocumentFragment();
   
   var image = document.createElement('img');
   image.style.cssFloat = "left";
   image.style.marginRight = "5px";
   image.setAttribute('src', path + 'skins/' + skin_id + '/expand.png');
   
   var link = document.createElement('a');
   link.setAttribute('href', '#');
   link.setAttribute('onclick', 'expand_post(this.parentNode); return false');
   fragment.appendChild(link);
   link.appendChild(image);
   for(var i = 0; i < posts.length; ++i) {
      posts[i].insertBefore(fragment.cloneNode(true), posts[i].firstChild);
      collapse_post(posts[i]);
   }
}

function collapse_post(post) {
   if(post) {
      post.getElementsByTagName('div')[0].style.border = '0px';
      post.getElementsByTagName('p')[0].style.display = 'none';
      var link = post.getElementsByTagName('a')[0];
      link.setAttribute('onclick', 'expand_post(this.parentNode); return false');      
      post.getElementsByTagName('img')[0].src = post.getElementsByTagName('img')[0].src.replace('collapse.png', 'expand.png');
   }
}
function expand_post(post) {
   if(post) {
      post.getElementsByTagName('p')[0].style.display = 'block';
      var link = post.getElementsByTagName('a')[0];
      link.setAttribute('onclick', 'collapse_post(this.parentNode); return false');
      post.getElementsByTagName('img')[0].src = post.getElementsByTagName('img')[0].src.replace('expand.png', 'collapse.png');
   }
}

var gallery = [];

function open_gallery(element, image) {
   if(!element.id) {
      do {
         var elem_id = 'gallery_' + Math.floor(Math.random() * 32767);
      }
      while(document.getElementById(elem_id));
      element.id = elem_id;
      var images = element.getElementsByTagName('img');
      for(var i = 0; i < images.length; ++i) {
         images[i].id = elem_id + '_img' + i;
      }
   }
   if(!gallery[elem_id]) { 
      gallery[elem_id] = [
         parseInt(element.clientHeight),
         setInterval(function() { expand_gallery(element, image) }, 40)
      ];
      if(image) {
         gallery[elem_id][2] = image;
      }
   }
   else if(image) {
      gallery_image(element, image);
   }
}
function expand_gallery(element) {
   /*
      Replace these with the gallery array as a cache
   */
   if(!element) {
      return false;
   }
   var elem_id = element.id;
   gallery[elem_id][0] += 12;
   if(gallery[elem_id][0] < 500) {
      element.style.height = gallery[elem_id][0] + 'px';
   }
   else
   {
      element.getElementsByTagName('p')[0].style.visibility = 'hidden';
      if(gallery[elem_id][2]) {
         gallery_image(element, gallery[elem_id][2]);
      }
      clearInterval(gallery[elem_id][1]);
   }
}

function gallery_image(element, image) {
   var doc_image = document.getElementById(element.id + '_imgmain');
   if(!image) {
      image = gallery[element.id][2];
      if(!image) {
         image = element.getElementsByTagName('img')[0]; 
      }
   }
   /*
      IE doesn't change the width of a new image
   */
   if(doc_image) {
      if(doc_image.src != image.src) {
         doc_image.parentNode.removeChild(doc_image);
      }
      else
      {
         return true;
      }
   }
   if(image) {
      doc_image = document.createElement('img');
      doc_image.style.maxHeight = '85%';
      doc_image.style.maxWidth = '95%';
      doc_image.src = image.src;
      doc_image.id = element.id + '_imgmain';
      element.insertBefore(doc_image, element.getElementsByTagName('div')[0]);
      return true;
   }
   return false;
}
