function removeFile(obj, i)
{
  removeNode(document.getElementById('file' + i));
  removeNode(obj);
}

//As many arguments as you want
function enableFields()
{
  for (var i=0; i<arguments.length; i++)
    document.getElementById(arguments[i]).style.display='block';
}

//As many arguments as you want
function disableFields()
{
  for (var i=0; i<arguments.length; i++)
  {
    var obj=document.getElementById(arguments[i]);
    var inputs=obj.getElementsByTagName('input');
    for (var j=0; j<inputs.length; j++)
      inputs[j].value='';
    obj.style.display='none';
  }
}

function checkAddForm() {
  if (document.getElementById('coverage').selectedIndex==0)
    alert('Please select an option for coverage.');
//  else if (document.getElementById('coverage').selectedIndex==1 && (document.getElementById('semester').selectedIndex!=1 || document.getElementById('year').selectedIndex!=0))
//    alert('You have listed "Current Semester" for classes attended. Please make sure you\'ve selected the corresponding options for semester and year.');
  else if (document.getElementById('completion').selectedIndex==0)
    alert('Please select an option for "' + document.getElementById('completionlabel').firstChild.nodeValue + '".');
  else
    return true;
  return false;
}

function checkLost()
{
  var email=/^[\w]+@([\w]+\.[\w]+)$/;
  if (!email.exec(document.getElementById('email').value))
  {
    alert('Please enter a valid email address!');
    document.getElementById('email').select();
    return false;
  }
  else if (document.getElementById('pw1').value.length<5)
  {
    alert('Your password must be at least five characters.');
    document.getElementById('pw1').select();
    return false;
  }
  else if (document.getElementById('pw1').value!=document.getElementById('pw2').value)
  {
    alert('Please make sure that your entered the same password twice.');
    document.getElementById('pw1').select();
    return false;
  }
  return true;
}


function checkRegister(domain)
{
  if(!validate_email()) {
    alert('Please enter a valid email address!');
    document.getElementById('email').select();
    return false;	  
  }
  var email=/^[\w]+@([\w]+\.?[\w]+\.[\w]+)$/;
  var res=email.exec(document.getElementById('email').value);
  if (res && res[1].toLowerCase()!=domain)
  {
    alert('Invalid email address! You must register with a school provided email address!');
    document.getElementById('email').select();
    return false;
  }
  else if (document.getElementById('pw1').value.length<5)
  {
    alert('Your password must be at least five characters.');
    document.getElementById('pw1').select();
    return false;
  }
  else if (document.getElementById('pw1').value!=document.getElementById('pw2').value)
  {
    alert('Please make sure that your entered the same password twice.');
    document.getElementById('pw1').select();
    return false;
  }
  else if (document.getElementById('fname').value.length<2)
  {
    alert('Please enter a first name');
    document.getElementById('fname').select();
    return false;
  }
  else if (document.getElementById('lname').value.length<2)
  {
    alert('Please enter a last name');
    document.getElementById('lname').select();
    return false;
  }
  else if (!document.getElementById('tos').checked)
  {
    alert('You must read and agree with the Terms of Service');
    return false;
  }
  return true;
}

function validate_email() {
    if(-1 == document.getElementById('email').value.indexOf("@")) { 
       return false; 
       }
    if(-1 != document.getElementById('email').value.indexOf(",")) { 
       return false; 
       }
    if(-1 != document.getElementById('email').value.indexOf("#")) { 
       return false; 
       }
    if(-1 != document.getElementById('email').value.indexOf("!")) { 
       return false; 
       }
    if(-1 != document.getElementById('email').value.indexOf(" ")) { 
       return false; 
       }
    if(document.getElementById('email').value.length == (document.getElementById('email').value.indexOf("@")+1) ) {
       return false;
       }

    if(document.getElementById('email').value.length == 0) { 
      return false; 
      }

    return true;
}

function starsSet(obj, r)
{
  var li=obj.getElementsByTagName('li');
  for (var i=0; i<li.length; i++)
  {
    if (i+1<=r)
      li[i].className='on';
    else
      li[i].className='off';
  }
}

