function disableEnterKey(e) {
  var key;
  if (window.event) key = window.event.keyCode; //IE
  else key = e.which; //firefox
  return (key != 13);
  }

// removes all whitespace from the beginning and end of a string
function trimString(val) {
  var temp = val.replace( /^\s+/g, ""); // strip leading
  return temp.replace( /\s+$/g, ""); // strip trailing
  }

function strEmpty(st) {
  // return 'true' unless 'st' is a non-null string
  if (typeof st == 'string') return (trimString(st) == '');
  else return true;
  }

function xmlDecode(stContent) {
  // for HTML encoded in XML tags using PHP 'htmlspecialchars()' - extends 'jt_unsafeHTML()' to handle '&amp;'
  return jt_unsafeHTML(stContent.replace(/&amp;/gi,"&"));
  }

function isVisible(elm) {
  return elm.style.display != 'none';
  }

function $(divName) {
  return document.getElementById(divName);
  }

function loadingPage() {
  $('activity').style.display = '';
  }
  
function toptag(tag) {
  if(document.SEARCHFORM.q.value == '' || document.SEARCHFORM.q.value == 'Search the worlds listings') {
    document.location.href = '/'+tag;
  } else if(tag == 'all') {
    loadingPage();
    document.location.href = '/ss/'+document.SEARCHFORM.q.value;
  } else {
    loadingPage();
    document.location.href = '/ss/'+document.SEARCHFORM.q.value+'/'+tag;
  }
}

function go(sel) {
	destination = sel.options[sel.selectedIndex].value;
	if (destination) location.href = destination;
}

/********************************************************************************************
* BEGIN: the following copied from my personal JavaScript "toolkit" - Joseph Oster, wingo.com
*********************************************************************************************/
function jt_valPx(pixels) {
  return pixels + "px";
  }

function jt_moveTo(obj, x, y) {
  obj.style.left = jt_valPx(x);
  obj.style.top = jt_valPx(y);
  }

function jt_ShowHideElm(elm, showIt) {
  if (elm) elm.style.visibility = (showIt) ? "visible" : "hidden";
  }

function jt_ShowNoneElm(elm, showIt, showStyle) {
  if (!showStyle) showStyle = "";
  if (elm) elm.style.display = (showIt) ? showStyle : "none";
  }

function jt_ShowHide(divName, showIt) {
  jt_ShowHideElm(document.getElementById(divName), showIt);
  }

function jt_ShowNone(divName, showIt, showStyle) {
  jt_ShowNoneElm(document.getElementById(divName), showIt, showStyle);
  }

function jt_Point(x, y) {
  // returns a "Point" object with '.x' and '.y' properties
  this.x = x;
  this.y = y;
  }

function jt_getOffsetXY(obj, findID) {
  // returns an object with both '.x' and '.y' offsets of 'obj' relative to 'findID' (or page if 'findID' doesn't exist)
  // usage: "var point = jt_getOffsetXY(obj); var left=point.x; var top=point.y;"
  var xPos = obj.offsetLeft;
  var yPos = obj.offsetTop;
  var parent = obj.offsetParent;
  if (typeof findID == 'undefined') findID = '!@#$%^&*()';
  while ((parent != null) && (parent.id != findID)) {
    xPos += parent.offsetLeft;
    yPos += parent.offsetTop;
    parent = parent.offsetParent;
    }
  return new jt_Point(xPos, yPos);
  }

function jt_currStyle(divToRead) {
  // return current (derived) CSS style object
  var cs = divToRead.style;
  if (window.getComputedStyle) cs = window.getComputedStyle(divToRead,null);
  else if (divToRead.currentStyle) cs = divToRead.currentStyle;
  return cs;
  }

