String.prototype.htmlDecode = function(){
var str = this;
str = str.replace(/\&lt\;/g, '<').replace(/\&gt\;/g, '>').replace(/\&quot\;/g, '"').replace(/\&amp\;/g, "&");
return str;
}

function trim(str)
{
   return str.replace(/^\s*|\s*$/g,"");
}

/*----------------------------------------------------------------------
-- isBlankString
-- 	return true if object has no text or only whitespace
--  You must pass in an input value
----------------------------------------------------------------------*/
function isBlankString(strtext)
{
	   
   	var 	index;
   	var 	myChar;
   
   	for (index = 0; index < strtext.length; index++)
    {
   		myChar = strtext.charAt(index);
   		if (myChar != " ")
        {
        	return false;
      	}
    }
    
   	return true;
}

/*----------------------------------------------------------------------
-- apostrophize
----------------------------------------------------------------------*/
function apostrophize(strText)
{
	var regexp = /'/gi;
	return strText.replace(regexp, '\'');
}

/*----------------------------------------------------------------------
-- dequote
----------------------------------------------------------------------*/
function dequote(strText)
{
	var regexp = /"/gi;
	return strText.replace(regexp, '');
}
function scrub(strText)
{
	return apostrophize(dequote(trim(strText)));
}

/*----------------------------------------------------------------------
-- addOption
----------------------------------------------------------------------*/
function addOption(object,text,value) 
{
    var defaultSelected = true;
    var selected = true;
    var optionName = new Option(text, value, defaultSelected, selected)
    object.options[object.length] = optionName;
}

/*----------------------------------------------------------------------
-- copy from one selection list to another
----------------------------------------------------------------------*/
function copySelected(fromObject, toObject) 
{
    var tostring;
    for (var i = 0, l = fromObject.options.length; i < l; i++) 
    {
    	if (fromObject.options[i])
    	{
	        if (fromObject.options[i].selected)
	        {
	            addOption(toObject, fromObject.options[i].text, fromObject.options[i].value);
				deleteOption(fromObject,i);
			}
		}
    }
	toObject.options.selectedIndex = -1;
	sortSelect(toObject);
}

/*----------------------------------------------------------------------
-- deleteOption - delete the option at the index
-- use remove for IE, assign NULL for Mozilla
----------------------------------------------------------------------*/
function deleteOption(object,index) 
{
	if (object.options.remove)
	{
		object.options.remove(index);
	}
	else
	{
    	object.options[index] = null;	
    }	
}

/*----------------------------------------------------------------------
-- remove all selected options from a select control
----------------------------------------------------------------------*/
function removeSelectedOptions(object) 
{
	var bool = false;
	for(var i = object.options.length-1; i > -1; i--)
	{
		if(object.options[i].selected)
		{   
			bool = true;
			deleteOption(object,i)
		}
	}
}

function checkListSize(list)
{
  var orderedNodes = list.getElementsByTagName("div")
  if (orderedNodes.length == 0) {
      list.style.height = '2em';
  } else {
      list.style.height = 'auto';
  }
}

/*----------------------------------------------------------------------
-- remove all selected options from a select control
----------------------------------------------------------------------*/
function removeSelectedOptions2(object) 
{    
  checkListSize(object)
  var orderedNodes = object.getElementsByTagName("div")
    
  var index = 0
  for (var i=0;i < orderedNodes.length;i++)
  {
      if (orderedNodes[i].getAttribute('selected') == 1)
      {
          object.removeChild(orderedNodes[i]);
          index = i
      }    
  }
  
  return index
}

/*----------------------------------------------------------------------
-- remove all options with specified value from a select control
----------------------------------------------------------------------*/
function removeCertainOptions(object, value) 
{
    
	var bool = false;
	for(var i = object.options.length-1; i > -1; i--)
  {
		if(object.options[i].value == value)
      {
			bool = true;
			deleteOption(object,i)
      }    
  }
}

/*----------------------------------------------------------------------
-- returns true if at least one option is selected
----------------------------------------------------------------------*/
function isAnOptionSelected(object) 
{
	var bool = false;
	for(var i = object.options.length-1; i > -1; i--)
	{
		if(object.options[i].selected)
		{   
			bool = true;
			break;
		}
	}
	return bool;
}

