var hide_timeout = 1000;
var highlight = -1;
var listboxContent = "";
var currentFocus = null;
var isAbleToSubmit = true;
var clearf;
var subclearf;
var subelemid;
var subitemclearf;
var isIE4;

// this function should be the only function submitting to the server
function doSubmit(aform) {
  if(isAbleToSubmit) {
    isAbleToSubmit = false;
    aform.submit();
  } else {
   alert('unable to submit');
  }
}

function enableSubmit() {
  isAbleToSubmit = true;
}

function disableSubmit() {
  isAbleToSubmit = false;
}

function hide_all_flyouts() {
    for(i = 1; i <= menuCount; i++) {
        try {
//        f = eval('f'+i);
        f = document.getElementById('f'+i);
        if (f) {
            f.style.visibility = 'hidden';
        }
        } catch (e) {
        }
    }
    clearInterval(clearf);
}

function flyout_elem_mon(elem) {
    clearInterval(clearf);
    if(!isIE4) { 
        elem.className = "flyout_highlight";
    }
}

function flyout_elem_moff(elem) {

    if(!isIE4) { 
        elem.className = "flyout_unhighlight";
    }

    clearf = setInterval("hide_all_flyouts();", hide_timeout);
}

function flydown_elem_mon(elem) {
    clearInterval(clearf);
    if(!isIE4) { 
        elem.className = "flydown_highlight";
    }
}

function flydown_elem_moff(elem) {
    if(!isIE4) { 
        elem.className = "flydown_unhighlight";
    }
    clearf = setInterval("hide_all_flyouts();", hide_timeout);
}

function elem_highlight(elem) {
    elem_highlight(elem, null);
}

function elem_highlight(elem, classname) {
    clearInterval(clearf);
    hide_all_flyouts();
    if(!isIE4) {
        if (classname != null) {
            elem.className = classname;
        }
    }
}

function elem_unhighlight(elem) {
    elem_unhighlight(elem, null);
}

function elem_unhighlight(elem, classname) {
    if(!isIE4) { 
        if (classname != null) {
            elem.className = classname;
        }
    }
    f = document.getElementById('f' + elem.id.substr(1));
    if (f) {
        subclearf = setInterval("hide_submenu(\"" + f.id + "\");", hide_timeout);
    }
    clearf = setInterval("hide_all_flyouts();", hide_timeout);
}

function elem_out(elem, classname) {
    return elem_out(elem, classname, null);
}

function elem_out(elem, classname, toffset) {
    clearInterval(subclearf);
    elem_highlight(elem, classname);
//    f = eval('f' + elem.id.substr(1));
    f = document.getElementById('f' + elem.id.substr(1));
    if (f) {
        f.style.visibility = 'visible';
//        f.style.posLeft = elem.offsetParent.offsetWidth + 1;
//        f.style.posTop = elem.offsetParent.offsetTop + elem.offsetTop+80;
        f.style.posLeft = elem.offsetLeft + elem.offsetParent.offsetLeft + elem.offsetWidth;
        if (toffset != null) {
            f.style.posTop = elem.offsetTop + toffset;
        } else {
            f.style.posTop = elem.offsetTop;
        }
        //Set Left and Top as well?? For Mozilla bug
        f.style.left = elem.offsetLeft + elem.offsetParent.offsetLeft + elem.offsetWidth;
        if (toffset != null) {
            f.style.top = elem.offsetTop + toffset;
        } else {
            f.style.top = elem.offsetTop;
        }
    }    
}

function elem_off(elem) {
    clearf = setInterval("hide_all_flyouts();", hide_timeout);
}

function elem_down(elem, classname) {
    return elem_down(elem, classname, null);
}

function elem_down(elem, classname, loffset) {
    clearInterval(clearf);
    clearInterval(subclearf);
	hide_all_flyouts();
    elem_highlight(elem, classname);
//    f = eval('f' + elem.id.substr(1));
    f = document.getElementById('f' + elem.id.substr(1));
    if (f) {
        f.style.visibility = 'visible';
        if (loffset != null) {
            f.style.posLeft = elem.offsetLeft + loffset;
        } else {
            f.style.posLeft = elem.offsetLeft;
        }
        //Set Left also for Mozilla bug?
        if (loffset != null) {
            f.style.left = elem.offsetLeft + loffset;
        } else {
            f.style.left = elem.offsetLeft;
        }
    }    
}

