/*copyright 2006-2007 FitLink.com*/

window.is_top=true;
function $(e) { return typeof e == 'string' ? document.getElementById(e) : e; }
function E(e) { return document.createElement(e); }

function show(id,s) {
  var l = $(id);
  if (l) l.style.display = s ? s : 'block';
}

function hide(id) {
  var l = $(id);
  if (l) l.style.display = 'none';
}

function get_value(f) {
  var e = $(f);
  return e ? e.value : null;
}

function get_option(f) {
  var e = $(f);
  return e && e.selectedIndex > -1 ? e.options[e.selectedIndex].text : null;
}

function set_value(f,v) {
  var e = $(f);
  if (e) e.value = v;
}

function set_option(f,v) {
  var e = $(f);
  if (e) {
    var o = e.options;
    var n = o.length;
    for (var i=0; i<n; i++) {
      if (o[i].text==v) {
        o[i].selected = true;
        break;
      }
    }
  }
}

function set_text(f,t) {
  var f = $(f);
  if (f) {
    if (f.innerText) f.innerText = t;
    else {
      f.innerHTML = '';
      f.appendChild(document.createTextNode(t));
    }
  }
}

function set_html(f,t) {
  var f = $(f);
  if (f) f.innerHTML = t;
}

function set_cookie(f,v) {
  document.cookie = f+"='"+v+"'";
}

function copy_value(from,to) {
  set_value(to,get_value(from));
}

function array_contains(a, e) {
  for (var i=0; i<a.length; i++) {
    if (a[i]==e) return true;
  }
  return false;
}

function array_implode(a,d,e) {
  var s = '';
  for (var i=0; i<a.length; i++) {
    if (s.length>d.length && s.substring(s.length-d.length)!=d && !is_empty(a[i])) s += d;
    s += e ? string_escape(a[i]) : a[i];
  }
  return s;
}

function has_class(e,c) {
  e = $(e); if (!e) return false;
  var p = e.className.split(" "); var l = p.length;
  for (var i=0; i<l; i++) if (p[i]==c) return true;
  return false;
}

function add_class(e,c) {
  e = $(e); if (!e || has_class(e,c)) return;
  e.className = e.className + ' ' + c;
  if (e.tagName.toLowerCase()=='td' && is_gecko()) e.parentNode.parentNode.innerHTML = e.parentNode.parentNode.innerHTML;
}

function remove_class(e,c) {
  e = $(e); if (!e) return;
  var p = e.className.split(" "); var l = p.length;
  for (var i=0; i<l; i++) if (p[i]==c) {
    if (p.splice) p.splice(i,1); else p[i] = null;
    e.className = p.join(" ");
    return;
  }
}

function blank_class(e,c) {
  e = $(e); if (!e) return;
  if (e.value=='') add_class(e,c);
  else remove_class(e,c);
}

function toggle_div(e,c) {
  if (has_class(e,'headerOpen')) {
    remove_class(e,'headerOpen'); add_class(e,'headerClosed'); hide(c);
  } else {
    remove_class(e,'headerClosed'); add_class(e,'headerOpen'); show(c);
  }
}

function do_click(o) {
  var f = o.getAttribute('onclick');
  if (f instanceof Function) {
    f();
  } else {
    eval(f);
  }
}

function trigger_event(f, t) {
  if (f.fireEvent) f.fireEvent('on' + t);
  else if (document.createEvent) {
    var e = document.createEvent('HTMLEvents');
    e.initEvent(t, true, true);
    f.dispatchEvent(e);
  }
}

function trigger_key(f, t, k) {
  if (f.fireEvent) {
    e = document.createEventObject();
    e.keyCode=k;
    f.fireEvent('on' + t, e);
  } else {
    var e = document.createEvent('KeyEvents');
    e.initKeyEvent(t, true, true, window, false, false, false, false, k, k);
    f.dispatchEvent(e);
  }
}

function check_enter(event,handler) {
  if (event.keyCode == 13) {
    handler();
    return false;
  }
  return true;
}

function is_gecko() {
  var a = window.navigator.userAgent.toLowerCase();
  return a.indexOf('gecko')>=0 && a.indexOf('safari')<0;
}

function is_opera() {
  return window.opera != null;
}

function is_empty(v) {
  return !v || v=='';
}

function is_integer(event) {
  var key;
  if (event.keyCode) {
    key = event.keyCode;
  } else {
    key = event.which;
  }
  return is_digit(key) || is_control(key) || (is_nav(key) && !event.shiftKey);
}

function is_decimal(field, event) {
  var key;
  if (event.keyCode) {
    key = event.keyCode;
  } else {
    key = event.which;
  }
  return is_digit(key) || is_control(key) || (is_nav(key) && !event.shiftKey);
}