/*----------------------------------------------------------------------
-- returns true if at least one option is selected
----------------------------------------------------------------------*/
function isAnOptionSelected2(object) 
{
  var orderedNodes = object.getElementsByTagName("div")
  var selected = false
  for (var i=0;i < orderedNodes.length;i++)
  {
      if (orderedNodes[i].getAttribute('selected') == 1)
      {
          selected = true;
      }    
  }
  
  return selected
}

/*----------------------------------------------------------------------
-- open a little window
----------------------------------------------------------------------*/
function newWindow(img, w, h) 
{
	ww = w + 30;
	hh = h + 50;
	lft = 0;
	if(screen) 
	{
		lft = ( (screen.width / 2) - (ww / 2) );
		if(screen.height <= 600 && hh >= 600) 
		{
		 if(hh > 550) { hh = 550; }
		}
		if(screen.width <= 800 && ww >= 800) 
		{
			ww = 800;
			lft = 0;
		}
	} // end if(screen)
	str = "width=" + ww + ",height=" + hh + ",scrollbars=yes,resizable=yes,left=" + lft + ",top=0";
	bigimg = window.open(img, 'bigimg', str);
} 

/**
 * updateButtonStatus
 */
function updateButtonStatus(prefix) 
{
    var list = document.getElementById(prefix + 'CurrentList');
    document.getElementById(prefix + 'AddButton').disabled = isBlankString(dequote(document.getElementById(prefix + 'Name').value));

    document.getElementById(prefix + 'RemoveButton').disabled = !isAnOptionSelected(list);
}

/**
 * updateButtonStatus2
 */
function updateButtonStatus2(prefix) 
{
    var list = document.getElementById(prefix + 'CurrentList')
    var addDisabled = isBlankString(dequote(document.getElementById(prefix + 'Name').value))
    var optionSelected = isAnOptionSelected2(list)
    $(prefix + 'AddButton').disabled = addDisabled
    $(prefix + 'ReplaceButton').disabled = addDisabled || !optionSelected
    $(prefix + 'RemoveButton').disabled = !isAnOptionSelected2(list)
}

/**
 * addPressed
 */
function addPressed(prefix, divider) 
{
    createFeature(prefix, divider);
    document.getElementById(prefix + 'Name').value='';
    var www = document.getElementById(prefix + 'Web');
    if (www != null)
    {
	www.value='';
    }
    updateButtonStatus(prefix);
}

/**
 * addPressed2
 */
function addPressed2(prefix, divider, index) 
{
    createFeature2(prefix, divider, index);
    clearPressed(prefix)
    updateButtonStatus2(prefix);
    checkListSize($(prefix + 'CurrentList'))
}

function replacePressed(prefix, divider)
{
  var index = removePressed2(prefix)
  addPressed2(prefix, divider, index)
}

function clearPressed(prefix)
{
    $(prefix + 'Name').value='';
    var www = $(prefix + 'Web');
    if (www != null)
    {
	www.value='';
    }
    updateButtonStatus2(prefix);
}

/**
 * removePressed
 */
function removePressed(prefix) 
{   
    var list = document.getElementById(prefix + 'CurrentList');
    removeSelectedOptions(list);
    updateButtonStatus(prefix);
}

/**
 * removePressed
 */
function removePressed2(prefix) 
{   
    var list = document.getElementById(prefix + 'CurrentList');
    var index = removeSelectedOptions2(list)
    Sortable.create(prefix + "CurrentList", {tag:'div'});
    updateButtonStatus2(prefix);
    
    return index
}

