//FORM SUBMISSIONS
var postLoginAction="";

var reserved = new Array('facebook','flickr','digibug','import','img','images','pics','help','support','tour','alerts','cron','zips','tmp','share','about','blog','wiki','search','settings','login','logout','stats','privacy','terms','security','contact','press','media','photos','copyright','groups','friends','tools');

function legalWords(string) {
 for (i=0;i<reserved.length;i++) {
  if (string.toLowerCase==reserved[i]) return false;
 }
 return true;
}

function allValidChars(string) {
 var Chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ";
 for (var i = 0; i < string.length; i++) {
  if (Chars.indexOf(string.charAt(i)) == -1)
   return false;
 }
 return true;
}

function urlEncode(sStr) {
 sStr = escape(sStr).replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace(/\//g,'%2F');
 return sStr;
}

function changeSelections(object,status,bStart,bLength) {
 if (!bStart) bStart=0;
 if (!bLength) bLength=1000;
 for (i=bStart;i<bLength;i++) {
  if (object[i]) {
   object[i].checked=status;
  } else break;
 }
}

function createSwap() { 
 object=document.createForm;
 if (object.event.value.length<3) { alert('Please enter an event name of at least 3 characters');object.event.focus();return false; } 
 else if (!legalWords(object.event.value)) { alert('That event name is reserved.');object.event.focus();return false; }
 else if (!allValidChars(object.event.value)) { alert('Please use only letters, numbers, or spaces.');object.event.focus();return false; }
 else if (object.epass.value.length<3) { alert('Please enter a password of at least 3 characters');object.epass.focus();return false; } 
 else if (!user_id) {
  postLoginAction="createSwap();";
  showLoginReg();
  return false;
 } else {
  var xmlhttp =  new XMLHttpRequest();
  xmlhttp.open('POST', '/xml-create_event.php', true);
  xmlhttp.onreadystatechange = function() {
   if (xmlhttp.readyState == 4) {
    if (xmlhttp.status == 200) {
     document.getElementById('createStatus').innerHTML = "";
     object.submitButton.disabled=false;
     if (xmlhttp.responseXML.getElementsByTagName('result')[0].firstChild.data==1) {
      location.href='/'+urlEncode(object.event.value.replace(/ /g,''))+'/';
     } else {
      alert(xmlhttp.responseXML.getElementsByTagName('message')[0].firstChild.data);
     }
    }
   }
  }
  xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xmlhttp.send('event='+urlEncode(object.event.value)+'&epass='+urlEncode(object.epass.value));
  document.getElementById('createStatus').innerHTML = "<img src='/img/working.gif' width='13' height='13'>";
  object.submitButton.disabled=true;
 }
}

function showLoginReg() {
  document.getElementById('loginReg').style.visibility="visible";
}

function hideLoginReg() {
  document.getElementById('loginReg').style.visibility="hidden";
}

function updateTopLinks() {
 document.getElementById('toplinks').innerHTML='Logged in as '+name+'. <a href="profile.php">Edit Profile</a> | <a href="events.php">Your Events</a> | <a href="logout.php">Log Out</a>';
}

function login(object) {
 //check that all fields are filled in properly.
 if (object.email.value=="") { alert('Please enter your email address.');object.email.focus();return false; } 
 else if (object.password.value=="") { alert('Please enter your password.');object.password.focus();return false; } 

 //submit login
 var xmlhttp =  new XMLHttpRequest();
 xmlhttp.open('POST', '/xml-user_login.php', true);
 xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4) {
   if (xmlhttp.status == 200) {
    document.getElementById('loginStatus').innerHTML = "";
    object.submitButton.disabled=false;
    if (xmlhttp.responseXML.getElementsByTagName('result')[0].firstChild.data==1) {
     user_id=xmlhttp.responseXML.getElementsByTagName('user_id')[0].firstChild.data
     name=xmlhttp.responseXML.getElementsByTagName('name')[0].firstChild.data
     hideLoginReg();
     updateTopLinks();
     if (postLoginAction) eval(postLoginAction);
    } else {
     alert(xmlhttp.responseXML.getElementsByTagName('message')[0].firstChild.data);
     if (xmlhttp.responseXML.getElementsByTagName('result')[0].firstChild.data==2) object.email.focus();
     else if (xmlhttp.responseXML.getElementsByTagName('result')[0].firstChild.data==3) object.password.focus();
    }
   }
  }
 }
 var auto=''; if (object.auto && object.auto.checked==true) auto=1;
 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 xmlhttp.send('email='+urlEncode(object.email.value)+'&password='+urlEncode(object.password.value)+'&auto='+auto);
 document.getElementById('loginStatus').innerHTML = "<img src='/img/working.gif' width='13' height='13'>";
 object.submitButton.disabled=true;
}