function elem_setclass(elem, classname) {
    clearInterval(clearf);
    clearInterval(subclearf);
    if(!isIE4) { 
        elem.className = classname;
    }
}

function sub_elem_out(elem, classname) {
    return sub_elem_out(elem, classname, null);
}

function sub_elem_out(elem, classname, toffset) {
    sub_elem_highlight(elem, classname);
//    f = eval('f' + elem.id.substr(1));
    f = document.getElementById('f' + elem.id.substr(1));
//    parelem = eval('f' + elem.id.substr(1,elem.id.lastIndexOf('s')-1));
    parelem = document.getElementById('f' + elem.id.substr(1,elem.id.lastIndexOf('s')-1));
    if (f) {
        f.style.visibility = 'visible';
//        parent_offset = 0;
//        if (parelem) {
//            parent_offset = parelem.style.posLeft;
//        }
//        f.style.posLeft = parelem.offsetLeft + elem.offsetWidth + elem.offsetLeft;
//        f.style.posLeft = elem.style.posLeft + elem.offsetLeft + elem.offsetWidth + elem.offsetParent.offsetLeft + elem.offsetParent.offsetWidth;
//        f.style.posLeft = parelem.style.posLeft + elem.offsetWidth;
//        f.style.posTop = elem.offsetTop + elem.offsetHeight + 20;
//        f.style.posTop = parelem.style.posTop + elem.offsetTop;
        f.style.posLeft = elem.offsetWidth;
        if (toffset != null) {
            f.style.posTop = elem.offsetTop + toffset;
        } else {
            f.style.posTop = elem.offsetTop;
        }
        //Set Left and Top also for Mozilla
        f.style.left = elem.offsetWidth;
        if (toffset != null) {
            f.style.top = elem.offsetTop + toffset;
        } else {
            f.style.top = elem.offsetTop;
        }
    }    
}

function sub_elem_down(elem, classname) {
    sub_elem_down(elem, classname, null);
}

function sub_elem_down(elem, classname, loffset) {
    sub_elem_highlight(elem, classname);
//    f = eval('f' + elem.id.substr(1));
    f = document.getElementById('f' + elem.id.substr(1));
    if (f) {
        f.style.visibility = 'visible';
        if (loffset != null) {
            f.style.posLeft = elem.offsetLeft + loffset;
        } else {
            f.style.posLeft = elem.offsetLeft;
        }
        //Set Left as well for Mozilla
        if (loffset != null) {
            f.style.left = elem.offsetLeft + loffset;
        } else {
            f.style.left = elem.offsetLeft;
        }
    }
}

function sub_elem_off(elem, classname) {
    if(!isIE4) { 
        elem.className = classname;
    }
//    parelem = eval('f' + elem.id.substr(1));
    parelem = document.getElementById('f' + elem.id.substr(1));
    subelemid = parelem.id;
    subclearf = setInterval("hide_submenu(\"" + parelem.id + "\");", hide_timeout);
//    subitemclearf = setInterval("hide_childmenu(\"" + parelem.id + "\");", hide_timeout);
}

function sub_elem_highlight(elem) {
    sub_elem_highlight(elem, null);
}

function sub_elem_highlight(elem, classname) {
    clearInterval(subclearf);
    clearInterval(clearf);
    if (subelemid != null) {
        sub_str = subelemid.substr(1);
        elem_str = elem.id.substr(1);
        if (elem_str.substr(0,sub_str.length) != sub_str && sub_str != elem_str) {
            hide_childmenu('f' + sub_str);
        }
/*        if (sub_str.substr(0,elem_str.length) == elem_str) {
            clearInterval(subitemclearf);
        } else if (sub_str == elem_str) {
            clearInterval(subitemclearf);
        } */
    }
    if(!isIE4) { 
        if (classname != null) {
            elem.className = classname;
        }
    }
}

function sub_elem_unhighlight(elem) {
    sub_elem_unhighlight(elem, null);
}

