//
// Author: michaelsorokowski
// Date: Jun 26, 2007
//

var sessionNameRegEx = new RegExp("[\|#\"&<>]");

<!-- Dynamic Version by: Nannette Thacker -->
<!-- http://www.shiningstar.net -->
<!-- Original by :  Ronnie T. Moore -->
<!-- Web Site:  The JavaScript Source -->
<!-- Use one function for multiple text areas on a page -->
<!-- Limit the number of characters per textarea -->
<!-- Begin
function textCounter(field,cntfield,maxlimit) {
  if (field.value.length > maxlimit) // if too long...trim it!
  {
    field.value = field.value.substring(0, maxlimit);
    // otherwise, update 'characters left' counter
  }
  var charsLeft = maxlimit - field.value.length;
  // Need to add the space character here, since IE removes the space after the div tag!
  charsLeft += " ";
  $('#' + cntfield)[0].innerHTML = charsLeft;
}
//  End -->

function validateSessionName(value)
{
  return !sessionNameRegEx.test(value);
}

function newLine(text, line)
{
	if (text.length > 0)
	{
		text += "<br>";
	}
	return text += line;
}

function getObj(objId) {
    var obj = $('#' + objId)[0];
    return obj;
}

function getObjWithStyle(objId) {
    if (document.getElementById)   {
        this.obj = document.getElementById(objId);
        if (this.obj) {
            this.style = document.getElementById(objId).style;
        }
    } else if (document.all) {
        this.obj = document.all[objId];
        if (this.obj) {
            this.style = document.all[objId].style;
        }
    } else if (document.layers) {
        this.obj = document.layers[objId];
        if (this.obj) {
            this.style = document.layers[objId];
        }
    }
}


function toggleVisibility(objId, iState, displayMode) {
    // 1 visible, 0 hidden
    var obj = new getObjWithStyle(objId);
    if (obj) {
        obj.style.visibility = document.layers ? (iState ? "show" : "hide") : (iState ? "visible" : "hidden");
        obj.style.display = (iState ? displayMode : "none");
    }
}

//
// ListBox functions.
//
function isListBox(listBoxObj) {
    return (listBoxObj && typeof listBoxObj.options != "undefined");
}

function clearListBox(listBoxObj) {
    if (!isListBox(listBoxObj)) {
        return;
    }
    for (var i = (listBoxObj.options.length - 1); i >= 0; i--) {
        listBoxObj.options[i] = null;
    }
    listBoxObj.selectedIndex = -1;
}

function addListBoxOption(listBoxObj, text, value, defaultSelected, selected) {
    if (isListBox(listBoxObj)) {
        listBoxObj.options[listBoxObj.options.length] = new Option(text, value, defaultSelected, selected);
    }
}

function transferSortedListBoxOptions(fromListBoxObj, toListBoxObj) {
    if  (!isListBox(fromListBoxObj) || !isListBox(toListBoxObj)) {
        return;
    }
    var selectedOptions = removeSelectedOptions(fromListBoxObj);
    if (selectedOptions) {
        addOptionsToSortedListBox(toListBoxObj, selectedOptions);
    }
}

function removeSelectedOptions(fromListBoxObj) {
    var selectedOptions = new Array();
    if (isListBox(fromListBoxObj)) {
        if (fromListBoxObj.type == "select-one") {
            var value = fromListBoxObj.options[fromListBoxObj.selectedIndex].value;
            var text = fromListBoxObj.options[fromListBoxObj.selectedIndex].text;
            selectedOptions[selectedOptions.length] = createOption(text, value);
            fromListBoxObj.options[fromListBoxObj.selectedIndex] = null;
        } else {
			var selectedOptionsReverse = new Array();
			for (var i = (fromListBoxObj.options.length - 1); i >= 0; i--) {
				var removeOption = fromListBoxObj.options[i];
				if (removeOption.selected) {
                    var value = removeOption.value;
                    var text = removeOption.text;
					selectedOptionsReverse[selectedOptionsReverse.length] = createOption(text, value);
					fromListBoxObj.options[i] = null;
				}
			}
			for (var i = (selectedOptionsReverse.length - 1); i >= 0; i--) {
				selectedOptions[selectedOptions.length] = selectedOptionsReverse[i];
			}
        }
        fromListBoxObj.selectedIndex = -1;
    }
    return selectedOptions;
}

function addOptionsToSortedListBox(toListBoxObj, newOptions) {
    if (!isListBox(toListBoxObj)) {
        return;
    }
    var currentIndex = toListBoxObj.options.length - 1;

    for (var i = 1; i <= newOptions.length; i++) {
        addListBoxOption(toListBoxObj, "", "", false, false);
    }

    var newOptionsIndex = newOptions.length - 1;

    for (var i = (toListBoxObj.options.length - 1); i >= 0 && newOptionsIndex >= 0; i--) {
        var newOption = newOptions[newOptionsIndex];
        if ((currentIndex < 0) || compareOptions(newOption.text, newOption.value, toListBoxObj.options[currentIndex].text, toListBoxObj.options[currentIndex].value) > 0) {
            toListBoxObj.options[i] = new Option(newOption.text, newOption.value, false, false);
            newOptionsIndex -= 1;
        } else {
            var option = toListBoxObj.options[currentIndex];
            toListBoxObj.options[i] = new Option(option.text, option.value, false, false);
            currentIndex -= 1;
        }
    }
}