function register(object) {
 //check that all fields are filled in properly.
 if (object.fname.value.length<2) { alert('Please enter a first name of at least 2 characters');object.fname.focus();return false; }
 else if (object.lname.value.length<2) { alert('Please enter a last name of at least 2 characters');object.lname.focus();return false; } 
 else if (checkEmail(object.email.value)==false) { alert('Please enter a valid email address.');object.email.focus();return false; } 
 else if (object.password.value.length<6) { alert('Please enter a password of at least 6 characters');object.password.focus();return false; } 
 else if (object.password2.value != object.password.value) { alert('The passwords you entered do not match.');object.password2.select();return false; } 
 else if (object.accept.checked==false) { alert('Please accept the terms of use to continue.');object.accept.focus();return false; }

 //submit reg
 var xmlhttp =  new XMLHttpRequest();
 xmlhttp.open('POST', '/xml-user_register.php', true);
 xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4) {
   if (xmlhttp.status == 200) {
    document.getElementById('regStatus').innerHTML = "";
    object.submitButton.disabled=false;
    if (xmlhttp.responseXML.getElementsByTagName('result')[0].firstChild.data==1) {
     user_id=xmlhttp.responseXML.getElementsByTagName('user_id')[0].firstChild.data;
     name=xmlhttp.responseXML.getElementsByTagName('name')[0].firstChild.data;
     hideLoginReg();
     updateTopLinks();
     if (postLoginAction) eval(postLoginAction);
    } else {
     alert(xmlhttp.responseXML.getElementsByTagName('message')[0].firstChild.data);
    }
   }
  }
 }
 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 xmlhttp.send('fname='+urlEncode(object.fname.value)+'&lname='+urlEncode(object.lname.value)+'&email='+urlEncode(object.email.value)+'&password='+urlEncode(object.password.value));
 document.getElementById('regStatus').innerHTML = "<img src='/img/working.gif' width='13' height='13'>";
 object.submitButton.disabled=true;
}

function pwdReminder() {
 var object=document.loginForm;
 if (checkEmail(object.email.value)) {
  var xmlhttp =  new XMLHttpRequest();
  xmlhttp.open('POST', '/xml-user_forgot_pwd.php', true);
  xmlhttp.onreadystatechange = function() {
   if (xmlhttp.readyState == 4) {
    document.getElementById('loginStatus').innerHTML = "";
    if (xmlhttp.status == 200) {
     alert(xmlhttp.responseXML.getElementsByTagName('result')[0].firstChild.data);
    }
   }
  }
  xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xmlhttp.send('email='+urlEncode(object.email.value));
  document.getElementById('loginStatus').innerHTML = "<img src='/img/working.gif' width='13' height='13'>";
 } else {
  alert("Enter your email address in the log in form then click this link again and we'll email you your password.");
  document.loginForm.email.focus();
 }
}


function eventLogin(object) {
 if (object.epass.value=="") { alert('Please enter your password.');object.epass.focus();return false; } 
 var xmlhttp =  new XMLHttpRequest();
 xmlhttp.open('POST', '/xml-event_login.php', true);
 xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4) {
   if (xmlhttp.status == 200) {
    document.getElementById('ePassStatus').innerHTML = "";
    object.submitButton.disabled=false;
    if (xmlhttp.responseXML.getElementsByTagName('result')[0].firstChild.data==1) {
     location.reload(true);
    } else {
     alert(xmlhttp.responseXML.getElementsByTagName('message')[0].firstChild.data);
     object.epass.focus();
    }
   }
  }
 }
 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 xmlhttp.send('event_id='+urlEncode(object.event_id.value)+'&epass='+urlEncode(object.epass.value));
 document.getElementById('ePassStatus').innerHTML = "<img src='/img/working.gif' width='13' height='13'>";
 object.submitButton.disabled=true;
}


