<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <!--
    Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
    -->
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
        <title>NetBeans IDE 7 Satisfaction Survey</title>       
        <script type="text/javascript" src="/images_www/js/jquery-1.3.2.min.js"></script>
        <script type="text/javascript" src="/images_www/js/jquery.validate.min.js"></script>
    </head>
    <body>
    <style type="text/css">
        .opts {
            margin:0px 0px 15px 30px;
        }
        h4 {font-size: 13px;}
        .error { color: red; font-weight:bold;padding-left:10px;}
    </style>
    <h1>NetBeans IDE 7 Satisfaction Survey</h1>
    <script type="text/javascript">
        
        function get_cookie ( cookie_name )	{
            var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );
            if ( results )
                return ( unescape ( results[2] ) );
            else
                return null;
        }
		
        function set_cookie ( name, value, exp_y, exp_m, exp_d, path, domain, secure ) {
            var cookie_string = name + "=" + escape ( value );
            if ( exp_y )
            {
                var expires = new Date ( exp_y, exp_m, exp_d );
                cookie_string += "; expires=" + expires.toGMTString();
            }
            
            if ( path )
                cookie_string += "; path=" + escape ( path );

            if ( domain )
                cookie_string += "; domain=" + escape ( domain );
		  
            if ( secure )
                cookie_string += "; secure";
		  
            document.cookie = cookie_string;
        }
        
        $(function(){
            if(get_cookie('sat_survey_70')) {
                $('#satform').css('display','none');
                $('#altmsg').html('<b>You have already submited this survey. Thank you!</b>');                
            } else {
                $('#satform').css('display','block');                                
            }
            
            $("#sform").validate({
                rules: {
                     "version":"required",
                    "overall":"required",
                    "startup":"required",
                    "java_editor_perf":"required",
                    "jdk7":"required",
                    "maven":"required",
                    "ee":"required",
                    "php":"required",
                    "recommend":"required"
                },
                errorPlacement: function(error, element) {
                    error.appendTo(element.parent("div"));
                }                                
            });
        });
    </script>
    <p>Welcome NetBeans User!</p>
    <p>
        The NetBeans team is interested in feedback about your experience <b>using 
            NetBeans IDE 7.0 or its update release, NetBeans IDE 7.0.1</b>.
    </p>
    <p>
        With each NetBeans release, we strive to deliver an IDE that gives you the best coding experience available. 
        Your survey responses will let us know if we are on target, and also alert us to features or enhancements
        to consider for future releases.
    </p>
	<p>Survey has been closed.</p>
</body>
</html>