function is_digit(key) {
  return key > 47 && key < 58;
}

function is_control(key) {
  return key == 8 || key == 9 || key == 10 || key == 13 || key == 46 || key == 127;
}

function is_nav(key) {
  return key > 34 && key < 41;
}

function toggle_stars(id, v) {
  set_value(id,v);
  var s = id == 'overall' ? '' : 'Small';
  for (var i=1; i<=10; i++) $(id+'_'+i).innerHTML = "<img alt='star' title='" + i + "/10' src='/images/star" + (v<i?'Off':'On') + s + ".gif' />";
}

function limit_area(f, limit) {
  var c = f.value.length - limit;
  if (c>0) {
    if (document.selection) { // ie
      var sel = document.selection.createRange();
      sel.moveStart('character', -c);
      sel.text = '';
    } else if (f.selectionStart || f.selectionStart=='0') { // gecko
      var s = Number(f.selectionStart);
      f.value = f.value.substring(0,s-c) + f.value.substring(s);
    } else {
      f.value = f.value.substring(0, limit);
    }
  }
}

function set_days(month, day) {
  var daysInMonth = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[month];
  var selectedDay = day.selectedIndex == null ? 0 : day.selectedIndex;
  var oldDays = day.options.length;
  day.options.length = daysInMonth;
  for (var i=oldDays; i < daysInMonth; i++) {
    day.options[i] = new Option(i+1, i+1);
  }
  day.selectedIndex = Math.min( selectedDay, daysInMonth );
}

function tool_bar(f) {
  var e = document.createElement('p');
  e.innerHTML = tag_link(f,'heading') + tag_link(f,'subheading') + tag_link(f,'paragraph') + tag_link(f,'list') + tag_link(f,'item') +
                tag_link(f,'quote') + tag_link(f,'bold') + tag_link(f,'italics') + tag_link(f,'link') + tag_link(f,'user');
  f = $(f);
  f.parentNode.insertBefore(e,f);
}
function tag_link(f,t) {
  return "<a href=\"javascript:insert_tag('" + f + "','" + t + "')\"><img src='/images/button/" + t + ".jpg' alt='" + t + "' title='" + t + "'/></a>";
}

function insert_tag(f, tag) {
  f = $(f);
  var st = '[' + tag;
  if (tag=='link' || tag=='user') {
    var p = tag=='link' ? prompt('Enter the URL:','http://') : prompt('Enter the username:','');
    if (p==null || p==false) return;
    st = st + '=' + p;
  }
  st = st + ']';
  var et = '[/' + tag + ']';
  if (document.selection) { // ie
    f.focus();
    var sel = document.selection.createRange();
    sel.text = st + sel.text + et;
    sel.moveEnd('character', -et.length);
    sel.select();
    f.focus();
  } else if (f.selectionStart || f.selectionStart=='0') { // gecko
    var s = Number(f.selectionStart); var e = Number(f.selectionEnd); var c = e; var t = f.scrollTop;
    f.value = f.value.substring(0,s) + st + f.value.substring(s,e) + et + f.value.substring(e);
    c = e + st.length;
    f.focus();
    f.selectionStart = f.selectionEnd = c;
    f.scrollTop = t;
  } else {
    f.value += st + et;
    f.focus();
  }
  trigger_key(f,'keyup',55);
}

function go_nav() {
  $('nav').click(); return false;
}

function stay(n,i) {
  var e = document.createElement('input');
  e.setAttribute('type','submit');
  e.setAttribute('name',n);
  e.setAttribute('value',n);
  e.className='hidden';
  document.forms[1].appendChild(e);
  e.click();
}

function flag() {
  document.cookie = 'flag=1';
}

function pop_up(n,l,w,h) {
  l = l + (l.indexOf('?')>0 ? '&' : '?') + 'popup=1';
  eval("window." + n + "=window.open('" + l + "','" + n + "','location=0,status=0,resizable=1,scrollbars=1,width=" + w + ",height=" + h + "')");
  eval("window." + n + ".focus()");
}

function feed_back() {
  pop_up('feedback','/feedback?referrer=' + escape(window.location),640,375);
}

function unpop(p) {
  if (p) { p.hide(); p.destroy(); }
  return null;
}

function render(p,r) {
  var s = /<script(.|\s)*?\/script>/img; var scripts = [];
  r = r.replace(s,function(v) { scripts.push(v.replace(/<\/?script(.|\s)*?>/img,'')); return ''; });
  p.setBody(r);
  p.render(document.body);
  p.show();
  for (var is=0; is<scripts.length; is++) { eval(scripts[is]); }
}