function updateSettings(object) {
 if (!isInt(object.max_num.value)) { alert('Please enter a number in the Max Uploads / Person field');object.max_num.focus();return false; } 
 var xmlhttp =  new XMLHttpRequest();
 xmlhttp.open('POST', '/xml-update_settings.php', true);
 xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4) {
   if (xmlhttp.status == 200) {
    document.getElementById('settingsStatus').innerHTML = "";
    object.submitButton.disabled=false;
    alert(xmlhttp.responseXML.getElementsByTagName('message')[0].firstChild.data);
   }
  }
 }
 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 var public="";
 if (object.public[0].checked) public=0; else public=1;
 xmlhttp.send('event_id='+urlEncode(object.event_id.value)+'&public='+public+'&min_size='+urlEncode(object.min_size.options[object.min_size.selectedIndex].value)+'&max_size='+urlEncode(object.max_size.options[object.max_size.selectedIndex].value)+'&max_num='+urlEncode(object.max_num.value));
 document.getElementById('settingsStatus').innerHTML = "<img src='/img/working.gif' width='13' height='13'>";
 object.submitButton.disabled=true;
}


function updateProfile(object) {
 if (object.fname.value.length<3) { alert('Please enter a first name of at least 2 characters');object.fname.focus();return false; }
 else if (object.lname.value.length<3) { alert('Please enter a last name of at least 2 characters');object.lname.focus();return false; } 
 else if (checkEmail(object.email.value)==false) { alert('Please enter a valid email address.');object.email.focus();return false; } 
 else if (object.npwd.value && object.npwd.value.length<6) { alert('Your new password must be at least 6 characters');object.npwd.focus();return false; } 
 else if (object.npwd.value && object.npwd2.value != object.npwd.value) { alert('The new passwords you entered do not match.');object.npwd2.select();return false; } 
 else if (!object.cpwd.value) { alert('You must enter your current password to change your profile.');object.cpwd.focus();return false; } 
 var xmlhttp =  new XMLHttpRequest();
 xmlhttp.open('POST', '/xml-update_profile.php', true);
 xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4) {
   if (xmlhttp.status == 200) {
    document.getElementById('profileStatus').innerHTML = "";
    object.submitButton.disabled=false;
    alert(xmlhttp.responseXML.getElementsByTagName('message')[0].firstChild.data);
   }
  }
 }
 xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 var public="";
 xmlhttp.send('fname='+urlEncode(object.fname.value)+'&lname='+urlEncode(object.lname.value)+'&email='+urlEncode(object.email.value)+'&npwd='+urlEncode(object.npwd.value)+'&cpwd='+urlEncode(object.cpwd.value));
 document.getElementById('profileStatus').innerHTML = "<img src='/img/working.gif' width='13' height='13'>";
 object.submitButton.disabled=true;
}

//COMMON FUNCTIONS
function strReplace(str,from,to) {
 var idx = str.indexOf( from );
 while ( idx > -1 ) {
  str = str.replace( from, to );
  idx = str.indexOf( from );
 }
 return str;
}

function checkEmail(email) {
 if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email.toLowerCase())) {
  return true;
 } else {
  return false;
 }
}

function isInt(myNum) {
 // get the modulus: if it's 0, then it's an integer
  var myMod = myNum % 1;
 if (myMod == 0) {
  return true;
 } else {
  return false;
 }
}

//FIELD FUNCTIONS
function previewLink(listName,previewSpace) {
 document.getElementById(previewSpace).innerHTML=strReplace(listName," ","");
}

