  /* 
  ######################################################
  # XMF v3.0b  --  neotek <savvas.dimitriou@gmail.com> #
  ######################################################
  # Release: Private       #                           #
  # Version: 3.0           # My work is a game, a very #
  # Date   : 4/Mar/2007    # serious game. -- Escher   #
  # Time   : 1:41pm (AEST) #                           #
  ######################################################
  */

  /*********************************************/
  /* site.js - common and generic js functions */
  /*********************************************/

  function urlencode(plaintext) {
    var SAFECHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_.!~*'()";
    var HEX = "0123456789ABCDEF";
    var encoded = "";
    for (var i = 0; i < plaintext.length; i++ ) {
      var ch = plaintext.charAt(i);
      if (ch == " ") encoded += "+";
      else if (SAFECHARS.indexOf(ch) != -1) encoded += ch;
      else {
        var charCode = ch.charCodeAt(0);
        if (charCode > 255) encoded += "+";
        else {
          encoded += "%";
          encoded += HEX.charAt((charCode >> 4) & 0xF);
          encoded += HEX.charAt(charCode & 0xF);
        }
      }
    }
    return encoded;
  }

  function makeReqObject() {
    if (navigator.appName == "Microsoft Internet Explorer") ro = new ActiveXObject("Microsoft.XMLHTTP");
    else ro = new XMLHttpRequest();
    return ro;
  }

  function sndReq(action,id,value) {
    http = makeReqObject();
    Stamp = new Date();
    ts = Stamp.getTime();
    http.open('get', '/ajax.php?action='+action+'&id='+id+'&value='+urlencode(value)+'&ts='+ts);
    http.onreadystatechange = handleResponse;
    http.send(null);
  }

  function handleResponse() {
    if (http.readyState == 4) {
      var response = http.responseText;
      if (response.indexOf('complete|') > -1) {
        var respar = new Array();
        respar = response.split("|");
        switch (respar[1]) {
          case 'vote':
            document.getElementById('votelink'+respar[2]).href='javascript:alert(\'You already voted on this video!\');';
            document.getElementById('voteadd'+respar[2]).innerHTML='voted';
            document.getElementById('voteadd'+respar[2]).style.color='#888888';
            fade(respar[2],respar[3]);
            break;

          case 'sendfriend':
            break;

          case 'profile':
            document.getElementById(respar[2]).innerHTML = respar[3];
            break;

          case 'checkuser':
            document.getElementById('usererror').style.display = (respar[2]==0) ? 'none' : 'block';
            if (respar[2] != 0) document.getElementById('userna').value='';
            break;

          case 'metrics':
            break;

          default:
            alert('i caught something that isn\'t handled: ' + response);
            break;
        }
      }
    }
  }

  function maxLength(obj,len) {
    if (obj.value.length > len);
    obj.value=obj.value.substring(0,len);
  }

  function makeSafe(obj,type) {
    switch (type) {  
      /* strip anything that isn't alphanumeric or an underscore */
      case 1:
        var text = obj.value;
        text = text.replace(/\W/g, '');
        obj.value = text;
        break;

      /* alphanumeric, underscore, spaces */
      case 2:
        var text = obj.value;
        text = text.replace(/[^a-zA-Z 0-9_]+/g,'');
        obj.value = text;
        break;
  
      default:
        break;
    }
  }

  function more(mid,w) {
    ml = document.getElementById(w + "ml" + mid);
    mt = document.getElementById(w + "more" + mid);
    ml.style.display = 'none';
    mt.style.display = 'inline';
  }

  function less(mid,w) {
    ml = document.getElementById(w + "ml" + mid);
    mt = document.getElementById(w + "more" + mid);
    ml.style.display = 'inline';
    mt.style.display = 'none';
  }

  function metrics(link) {
    sndReq('metrics',link,''); 
  }