/*
 * $Id: common.js 369 2010-01-20 01:28:09Z ljq $
 * Javascript
 */

function set_a_selected(id)
{
    var As = new Array('v_chome', 'v_syll', 'v_leno');
    for (var i=0; i<As.length; i++)
    {
        if (As[i] == id) document.getElementById(As[i]).className='selected';
        else document.getElementById(As[i]).className='';
    }
}

// show syllabus independantly
function show_syllabus_only()
{
    var obj = document.getElementById('coursehome');
    if (obj) obj.style.display = '';
    else return;
    obj = document.getElementById('viewleno');
    if (obj) obj.style.display = 'none';
    obj = document.getElementById('c_title');
    if (obj) obj.style.display = 'none';
    obj = document.getElementById('c_author');
    if (obj) obj.style.display = 'none';
    obj = document.getElementById('c_days');
    if (obj) obj.style.display = 'none';
    obj = document.getElementById('c_file');
    if (obj) obj.style.display = 'none';
    set_a_selected('v_syll');
}

// show lecture notes
function show_lecture_notes()
{
    var obj = document.getElementById('coursehome');
    if (obj) obj.style.display = 'none';
    else return;
    obj = document.getElementById('viewleno');
    if (obj) obj.style.display = '';
    set_a_selected('v_leno');
}

function clearSearchBox()
{
	if(document.getElementById("terms").value == "Enter search keyword")
	{
		document.getElementById("terms").value = "";	
	}
	
}
function fillSearchBox()
{
	if(document.getElementById("terms").value.search(/^[ ]*$/g) != -1 )
	{
		document.getElementById("terms").value = "Enter search keyword";	
	}
}
function check_empty_search_input()
{
    var keywords = document.getElementById("terms").value;
    var pattern = /^[ ]*$/g;
    if (keywords.search(pattern) != -1){
        alert('Please input search keyword');
        return false;
    }
    if (keywords == "Enter search keyword"){
        alert('Please input search keyword');
        return false;
    }
    return true;
}

function show_find_detail()
{
    var obj = document.getElementById('find_detail');
    if (obj) obj.style.display = 'block';
    obj = document.getElementById('find_any');
    if (obj) obj.style.display = 'none';
}
function show_find_any()
{
    var obj = document.getElementById('find_any');
    if (obj) obj.style.display = 'block';
    obj = document.getElementById('find_detail');
    if (obj) obj.style.display = 'none';
}


/*
 * JS for uploading lecture notes
 */
function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}
function MM_jumpMenu2(selObj,restore){ //v3.0

  var numOfSlide = selObj.options[selObj.selectedIndex].value;
  var headTD = document.getElementById('leno_label');
  
  var curTR = document.getElementById('leno_tr');
  var curTB = curTR.parentNode;
  var begIndex = curTR.rowIndex + 1;
  var curCnt   = curTB.rows.length - begIndex - 1;
  var diff = numOfSlide - curCnt;
  
  if (diff>0){
    headTD.rowSpan += diff;
  	for (var i=0; i<diff; i++){
	  var objRow = curTB.rows[curTB.rows.length-2];
      var newRow = objRow.cloneNode(true);
  	  var desRow = curTB.rows[objRow.rowIndex+1];
	  for (var j=0; j<newRow.childNodes.length; j++){
	    var tmp = newRow.childNodes[j];
	    if (tmp.tagName == 'TD'){
		  for (var k=0; k<tmp.childNodes.length; k++){
		    var tmp2 = tmp.childNodes[k];
			if (tmp2.tagName == 'INPUT' && tmp2.className == 'emptyclass'){
			  tmp2.value = parseInt(tmp2.value)+1;
			  break;
			}
		  }
		  break;
		}
	  }
	  curTB.insertBefore(newRow,desRow);
	}
  }
  
  if (diff<0){
  	headTD.rowSpan += diff;
	for (var i=0; i<Math.abs(diff); i++){
	  curTB.deleteRow(curTB.rows.length-2);
	}
  }

  if (restore) selObj.selectedIndex=0;
}
function checkInput()
{
  var objs = document.getElementsByTagName('INPUT');
  for (var i=0; i<objs.length; i++){
    if (objs[i].id == 'desc' || objs[i].id == 'author' || objs[i].id == 'file'){
	  if (objs[i].value.length <= 0) {
	    alert('Please input all fields and select all files!');
		return false;
	  }
	}
  }
  return true;
}


/*
 * Sort search results
 */
