Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

Cabbit

macrumors 68020
Original poster
Jan 30, 2006
2,128
1
Scotland
Link to demo

Code:
// form validation function //
function validate(form) {
  var name = form.name.value;
  var password = form.password.value;
  var valPassLength = password.length;
  var valUserLength = name.length;
  var nameRegex = /^[a-zA-Z0-9]+(([\'\,\.\- ][a-zA-Z0-9 ])?[a-zA-Z0-9]*)*$/;
  var passwordRegex = /^[a-zA-Z0-9]+(([\'\,\.\- ][a-zA-Z0-9 ])?[a-zA-Z0-9]*)*$/;
  if(name == "") {
    inlineMsg('name','You must enter your username.',2);
    return false;
  }
  if(!name.match(nameRegex)) {
    inlineMsg('name','You have entered an invalid username.',2);
    return false;
  }
  if (valUserLength < 7)
  {
  	inlineMsg('name','<strong>Error</strong><br />Your username appears to be too short.',2);
    return false;
  }
  if(password == "") {
    inlineMsg('password','<strong>Error</strong><br />You must enter your password.',2);
    return false;
  }
  if(!password.match(passwordRegex)) {
    inlineMsg('password','<strong>Error</strong><br />Your password appears to be invalid.',2);
    return false;
  }
  if (valPassLength < 10)
  {
  	inlineMsg('password','<strong>Error</strong><br />Your password appears to be too short.',2);
    return false;
  }
  return true;
}

function submitButton(form)
{
	var name = form.name.value;
	var valUserLength = name.length;
	var nameRegex = /^[a-zA-Z0-9]+(([\'\,\.\- ][a-zA-Z0-9 ])?[a-zA-Z0-9]*)*$/;
	var passwordRegex = /^[a-zA-Z0-9]+(([\'\,\.\- ][a-zA-Z0-9 ])?[a-zA-Z0-9]*)*$/;
	var password = form.password.value;
  	var valPassLength = password.length;
	if (name == "" || !name.match(nameRegex) || valUserLength < 7 || password == "" || !password.match(passwordRegex) || valPassLength < 10) 
	{
		return false;
 	}
	else
	{
		document.getElementById('submitBTN').innerHTML = '<button type="submit" class="submit positive"><img src="/media/siteimages/buttons/tick.png" alt=""/> Login</button>';
	}
}

function submitButtonRTN(form)
{
	var name = form.name.value;
	var valUserLength = name.length;
	var nameRegex = /^[a-zA-Z0-9]+(([\'\,\.\- ][a-zA-Z0-9 ])?[a-zA-Z0-9]*)*$/;
	var passwordRegex = /^[a-zA-Z0-9]+(([\'\,\.\- ][a-zA-Z0-9 ])?[a-zA-Z0-9]*)*$/;
	var password = form.password.value;
  	var valPassLength = password.length;
	if (name == "" || !name.match(nameRegex) || valUserLength < 7 || password == "" || !password.match(passwordRegex) || valPassLength < 10) 
	{
	    document.getElementById('submitBTN').innerHTML = '<button type="submit" class="submit negative"><img src="/media/siteimages/buttons/cross.png" alt=""/> Login</button>';
	}
}

// START OF MESSAGE SCRIPT //

var MSGTIMER = 20;
var MSGSPEED = 5;
var MSGOFFSET = 3;
var MSGHIDE = 3;

// build out the divs, set attributes and call the fade function //
function inlineMsg(target,string,autohide) {
  var msg;
  var msgcontent;
  if(!document.getElementById('msg')) {
    msg = document.createElement('div');
    msg.id = 'msg';
    msgcontent = document.createElement('div');
    msgcontent.id = 'msgcontent';
    document.body.appendChild(msg);
    msg.appendChild(msgcontent);
    msg.style.filter = 'alpha(opacity=0)';
    msg.style.opacity = 0;
    msg.alpha = 0;
  } else {
    msg = document.getElementById('msg');
    msgcontent = document.getElementById('msgcontent');
  }
  msgcontent.innerHTML = string;
  msg.style.display = 'block';
  var msgheight = msg.offsetHeight;
  var targetdiv = document.getElementById(target);
  targetdiv.focus();
  var targetheight = targetdiv.offsetHeight;
  var targetwidth = targetdiv.offsetWidth;
  var topposition = topPosition(targetdiv) - ((msgheight - targetheight) / 2);
  var leftposition = leftPosition(targetdiv) + targetwidth + MSGOFFSET;
  msg.style.top = topposition + 'px';
  msg.style.left = leftposition + 'px';
  clearInterval(msg.timer);
  msg.timer = setInterval("fadeMsg(1)", MSGTIMER);
  if(!autohide) {
    autohide = MSGHIDE;  
  }
  window.setTimeout("hideMsg()", (autohide * 1000));
}

// hide the form alert //
function hideMsg(msg) {
  var msg = document.getElementById('msg');
  if(!msg.timer) {
    msg.timer = setInterval("fadeMsg(0)", MSGTIMER);
  }
}

// face the message box //
function fadeMsg(flag) {
  if(flag == null) {
    flag = 1;
  }
  var msg = document.getElementById('msg');
  var value;
  if(flag == 1) {
    value = msg.alpha + MSGSPEED;
  } else {
    value = msg.alpha - MSGSPEED;
  }
  msg.alpha = value;
  msg.style.opacity = (value / 100);
  msg.style.filter = 'alpha(opacity=' + value + ')';
  if(value >= 99) {
    clearInterval(msg.timer);
    msg.timer = null;
  } else if(value <= 1) {
    msg.style.display = "none";
    clearInterval(msg.timer);
  }
}

// calculate the position of the element in relation to the left of the browser //
function leftPosition(target) {
  var left = 0;
  if(target.offsetParent) {
    while(1) {
      left += target.offsetLeft;
      if(!target.offsetParent) {
        break;
      }
      target = target.offsetParent;
    }
  } else if(target.x) {
    left += target.x;
  }
  return left;
}

// calculate the position of the element in relation to the top of the browser window //
function topPosition(target) {
  var top = 0;
  if(target.offsetParent) {
    while(1) {
      top += target.offsetTop;
      if(!target.offsetParent) {
        break;
      }
      target = target.offsetParent;
    }
  } else if(target.y) {
    top += target.y;
  }
  return top;
}

// preload the arrow //
if(document.images) {
  arrow = new Image(7,80); 
  arrow.src = "/media/login/msg_arrow.gif"; 
}

My ere Javascript seems to crash my friends Firefox but runs fine on my Safari, Firefox, Internet Exploder(Wine), and Opera. Is there a reason it would only effect his Firefox(Windows, both 3.5.5) i am dead new to this ere javascirpt stuff i was just working in my own scripts into those from a tutorial.
 
I've had js issues in Firefox for Windows in the past... ask your friend to downgrade their version and see what results you get.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.