Index: akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/contact-info.cpt
===================================================================
--- akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/contact-info.cpt	(revision 4296)
+++ akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/contact-info.cpt	(revision 4296)
@@ -0,0 +1,326 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+      lang="en"
+      metal:use-macro="here/main_template/macros/master"
+      i18n:domain="plone">
+
+<head>
+    <metal:noborder fill-slot="top_slot"
+                 tal:define="dummy python:request.set('disable_border',1)" />
+</head>
+
+<body>
+<div metal:fill-slot="main"
+     tal:define="email_from_address portal/email_from_address">
+
+    <h1 class="documentFirstHeading"
+        i18n:translate="heading_contact_form">Contact form</h1>
+    
+    <p tal:content="portal/description">Site Description</p>
+
+    <div tal:condition="not:email_from_address">
+        <p class="documentDescription"
+           i18n:translate="text_no_email_setup">
+            This site doesn't have a valid email setup, so you cannot use
+            any contact forms.
+        </p>
+    </div>
+    
+    
+    <div tal:condition="email_from_address">
+
+        <p class="documentDescription">
+            Bitte f&uuml;llen Sie alle mit einem Sternchen roten Quadrat gekennzeichneten Felder aus. Wir freuen uns auf Ihre Anfrage!
+        </p>
+
+        <form name="feedback_form"
+            class="enableAutoFocus"
+            action
+            method="post"
+            tal:define="errors options/state/getErrors"
+            tal:attributes="action string:$here_url/$template_id">
+
+        <fieldset>
+            <legend>Ihre Kontaktdaten</legend>
+
+            <table>
+            <tr>
+            <td>
+            <div class="field"
+              tal:define="error errors/sender_firstname|nothing"
+              tal:attributes="class python:test(error, 'field error', 'field')">
+              <label>
+                Vorname
+              </label>
+              <span class="fieldRequired" title="Required"
+                      i18n:attributes="title title_required;"
+                      i18n:translate="label_required">(Required)</span>                 
+              <div tal:content="error">Validation error output</div>
+              <input type="text" 
+                     id="sender_firstname" 
+                     name="sender_firstname" 
+                     size="45" 
+                     value 
+                     tal:attributes="value request/sender_firstname|nothing"
+                     />
+            </div>            
+            </td>
+            <td>
+            <div class="field"
+              tal:define="error errors/sender_lastname|nothing"
+              tal:attributes="class python:test(error, 'field error', 'field')">
+              <label>
+                Nachname
+              </label>
+              <span class="fieldRequired" title="Required"
+                      i18n:attributes="title title_required;"
+                      i18n:translate="label_required">(Required)</span>              
+              <div tal:content="error">Validation error output</div>
+              <input type="text" 
+                     id="sender_lastname" 
+                     name="sender_lastname" 
+                     size="45" 
+                     value 
+                     tal:attributes="value request/sender_lastname|nothing"
+                     />
+            </div>            
+            </td>
+            </tr>
+            <tr>
+            <td>
+            <div class="field"
+              tal:define="error errors/sender_company|nothing">
+              <label>
+                Firma
+              </label>
+              <div tal:content="error">Validation error output</div>
+              <input type="text" 
+                     id="sender_company" 
+                     name="sender_company" 
+                     size="45" 
+                     value 
+                     tal:attributes="value request/sender_company|nothing"
+                     />
+            </div>                
+            </td>
+            <td>
+            <div class="field"
+              tal:define="error errors/sender_from_address|nothing"
+              tal:attributes="class python:test(error, 'field error', 'field')">
+              <label>
+                E-Mail
+              </label>
+              <span class="fieldRequired" title="Required"
+                      i18n:attributes="title title_required;"
+                      i18n:translate="label_required">(Required)</span>
+
+              <div tal:content="error">Validation error output</div>
+              <input type="text" 
+                     id="sender_from_address" 
+                     name="sender_from_address" 
+                     size="45" 
+                     value 
+                     tal:attributes="value request/sender_from_address|nothing"
+                     />
+            </div>
+            </td>
+            </tr>
+            <tr>
+            <td>            
+            <div class="field"
+              tal:define="error errors/sender_address|nothing"
+              tal:attributes="class python:test(error, 'field error', 'field')">
+              <label>
+                Strasse / Hausnummer
+              </label>
+              <span class="fieldRequired" title="Required"
+                      i18n:attributes="title title_required;"
+                      i18n:translate="label_required">(Required)</span>                 
+              <div tal:content="error">Validation error output</div>
+              <input type="text" 
+                     id="sender_address" 
+                     name="sender_address" 
+                     size="45" 
+                     value 
+                     tal:attributes="value request/sender_address|nothing"
+                     />
+            </div>     
+            </td>
+            <td>            
+            <div class="field"
+              tal:define="error errors/sender_city|nothing"
+              tal:attributes="class python:test(error, 'field error', 'field')">
+              <label>
+                PLZ / Ort
+              </label>
+              <span class="fieldRequired" title="Required"
+                      i18n:attributes="title title_required;"
+                      i18n:translate="label_required">(Required)</span>                 
+              <div tal:content="error">Validation error output</div>
+              <input type="text" 
+                     id="sender_city" 
+                     name="sender_city" 
+                     size="45" 
+                     value 
+                     tal:attributes="value request/sender_city|nothing"
+                     />
+            </div>               
+            </td>
+            </tr>
+            <tr>
+            <td>                  
+            <div class="field"
+              tal:define="error errors/sender_phone|nothing"
+              tal:attributes="class python:test(error, 'field error', 'field')">
+              <label>
+                Telefon
+              </label>
+              <span class="fieldRequired" title="Required"
+                      i18n:attributes="title title_required;"
+                      i18n:translate="label_required">(Required)</span>                 
+              <div tal:content="error">Validation error output</div>
+              <input type="text" 
+                     id="sender_phone" 
+                     name="sender_phone" 
+                     size="45" 
+                     value 
+                     tal:attributes="value request/sender_phone|nothing"
+                     />
+            </div>
+            </td>
+            <td>                                   
+            </td>
+            </tr>
+            </table>
+        </fieldset>
+
+        <fieldset>
+            <legend>Ihre Nachricht</legend>        
+        
+
+        <div class="field"
+          tal:define="error errors/subject|nothing"
+          tal:attributes="class python:test(error, 'field error', 'field')">
+          <label>
+            Betreff
+          </label>
+          <span class="fieldRequired" title="Required"
+                  i18n:attributes="title title_required;"
+                  i18n:translate="label_required">(Required)</span>              
+          <div>
+            Bitte geben Sie den Betreff der zu sendenden Nachricht ein.
+          </div>
+
+          <div tal:content="error">Validation error output</div>            
+
+          <input type="text" 
+                 id="subject" 
+                 name="subject" 
+                 size="95" 
+                 value 
+                 tal:attributes="value request/subject|nothing"
+                 />
+        </div>
+        
+        
+        <div class="field"
+          tal:define="error errors/message|nothing"
+          tal:attributes="class python:test(error, 'field error', 'field')">
+          <label>
+            Ihre Nachricht
+          </label>
+
+          <div tal:content="error">Validation error output</div>
+    
+          <textarea name="message"
+                    id="message"
+                    rows="5"
+                    cols="25"
+                    tal:content="request/message|nothing"
+                    > </textarea>
+        </div>
+    
+        
+        <p>
+	   	<input type="checkbox" class="checker" name="stud_interesse" id="stud_interesse" value="ja" >
+			Ich bin an einem Studium an der Akademie f&uuml;r Erneuerbare Energien ab
+
+			<select name="ab_jahr" id="ab_jahr" size="1">
+				<option>WS 2008</option>
+				<option>SS 2009</option>
+				<option>WS 2009</option>
+				<option>SS 2010</option>
+				<option>WS 2010</option>
+				<option>SS 2011</option>
+				<option>WS 2012</option>
+			</select>
+			interessiert.
+		</p>
+
+		<p><strong>Ich interessiere mich f&uuml;r </strong></p>
+		<p><input type="checkbox" class="checker" name="interesse">den Master-Studiengang</p>
+		<p><input type="checkbox" class="checker" name="interesse">die Zertifikatskurse</p>
+		<p><input type="checkbox" class="checker" name="interesse">die Seminare</p>
+
+		<p><strong>Meine gew&uuml;nschten Themenschwerpunkte sind </strong></p>
+		<p><input type="checkbox" class="checker" name="schwerpunkt">Biomasse, Biogas</p>
+		<p><input type="checkbox" class="checker" name="schwerpunkt">Bio-Kraftstoffe</p>
+		<p><input type="checkbox" class="checker" name="schwerpunkt">Solarenergie</p>
+		<p><input type="checkbox" class="checker" name="schwerpunkt">Windenergie</p>
+		<p><input type="checkbox" class="checker" name="schwerpunkt">Geothermie</p>
+		<p><input type="checkbox" class="checker" name="schwerpunkt">Wasserkraft</p>
+		<p><input type="checkbox" class="checker" name="schwerpunkt">
+        <input type="text" name="schwerpunkt_mein" id="schwerpunkt_mein" value></p>
+
+		<p><strong>Ich bin </strong></p>
+		<p><input type="checkbox" class="checker" name="about">Akademiker bzw. verf&uuml;ge &uuml;ber ein abgeschlossenes Hochschulstudium</p>
+		<p><input type="checkbox" class="checker" name="about" >selbstst&auml;ndiger Unternehmer mit langj&auml;hriger Berufserfahrung</p>
+		<p><input type="checkbox" class="checker" name="about">Handwerker/Handwerksmeister</p>
+		<p><input type="checkbox" class="checker" name="about">angestellte Fach-/F&uuml;hrungskraft</p>
+		<p><input type="checkbox" class="checker" name="about">Student</p>
+		<p><input type="checkbox" class="checker" name="about"><input type="text" name="about_mein" id="about_mein" value></p>
+
+
+    	<p>
+    	   	<input type="checkbox" class="checker" name="frage4" id="frage4" value="ja" >
+    		<strong>Ich bin an einer Mitarbeit an der Akademie f&uuml;r Erneuerbare Energien interessiert. Bitte nehmen Sie Kontakt mit mir auf.</strong>
+    	</p>
+    
+    	<p>
+    	   	<input type="checkbox" class="checker" name="frage1" id="frage1" value="ja" >
+   			Bitte informieren Sie mich &uuml;ber Studienangebot und Inhalte.
+    	</p>
+    
+    	<p>
+    	   	<input type="checkbox" class="checker" name="frage2" id="frage2" value="ja" >
+    		Bitte nehmen Sie mich in die Warteliste f&uuml;r den gew&uuml;nschten Studiengang auf und informieren Sie mich kurzfristig &uuml;ber den fr&uuml;hestm&ouml;glichen Studieneinstiegstermin.
+    	</p>
+    
+    	<p>
+    	   	<input type="checkbox" class="checker" name="frage3" id="frage3" value="ja" >
+    		Bitte kontaktieren Sie mich f&uuml;r ein unverbindliches Informationsgespr&auml;ch per E-Mail oder Telefon.
+    	</p>
+    
+        </fieldset>
+    
+        <div class="formControls">
+
+            <input class="context"
+                   type="submit"
+                   name="form.button.Send"
+                   value="Send"
+                   i18n:attributes="value label_send;"
+                   />
+        </div>
+
+
+
+        <input type="hidden" name="form.submitted" value="1" />
+
+        </form>
+    </div>
+</div>
+</body>
+</html>
Index: akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/contact-info.cpt.metadata
===================================================================
--- akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/contact-info.cpt.metadata	(revision 4296)
+++ akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/contact-info.cpt.metadata	(revision 4296)
@@ -0,0 +1,12 @@
+[default]
+title= Contact information
+
+[security]
+View=0:Anonymous
+
+[validators]
+validators=validate_site_feedback
+
+[actions]
+action.success=traverse_to:string:send_feedback_site
+action.failure=traverse_to:string:contact-info
Index: akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/send_feedback_site.cpy
===================================================================
--- akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/send_feedback_site.cpy	(revision 4296)
+++ akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/send_feedback_site.cpy	(revision 4296)
@@ -0,0 +1,71 @@
+## Controller Python Script "send_feedback_site"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind state=state
+##bind subpath=traverse_subpath
+##parameters=
+##title=Send feedback to portal administrator
+##
+REQUEST=context.REQUEST
+
+from Products.CMFPlone.utils import transaction_note
+from Products.CMFCore.utils import getToolByName
+from Products.CMFPlone import PloneMessageFactory as _
+from ZODB.POSException import ConflictError
+
+##
+## This may change depending on the called (portal_feedback or author)
+state_success = "success"
+state_failure = "failure"
+
+plone_utils = getToolByName(context, 'plone_utils')
+urltool = getToolByName(context, 'portal_url')
+portal = urltool.getPortalObject()
+url = urltool()
+
+## make these arguments?
+subject = REQUEST.get('subject', '')
+message = REQUEST.get('message', '')
+sender_from_address = REQUEST.get('sender_from_address', '')
+sender_lastname = REQUEST.get('sender_lastname', '')
+sender_firstname = REQUEST.get('sender_firstname', '')
+
+send_to_address = portal.getProperty('email_from_address')
+envelope_from = portal.getProperty('email_from_address')
+
+state.set(status=state_success) ## until proven otherwise
+
+host = context.MailHost # plone_utils.getMailHost() (is private)
+encoding = portal.getProperty('email_charset')
+
+variables = {'sender_from_address' : sender_from_address,
+             'sender_lastname'     : sender_lastname,     
+             'sender_firstname'    : sender_firstname,          
+             'url'                 : url,
+             'subject'             : subject,
+             'message'             : message
+             }
+
+try:
+    message = context.site_feedback_template(context, **variables)
+    result = host.secureSend(message, send_to_address, envelope_from, subject=subject, subtype='plain', charset=encoding, debug=False, From=sender_from_address)
+except ConflictError:
+    raise
+except: # TODO Too many things could possibly go wrong. So we catch all.
+    exception = plone_utils.exceptionString()
+    message = _(u'Unable to send mail: ${exception}',
+                mapping={u'exception' : exception})
+    plone_utils.addPortalMessage(message, 'error')
+    return state.set(status=state_failure)
+
+## clear request variables so form is cleared as well
+REQUEST.set('message', None)
+REQUEST.set('subject', None)
+REQUEST.set('sender_from_address', None)
+REQUEST.set('sender_lastname', None)
+REQUEST.set('sender_firstname', None)
+
+plone_utils.addPortalMessage(_(u'Mail sent.'))
+return state
Index: akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/send_feedback_site.cpy.metadata
===================================================================
--- akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/send_feedback_site.cpy.metadata	(revision 4296)
+++ akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/send_feedback_site.cpy.metadata	(revision 4296)
@@ -0,0 +1,9 @@
+[default]
+proxy=Manager,Anonymous
+
+[validators]
+validators=validate_site_feedback
+
+[actions]
+action.success = traverse_to:string:send_feedback_confirm
+action.failure = traverse_to:string:contact-info
Index: akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/site_feedback_template.pt
===================================================================
--- akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/site_feedback_template.pt	(revision 4296)
+++ akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/site_feedback_template.pt	(revision 4296)
@@ -0,0 +1,19 @@
+<div i18n:domain="plone" 
+     tal:omit-tag=""
+     tal:define="utool nocall:here/portal_url;
+                 portal utool/getPortalObject;
+                 charset portal/email_charset|string:utf-8;
+                 dummy python:request.RESPONSE.setHeader('Content-Type', 'text/plain;;charset=%s' % charset);"
+><div i18n:translate="site_feedback_mailtemplate_body" tal:omit-tag="">
+You are receiving this mail because <span i18n:name="fullname" tal:omit-tag="" tal:content="options/sender_fullname|nothing" />
+<span i18n:name="from_address" tal:omit-tag="" tal:content="options/sender_from_address"/>
+is sending feedback about the site administered by you at <span i18n:name="url" tal:replace="options/url" />.
+The message sent was:
+
+<span i18n:name="message" tal:omit-tag="" tal:content="options/message | nothing" />
+
+</div>
+-- 
+<span tal:replace="portal/email_from_name" />
+
+</div>
Index: akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/validate_site_feedback.vpy
===================================================================
--- akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/validate_site_feedback.vpy	(revision 4296)
+++ akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_custom_skins/validate_site_feedback.vpy	(revision 4296)
@@ -0,0 +1,35 @@
+## Controller Script Python "validate_site_feedback"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind state=state  
+##bind subpath=traverse_subpath
+##parameters=subject,sender_from_address,sender_lastname,sender_firstname
+##title=validates the form for sending feedback
+
+from Products.CMFPlone import PloneMessageFactory as _
+reg_tool=context.portal_registration 
+
+if not sender_from_address:
+    state.setError('sender_from_address', _(u'Please submit an email address.'), 'sender_from_address_required')
+else:
+    if reg_tool.isValidEmail(sender_from_address):
+        pass
+    else:
+        state.setError('sender_from_address', _(u'You entered an invalid email address.'), 'invalid_email')
+ 
+if not (sender_lastname and sender_lastname.strip()):
+    state.setError('sender_lastname', _(u'Bitte geben Sie Ihren Nachnamen ein.'), 'sender_lastname_required') 
+    
+if not (sender_firstname and sender_firstname.strip()):
+    state.setError('sender_firstname', _(u'Bitte geben Sie Ihren Vornamen ein.'), 'sender_firstname_required')     
+ 
+if not (subject and subject.strip()):
+    state.setError('subject', _(u'Please enter a subject.'), 'subject_required')
+
+if state.getErrors():
+    context.plone_utils.addPortalMessage(_(u'Please correct the indicated errors.'), 'error')
+    return state.set(status='failure')
+else:
+    return state
Index: akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_styles/main.css.dtml
===================================================================
--- akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_styles/main.css.dtml	(revision 4237)
+++ akademie/plone_themes/akademie.theme/akademie/theme/skins/akademie_theme_styles/main.css.dtml	(revision 4296)
@@ -542,4 +542,23 @@
 }
 
+
+/* fieldsets */
+
+fieldset {
+    border:1px solid #000000;
+    line-height:1.5em;
+    margin:1em 0;
+    padding:0 1em 1em;
+    width:50.5em;
+}
+
+label {
+    font-weight:bold;
+}
+
+input[type="checkbox"] {
+    margin:0 5px 0 0;
+}
+
 /*
 ** IEFixes.css additional STYLES 