function rateNotes(obj, notes, rating)
{
  var req;

  if (req=getXMLObject())
  {
    var s=obj.getElementsByTagName('span');
    s[0].style.display='inline';
    setText(s[0], 'Loading...'); 
    obj.style.display='block';
    req.onreadystatechange=function()
    {
      if (req.readyState==4)
      {
        if (req.status==200)
        {
          s[0].style.display='none';
          s[0].parentNode.style.width=(parseFloat(req.responseText, 10) * 16) + 'px';
          setText(s[0], req.responseText);
        }
      }
    };
    req.open('GET', 'ajax.php?r=6&n=' + notes + '&s=' + rating, true);
    req.send(null);
    return true;
  }
  else
    return false;
}

function selectedFile(obj)
{
  var crit=/\.(doc|jpg|jpeg|txt|zip|gif|pdf|ppt|docx|pptx|xls|xlsx|rtf)$/i;
  var fname=/(?:\/\\)?([^\\\/]+)$/;
  if (obj.value=='')
    return;
  else if (!crit.test(obj.value))
  {
    alert('Sorry, you can not upload the type of file. Please select a different file.');
    obj.value='';
  }
  else
  {
    //First do a search to see if they've already uploaded this
    var files=obj.parentNode.getElementsByTagName('input');
    for (var j=0; j<files.length; j++)
    {
      if (files[j].value==obj.value && files[j].name!=obj.name)
      {
        alert('You\'ve already selected this file, please choose another one.');
        obj.value='';
        return;
      }
    }

    //Increment the file counter
    var i=parseInt(obj.parentNode.getAttribute('i'), 10); //How many files we've selected
    i=isNaN(i)?0:i;
    obj.parentNode.setAttribute('i', i+1);

    //Make a div box to show the file they selected
    var f=document.createElement('div');
    f.className=crit.exec(obj.value)[1].toLowerCase();
    var h1=document.createElement('h1');
    var fn=document.createTextNode(fname.exec(obj.value)[1]);
    h1.appendChild(fn);
    var rem=document.createElement('small');
    rem.className='aside';
    var rema=document.createElement('a');
    rema.href='#';
    rema.onclick=function() { removeFile(this.parentNode.parentNode, i) }
    var remat=document.createTextNode('(remove)');
    rema.appendChild(remat);
    rem.appendChild(rema);
    var h2=document.createElement('h2');
    var ft;
    switch (f.className)
    {
      case 'doc':
	  case 'docx':
        ft=document.createTextNode('Word Document');
        break;
      case 'jpg':
      case 'jpeg':
        ft=document.createTextNode('JPG Image');
        break;
      case 'txt':
        ft=document.createTextNode('Text Document');
        break;
      case 'zip':
        ft=document.createTextNode('ZIP Archive');
        break;
      case 'gif':
        ft=document.createTextNode('GIF Image');
        break;
      case 'pdf':
        ft=document.createTextNode('PDF Document');
        break;
      case 'ppt':
        ft=document.createTextNode('PowerPoint Presentation');
        break;
      default:
        ft=document.createTextNode('Unknown');
        break;
    }
    h2.appendChild(ft);
    f.appendChild(h1);
    f.appendChild(rem);
    f.appendChild(h2);
    obj.parentNode.appendChild(f);

    //Now we gotta make a new input box
    obj.style.position='absolute'; //Text duplication bug in IE won't let us use display: none;
    obj.tabIndex=-1;	
    obj.style.left='-1000px';
    var nt=document.createElement('input');
    nt.name='file' + (i+1);
    nt.id='file' + (i+1);
    nt.type='file';
    nt.onchange=function() {selectedFile(this);};
    obj.parentNode.appendChild(nt);
  }
}

function displayUpload(obj)
{
  var n=obj.options[obj.selectedIndex].getAttribute('cName');
  if (n!=null)
  {
    setText(document.getElementById('title'), n);
    document.getElementById('upload').style.display='block';
  }
  else if (obj.options[obj.selectedIndex].value==0) //The blank listing
    document.getElementById('upload').style.display='none';
  else //We don't know the course name, gonna havta AJAX it
    loadCourseName(document.getElementById('title'), obj.options[obj.selectedIndex].value);
}