function sub_elem_unhighlight(elem, classname) {
    if(!isIE4) {
        if (classname != null) {
            elem.className = classname;
        }
    }
    parelem = document.getElementById('f' + elem.id.substr(1,elem.id.lastIndexOf('s')-1));
    if (parelem) {
        subclearf = setInterval("hide_submenu(\"" + parelem.id + "\");", hide_timeout);
    }
    clearInterval(subitemclearf);
}

function hide_submenu(str) {
    clearInterval(subclearf);
//    f = eval(str);
    f = document.getElementById(str);
    if(f) {
        f.style.visibility = 'hidden';
    }
    if (str.lastIndexOf('s') > 0) {
        str = str.substr(0, str.lastIndexOf('s'));
        hide_submenu(str);
    }
}

function hide_childmenu(str) {
    clearInterval(subitemclearf);
    subelemid = null;
//    alert('clear child ' + str);
//    f = eval(str);
    f = document.getElementById(str);
    if(f) {
        f.style.visibility = 'hidden';
    }
}

function openWindow(urlName, title, features, force)
{
    window.open(urlName, title, features, force);
}

function doCancel() {
  var methodVar = document.forms[0].elements['method'];
  methodVar.value='list';
  doSubmit(document.forms[0]);
}

function elem_setimg(elemname, imgname) {
    f = document.getElementById(elemname);
    if (f) {
        f.src = "images/" + imgname;
    }
}

function getElementByName(inform, inname) {
    for (var i = 0; i < inform.elements.length; i++) {
        if (inform.elements[i].name == inname) {
            return inform.elements[i];
        }
    }
}


//JavaScript Date Picker courtesy of Julian Robichaux -- http://www.nsftools.com (version 1.5)
var datePickerDivID = "datepicker";
var iFrameDivID = "datepickeriframe";

var dayArrayShort = new Array('Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa');
var dayArrayMed = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
var dayArrayLong = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
var monthArrayShort = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
var monthArrayMed = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec');
var monthArrayLong = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
 
// these variables define the date formatting we're expecting and outputting.
// If you want to use a different format by default, change the defaultDateSeparator
// and defaultDateFormat variables either here or on your HTML page.
var defaultDateSeparator = "/";        // common values would be "/" or "."
var defaultDateFormat = "dmy"    // valid values are "mdy", "dmy", and "ymd"
var dateSeparator = defaultDateSeparator;
var dateFormat = defaultDateFormat;

/**
Start Date: <input name="StartDate">
<input type=button value="select" onclick="displayDatePicker('StartDate');">
<input type=button value="select" onclick="displayDatePicker('StartDate', this);">
<input type=button value="select" onclick="displayDatePicker('StartDate', false, 'dmy', '.');">
*/
function displayDatePicker(dateFieldName, displayBelowThisObject, dtFormat, dtSep)
{
  var targetDateField = document.getElementsByName (dateFieldName).item(0);
  if (!displayBelowThisObject)
    displayBelowThisObject = targetDateField;

  if (dtSep)
    dateSeparator = dtSep;
  else
    dateSeparator = defaultDateSeparator;

  if (dtFormat)
    dateFormat = dtFormat;
  else
    dateFormat = defaultDateFormat;

  var x = displayBelowThisObject.offsetLeft;
  var y = displayBelowThisObject.offsetTop + displayBelowThisObject.offsetHeight ;
 
  var parent = displayBelowThisObject;
  while (parent.offsetParent) {
    parent = parent.offsetParent;
    x += parent.offsetLeft;
    y += parent.offsetTop ;
  }
 
  drawDatePicker(targetDateField, x, y);
}


function drawDatePicker(targetDateField, x, y)
{
  var dt = getFieldDate(targetDateField.value );
 
  if (!document.getElementById(datePickerDivID)) {
    var newNode = document.createElement("div");
    newNode.setAttribute("id", datePickerDivID);
    newNode.setAttribute("class", "dpDiv");
    newNode.setAttribute("style", "visibility: hidden;");
    document.body.appendChild(newNode);
  }
 
  var pickerDiv = document.getElementById(datePickerDivID);
  pickerDiv.style.position = "absolute";
  pickerDiv.style.left = x + "px";
  pickerDiv.style.top = y + "px";
  pickerDiv.style.visibility = (pickerDiv.style.visibility == "visible" ? "hidden" : "visible");
  pickerDiv.style.display = (pickerDiv.style.display == "block" ? "none" : "block");
  pickerDiv.style.zIndex = 10000;
 
  refreshDatePicker(targetDateField.name, dt.getFullYear(), dt.getMonth(), dt.getDate());
}

