function checkFieldType(type){
  if(type == "submit" || type == "reset" || type == "hidden"){
    return false;
  }
  else {
    return true;
  }
}

function setSelectionRange(input, selectionStart, selectionEnd)
{
  if (input.setSelectionRange) {
    input.focus();
    input.setSelectionRange(selectionStart, selectionEnd);
  }
  else if (input.createTextRange) {
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionEnd);
    range.moveStart('character', selectionStart);
    range.select();
  }
}

function SmartFocusFields(){
  var noFocusPages = new Array();
  noFocusPages[0] = "index.php";
  noFocusPages[1] = "viewforum.php";
  noFocusPages[2] = "viewtopic.php";
  noFocusPages[3] = "profile.php?mode=viewprofile";
  noFocusPages[4] = "search.php?search_id";
  noFocusPages[5] = "faq.php";
  noFocusPages[6] = "memberlist.php";
  noFocusPages[7] = "groupcp.php";
  noFocusPages[8] = "recentactivity.php";
  noFocusPages[9] = "privmsg.php?folder=";
  noFocusPages[10] = "ratings.php";
  noFocusPages[11] = "funcp.php";
  noFocusPages[12] = "profile.php?mode=editprofile";
  noFocusPages[13] = "viewonline.php";
  noFocusPages[14] = "activepolls.php";
  noFocusPages[15] = "calendar.php";
  
  var SubjectFieldFocusPages = new Array();
  SubjectFieldFocusPages[0] = "privmsg.php?mode=post&u=";

  var MessageFieldFocusPages = new Array();
  MessageFieldFocusPages[0] = "posting.php?mode=editpost";
  MessageFieldFocusPages[1] = "posting.php?mode=draft";
  MessageFieldFocusPages[2] = "posting.php?mode=reply";
  MessageFieldFocusPages[3] = "posting.php?mode=quote";
  MessageFieldFocusPages[4] = "privmsg.php?mode=draft";
  MessageFieldFocusPages[5] = "privmsg.php?mode=reply";
  MessageFieldFocusPages[6] = "privmsg.php?mode=quote";

  var locVar = location.href;

  if(locVar.indexOf(".php") == -1){ // check to see if url ends with dir+slash (no file name)
    locVar += "index.php";
  }

  var formExists = (document.forms[2]) ? document.forms[2] : null;

  if(formExists){ // first check to see if there is a form on this page
    var NoFocusPage = false;
    
    for(var i=0; i<noFocusPages.length; i++){ // begin looping through noFocusPages array

      if((locVar.indexOf(noFocusPages[i]) > -1) && (locVar.indexOf("login.php?redirect=") == -1)){ // is this a 'no-focus' page?
        NoFocusPage = true;
        break;
      }
    } // end noFocus for

    if(NoFocusPage == false){ // this page is NOT a no-focus page, so focus if there is appropriate field
    
      var SubjectFieldFocusPage = false;

      for(var i=0; i<SubjectFieldFocusPages.length; i++){ // begin looping through SubjectFieldFocusPages array

        if(locVar.indexOf(SubjectFieldFocusPages[i]) > -1){ // is this a 'Subject Field Focus' page?
          SubjectFieldFocusPage = true;
          break;
        }
        
      }

      var MessageFieldFocusPage = false;

      if (SubjectFieldFocusPage == false) {
        for(var i=0; i<MessageFieldFocusPages.length; i++){ // begin looping through MessageFieldFocusPages array

          if(locVar.indexOf(MessageFieldFocusPages[i]) > -1){ // is this a 'Message Field Focus' page?
            MessageFieldFocusPage = true;
            break;
          }
        
        }
      }

      for(var e=0; e<formExists.elements.length; e++){

        if(checkFieldType(formExists.elements[e].type)){
          if((SubjectFieldFocusPage == true) && (formExists.elements[e].name == "subject")) {
            formExists.elements[e].focus();
            break;
          }
          
          if((SubjectFieldFocusPage == false) && ((MessageFieldFocusPage == false) || (formExists.elements[e].name == "message"))) {
            var CursorAfter = "";
            if((locVar.indexOf("posting.php?mode=quote") > -1) || (locVar.indexOf("privmsg.php?mode=quote") > -1)) {
              CursorAfter = "\n\n";
            }
            formExists.elements[e].focus();
            if((locVar.indexOf("posting.php?mode=editpost") == -1) && (locVar.indexOf("posting.php?mode=draft") == -1) && (locVar.indexOf("privmsg.php?mode=draft") == -1)) {
              formExists.elements[e].value = formExists.elements[e].value.replace(/\n+$/g, '') + CursorAfter;
              formExists.elements[e].scrollTop = formExists.elements[e].scrollHeight - formExists.elements[e].clientHeight;
            }
            else {
              // formExists.elements[e].setSelectionRange(0, 0);
              setSelectionRange(formExists.elements[e], 0, 0);
            }
            break;
          }
        }

      } // end elements for

    } // end if

  } // end formExists if
}