function createFeature(prefix, divider)
{
    var tostring;

    // check if this item is already selected
/*    var bool = false;

    url = scrub(new String(document.mntForm.newlink.value));
    desc = scrub(new String(document.mntForm.urldescription.value));
    for (var j = 0; j < document.mntForm.rlinklist.length; j++) 
    {
	tostring = document.mntForm.rlinklist.options[j].value.split(',');
	if ((url == scrub(tostring[0])) &&
	(desc == scrub(tostring[1]))) 
	{
	    bool = true;
	    break;
	}
    }

    if (!bool) 
*/
    {
    var list = document.getElementById(prefix + 'CurrentList');
	
	var www = document.getElementById(prefix + 'Web');
	if (www != null)
	{
	    var wwwText = trim(www.value);
	}
	else
	{
	    wwwText = '';
	}
	var name = trim(document.getElementById(prefix + 'Name').value);
	var label;
	var val;
	if (isBlankString(wwwText))
	{
	    label = name;
	    val = name;
	}
	else 
	{
	    label = name + ' - ' + wwwText;
	    val = name + divider + wwwText;
	}

	addOption(list, label, val);
	list.options.selectedIndex = -1;
    }
}

function sortObj(parm1, parm2) {
    this.val = parm1
    this.text = parm2
}

function sorter(a, b) {
    var al = a.text.toLowerCase()
    var bl = b.text.toLowerCase()
    return (al == bl) ? 0 : ((al > bl) ? 1 : -1)
}

function sortList(prefix, divider) {
    
    var list = $(prefix + 'CurrentList')
    var sortArray = new Array()
    var orderedNodes = list.getElementsByTagName("div")
    for (var i = orderedNodes.length -1; i >= 0; --i) {
        sortArray[i] = new sortObj(orderedNodes[i].getAttribute('val'), orderedNodes[i].innerHTML.htmlDecode())
        list.removeChild(orderedNodes[i])
    }
    
    sortArray.sort(sorter)
    var id
    for (i = 0; i < sortArray.length; ++i) {
        var div = document.createElement('div')
        div.className = 'sortableListItem'
        div.setAttribute('selected', 0)
        Event.observe(div, 'click', itemClicked, false)
        id = sortArray[i].val
        div.setAttribute('val', id)
        div.innerHTML = sortArray[i].text
        var location = id.indexOf(divider)
        if (location != -1) {
            div.title = id.substr(location + divider.length)
        }
        list.insert(div)
    }
    Sortable.create(prefix + "CurrentList", {tag:'div'});
    updateButtonStatus2(prefix);
    
}

function createFeature2(prefix, divider, index)
{
    var list = $(prefix + 'CurrentList');
	
    var www = $(prefix + 'Web');
    if (www != null)
    {
        var wwwText = trim(www.value);
    }
    else
    {
        wwwText = '';
    }
    var name = trim($(prefix + 'Name').value);
    var val;
    if (isBlankString(wwwText))
    {
        val = name;
    }
    else 
    {
        val = name + divider + wwwText;
    }
    var div = document.createElement('div')
    div.className = 'sortableListItem'
    div.setAttribute('selected', 0)
    Event.observe(div, 'click', itemClicked, false)
    div.setAttribute('val', val);
    div.innerHTML = name;
    div.title = wwwText;
    
    var orderedNodes = list.getElementsByTagName("div")
    if ((index != -1) && (orderedNodes.length > 0)) {
      list.insertBefore(div, orderedNodes[index])
    } else {
      list.insert(div);
    }
    Sortable.create(prefix + "CurrentList", {tag:'div'})
}

function confirmDelete(name)
{
    return confirm('Are you sure you want to delete ' + apostrophize(name) + '?');
}

/*----------------------------------------------------------------------
 * 	disableElement
 *--------------------------------------------------------------------*/
function disableElement(areaId, off, activeColor)
{
    var el = document.getElementById(areaId);
    if (el != null)
    {
	if (off)
	{
	    el.style.color = 'gray';
	}
	else
	{
	    el.style.color = activeColor;
	}			
    }		
}

/*----------------------------------------------------------------------
 * 	disableAllChilds
 *--------------------------------------------------------------------*/
function disableAllChilds(node, state)
{
    if (node != null)
    {
	if (node.hasChildNodes)
	{
	    var childs = node.childNodes;
	    var len = childs.length;
	    var i;
	    for (i = 0; i < len; i++)
	    {
		var kid = childs[i];
                if (kid.nodeType != 3)
                {
                    kid.disabled = state;
                }
		if (kid.canHaveChildren)
		{
		    disableAllChilds(kid);
		}	
	    }
	}	
    }
}