function compareOptions(text1, value1, text2, value2) {
    var t1 = text1.toLocaleString().toLowerCase();
    var v1 = value1.toLocaleString().toLowerCase();
    var t2 = text2.toLocaleString().toLowerCase();
    var v2 = value2.toLocaleString().toLowerCase();

    if (t1 > t2) {
        return 1;
    } else if (t1 < t2) {
        return -1;
    } else {
        if (v1 > v2) {
            return 1;
        } else if (v1 < v2) {
            return -1
        } else {
            return 0;
        }
    }
}

function createOption(text, value) {
    var optionObj = {};
    optionObj.text = text;
    optionObj.value = value;

    return optionObj;
}

function moveUsers(srcObj, trgObj) {
		addUsersToSortedParticipantListBox(removeSelectedAvailableUsers(srcObj), trgObj);
}

function removeSelectedAvailableUsers( listBoxObj ) {
  var selectedUsers = new Array();

    if (listBoxHasOptions(listBoxObj)) {
      if (listBoxObj.type == "select-one") {
        var userId = listBoxObj.options[listBoxObj.selectedIndex].value;
        var userName = listBoxObj.options[listBoxObj.selectedIndex].text;
        selectedUsers[selectedUsers.length] = createUser(userId, userName, userType);
        listBoxObj.options[listBoxObj.selectedIndex] = null;
      }
      else {
        var selectedUsersReverse = new Array();
        for (var i = (listBoxObj.options.length - 1); i >= 0; i--) {
          var option = listBoxObj.options[i];
          if (option.selected) {
            userId = option.value;
            userName = option.text;
            selectedUsersReverse[selectedUsersReverse.length] = createUser(userId, userName);
            listBoxObj.options[i] = null;
          }
        }
        for (var i = (selectedUsersReverse.length - 1); i >= 0; i--) {
          selectedUsers[selectedUsers.length] = selectedUsersReverse[i];
        }
      }
      listBoxObj.selectedIndex = -1;
    }

    if (selectedUsers.length == 0)
    {
      alert("No users selected.");
    }

    return selectedUsers;
  }

  function addUsersToSortedParticipantListBox(newUsers, listBoxObj) {
    if (!listBoxHasOptions(listBoxObj)) {
      return;
    }

    var currentIndex = listBoxObj.options.length - 1;

    for (var i = 1; i <= newUsers.length; i++) {
      addOptionToListBox(listBoxObj, "", "");
    }

    var newUsersIndex = newUsers.length - 1;

    for (var i = (listBoxObj.options.length - 1); i >= 0 && newUsersIndex >= 0; i--) {
      var newUser = newUsers[newUsersIndex];
      if ((currentIndex < 0) || isLeftUserGreaterThanRightUser(newUser.userName, newUser.userId, listBoxObj.options[currentIndex].text, listBoxObj.options[currentIndex].value)) {
        listBoxObj.options[i] = new Option(newUser.userName, newUser.userId, false, false);
        newUsersIndex -= 1;
      } else {
        var option = listBoxObj.options[currentIndex];
        listBoxObj.options[i] = new Option(option.text, option.value, false, false);
        currentIndex -= 1;
      }
    }
  }


  function isLeftUserGreaterThanRightUser(leftUserName, leftUserId, rightUserName, rightUserId) {
    if (leftUserName.toLowerCase() > rightUserName.toLowerCase()) {
      return true;
    } else if (leftUserName.toLowerCase() < rightUserName.toLowerCase()) {
      return false;
    } else {
      if (leftUserId.toLowerCase() > rightUserId.toLowerCase()) {
        return true;
      } else {
        return false;
      }
    }
  }


  function createUser(userId, userName, userType) {
    var user = {};
    user.userId = userId;
    user.userName = userName;

    return user;
  }

	function updatejQueryCal(target) {
//		var input = (target.nodeName && target.nodeName.toLowerCase() == 'input' ? target : this);
//		if (input.nodeName.toLowerCase() != 'input') { // find from button/image trigger
//			input = $('input', input.parentNode)[0];
//		}
//		var inst = popUpCal._getInst(input._calId);
//		popUpCal.hideCalendar(inst, '');
//		inst._setDateFromField(input);
	}

	function updateFromjQueryCal(target) {
		var input = (target.nodeName && target.nodeName.toLowerCase() == 'input' ? target : this);
		if (input.nodeName.toLowerCase() != 'input') { // find from button/image trigger
			input = $('input', input.parentNode)[0];
		}
		var inst = popUpCal._getInst(input._calId);
		popUpCal.hideCalendar(inst, '');
		inst._setDateFromField(input);
	}