function jt_safeHTML(st) {
  // encode - same as 'u:htmlencode' tag
  if (st.length == 0) return "";
  st = st.replace(/</gi,"&lt;");
  st = st.replace(/>/gi,"&gt;");
  st = st.replace(/\"/gi,'&quot;');
  st = st.replace(/\'/gi,"&#39;");
  st = st.replace(/\\/gi,"&#92;");
  return st;
  }

function jt_unsafeHTML(st) {
  // decode - opposite of 'u:htmlencode' tag
  if (st.length == 0) return "";
  st = st.replace(/&lt;/gi,"<");
  st = st.replace(/&gt;/gi,">");
  st = st.replace(/&quot;/gi,'"');
  st = st.replace(/&#39;/gi,"'");
  st = st.replace(/&#92;/gi,"\\");
  return st;
  }

function jt_parseQuery(queryString) {
  // converts name/value pairs in 'queryString' to JS object
  var qObj = new Object();
  var stQuery = (queryString) ? queryString : location.search; // use 'location.search' if 'queryString' is null
  if (stQuery.indexOf("?") == 0) stQuery = stQuery.substring(1);
  if (stQuery) {
    var nvPairs = stQuery.split("&");
    for (var i=0; i < nvPairs.length; i++) {
      var posEq = nvPairs[i].indexOf("=");
      if (posEq != -1) {
        var nam = nvPairs[i].substring(0,posEq);
        if (nam.indexOf('.') == -1) qObj[nam] = nvPairs[i].substring(posEq+1);
        }
      }
    }
  return qObj;
  }

function foSelected(pulldown) {
  // return value of selected item
  var st = "";
  for (var i=0; i<pulldown.options.length; i++)
  if (pulldown.options[i].selected) {
    if (pulldown.options[i].value) st = pulldown.options[i].value
    else st = pulldown.options[i].text;
    break;
    }
  return st;
  }

function foPosInList(pulldown, val) {
  // return position of 'val' in pulldown menu, -1 if not found
  if (val != "")
    for (var i=0; i<pulldown.options.length; i++) {
      var opVal = pulldown.options[i].value;
      if (opVal == "") opVal = pulldown.options[i].text;
      if (opVal == val) {
        return i;
        break;
        }
      }
  return -1;
  }

function foSetSelectVal(pulldown, val) {
  // set "SELECTED" for item in pulldown menu with 'value==val'
  var p = foPosInList(pulldown,val);
  if (p != -1) pulldown.options.selectedIndex = p;
  }

function jt_setRadio(radioFld, val) {
  // set 'radioFld' button with value == val and return 'true' (if not disabled!)
  for (var i=0; i<radioFld.length; i++)
    if (radioFld[i].value == val)
      if (!radioFld[i].disabled) {
        radioFld[i].checked = true;
        return true;
        }
  return false;
  }

function jt_getRadio(radioFld) {
  // return value of selected 'radioFld' button
  var st = "";
  for (var i=0; i<radioFld.length; i++)
    if (radioFld[i].checked) {
      st = radioFld[i].value;
      break;
      }
  return st;
  }

function ftEmail(emailStr) {
  var emailPat=/^(.+)@(.+)$/
  var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
  var validChars="\[^\\s" + specialChars + "\]"
  var quotedUser="(\"[^\"]*\")"
  var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
  var atom=validChars + '+'
  var word="(" + atom + "|" + quotedUser + ")"
  var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
  var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
  var matchArray=emailStr.match(emailPat)
  if (matchArray==null) return false
  var user=matchArray[1]
  var domain=matchArray[2]
  if (user.match(userPat)==null) return false
  var IPArray=domain.match(ipDomainPat)
  if (IPArray!=null) {
    for (var i=1;i<=4;i++) {
      if (IPArray[i]>255) return false
      }
    return true
    }
  var domainArray=domain.match(domainPat)
  if (domainArray==null) return false
  var atomPat=new RegExp(atom,"g")
  var domArr=domain.match(atomPat)
  var len=domArr.length
  if (domArr[domArr.length-1].length<2 || 
  domArr[domArr.length-1].length>4) return false
  if (len<2) return false
  return true;
  }
  
function isUrl(s) {
  var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
  return regexp.test(s);
}

function isValidURL(url){
  var regexp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;
  return regexp.test(url);
}

function isPositiveInteger(val){
  if(val==null){return false;}
  if (val.length==0){return false;}
  for (var i = 0; i < val.length; i++) {
    var ch = val.charAt(i)
    if ((ch < "0" || ch > "9") && (ch != ',' && ch != '.')) {
      return false;
    }
  }
  return true;
}

/********** BEGIN: Event handling **********/
function jt_AddListener(obj, evType, fn) {
  if (obj.addEventListener) {
    obj.addEventListener(evType, fn, false);
    return true;
    }
  else if (obj.attachEvent) return obj.attachEvent('on' + evType, fn);
  else return false;
  }

function jt_fixE(ev) {
  var e = ev ? ev : window.event;
  return e;
  }
  
function formEnterKey(e, formname) {
  var key;
  if (window.event) key = window.event.keyCode; //IE
  else key = e.which; //firefox
  if (key == 13) document.forms[formname].submit();
  }
  
/********** END: Event handling **********/


/********** BEGIN: Publisher feedback **********/
function openBox() {
  jt_ShowNone('feedbackBox', true, 'block');
  jt_ShowNone('moreLink', false);
  var messageBox = document.getElementById('messageBox');
  if(messageBox) jt_ShowNoneElm(messageBox, false);
  }

function closeBox() {
  jt_ShowNone('feedbackBox', false);
  jt_ShowNone('moreLink', true, 'block');
  var messageBox = document.getElementById('messageBox');
  if(messageBox) jt_ShowNoneElm(messageBox, false);
  }

function switchBox(showObj, hideObj) {
  jt_ShowNone(showObj, true, 'block');
  jt_ShowNone(hideObj, false);
  }
/********** END: Publisher feedback **********/


function claimblog() {
  // hides and shows the claim blog homepage div
  var pingDIV = document.getElementById('pingedgeio');
  jt_ShowNoneElm(pingDIV, !isVisible(pingDIV), 'block');
  }

function toggleExtended() {
  // Hide/show the longer list of tags to narrow your search
  var extendedDIV = document.getElementById('newtags-extended');
  var extendedVisible = isVisible(extendedDIV);
  jt_ShowNoneElm(extendedDIV, !extendedVisible, 'block');
  jt_ShowNoneElm($('newtags'), extendedVisible, 'block');
  $('tagsMoreLess').innerHTML = extendedVisible ? "More" : "Less";
  $('tagsMoreLessBottom').innerHTML = extendedVisible ? "More" : "Less";
  return false;
  }


/********** BEGIN: trace feature **********/
var traceAreaDIV;
var traceAreaX = 10;
var traceAreaY = 125;
var traceAreaMax = 40;
var traceCount = 0;

function clearTrace() {
  traceAreaDIV.style.color = "#a9a9a9";
  traceAreaDIV.innerHTML = '<a href="javascript:clearTrace()">clear trace</a><br>';
  }

function traceTxt(txt) {
  if (!traceAreaDIV) {
    traceAreaDIV = document.createElement("div");
    traceAreaDIV.style.position = "absolute";
    jt_moveTo(traceAreaDIV, traceAreaX, traceAreaY);
    document.body.appendChild(traceAreaDIV);
    }
  if (traceCount % traceAreaMax == 0) clearTrace();
  traceAreaDIV.innerHTML += txt + "<br>";
  traceCount++;
  }


var qParams = new jt_parseQuery(); // for session ID and trace

function traceMsg(msg) {
  if (qParams.trace == 1) traceTxt(msg);
  }

function traceXML(req, locMsg) {
  if (qParams.traceXML == 1) traceTxt(locMsg + "<br>" + jt_safeHTML(req.responseText).replace(/\n/gi,"<br>"));
  }
/********** END: trace feature **********/

/********** BEGIN: link tracking **********/

function edgeio_tracker(item_id) {
  var i = new Image(1,1);
  var eio_rand = Math.round(Math.random()*1580163724);
  i.src="http://"+location.hostname+"/api/counter?item_id="+item_id+"&t=counter5&i=1&s="+eio_rand;
  i.onload=function() { eio_void();}
  return;
}
function eio_void() { return; }

/********** BEGIN: Show Error Message for (mp,el,pl) js checking **********/
function $(_id){
  return document.getElementById(_id);
}
function ShowMsg(obj,_t,showStyle){
  var elm=$('errorDiv');
  if (!showStyle) showStyle = "";
  if (elm) elm.style.display = showStyle ? showStyle : "none";
  if(_t) $('errortxt').innerHTML='<strong>'+_t+'</strong>';
  obj.focus();
  if(obj.id =='agree'){
    $('tos_box').style.border = 'solid';
	$('tos_box').style.borderWidth = '2px';
    $('tos_box').style.borderColor = '#ff5444';
  }else{
    obj.style.border = 'solid';
	obj.style.borderWidth = '2px';
	obj.style.borderColor = '#ff5444';
  }
}
function resetBorder(obj) {
  obj.style.border = 'solid';
  obj.style.borderWidth = '1px';
  obj.style.borderTopColor = '#969696';
  obj.style.borderRightColor = '#d5d5d5';
  obj.style.borderBottomColor = '#d5d5d5';
  obj.style.borderLeftColor = '#969696';
}
/********** END: Show Error Message **********/