function ammendClasses(obj, course, add)
{
  var req;
  if (req=getXMLObject())
  {
    var as=document.getElementsByTagName('a');
    for (var i=0; i<as.length; i++)
    {
      if (as[i].href==obj.href)
      {
        as[i].firstChild.nodeValue='Updating...';
        as[i].onclick=function() {return false};
        as[i].style.color='black';
      }
    }
    
    req.onreadystatechange=function()
    {
      if (req.readyState==4)
      {
        if (req.status==200)
        {
          if (req.responseText=='success')
          {
            for (var i=0; i<as.length; i++)
            {
              if (as[i].href==obj.href)
              {
                as[i].firstChild.nodeValue=add?'Remove from my classes':'Add to my classes';
                as[i].onclick=function() {return !ammendClasses(obj, course, !add)};
                as[i].style.color='';
              }
            }
          }
          else
            obj.firstChild.nodeValue='Error!';
        }
      }
    };
    req.open('GET', 'ajax.php?r=2&c=' + course + '&a=' + (add?'1':'2'), true);
    req.send(null);
    return true;
  }
  else
    return false;
}

function loadCourses(obj, dept)
{
  var req;

  if (req=getXMLObject())
  {
    clearSelect(obj);
    obj.options[0]=new Option('Loading...', -1, false, false);
    obj.disabled=true;
    req.onreadystatechange=function()
    {
      if (req.readyState==4)
      {
        if (req.status==200)
        {
          var xml=req.responseXML;
          var courses=xml.getElementsByTagName('course');
          clearSelect(obj);
          obj.options[obj.options.length]=new Option('', 0, false, false);
          for (var i=0; i<courses.length; i++)
          {
            obj.options[obj.options.length]=new Option(getXMLValue(courses[i], 'number'), getXMLValue(courses[i], 'id'), false, false);
            obj.options[obj.options.length-1].setAttribute('cName', getXMLValue(courses[i], 'name'));
          }
          obj.disabled=false;
        }
      }
    };
    req.open('GET', 'ajax.php?r=1&d=' + dept, true);
    req.send(null);
    return true;
  }
  else
    return false;
}

function loadTeachers(obj, course)
{
  var req;

  if (req=getXMLObject())
  {
    clearSelect(obj);
    obj.options[0]=new Option('Loading...', -1, false, false);
    obj.disabled=true;
    req.onreadystatechange=function()
    {
      if (req.readyState==4)
      {
        if (req.status==200)
        {
          var xml=req.responseXML;
          var teachers=xml.getElementsByTagName('teacher');
          clearSelect(obj);
          obj.options[obj.options.length]=new Option('Other', 0, false, false);
          for (var i=0; i<teachers.length; i++)
            obj.options[obj.options.length]=new Option(getXMLValue(teachers[i], 'name'), getXMLValue(teachers[i], 'id'), false, false);
          obj.disabled=false;
        }
      }
    };
    req.open('GET', 'ajax.php?r=3&c=' + course, true);
    req.send(null);
    return true;
  }
  else
    return false;
}

function loadCourseName(obj, course)
{
  var req;

  if (req=getXMLObject())
  {
    setText(obj, 'Loading...');
    req.onreadystatechange=function()
    {
      if (req.readyState==4)
      {
        if (req.status==200)
          setText(obj, req.responseText);
      }
    };
    req.open('GET', 'ajax.php?r=4&c=' + course, true);
    req.send(null);
    return true;
  }
  else
    return false;
}

function deleteFile(obj, file)
{
  var req;

  if (req=getXMLObject())
  {
    setText(obj, 'Deleting...');
    req.onreadystatechange=function()
    {
      if (req.readyState==4)
      {
        if (req.status==200)
        {
          if (req.responseText=='success')
            removeNode(obj.parentNode.parentNode);
          else
            setText(obj, 'Error');
        }
      }
    };
    req.open('GET', 'ajax.php?r=5&d=' + file, true);
    req.send(null);
    return true;
  }
  else
    return false;
}

function clearSelect(obj)
{
  for (var i=obj.options.length-1; i>=0; i--)
    obj.options[i]=null;
}

//Returns the node value of the first tag in another tag
function getXMLValue(xml, tag)
{
  if (xml.getElementsByTagName(tag)[0].firstChild)
    return xml.getElementsByTagName(tag)[0].firstChild.nodeValue;
  else
    return '';
}

function getXMLObject()
{
  if (window.XMLHttpRequest) //Mozilla, Safari, ...
    return new XMLHttpRequest();
  else if (window.ActiveXObject) //IE
    return new ActiveXObject("Microsoft.XMLHTTP");
}

//A clone of Internet Explorer's removeNode function
function removeNode(node)
{
  if (node.removeNode) //If we're using Internet Explorer just use the built in version
    node.removeNode(true);
  else
  {
    for (var i=node.childNodes.length-1; i>=0; i--)
      removeNode(node.childNodes[i]);
    node.parentNode.removeChild(node);
  }
}