function refreshDatePicker(dateFieldName, year, month, day)
{
  var thisDay = new Date();
 
  if ((month >= 0) && (year > 0)) {
    thisDay = new Date(year, month, 1);
  } else {
    day = thisDay.getDate();
    thisDay.setDate(1);
  }
 
  var crlf = "\r\n";
  var TABLE = "<table cols=7 class='dpTable'>" + crlf;
  var xTABLE = "</table>" + crlf;
  var TR = "<tr class='dpTR'>";
  var TR_title = "<tr class='dpTitleTR'>";
  var TR_days = "<tr class='dpDayTR'>";
  var TR_todaybutton = "<tr class='dpTodayButtonTR'>";
  var xTR = "</tr>" + crlf;
  var TD = "<td class='dpTD' onMouseOut='this.className=\"dpTD\";' onMouseOver=' this.className=\"dpTDHover\";' ";    // leave this tag open, because we'll be adding an onClick event
  var TD_title = "<td colspan=5 class='dpTitleTD'>";
  var TD_buttons = "<td class='dpButtonTD'>";
  var TD_todaybutton = "<td colspan=7 class='dpTodayButtonTD'>";
  var TD_days = "<td class='dpDayTD'>";
  var TD_selected = "<td class='dpDayHighlightTD' onMouseOut='this.className=\"dpDayHighlightTD\";' onMouseOver='this.className=\"dpTDHover\";' ";    // leave this tag open, because we'll be adding an onClick event
  var xTD = "</td>" + crlf;
  var DIV_title = "<div class='dpTitleText'>";
  var DIV_selected = "<div class='dpDayHighlight'>";
  var xDIV = "</div>";
 
  var html = TABLE;
 
  html += TR_title;
  html += TD_buttons + getYearButtonCode(dateFieldName, thisDay, -1, "&lt;&lt;") + xTD;
  html += TD_buttons + getButtonCode(dateFieldName, thisDay, -1, "&lt;") + xTD;
  html += TD_title + DIV_title + monthArrayLong[ thisDay.getMonth()] + " " + thisDay.getFullYear() + xDIV + xTD;
  html += TD_buttons + getButtonCode(dateFieldName, thisDay, 1, "&gt;") + xTD;
  html += TD_buttons + getYearButtonCode(dateFieldName, thisDay, 1, "&gt;&gt;") + xTD;
  html += xTR;
 
  html += TR_days;
  for(i = 0; i < dayArrayShort.length; i++)
    html += TD_days + dayArrayShort[i] + xTD;
  html += xTR;
 
  html += TR;
 
  for (i = 0; i < thisDay.getDay(); i++)
    html += TD + "&nbsp;" + xTD;
 
  do {
    dayNum = thisDay.getDate();
    TD_onclick = " onclick=\"updateDateField('" + dateFieldName + "', '" + getDateString(thisDay) + "');\">";
    
    if (dayNum == day)
      html += TD_selected + TD_onclick + DIV_selected + dayNum + xDIV + xTD;
    else
      html += TD + TD_onclick + dayNum + xTD;
    
    if (thisDay.getDay() == 6)
      html += xTR + TR;
    
    thisDay.setDate(thisDay.getDate() + 1);
  } while (thisDay.getDate() > 1)
 
  if (thisDay.getDay() > 0) {
    for (i = 6; i > thisDay.getDay(); i--)
      html += TD + "&nbsp;" + xTD;
  }
  html += xTR;
 
  var today = new Date();
  var todayString = "Today is " + dayArrayMed[today.getDay()] + ", " + monthArrayMed[ today.getMonth()] + " " + today.getDate();
  html += TR_todaybutton + TD_todaybutton;
  html += "<button class='dpTodayButton' onClick='refreshDatePicker(\"" + dateFieldName + "\");'>this month</button> ";
  html += "<button class='dpTodayButton' onClick='updateDateField(\"" + dateFieldName + "\");'>close</button>";
  html += xTD + xTR;
 
  html += xTABLE;
 
  document.getElementById(datePickerDivID).innerHTML = html;
  adjustiFrame();
}