function showBubble(object,content,bubbleWidth) {
 var objectCoors = findPos(object);
 var screenSize = findClientSize();
 var scrollAmt = findScroll();
 if (!bubbleWidth) bubbleWidth=300;
 var bubbleBorderY=43;
 var bubbleBorderX=24;
 var bubblePointX=16;
 var bubblePointY=2;
 var bubbleMargin=0;
 var bubble = document.getElementById('bubble');
 var bubblePosX="left";
 var bubblePosY="top";

 //buildBubbleContent
 bubble.innerHTML='<div style="width:'+(bubbleWidth-bubbleBorderX)+'px;" class="xs">'+content+'</div>';

 //determine left or right display
 if ((screenSize[0]-objectCoors[0]-object.offsetWidth+scrollAmt[0]) > (bubbleWidth-bubblePointX-bubbleMargin)) {
  //display right
  bubble.style.left=objectCoors[0]+object.offsetWidth-bubblePointX;
 } else if (objectCoors[0]<bubbleWidth) {
  //display right
  bubble.style.left=objectCoors[0]+object.offsetWidth-bubbleWidth;
  var bubblePosX="right";
 } else {
  //display left
  bubble.style.left=objectCoors[0]-bubbleWidth+bubblePointX;
  var bubblePosX="right";
 }

 //determine top or bot display
 if ((objectCoors[1]-scrollAmt[1]) > (bubble.offsetHeight+bubbleBorderY+bubblePointY+bubbleMargin)) {
  //display top
  bubble.style.top=objectCoors[1]-bubble.offsetHeight-bubbleBorderY-bubblePointY;
 } else {
  //display bot
  bubble.style.top=objectCoors[1]+object.offsetHeight+bubblePointY;
  bubblePosY="bot";
 }

 //buildBubbleTop
 if (bubblePosY=="top") {
  bubble.innerHTML='<table><tr><td width="6" height="6"><img src="img/bubble-tl.gif" width="6" height="6"></td><td style="background-color:#FFFFE1;background-image:url(img/bubble-border.gif);background-repeat:repeat-x;background-position:top left;"></td><td width="6"><img src="img/bubble-tr.gif" width="6" height="6"></td></tr><tr><td style="background-color:#FFFFE1;background-image:url(img/bubble-border.gif);background-repeat:repeat-y;"></td><td bgcolor="#FFFFE1" style="padding:6px;color:#666600;">'
   + bubble.innerHTML
   + '</td><td style="background-color:#FFFFE1;background-image:url(img/bubble-border.gif);background-repeat:repeat-y;background-position:top right;"></td></tr><tr valign="top"><td><img src="img/bubble-bl.gif" width="6" height="6"></td><td valign="bottom" height="25" valign="top" background="img/bubble-b.gif" style="text-align:'+bubblePosX+';"><img src="img/bubble-point-down-'+bubblePosX+'.gif" width="19" height="20" style="margin:0px 10px 0px 10px;"></td><td><img src="img/bubble-br.gif" width="6" height="6"></td></tr></table>';
 } else {
  bubble.innerHTML='<table><tr valign="bottom"><td width="6"><img src="img/bubble-tl.gif" width="6" height="6"></td><td height="25" valign="top" background="img/bubble-t.gif" style="text-align:'+bubblePosX+';"><img src="img/bubble-point-'+bubblePosX+'.gif" width="19" height="20" style="margin:0px 10px 0px 10px;"></td><td width="6"><img src="img/bubble-tr.gif" width="6" height="6"></td></tr><tr><td style="background-color:#FFFFE1;background-image:url(img/bubble-border.gif);background-repeat:repeat-y;"></td><td bgcolor="#FFFFE1" style="padding:6px;color:#666600;">'
   + bubble.innerHTML
   + '</td><td style="background-color:#FFFFE1;background-image:url(img/bubble-border.gif);background-repeat:repeat-y;background-position:top right;"></td></tr><tr><td height="6"><img src="img/bubble-bl.gif" width="6" height="6"></td><td style="background-color:#FFFFE1;background-image:url(img/bubble-border.gif);background-repeat:repeat-x;background-position:bottom left;"></td><td><img src="img/bubble-br.gif" width="6" height="6"></td></tr></table>';
 }
 bubble.style.visibility="visible";
}

function hideBubble() {
 document.getElementById('bubble').style.visibility="hidden";
}


function findPos(object) {
 var x = y = 0;
 if (object.offsetParent) {
  x = object.offsetLeft;
  y = object.offsetTop;
  while (object = object.offsetParent) {
   x += object.offsetLeft;
   y += object.offsetTop;
  }
 }
 return [x,y];
}

function findScroll() {
 var x,y;
 if (self.pageYOffset) { // all except Explorer
  x = self.pageXOffset;
  y = self.pageYOffset;
 } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
  x = document.documentElement.scrollLeft;
  y = document.documentElement.scrollTop;
 } else if (document.body) { // all other Explorers
  x = document.body.scrollLeft;
  y = document.body.scrollTop;
 }
 return [x,y]
}

function findClientSize() {
 var x,y;
 if (self.innerHeight) { // all except Explorer
  x = self.innerWidth;
  y = self.innerHeight;
 } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
  x = document.documentElement.clientWidth;
  y = document.documentElement.clientHeight;
 } else if (document.body) { // other Explorers
  x = document.body.clientWidth;
  y = document.body.clientHeight;
 }
 return [x,y]
}