function store_res_list(){
    var div = document.getElementById('search_result');
    var list = new Array();
    for (var i=0, j=0; i<div.childNodes.length; i++){
        var child = div.childNodes[i];
        if (child.tagName == 'P'){
            list[j++] = child;
        }
    }
    return list;
}
function restore_res_list(list){
    var div = document.getElementById('search_result');
    while (div.childNodes.length>0){
        var child = div.childNodes[0];
        div.removeChild(child);
    }
    for (var i=0; i<list.length; i++){
        div.appendChild(list[i]);
    }
}
function sort_by_date(e1, e2){
    var d1=null;
    var d2=null;
    for (var i=0; i<e1.childNodes.length; i++){
        var tmp = e1.childNodes[i];
        if (tmp.className == 'fileinfo'){ 
            d1 = tmp.innerHTML;
            break;
        }
    }
    for (var i=0; i<e2.childNodes.length; i++){
        var tmp = e2.childNodes[i];
        if (tmp.className == 'fileinfo'){ 
            d2 = tmp.innerHTML;
            break;
        }
    }
    if (d1 == d2) return 0;
    else if (d2<d1) return -1;
    else return 1;
}
function sort_by_id(e1, e2){
    var d1=null;
    var d2=null;
    for (var i=0; i<e1.childNodes.length; i++){
        var tmp = e1.childNodes[i];
        if (tmp.className == 'filetype'){ 
            d1 = tmp.innerHTML;
            break;
        }
    }
    for (var i=0; i<e2.childNodes.length; i++){
        var tmp = e2.childNodes[i];
        if (tmp.className == 'filetype'){ 
            d2 = tmp.innerHTML;
            break;
        }
    }
    if (d1 == d2) return 0;
    else if (d1<d2) return -1;
    else return 1;
}
function sort_by_title(e1, e2){
    var d1=null;
    var d2=null;
    for (var i=0; i<e1.childNodes.length; i++){
        var tmp = e1.childNodes[i];
        if (tmp.tagName == 'A'){ 
            d1 = tmp.innerHTML;
            break;
        }
    }
    for (var i=0; i<e2.childNodes.length; i++){
        var tmp = e2.childNodes[i];
        if (tmp.tagName == 'A'){ 
            d2 = tmp.innerHTML;
            break;
        }
    }
    var pattern = /<[^<>]+>/g;
    var replace = "";
    d1 = d1.replace(pattern, replace);
    d2 = d2.replace(pattern, replace);
    if (d1 == d2) return 0;
    else if (d1<d2) return -1;
    else return 1;
}
function sort_by_summary(e1, e2){
    var d1=null;
    var d2=null;
    for (var i=0; i<e1.childNodes.length; i++){
        var tmp = e1.childNodes[i];
        if (tmp.className == 'snippet'){ 
            d1 = tmp.innerHTML;
            break;
        }
    }
    for (var i=0; i<e2.childNodes.length; i++){
        var tmp = e2.childNodes[i];
        if (tmp.className == 'snippet'){ 
            d2 = tmp.innerHTML;
            break;
        }
    }
    var pattern = /<[^<>]+>/g;
    var replace = "";
    d1 = d1.replace(pattern, replace);
    d2 = d2.replace(pattern, replace);
    if (d1 == d2) return 0;
    else if (d1<d2) return -1;
    else return 1;
}
function set_sort_color(mod){
    var id_names = new Array('s_date', 's_id', 's_title', 's_summary');
    for (var i=0; i<id_names.length; i++){
        if (id_names[i] == 's_'+mod)
            document.getElementById(id_names[i]).style.color = 'red';
        else
            document.getElementById(id_names[i]).style.color = '';
    }
}
function sortby(mod){
    set_sort_color(mod);
    var list = store_res_list();
    switch(mod){
        case 'date':
            list = list.sort(sort_by_date);
            break;
        case 'id':
            list = list.sort(sort_by_id);
            break;
        case 'title':
            list = list.sort(sort_by_title);
            break;
        case 'summary':
            list = list.sort(sort_by_summary);
            break;
        default :
            break;
    }
    restore_res_list(list);
}
function on_register(){
    var objForm = document.getElementById("loginform");
    if (!objForm) return false;
    objForm.action = "./?mod=signup";
    objForm.submit();
    return true;
}
function chk_agree(obj)
{
    var sub = document.getElementById('submit_reg');
    if (obj.checked){      
        sub.disabled = false;
    }else{
        sub.disabled = true;
    }
}
function chk_register_input()
{
    // login name
    var input = document.getElementById('loginname').value;
    var pattern = /^[a-zA-Z]{1}[a-zA-Z0-9_\.\-]{2,31}$/g;
    if (input.search(pattern) == -1){
        alert(
              "Error: Wrong login name!\n" +
              "1. Only [a-zA-Z0-9_.-] can be used.\n" +
              "2. Alphabetic letter must be specified first.\n" +
              "3. The length is at least 3, but cannot exceed 32.\n"
              );
        return false;
    }

    //password
    var pass1 = document.getElementById('password_input').value;
    var pass2 = document.getElementById('confirm').value;
    if (pass1.length<=0 || pass2.length<=0){
        alert( "Error: Wrong password!\n" +
               "Password must be specified.\n");
        return false;
    }
    if (pass1 != pass2){
        alert(
              "Error: Wrong confirming password!\n" +
              "Please make sure your twice passwords are the same.\n"
              );
        return false;
    }
    //alert(hex_md5(pass1)); //74b87337454200d4d33f80c4663dc5e5
    if (pass1.length != 32){ //fixed a bug, when password is saved by browser
        document.getElementById('password_input').value = hex_md5(pass1);
        document.getElementById('confirm').value = hex_md5(pass2);
    }
    //alert(document.getElementById('password_input').value);

    //first name, last name
    var fname = document.getElementById('firstname').value;
    var lname = document.getElementById('lastname').value;
    pattern = /^[a-zA-Z \-_\.,]{1,255}$/g;
    if (fname.search(pattern) == -1 || lname.search(pattern) == -1){
        alert(
              "Error: Wrong first name or last name!\n" +
              "Only alphabetic letter can be used.\n"
              );
        return false;
    }

    //email
    var email = document.getElementById('email').value;
    pattern = /^[_\.0-9a-zA-Z\-]+@([0-9a-zA-Z][0-9a-zA-Z\-]+\.)+[a-zA-Z]+$/i;
    if (email.search(pattern) == -1){
        alert("Error: Wrong email address!\n");
        return false;
    }

    //country
    var country = document.getElementById('country').value;
    pattern = /^[ \w\.\-,]{3,255}$/i
    if (country.search(pattern) == -1){
        alert(
                "Error: Wrong country information!\n" +
                "1. Only alphabetic letter can be used,\n" +
                "2. The length is at least 3, but cannot exceed 255.\n"
             );
        return false;
    }

    //organization
    var organize = document.getElementById('organization').value;
    pattern = /^[ \w\.\-,]{4,255}$/i;
    if (organize.search(pattern) == -1){
        alert(
              "Error: Wrong organization information!\n" +
              "1. Only alphabetic letter can be used.\n" +
              "2. The length is at least 4, but cannot exceed 255.\n"
              );
        return false;
    }

    //address
    var address = document.getElementById('address').value;
    pattern = /^[ \w\.\-,]{4,255}$/i;
    if (address.search(pattern) == -1){
        alert(
              "Error: Wrong address information!\n" +
              "1. Only alphabetic letter can be used.\n" +
              "2. The length is at least 4, but cannot exceed 255.\n"
              );
        return false;
    }

    //phone
    var phone = document.getElementById('telephone').value;
    pattern = /^[0-9 \-\+]{7,255}$/g;
    if (phone.search(pattern) == -1){
        alert(
              "Error: Wrong telephone number!\n" +
              "1. Only [+], number and [-] can be used.\n" +
              "2. The length is at least 7, but cannot exceed 255.\n"
              );
        return false;
    }

    return true;
}
function chk_retrieve_input()
{
    // login name
    var input = document.getElementById('loginname').value;
    var pattern = /^[a-zA-Z]{1}[a-zA-Z0-9_\.\-]{2,31}$/g;
    if (input.search(pattern) == -1){
        alert(
              "Error: Wrong login name!\n" +
              "1. Only [a-zA-Z0-9_.-] can be used.\n" +
              "2. Alphabetic letter must be specified first.\n" +
              "3. The length is at least 3, but cannot exceed 32.\n"
              );
        return false;
    }

    //password
    var pass1 = document.getElementById('password_input').value;
    var pass2 = document.getElementById('confirm').value;
    if (pass1.length<=0 || pass2.length<=0){
        alert( "Error: Wrong password!\n" +
               "Password must be specified.\n");
        return false;
    }
    if (pass1 != pass2){
        alert(
              "Error: Wrong confirming password!\n" +
              "Please make sure your twice passwords are the same.\n"
              );
        return false;
    }
    document.getElementById('password_input').value = hex_md5(pass1);
    document.getElementById('confirm').value = hex_md5(pass2);
    //alert(document.getElementById('password_input').value);

    //email
    var email = document.getElementById('email').value;
    pattern = /^[_\.0-9a-zA-Z\-]+@([0-9a-zA-Z][0-9a-zA-Z\-]+\.)+[a-zA-Z]+$/i;
    if (email.search(pattern) == -1){
        alert("Error: Wrong email address!\n");
        return false;
    }

    return true;
}