function getButtonCode(dateFieldName, dateVal, adjust, label)
{
  var newMonth = (dateVal.getMonth() + adjust) % 12;
  var newYear = dateVal.getFullYear() + parseInt((dateVal.getMonth() + adjust) / 12);
  if (newMonth < 0) {
    newMonth += 12;
    newYear += -1;
  }
  return "<button class='dpButton' onClick='refreshDatePicker(\"" + dateFieldName + "\", " + newYear + ", " + newMonth + ");'>" + label + "</button>";
}

function getYearButtonCode(dateFieldName, dateVal, adjust, label)
{
  var newYear = dateVal.getFullYear() + adjust;
  return "<button class='dpButton' onClick='refreshDatePicker(\"" + dateFieldName + "\", " + newYear + ", " + dateVal.getMonth() + ");'>" + label + "</button>";
}

function getDateString(dateVal)
{
  var dayString = "00" + dateVal.getDate();
  var monthString = "00" + (dateVal.getMonth()+1);
  dayString = dayString.substring(dayString.length - 2);
  monthString = monthString.substring(monthString.length - 2);
 
  switch (dateFormat) {
    case "dmy" :
      return dayString + dateSeparator + monthString + dateSeparator + dateVal.getFullYear();
    case "ymd" :
      return dateVal.getFullYear() + dateSeparator + monthString + dateSeparator + dayString;
    case "mdy" :
    default :
      return monthString + dateSeparator + dayString + dateSeparator + dateVal.getFullYear();
  }
}

function getFieldDate(dateString)
{
  var dateVal;
  var dArray;
  var d, m, y;
 
  try {
    dArray = splitDateString(dateString);
    if (dArray) {
      switch (dateFormat) {
        case "dmy" :
          d = parseInt(dArray[0], 10);
          m = parseInt(dArray[1], 10) - 1;
          y = parseInt(dArray[2], 10);
          break;
        case "ymd" :
          d = parseInt(dArray[2], 10);
          m = parseInt(dArray[1], 10) - 1;
          y = parseInt(dArray[0], 10);
          break;
        case "mdy" :
        default :
          d = parseInt(dArray[1], 10);
          m = parseInt(dArray[0], 10) - 1;
          y = parseInt(dArray[2], 10);
          break;
      }
      dateVal = new Date(y, m, d);
    } else if (dateString) {
      dateVal = new Date(dateString);
    } else {
      dateVal = new Date();
    }
  } catch(e) {
    dateVal = new Date();
  }
 
  return dateVal;
}

function splitDateString(dateString)
{
  var dArray;
  if (dateString.indexOf("/") >= 0)
    dArray = dateString.split("/");
  else if (dateString.indexOf(".") >= 0)
    dArray = dateString.split(".");
  else if (dateString.indexOf("-") >= 0)
    dArray = dateString.split("-");
  else if (dateString.indexOf("\\") >= 0)
    dArray = dateString.split("\\");
  else
    dArray = false;
 
  return dArray;
}

/**
Update the field with the given dateFieldName with the dateString that has been passed,
and hide the datepicker. If no dateString is passed, just close the datepicker without
changing the field value.

Also, if the page developer has defined a function called datePickerClosed anywhere on
the page or in an imported library, we will attempt to run that function with the updated
field as a parameter. This can be used for such things as date validation, setting default
values for related fields, etc. For example, you might have a function like this to validate
a start date field:

function datePickerClosed(dateField)
{
  var dateObj = getFieldDate(dateField.value);
  var today = new Date();
  today = new Date(today.getFullYear(), today.getMonth(), today.getDate());
 
  if (dateField.name == "StartDate") {
    if (dateObj < today) {
      // if the date is before today, alert the user and display the datepicker again
      alert("Please enter a date that is today or later");
      dateField.value = "";
      document.getElementById(datePickerDivID).style.visibility = "visible";
      adjustiFrame();
    } else {
      // if the date is okay, set the EndDate field to 7 days after the StartDate
      dateObj.setTime(dateObj.getTime() + (7 * 24 * 60 * 60 * 1000));
      var endDateField = document.getElementsByName ("EndDate").item(0);
      endDateField.value = getDateString(dateObj);
    }
  }
}

*/
function updateDateField(dateFieldName, dateString)
{
  var targetDateField = document.getElementsByName (dateFieldName).item(0);
  if (dateString)
    targetDateField.value = dateString;
 
  var pickerDiv = document.getElementById(datePickerDivID);
  pickerDiv.style.visibility = "hidden";
  pickerDiv.style.display = "none";
 
  adjustiFrame();
  targetDateField.focus();
 
  if ((dateString) && (typeof(datePickerClosed) == "function"))
    datePickerClosed(targetDateField);
}