function loading() {
  if (window.loading_panel) done_loading();
  page_clear();
  var p = new YAHOO.widget.Panel('wait',{modal:true,close:false,fixedcenter:true,draggable:false,visible:false});
  p.setBody("<img width='85' height='110' src='/images/loading.gif' />");
  p.render(document.body);
  p.show();
  window.loading_panel = p;
}

function done_loading() {
  var p = window.loading_panel;
  if (p) window.loading_panel = unpop(p);
}

var handleSubmit = function() { this.submit(); this.setBody(''); loading(); };
var handleCancel = function() { this.cancel(); window.floater = unpop(window.floater); };
var onOpen = function(o) {
  done_loading();
  render(window.floater,o.responseText);
}
var onSuccess = function(o) {
  done_loading();
  var r = o.responseText;
  if (r.substring(0,7)=="SUCCESS") {
    $(o.argument).innerHTML = r.substring(7);
    window.floater = unpop(window.floater);
  } else {
    render(window.floater,r);
  }
}
var onFailure = function(o) {
  done_loading();
  if (window.floater) window.floater = unpop(window.floater);
  page_warning("There was an error processing your request.  Please try again");
}

function dialog(u,t,e,h) {
  loading();
  var p = new YAHOO.widget.Dialog('floater',{width:'600px',height:h?h+'px':'',modal:true,close:false,fixedcenter:true,draggable:false,visible:false,
    buttons:[{text:"Save",handler:handleSubmit,isDefault:true},{text:"Cancel",handler:handleCancel}]});
  p.callback = {success:onSuccess,failure:onFailure,upload:onSuccess,argument:e};
  p.setHeader(t);
  window.floater = p;
  YAHOO.util.Connect.asyncRequest('GET',u,{success:onOpen,failure:onFailure});
  return false;
}

function ajax_init() {
  if (window.XMLHttpRequest) { return new XMLHttpRequest(); }
  try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
  try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (oc) {}
  return null;
}

function ajax_call(uri, target) {
  var x = ajax_init();
  if (!x) return true;
  show('loading');
  x.open("GET", uri, true);
  x.onreadystatechange = function() {
    ajax_response(x,target);
    hide('loading');
  }
  x.send('');
}

function ajax_response(r,target) {
  if (r.readyState!=4) return;
  var d = r.responseText;
  if (typeof target == "function") {
    if (d.indexOf('<script')>=0) document.write(d);
    else target(d);
  } else {
    $(target).innerHTML = d;
  }
  delete r;
}

function unserialize(s) {
  return un_serialize(s)[0];
}

function un_serialize(s) {
  switch (s.charAt(0)) {
    case 'N':
      return [null, s.substr(2)];
    case 's':
      var l = s.substring(2, s.indexOf(':',2));
      return [s.substr(l.length + 4, Number(l)), s.substr(l.length + 6 + Number(l))];
    case 'i':
    case 'd':
      var n = s.substring(2, s.indexOf(';',2));
      return [Number(n), s.substr(n.length + 3)];
    case 'b':
      var b = s.substr(2, 1) == 1;
      return [b, s.substr(4)];
    case 'a':
      var l = s.substring(2, s.indexOf(':',2));
      s = s.substr(l.length + 4);
      l = Number(l);
      var a = new Array();
      for (var i=0; i<l; i++) {
        var k = un_serialize(s);
        var v = un_serialize(k[1]);
        s = v[1];
        a[k[0]] = v[0];
      }
      return [a, s.substr(1)];
    case 'O':
      var l = s.substring(2, s.indexOf(':',2));
      var c = s.substr(l.length + 4,Number(l));
      s = s.substr(l.length + 6 + Number(l));
      var n = s.substr(0, s.indexOf(':'));
      s = s.substr(n.length + 2);
      n = Number(n);
      var o = new Object();
      for (var i=0; i<n; i++) {
        var property = null;
        var value    = null;
        var k = un_serialize(s);
        var v = un_serialize(k[1]);
        // strip access mods
        key[0] = key[0].replace(new RegExp('^\x00' + c + '\x00'), '').replace(new RegExp('^\x00\\*\x00'), '');
        s = v[1];
        o[k[0]] = v[0];
      }
      return [a, s.substr(1)];
    default:
      return [null, null];
  }
}

function page_info(m) {
  set_html('messages',m+'.');
  remove_class('messages','error');
  add_class('messages','info');
  show('messages');
}

function page_warning(m) {
  set_html('messages',m+'.');
  remove_class('messages','info');
  add_class('messages','error');
  show('messages');
}

function page_clear() {
  hide('messages');
}

function string_pad_left(s,c,n) {
  s = String(s);
  while (s.length<n) s = c + s;
  return s;
}

function string_escape(s) {
  if (s) {
    var re = /['"&\\]/g;
    s = String(s).replace(re,"\\$&");
  }
  return s;
}