function role_onchange(selObj){ //v3.0
  var fyear = document.getElementById('label_fyear');
  var lbpur = document.getElementById('lb_purpose');
  if (selObj.options[selObj.selectedIndex].value == 4
   || selObj.options[selObj.selectedIndex].value == 5
          ) //Lecturer or Other
  {
      if (fyear) fyear.style.display = "none";
  }else{
      if (fyear) fyear.style.display = "";
  }
  if (selObj.options[selObj.selectedIndex].value == 5) //Other
  {
      if (lbpur) lbpur.style.display = "";
  }else{
      if (lbpur) lbpur.style.display = "none";
  }
}

function course_onchange(selObj)
{
  var srole = document.getElementById('sel_role');
  srole.selectedIndex = selObj.selectedIndex;
  role_onchange(srole);
}

function new_role_onchange(obj){
  var lcourse = document.getElementById('lb_course');
  var scourse = document.getElementById('sel_course');
  var srole = document.getElementById('sel_role');
  if(obj.value == "0")
  {
      lcourse.style.display = "block";
      scourse.style.display = "block";
      srole.selectedIndex = scourse.selectedIndex;
  }
  else
  {
      lcourse.style.display = "none";
      scourse.style.display = "none";
      if(obj.value == "4")
          srole.selectedIndex = "4";
      if(obj.value == "5")
          srole.selectedIndex = "5";

  }
  role_onchange(srole);
}