/**
Use an "iFrame shim" to deal with problems where the datepicker shows up behind
selection list elements, if they're below the datepicker. The problem and solution are
described at:
http://dotnetjunkies.com/WebLog/jking/archive/2003/07/21/488.aspx
http://dotnetjunkies.com/WebLog/jking/archive/2003/10/30/2975.aspx
*/
function adjustiFrame(pickerDiv, iFrameDiv)
{
  var is_opera = (navigator.userAgent.toLowerCase().indexOf("opera") != -1);
  if (is_opera)
    return;
  
  try {
    if (!document.getElementById(iFrameDivID)) {
      var newNode = document.createElement("iFrame");
      newNode.setAttribute("id", iFrameDivID);
      newNode.setAttribute("src", "javascript:false;");
      newNode.setAttribute("scrolling", "no");
      newNode.setAttribute ("frameborder", "0");
      document.body.appendChild(newNode);
    }
    
    if (!pickerDiv)
      pickerDiv = document.getElementById(datePickerDivID);
    if (!iFrameDiv)
      iFrameDiv = document.getElementById(iFrameDivID);
    
    try {
      iFrameDiv.style.position = "absolute";
      iFrameDiv.style.width = pickerDiv.offsetWidth;
      iFrameDiv.style.height = pickerDiv.offsetHeight ;
      iFrameDiv.style.top = pickerDiv.style.top;
      iFrameDiv.style.left = pickerDiv.style.left;
      iFrameDiv.style.zIndex = pickerDiv.style.zIndex - 1;
      iFrameDiv.style.visibility = pickerDiv.style.visibility ;
      iFrameDiv.style.display = pickerDiv.style.display;
    } catch(e) {
    }
 
  } catch (ee) {
  }
}

function NiftyCheck(){
if(!document.getElementById || !document.createElement)
    return(false);
isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
if(Array.prototype.push==null){Array.prototype.push=function(){
      this[this.length]=arguments[0]; return(this.length);}}
return(true);
}

function Rounded(selector,wich,bk,color,opt){
var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;

if(color=="transparent"){
    cn=cn+"x";
    ecolor=bk;
    bk="transparent";
    }
else if(opt && opt.indexOf("border")>=0){
    var optar=opt.split(" ");
    for(i=0;i<optar.length;i++)
        if(optar[i].indexOf("#")>=0) ecolor=optar[i];
    if(ecolor=="") ecolor="#666";
    cn+="e";
    edges=true;
    }
else if(opt && opt.indexOf("smooth")>=0){
    cn+="a";
    ecolor=Mix(bk,color);
    }
if(opt && opt.indexOf("small")>=0) cn+="s";
prefixt=cn;
prefixb=cn;
if(wich.indexOf("all")>=0){t=true;b=true}
else if(wich.indexOf("top")>=0) t="true";
else if(wich.indexOf("tl")>=0){
    t="true";
    if(wich.indexOf("tr")<0) prefixt+="l";
    }
else if(wich.indexOf("tr")>=0){
    t="true";
    prefixt+="r";
    }
if(wich.indexOf("bottom")>=0) b=true;
else if(wich.indexOf("bl")>=0){
    b="true";
    if(wich.indexOf("br")<0) prefixb+="l";
    }
else if(wich.indexOf("br")>=0){
    b="true";
    prefixb+="r";
    }
var v=getElementsBySelector(selector);
var l=v.length;
for(i=0;i<l;i++){
    if(edges) AddBorder(v[i],ecolor);
    if(t) AddTop(v[i],bk,color,ecolor,prefixt);
    if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
    }
}

