package com.kreimer.strutsext.taglib.formsubmit;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;



public class FormNavigationLinkTag
extends TagSupport
{
  public int doStartTag()
  throws JspException
  {
    String mutexName="fnl_server_req";
    if(_groupId!=null)
      mutexName+="_"+_groupId;
    try
    {
      if(pageContext.getRequest().getAttribute(mutexName)==null)
      {
        pageContext.getRequest().setAttribute(mutexName,new Boolean(true));
        pageContext.getOut().println("<script language=\"JavaScript1.2\">");
        pageContext.getOut().println("window." + mutexName + "=false;");
        pageContext.getOut().println("</script>");
      };

      pageContext.getOut().println("<a href=\"\"");
      if(_id!=null)
        pageContext.getOut().println(" id=\""+_id+"\" ");

      if(_title!=null)
         pageContext.getOut().println("title=\""+_title+"\"");

      pageContext.getOut().println("onclick=\"");

      if(_action!=null)
      {
        String action;

        action=_action;

        if(_prefixWithContextRoot)
          action=((HttpServletRequest)pageContext.getRequest()).getContextPath()+((_action.startsWith("/")) ? "" : "/")+_action;
        pageContext.getOut().println("window.document."+_formName+".action='"+action+"';");
      };

      pageContext.getOut().println("window.document."+_formName+".target='"+((_target!=null) ? _target : "")+"';");

      if(_dest!=null)
        pageContext.getOut().println("window.document."+_formName+".dest.value='"+_dest+"';");

      if("null".equals(_groupId))
      {
        if((_jsValidationFunction!=null)&&(_jsValidationFunction.length()>0))
          pageContext.getOut().println("if("+_jsValidationFunction+"(window.document."+_formName+"))");
        pageContext.getOut().println("window.document."+_formName+".submit();");
      }
      else
      {
        pageContext.getOut().println("if(");
        pageContext.getOut().println("(window." + mutexName + "==false)");
        if((_jsValidationFunction!=null)&&(_jsValidationFunction.length()>0))
          pageContext.getOut().println("&& ("+_jsValidationFunction+"(window.document."+_formName+"))");
        pageContext.getOut().println(") {");
        pageContext.getOut().println("window." + mutexName + "=true;");
        pageContext.getOut().println("window.document."+_formName+".submit();");
        pageContext.getOut().println(" };");
      };

      pageContext.getOut().println("return(false);\">");

      if(_imageUri!=null)
      {
        String imgNameId="kse_img_"+_imgNameId++;


        pageContext.getOut().println("<img border=\"0\"");
        pageContext.getOut().println("  name=\""+imgNameId+"\"");
        pageContext.getOut().println("  src=\""+_imageUri+"\"");

        if(_rolloverImageUri!=null)
        {
          pageContext.getOut().println("  onmouseover=\"document.images['"+imgNameId+"'].src='"+_rolloverImageUri+"';\"");
          pageContext.getOut().println("  onmouseout=\"document.images['"+imgNameId+"'].src='"+_imageUri+"';\"");
        }
        pageContext.getOut().println(">");
        if(!_evaluateBody)
          return(SKIP_BODY);
      }
    }
    catch(Exception e)
    {
      throw(new JspException("FormNavigationLinkTag: "+e.getMessage()));
    };
    return(EVAL_BODY_INCLUDE);
  }


  public int doEndTag()
  throws JspException
  {
    try
    {
      pageContext.getOut().println("</a>");
    }
    catch(Exception e)
    {
      throw(new JspException("FormNavigationLinkTag: "+e.getMessage()));
    };
    return(EVAL_PAGE);
  }



  public void release()
  {
    _dest=null;
    _formName=null;
    _action=null;
    _title=null;
    _jsValidationFunction=null;
    _id=null;
    _groupId=null;
    _evaluateBody=false;
    _imageUri=null;
    _rolloverImageUri=null;
  }



  public String getDest()
  {
    return(_dest);
  }

  public void setDest(String dest)
  {
    if((dest!=null)&&(dest.length()>0))
      _dest=dest;
    else
      _dest=null;
  }



  public String getFormName()
  {
    return(_formName);
  }

  public void setFormName(String formName)
  {
    _formName=formName;
  }



  public String getAction()
  {
    return(_action);
  }

  public void setAction(String action)
  {
    if((action!=null)&&(action.length()>0))
      _action=action;
    else
      _action=null;
  }


  public String getTitle()
  {
    return(_title);
  }

  public void setTitle(String title)
  {
    _title=title;
  }


  public String getTarget()
  {
    return(_target);
  }

  public void setTarget(String target)
  {
    if((target!=null)&&(target.length()>0))
      _target=target;
    else
      _target=null;
  }



  public String getJsValidationFunction()
  {
    return(_jsValidationFunction);
  }

  public void setJsValidationFunction(String jsValidationFunction)
  {
    _jsValidationFunction=jsValidationFunction;
  }


  public String getId()
  {
    return(_id);
  }

  public void setId(String id)
  {
    if((id!=null)&&(id.length()>0))
      _id=id;
    else
      _id=null;
  }


  public String getGroupId()
  {
    return(_groupId);
  }

  public void setGroupId(String groupId)
  {
    if((groupId!=null)&&(groupId.length()>0))
      _groupId=groupId;
    else
      _groupId=null;
  }



  public boolean getPrefixWithContextRoot()
  {
    return(_prefixWithContextRoot);
  }

  public void setPrefixWithContextRoot(boolean prefixWithContextRoot)
  {
    _prefixWithContextRoot=prefixWithContextRoot;
  }



  public boolean evaluateBody()
  {
    return(_evaluateBody);
  }

  public void setEvaluateBody(boolean evaluateBody)
  {
    _evaluateBody=evaluateBody;
  }



  public String getImageUri()
  {
    return(_imageUri);
  }

  public void setImageUri(String imageUri)
  {
    _imageUri=imageUri;
  }



  public String getRolloverImageUri()
  {
    return(_rolloverImageUri);
  }

  public void setRolloverImageUri(String rolloverImageUri)
  {
    _rolloverImageUri=rolloverImageUri;
  }



  private String _dest;
  private String _formName;
  private String _action;
  private String _title;
  private String _target;
  private String _jsValidationFunction;
  private String _id;
  private String _groupId;
  private boolean _prefixWithContextRoot;

  private boolean _evaluateBody;
  private String _imageUri;
  private String _rolloverImageUri;


  private static int _imgNameId;
}


