
function $(id){ return document.getElementById(id); }

function ematch(e,blankisbad){
		if(e=='' && blankisbad){ return false; }
		return e.match(/^[0-9a-z_\-\.]+@[0-9a-z_\-\.]+\.[0-9a-z_\-\.]{2,3}$/i);
}


function us_zipmatch(z,blankisbad){
	if(z=='' && blankisbad){ return false; }
	return z.match(/^[0-9]{5,}$/);
}


function us_phonematch(p,blankisbad){
	if(p=='' && blankisbad){ return false; } else if (!blankisbad && p==''){ return true; }

	var m1 = p.match(/^\([0-9]{3,}\)[0-9]{3,}-[0-9]{4,}$/);
	var m2 = p.match(/^[0-9]{3,}-[0-9]{3,}-[0-9]{4,}$/);
	var m3 = p.match(/^[0-9]{3,}-[0-9]{4,}$/);

	if((m1 + m2 + m3)==0){ return false; }

	return true;
}


function badusphone_alert(ptype){
	alert('Please enter your '+ptype+' in one of the following accepted formats:\n\n555-555-5555\n(555) 555-5555\n(555)555-5555');
}


function write_rot13(string){ document.write(rot13(string)); }

function rot13 (string) {

  var aCode = 'a'.charCodeAt();
  var zCode = 'z'.charCodeAt();
  var ACode = 'A'.charCodeAt();
  var ZCode = 'Z'.charCodeAt();
  var result = '';

  for (var c = 0; c < string.length; c++) {

    var charCode = string.charCodeAt(c);

    if (charCode >= aCode && charCode <= zCode)

      charCode = aCode + (charCode - aCode + 13) % 26;

    else if (charCode >= ACode && charCode <= ZCode)

      charCode = ACode + (charCode - ACode + 13) % 26;

    result += String.fromCharCode(charCode);
  }

  return result;
}


function $(i){ return document.getElementById(i); }

function defocus(obj){

	//obj.blur(); // most browsers     
	obj.hideFocus = true; // ie
	obj.style.outline = 'none'; // mozilla 

	//try { document.onclick(); } catch(e){}
}

function pbounce(t,n,e){
	if(t.value.length==3) // && characterCode!=46 && characterCode!=8)
	{
		var keynum = false;

		if(!e){
				e = window.event;
		}

		try {
				keynum = e.keyCode;
		} catch(ev) {
				keynum = e.which;
		}

		if(keynum!=16 && keynum!=9 && keynum!=39 && keynum!=37 && keynum!=46)                {
				var next_id = "phone"+n;
				document.getElementById(next_id).focus();
		}
	}
}



function seconds_to_dhms(s) {
	// convert seconds to an array of days,hours,minutes and seconds
	var d = intval(s/86400);
	s -= d*86400;

	var h = intval(s/3600);
	s -= h*3600;

	var m = intval(s/60);
	s -= m*60;

	var seconds2dhs = new Array;
	seconds2dhs["days"] = d;
	seconds2dhs["hours"] = h;
	seconds2dhs["minutes"] = m;
	seconds2dhs["seconds"] = s;

	return seconds2dhs;
}

function GetScrollTop(){
      if (typeof(window.pageYOffset) == 'number'){
          return window.pageYOffset;
      }
      else{
          if ((document.body)&&(document.body.scrollTop)){
              return document.body.scrollTop;
          }
          else{
              if ((document.documentElement)&&(document.documentElement.scrollTop)){
                  return document.documentElement.scrollTop;
              }
              else{
                 return 0;
			}
		}
	}
}


function slide_me( obj , direction , distance ){
	stopMoveMe(obj);
	var dir_increment = (direction=='up') ? -1 : 1;
	var current_top = (Number)(obj.style.top.replace("px",""));
	obj.targetY = current_top + (dir_increment * distance);
	obj.intervalId = setInterval( function(){ moveMe(obj,direction); }, 1 );
}

function moveMe( obj , direction ){
	var dir_increment = (direction=='up') ? -10 : 10;
	var current_top = (Number)(obj.style.top.replace("px",""));
	current_top += dir_increment;

	switch(direction){
		case 'up':
			if(current_top == obj.targetY || current_top < obj.targetY) stopMoveMe(obj);
			if(current_top < obj.targetY) current_top=obj.targetY;
		break;
		case 'down':
			if(current_top == obj.targetY || current_top > obj.targetY) stopMoveMe(obj);
			if(current_top > obj.targetY) current_top=obj.targetY;
		break;
	}



	var new_top = current_top + "px";
	obj.style.top = new_top;
}

function stopMoveMe(obj){
	if("intervalId" in obj){
		clearInterval(obj.intervalId);
	}
}


