//new set content-type to text and  returns serverCGI obj.
func new(w http.ResponseWriter, r *http.Request) (*serverCGI, error) {
	c, err := cgi.NewCGI(w, r)
	if err != nil {
		return nil, err
	}
	a := serverCGI{
		CGI: c,
	}

	if w != nil {
		w.Header().Set("Content-Type", "text/plain")
	}

	return &a, nil
}
//new returns threadCGI obj.
func new(w http.ResponseWriter, r *http.Request) (*threadCGI, error) {
	c, err := cgi.NewCGI(w, r)
	if err != nil {
		c.Print403()
		return nil, err
	}
	if !c.CheckVisitor() {
		c.Print403()
		return nil, errors.New("visitor now allowed")
	}
	t := threadCGI{
		CGI: c,
	}

	t.IsThread = true
	return &t, nil
}
//new returns mchCGI obj if visitor  is allowed.
//if not allowed print 403.
func new(w http.ResponseWriter, r *http.Request) (*mchCGI, error) {
	c, err := cgi.NewCGI(w, r)
	if err != nil {
		w.WriteHeader(403)
		fmt.Fprintf(w, "403 Forbidden")
		return nil, err
	}
	a := mchCGI{
		CGI: c,
	}
	if !c.CheckVisitor() {
		http.Error(w, "403 Forbidden", http.StatusForbidden)
		return nil, errors.New("403 forbidden")
	}

	return &a, nil
}
//new returns gatewayCGI obj with filter.tag value in form.
func new(w http.ResponseWriter, r *http.Request) (*gatewayCGI, error) {
	c, err := cgi.NewCGI(w, r)
	if err != nil {
		return nil, err
	}
	a := gatewayCGI{
		CGI: c,
	}

	filter := r.FormValue("filter")
	tag := r.FormValue("tag")

	if filter != "" {
		a.Filter = strings.ToLower(filter)
	} else {
		a.Tag = strings.ToLower(tag)
	}

	if !a.CheckVisitor() {
		a.Print403()
		return nil, errors.New("permission denied")
	}
	return &a, nil
}