//Sets the textNode of an element
function setText(obj, val)
{
  if (obj.firstChild)
    obj.firstChild.nodeValue=val;
  else
    obj.innerHTML=val;
}


var url = "username.php?param="; // The server-side script
var cur = "&cur=";

function updateName(x) {
  // display a quick message while the script is being processed
  document.getElementById('un').innerHTML = "...checking a few electrons...";
  z="username"+x
  var name = document.getElementById(z).value;
  http.open("GET", url + escape(name) + cur + escape(z), true);
  http.onreadystatechange = handleHttpResponse;
  http.send(null);
}

function handleHttpResponse() {
  if (http.readyState == 4) {
    results = http.responseText;
	z="username"+1
    var name = document.getElementById(z).value;
    if(results == "") results = name+" can be invited...";
    // the div in which the message appears
    document.getElementById('un').innerHTML = results;
	if (results.search("invited") != -1) {
		image = '<img src="newimages/checkMark.gif" alt="Can be invited"/>';
	  if (results.search("<!--username1-->") != -1) {
	  	document.getElementById('state1').innerHTML = image;
	  } else if (results.search("<!--username2-->") != -1) {
		document.getElementById('state2').innerHTML = image;
	  } else if (results.search("<!--username3-->") != -1) {
		document.getElementById('state3').innerHTML = image;
	  } else if (results.search("<!--username4-->") != -1) {
		document.getElementById('state4').innerHTML = image;
	  } else if (results.search("<!--username5-->") != -1) {
		document.getElementById('state5').innerHTML = image;
	  } else {
		document.getElementById('state1').innerHTML = '';
	  }
	} else {
		image = '<img src="newimages/xMark.gif" alt="Already registered"/>';
	  if (results.search("<!--username1-->") != -1) {
	  	document.getElementById('state1').innerHTML = image;
	  } else if (results.search("<!--username2-->") != -1) {
		document.getElementById('state2').innerHTML = image;
	  } else if (results.search("<!--username3-->") != -1) {
		document.getElementById('state3').innerHTML = image;
	  } else if (results.search("<!--username4-->") != -1) {
		document.getElementById('state4').innerHTML = image;
	  } else if (results.search("<!--username5-->") != -1) {
		document.getElementById('state5').innerHTML = image;
	  } else {
		document.getElementById('state1').innerHTML = '';
	  }
	}
  }
}

function getHTTPObject() {
  var xmlhttp;
  /*@cc_on
  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        xmlhttp = false;
      }
    }
  @else
  xmlhttp = false;
  @end @*/
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
    } catch (e) {
      xmlhttp = false;
    }
  }
  return xmlhttp;
}
var http = getHTTPObject(); // We create the HTTP Object

function setSpace() {
	/*
	This function sets a space next to the email address
	textboxes so that they do not jump when the check or
	x images are displayed.
	*/
	image = '<img src="newimages/spacer.gif" width="15"/>';
	document.getElementById('state1').innerHTML = image;
	document.getElementById('state2').innerHTML = image;
	document.getElementById('state3').innerHTML = image;
	document.getElementById('state4').innerHTML = image;
	document.getElementById('state5').innerHTML = image;
}

function clearContents(x) {
  // Clear "email address" from the invite text boxes
  // when they are clicked or tabbed to
  z="username"+x
  if(document.getElementById(z).value == "email address") {
  	document.getElementById(z).value = "";
  }
}
function clearAllContents() {
  // Clear "email address" from the remaining invite text
  // boxes when the submit button is clicked
  for (var x=1; x<6; x++) {
	  z="username"+x
	  if(document.getElementById(z).value == "email address") {
		document.getElementById(z).value = "";
	  }
  }
}

//hides and unhides @param id. This is the inline version 
function _unhide(id){
	element = document.getElementById(id);
	//if (element.style.display == 'none')
		element.style.display = 'inline';
	//else
		//element.style.display = 'none';

}

function _hide(id){
	element = document.getElementById(id);
	element.style.display = 'none';
}

//sets @param id's value to @param val
function setInputValue(id,val){
	element = document.getElementById(id);
	element.value=val;
}

function other(val,unhideid,hideid){
	if (val=='1'){
		element = document.getElementById(unhideid);
		element.style.display = 'inline';
		element = document.getElementById(hideid);
		element.style.display = 'none';
	}
}