/*------------------------------------------------------------------------------
-- counter
------------------------------------------------------------------------------*/
function counter(obj, max, statusId)
{
    if (obj != null)
    {
	var el = document.getElementById(statusId);
	/** IE puts a 0x13 and 0x10, while Firefox just puts a 0x10 for newlines **/
	var stripped = obj.value.replace(/\r/gi, '');
	var count = stripped.length;
	var text = '';
	if (el != null)
	{
	    if (count > 0)
	    {
		if (count == 1)
		{
		    text = count + ' letter so far';
		}
		else
		{
		    text = count + ' letters so far';
		}
	    }
	    if (count > max)
	    {
		el.style.color='red';
		text += ' (too many!)';
	    } 
	    else
	    {
		el.style.color='gray';
	    }
	    el.innerHTML = text;
	}
    }
}

function validateZip(field) 
{
    field = trim(field);
    if (field == '')
    {
        return false;
    }
    var valid = "0123456789-";
    var hyphencount = 0;

    if (field.length!=5 && field.length!=10) 
    {
        return false;
    }
    for (var i=0; i < field.length; i++) 
    {
        temp = "" + field.substring(i, i+1);
        if (temp == "-") hyphencount++;
        if (valid.indexOf(temp) == "-1") 
        {
            return false;
        }
        if ((hyphencount > 1) || ((field.length==10) && ""+field.charAt(5)!="-")) 
        {
            return false;
        }
    }
    
    return true;
}

// Email Validation Javascript
// copyright 23rd March 2003, by Stephen Chapman, Felgall Pty Ltd

// You have permission to copy and use this javascript provided that
// the content of the script is not changed in any way.

function validateEmail(addr,man,db) {
    if (addr == '' && man) {
       if (db) alert('email address is mandatory');
       return false;
    }
    var invalidChars = '\/\'\\ ";:?!()[]\{\}^|';
    for (i=0; i<invalidChars.length; i++) {
       if (addr.indexOf(invalidChars.charAt(i),0) > -1) {
          if (db) alert('email address contains invalid characters');
          return false;
       }
    }
    for (i=0; i<addr.length; i++) {
       if (addr.charCodeAt(i)>127) {
          if (db) alert("email address contains non ascii characters.");
          return false;
       }
    }

    var atPos = addr.indexOf('@',0);
    if (atPos == -1) {
       if (db) alert('email address must contain an @');
       return false;
    }
    if (atPos == 0) {
       if (db) alert('email address must not start with @');
       return false;
    }
    if (addr.indexOf('@', atPos + 1) > - 1) {
       if (db) alert('email address must contain only one @');
       return false;
    }
    if (addr.indexOf('.', atPos) == -1) {
       if (db) alert('email address must contain a period in the domain name');
       return false;
    }
    if (addr.indexOf('@.',0) != -1) {
       if (db) alert('period must not immediately follow @ in email address');
       return false;
    }
    if (addr.indexOf('.@',0) != -1){
       if (db) alert('period must not immediately precede @ in email address');
       return false;
    }
    if (addr.indexOf('..',0) != -1) {
       if (db) alert('two periods must not be adjacent in email address');
       return false;
    }
    var suffix = addr.substring(addr.lastIndexOf('.')+1);
    if (suffix.length != 2 && suffix != 'com' && suffix != 'net' && suffix != 'org' && suffix != 'edu' && suffix != 'int' && suffix != 'mil' && suffix != 'gov' & suffix != 'arpa' && suffix != 'biz' && suffix != 'aero' && suffix != 'name' && suffix != 'coop' && suffix != 'info' && suffix != 'pro' && suffix != 'museum') {
       if (db) alert('invalid primary domain in email address');
       return false;
    }
    return moreEmailCheck(addr);
}

function moreEmailCheck(str)
{
    var at="@"
    var dot="."
    var lat=str.indexOf(at)
    var lstr=str.length
    var ldot=str.indexOf(dot)
    if (str.indexOf(at)==-1){
       return false
    }

    if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
       return false
    }

    if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
        return false
    }

     if (str.indexOf(at,(lat+1))!=-1){
        return false
     }

     if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
        return false
     }

     if (str.indexOf(dot,(lat+2))==-1){
        return false
     }

     if (str.indexOf(" ")!=-1){
        return false
     }

     return true					
}

