function str_replace(search, replace, subject) {
    var f = search, r = replace, s = subject;
    var ra = r instanceof Array, sa = s instanceof Array, f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;
    while (j = 0, i--) { if (s[i]) { while (s[i] = (s[i]+'').split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){}; } }; 
    return sa ? s : s[0];
}


// form validation function //
function validate(form) {
  var count=1;
  var mistake=0;
  var title = form.title.value;
  var name = form.name.value;
  var email = form.email.value;
  var firstname = form.firstname.value;
  var city = form.city.value;
  var zip = form.zip.value;
  var address = form.address.value;
  var country = form.country.value;
  var phone = form.tel.value;
  var cardname = document.getElementById('cardname').value;
  var cardnumber = document.getElementById('cardnumber').value;
  var carddate_month = document.getElementById('carddate_month').value;
  var carddate_year = document.getElementById('carddate_year').value;
  var cardtype = document.getElementById('cardtype').value;
  var cvv = document.getElementById('cvv').value;
/*  var zip = form.zip.value;
  var tel = form.tel.value;
*/
  var emailRegex = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
 /* var cardnumRegex = /^[0-9]{8}([ -]?[0-9]{8}){1,2}$/;
  var cardnumRegex = /^[0-9]{4} [0-9]{4} [0-9]{4} [0-9]{4}$/;*/
  var cardnumRegex = /^(4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(0[0-5]|[68][0-9])[0-9]{11}|(2131|1800|35\d{3})\d{11})$/;
  
  for(var j=1; j<28; j++){
  	removeMessage(''+j);
  }
  
  
  if(title == "") {
    inlineMsg('title', count, 'You must choose your title');
    mistake=1;
  }
  count++;
  if(name == "") {
    inlineMsg('name', count, 'You must enter your name.');
    mistake=1;
  }
  count++;
  if(firstname == "") {
    inlineMsg('firstname', count, 'You must enter your firstname.');
    mistake=1;
  }
  count++;
  if(country == "") {
    inlineMsg('country', count, 'You must choose your country.');
    mistake=1;
  }
  count++;
  if(city == "") {
    inlineMsg('city', count, 'You must enter a city.');
    mistake=1;
  }
  count++;
  if(phone == "") {
    inlineMsg('tel', count, 'You must enter your phone number.');
    mistake=1;
  }
  count++;
  if(email == "") {
    inlineMsg('email', count, '<strong>Error</strong><br />You must enter your email.');
    mistake=1;
  }
  count++;
  if(!email.match(emailRegex)) {
    inlineMsg('email', count, '<strong>Error</strong><br />You have entered an invalid email.');
    mistake=1;
  }
  count++;
  if(cardname == '') {
    inlineMsg('cardname', count, 'You must enter a name.');
    mistake=1;
  }
  count++;
  if(cardnumber == '') {
    inlineMsg('cardnumber', count, 'You must enter a credit card number.');
    mistake=1;
  }
  count++;
  if(!(str_replace(' ', '', cardnumber)).match(cardnumRegex)) {
    inlineMsg('cardnumber', count, '<strong>Error</strong><br />You have entered an invalid card number.');
    mistake=1;
  }
  count++;
  if(carddate_month == '') {
    inlineMsg('carddate_month', count, 'You must enter the Exp. date.');
    mistake=1;
  }
  count++;
  if(carddate_year == '') {
    inlineMsg('carddate_year', count, 'You must enter the Exp. date.');
    mistake=1;
  }
  count++;
  if(cardtype == '') {
    inlineMsg('cardtype', count, 'You must select your card type.');
    mistake=1;
  }
  count++;
  if(cvv == '') {
    inlineMsg('cvv', count, 'You must enter the cvv number.');
    mistake=1;
  }

  var selects=document.getElementsByTagName('select');
  for(var s=0; s<selects.length; s++){
  if (selects[s].id.substr(0,12)=='personnumber'){
	   count++;
  		if (selects[s].value==0){
  			inlineMsg(selects[s].id, count, 'You must select the guest number');
    		mistake=1;
  		}
  	}
  }

  if (mistake)
  	return false;
  else
	return true;
}

// START OF MESSAGE SCRIPT //

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

// build out the divs, set attributes and call the fade function //

/*
function inlineMsg(target,nid,string,autohide) {
  var msg;
  var msgcontent;
  if(!document.getElementById('msg')) {
    msg = document.createElement('div');
    msg.id = 'msg';
    msg.className='msg'
    msgcontent = document.createElement('div');
    msgcontent.id = 'msgcontent';
    msgcontent.className='msg';
    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) {
	window.setTimeout("hideMsg()", (autohide * 1000));
  }
}
*/

function inlineMsg(target,nid,string,autohide) {
  var msgid='msg'+nid;
  var msgcontentid='msgcontent'+nid;
  var msg;
  var msgcontent;
  if(!document.getElementById(msgid)) {
    msg = document.createElement('div');
    msg.id = msgid;
    msg.className='msg'
    msgcontent = document.createElement('div');
    msgcontent.id = msgcontentid;
    msgcontent.className='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(msgid);
    msgcontent = document.getElementById(msgcontentid);
  }
  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("fadeMsg2(1, '"+nid+"')", MSGTIMER);
  if(autohide) {
	window.setTimeout("hideMsg2('"+nid+"')", (autohide * 1000));
  }
}

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

function hideMsg2(id) {
  var msg = document.getElementById(id);
  if(!msg.timer) {
    msg.timer = setInterval("fadeMsg2(0, '"+id+"')", 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);
  }
}

function fadeMsg2(flag, id) {
  if(flag == null) {
    flag = 1;
  }
  var msg = document.getElementById('msg'+id);
  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;
}

function removeMessage(nid){
  var d = document.getElementById('msgcontent'+nid);
  if (d)
	  d.parentNode.removeChild(d);
  d = document.getElementById('msg'+nid);
  if (d)
	  d.parentNode.removeChild(d);
}

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