function AddBorder(el,bc){
var i;
if(!el.passed){
    if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
        var t=el.firstChild.nodeValue;
        el.removeChild(el.lastChild);
        var d=CreateEl("span");
        d.style.display="block";
        d.appendChild(document.createTextNode(t));
        el.appendChild(d);
        }
    for(i=0;i<el.childNodes.length;i++){
        if(el.childNodes[i].nodeType==1){
            el.childNodes[i].style.borderLeft="1px solid "+bc;
            el.childNodes[i].style.borderRight="1px solid "+bc;
            }
        }
    }
el.passed=true;
}
    
function AddTop(el,bk,color,bc,cn){
var i,lim=4,d=CreateEl("b");

if(cn.indexOf("s")>=0) lim=2;
if(bc) d.className="artop";
else d.className="rtop";
d.style.backgroundColor=bk;
for(i=1;i<=lim;i++){
    var x=CreateEl("b");
    x.className=cn + i;
    x.style.backgroundColor=color;
    if(bc) x.style.borderColor=bc;
    d.appendChild(x);
    }
el.style.paddingTop=0;
el.insertBefore(d,el.firstChild);
}

function AddBottom(el,bk,color,bc,cn){
var i,lim=4,d=CreateEl("b");

if(cn.indexOf("s")>=0) lim=2;
if(bc) d.className="artop";
else d.className="rtop";
d.style.backgroundColor=bk;
for(i=lim;i>0;i--){
    var x=CreateEl("b");
    x.className=cn + i;
    x.style.backgroundColor=color;
    if(bc) x.style.borderColor=bc;
    d.appendChild(x);
    }
el.style.paddingBottom=0;
el.appendChild(d);
}

function CreateEl(x){
if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
else return(document.createElement(x));
}

function getElementsBySelector(selector){
var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];

if(selector.indexOf(" ")>0){  //descendant selector like "tag#id tag"
    s=selector.split(" ");
    var fs=s[0].split("#");
    if(fs.length==1) return(objlist);
    f=document.getElementById(fs[1]);
    if(f) return(f.getElementsByTagName(s[1]));
    return(objlist);
    }
if(selector.indexOf("#")>0){ //id selector like "tag#id"
    s=selector.split("#");
    tag=s[0];
    selid=s[1];
    }
if(selid!=""){
    f=document.getElementById(selid);
    if(f) objlist.push(f);
    return(objlist);
    }
if(selector.indexOf(".")>0){  //class selector like "tag.class"
    s=selector.split(".");
    tag=s[0];
    selclass=s[1];
    }
var v=document.getElementsByTagName(tag);  // tag selector like "tag"
if(selclass=="")
    return(v);
for(i=0;i<v.length;i++){
    if(v[i].className.indexOf(selclass)>=0){
        objlist.push(v[i]);
        }
    }
return(objlist);
}

function Mix(c1,c2){
var i,step1,step2,x,y,r=new Array(3);
if(c1.length==4)step1=1;
else step1=2;
if(c2.length==4) step2=1;
else step2=2;
for(i=0;i<3;i++){
    x=parseInt(c1.substr(1+step1*i,step1),16);
    if(step1==1) x=16*x+x;
    y=parseInt(c2.substr(1+step2*i,step2),16);
    if(step2==1) y=16*y+y;
    r[i]=Math.floor((x*50+y*50)/100);
    }
return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
}

function isvalidimgupload(field) {
var fileTypes = ['gif', 'jpg', 'png', 'jpeg'];

var filename = field.value.toLowerCase();
if (!filename) return;

dots = filename.split(".")
fileType = dots[dots.length-1];

if (fileTypes.join().indexOf(fileType) == -1) {
alert("Please only upload files that end in types: \n\n." + (fileTypes.join(" .")) + "\n\nPlease select a new file and try again.");
return false;
}
return true;
}

function isvalidfileupload(field) {
var fileTypes = ["php", "asp", "exe", "bat", "sh", "pl", "cgi", "py"];

var filename = field.value.toLowerCase();
if (!filename) return;

dots = filename.split(".")
fileType = dots[dots.length-1];

if (fileTypes.join().indexOf(fileType) != -1) {
alert("For security reasons, we cannot accept that file type. Please select a new file and try again.");
return false;
}
return true;
}