function getWindowHeight(){
	var winH;

	try {
		var winH = window.innerHeight;
	} catch(e){ }

	if(typeof winH=='undefined'){
		try {
			var winH = document.body.offsetHeight;
		} catch(e) {}
	}

	if(typeof winH=='undefined') winH = 0;

	return winH;
}


function eFocus(obj){
	obj.oldBorderStyle = obj.style.border;
	obj.style.border = "1px solid #ff0000";
	obj.focus();
	
	obj.onkeypress = function(){
			obj.style.border = obj.oldBorderStyle;
			obj.onkeypress = function(){};
		};
	
	obj.onblur = function(){
			obj.style.border = obj.oldBorderStyle;
			obj.onkeydown = function(){};
		};
}

function inputToggle(objId){
	var iObj = $(objId);
	iObj.disabled = (iObj.disabled) ? false : true;
}

function tagpop(){
	alert("SineGame User Tag\n\nA user tag is simply your nickname on the website when you are signed in. When you post in the forum, see your user profile or leave your mark anywhere on the site, your user tag will be used instead of your real name or other personal information.");
}


function checkUserTag(inputId,formId){
	var tagObj = $(inputId);
	var formObj = $(formId);
	var tagVal = tagObj.value;
	if(typeof tagVal=='undefined' || tagVal=='') return false;

	dojo.xhrPost({
		url: "/member/checkusertag",
		form: formObj,
		load: function(data){
					data = String(data);
					switch(data){
						case "0": var msg = "User Tag already in use"; break;
						case "1": var msg = "User Tag OK"; break;
						case "2": var msg = "Invalid User Tag"; break;
					}

					dijit.byId(inputId).displayMessage(msg);
				}
	});
}


////// Below this line: contributed code


// Peter-Paul Koch
// http://www.quirksmode.org/js/findpos.html
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}

	return [curleft,curtop];
}


//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/string/pad [v1.0]
String.prototype.pad = function(l, s, t){
	return s || (s = " "), (l -= this.length) > 0 ? (s = new Array(Math.ceil(l / s.length)
		+ 1).join(s)).substr(0, t = !t ? l : t == 1 ? 0 : Math.ceil(l / 2))
		+ this + s.substr(0, l - t) : this;
};

// http://kevin.vanzonneveld.net
// +   original+bugfix by: Kevin van Zonneveld (http://kevin.vanzonneveld.net),improved by: stensi
function intval( mixed_var, base ) {
    var tmp;

    if( typeof( mixed_var ) == 'string' ){
        tmp = parseInt(mixed_var*1);
        if(isNaN(tmp) || !isFinite(tmp)){
            return 0;
        } else{
            return tmp.toString(base || 10);
        }
    } else if( typeof( mixed_var ) == 'number' && isFinite(mixed_var) ){
        return Math.floor(mixed_var);
    } else{
        return 0;
    }
}


// category dropdowns thanks to Michael Leigeber (http://www.leigeber.com)
var DDSPEED = 10;
var DDTIMER = 15;

// main function to handle the mouse events //
function ddMenu(id,d){
  var h = document.getElementById(id + '-ddheader');
  var c = document.getElementById(id + '-ddcontent');
  clearInterval(c.timer);
  if(d == 1){
    clearTimeout(h.timer);
    if(c.maxh && c.maxh <= c.offsetHeight){return}
    else if(!c.maxh){
      c.style.display = 'block';
      c.style.height = 'auto';
      c.maxh = c.offsetHeight;
      c.style.height = '0px';
    }
    c.timer = setInterval(function(){ddSlide(c,1)},DDTIMER);
  }else{
    h.timer = setTimeout(function(){ddCollapse(c)},50);
  }
}

// collapse the menu //
function ddCollapse(c){
  c.timer = setInterval(function(){ddSlide(c,-1)},DDTIMER);
}

// cancel the collapse if a user rolls over the dropdown //
function cancelHide(id){
  var h = document.getElementById(id + '-ddheader');
  var c = document.getElementById(id + '-ddcontent');
  clearTimeout(h.timer);
  clearInterval(c.timer);
  if(c.offsetHeight < c.maxh){
    c.timer = setInterval(function(){ddSlide(c,1)},DDTIMER);
  }
}

// incrementally expand/contract the dropdown and change the opacity //
function ddSlide(c,d){
  var currh = c.offsetHeight;
  var dist;
  if(d == 1){
    dist = (Math.round((c.maxh - currh) / DDSPEED));
  }else{
    dist = (Math.round(currh / DDSPEED));
  }
  if(dist <= 1 && d == 1){
    dist = 1;
  }
  c.style.height = currh + (dist * d) + 'px';
  c.style.opacity = currh / c.maxh;
  c.style.filter = 'alpha(opacity=' + (currh * 100 / c.maxh) + ')';
  if((currh < 2 && d != 1) || (currh > (c.maxh - 2) && d == 1)){
    clearInterval(c.timer);
  }
}