www.webdeveloper.com
Results 1 to 12 of 12

Thread: Form Validation and Cookies

  1. #1
    Join Date
    Jun 2012
    Posts
    6

    Form Validation and Cookies

    Hi there,
    I am fairly new to JavaScript and having some difficulty.

    The following code represents a prototype for a mailing list sign-up.

    The user must either submit their name and email OR name and mailing address. I have the validations working on Safari and Chrome, but not IE and Firefox. I have changed the pop-up settings, but that was unsuccessful. Any suggestions?

    ALSO -
    I need to set a cookie when the form is submitted successfully. If the user tries to resubmit, I would like a new HTML page advising them that they have already signed up. I have absolutely no idea how to accomplish this.

    Here is my code. Any help would be greatly appreciated.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Mailing List: Sign Up</title>
    <link href="Main.css" rel="stylesheet" type="text/css" />

    <script type="text/javascript"/>

    function validateForm() {

    //check email variables
    var email = document.getElementById('email').value;
    var elength = email.length;
    var atpos = email.indexOf('@');
    var atdot = email.lastIndexOf('.');
    var tld = email.substring(atdot);

    //other variables
    var feedback = ""
    var feedbackFN = ""
    var feedbackLN = ""
    var feedbackSA = ""
    var feedbackC = ""
    var feedbackState = ""
    var feedbackZ = ""
    var firstName = document.getElementById('firstname')
    var lastName = document.getElementById('lastname')
    var streetAdd = document.getElementById('streetaddress')
    var city = document.getElementById('city')
    var stateName = document.getElementById('state')
    var zip = document.getElementById('zipcode')

    // if all
    if ((firstName.value !="") && (lastName.value !="") && (streetAdd.value !="") && (city.value !="") && (state.value >= 1) && (zip.value !="") && (atpos > 1 || atdot > 1 || atdot > atpos)) {
    window.open('MailingList_Confirmation.html')
    return true;
    }

    //if name and address
    else if ((firstName.value !="") && (lastName.value !="") && (streetAdd.value !="") && (city.value !="") && (state.value >= 1) && (zip.value !="")) {
    window.open('MailingList_Confirmation.html')
    return true;
    }

    //if name and email
    else if ((firstName.value !="") && (lastName.value !="") && (atpos > 1 || atdot > 1 || atdot > atpos)) {
    window.open('MailingList_Confirmation.html')
    return true;
    }

    else if (firstName.value=="") {
    feedbackFN += "<strong style='color:red'>This is a required field.</strong>";
    document.getElementById('feedbackFN').innerHTML = feedbackFN;
    document.getElementById('firstname').style.borderColor="red";
    }


    if (lastName.value=="") {
    feedbackLN += "<strong style='color:red'>This is a required field.</strong>";
    document.getElementById('feedbackLN').innerHTML = feedbackLN;
    document.getElementById('lastname').style.borderColor="red";
    }


    if (streetAdd.value=="") {
    feedbackSA += "<strong style='color:red'>This is a required field.</strong>";
    document.getElementById('feedbackSA').innerHTML = feedbackSA;
    document.getElementById('streetaddress').style.borderColor="red";
    }

    if (city.value=="") {
    feedbackC += "<strong style='color:red'>This is a required field.</strong>";
    document.getElementById('feedbackC').innerHTML = feedbackC;
    document.getElementById('city').style.borderColor="red";
    }

    if (state.value < 1) {
    feedbackState += "<strong style='color:red'>This is a required field.</strong>";
    document.getElementById('feedbackState').innerHTML = feedbackState;
    document.getElementById('state').style.borderColor="red";
    }

    if (zip.value=="") {
    feedbackZ += "<strong style='color:red'>This is a required field.</strong>";
    document.getElementById('feedbackZ').innerHTML = feedbackZ;
    document.getElementById('zipcode').style.borderColor="red";
    }

    if (atpos < 1 || atdot < 1 || atpos > atdot) {
    feedback += "<strong style='color:red'>Email is not valid</strong>";
    document.getElementById('feedback').innerHTML = feedback;
    document.getElementById('email').style.borderColor="red";
    }

    return false;
    }

    </script>


    <style>
    form { width: 500px; }
    label { float: left; width: 150px; font-family:"Times New Roman", Times, serif; }
    input[type=text] { float: left; width: 200px; }
    </style>

    </head>

    <body>

    <form name="input" onsubmit="return validateForm()" action="form_info_input.asp" method="post"/>

    <!--First Name-->
    <label for="First name">First name:</label><input type="text" name="firstname" id="firstname"/><span style="color:#F00">*</span><p id="feedbackFN"></p>

    <!--Last Name-->
    <label for="Last name">Last name: </label><input type="text" name="lastname" id="lastname"/><span style="color:#F00">*</span><p id="feedbackLN"></p>

    <!--Street Address-->
    <label for="Street address">Street Address Line 1: </label><input type="text" name="streetaddress" id="streetaddress"/><span style="color:#F00">*</span><p id="feedbackSA"></p>

    <!--Street Address 2-->
    <label for="Street address two">Street Address Line 2:</label><input type="text" name="streetaddresstwo" id="streetaddress2"/><br/><br/>

    <!--City-->
    <label for="City">City: </label><input type="text" name="city" id="city"/><span style="color:#F00">*</span><p id="feedbackC"></p>

    <!--State-->
    <label for="State">State: </label><select name="state" id="state" tabindex="150"/><br/><br/>
    <option value="0">Select State</option>
    <option value="1">Alabama</option>
    <option value="2">Alaska</option>
    <option value="3">Arizona</option>
    <option value="4">Arkansas</option>
    <option value="5">California</option>
    <option value="6">Colorado</option>
    <option value="7">Connecticut</option>
    <option value="8">Delaware</option>
    <option value="9">Florida</option>
    <option value="10">Georgia</option>
    <option value="11">Hawaii</option>
    <option value="12">Idaho</option>
    <option value="13">Illinois</option>
    <option value="14">Indiana</option>
    <option value="15">Iowa</option>
    <option value="16">Kansas</option>
    <option value="17">Kentucky</option>
    <option value="18">Louisiana</option>
    <option value="19">Maine</option>
    <option value="20">Maryland</option>
    <option value="21">Massachusetts</option>
    <option value="22">Michigan</option>
    <option value="23">Minnesota</option>
    <option value="24">Mississippi</option>
    <option value="25">Missouri</option>
    <option value="26">Montana</option>
    <option value="27">Nebraska</option>
    <option value="28">Nevada</option>
    <option value="29">New Hampshire</option>
    <option value="30">New Jersey</option>
    <option value="31">New Mexico</option>
    <option value="32">New York</option>
    <option value="33">North Carolina</option>
    <option value="34">North Dakota</option>
    <option value="35">Ohio</option>
    <option value="36">Oklahoma</option>
    <option value="37">Oregon</option>
    <option value="38">Pennsylvania</option>
    <option value="39">Rhode Island</option>
    <option value="40">South Carolina</option>
    <option value="41">South Dakota</option>
    <option value="42">Tennessee</option>
    <option value="43">Texas</option>
    <option value="44">Utah</option>
    <option value="45">Vermont</option>
    <option value="46">Virginia</option>
    <option value="47">Washington</option>
    <option value="48">West Virginia</option>
    <option value="49">Wisconsin</option>
    <option value="50">Wyoming</option>
    </select><span style="color:#F00">*</span><p id="feedbackState"></p>

    <!--Zip Code-->
    <label for="Zip code">Zip Code: </label><input type="text" name="zipcode" id="zipcode"/><span style="color:#F00">*</span><p id="feedbackZ"></p>

    <!--Email-->
    <label for="Email address">Email Address: </label><input type="text" name="emailaddress" id="email"/><span style="color:#F00">*</span><p id="feedback"></p>

    <!--Telephone-->
    <label for="Telephone number">Telephone Number: </label><input type="text" name="telephonenumber" id="phone"/><br/><br/>

    <input type="submit" value="Subscribe Now" id="submit"/>
    <input type="reset" value="Clear"/>
    </form>

    </body>
    </html>

  2. #2
    Join Date
    Mar 2007
    Location
    U.K.
    Posts
    1,127
    If you use the error console, you'll see the immediate problem.

    To be able to address form elements more efficiently, you should pass your validation function a reference to the form.

    Code:
    <form onsubmit = "return validateForm( this )" ...>
    Where used, return should be executed unconditionally and always as the last statement in the function.

    That's my signature, it's not part of the damn post!

  3. #3
    Join Date
    Jun 2012
    Posts
    6
    Like I said, I am new to this, so unfortunately after using the error console the problem is not immediate to me. When I click on the source files of the warning messages, they are displaying code that isn't even mine.

    Do I put "this" as the reference?

  4. #4
    Join Date
    May 2006
    Location
    Somewhere behind your screen
    Posts
    1,648
    Suzanne may i ask you how did you write the code which you are unable to debug? ))
    xxx: Guess Buddhist riddle: "What is the sound of one hand clapping?"
    yyy: facepalm

  5. #5
    Join Date
    Jun 2012
    Posts
    6
    I wrote it myself in Dreamweaver (to the best of my knowledge). I am no expert by any means, so I am sure there are mistakes.

    I used references from a book and various online tutorials and forum posts.

  6. #6
    Join Date
    May 2006
    Location
    Somewhere behind your screen
    Posts
    1,648
    all these dreamweavers and the other beavers won't help you to learn. write your code manually and you will feel it.

    try the code below but i must warn you that all the checks you are doing here are not precise and if you need the sending data to be checked well you have to do much detailed checks.

    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Mailing List: Sign Up</title>
    <link href="Main.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript">
    // function for making a shorthand for 'document.getElementById'
    function doc(objID){return document.getElementById(objID);}
    function validateForm(){
    // trying to remove any visible warning
    try{var strongs=document.getElementsByTagName('STRONG');for(var i in strongs){if(strongs[i].className=='warning'){strongs[i].parentNode.removeChild(strongs[i]);}}}catch(e){}
    //check email variables
    var email = doc('email').value,
    elength = email.length,
    atpos = email.indexOf('@'),
    atdot = email.lastIndexOf('.'),
    tld = email.substring(atdot),
    //other variables
    firstName = doc('firstname'),
    lastName = doc('lastname'),
    streetAdd = doc('streetaddress'),
    city = doc('city'),
    state = doc('state'),
    zip = doc('zipcode'),
    reqfield = "<strong class='warning'>This is a required field.</strong>";
    
    if(firstName.value==""){doc('feedbackFN').innerHTML=reqfield;firstName.focus();return false;}
    if(lastName.value==""){doc('feedbackLN').innerHTML=reqfield;lastName.focus();return false;}
    if(streetAdd.value==""){doc('feedbackSA').innerHTML=reqfield;streetAdd.focus();return false;}
    if(city.value==""){doc('feedbackC').innerHTML=reqfield;city.focus();return false;}
    if(state.value < 1){doc('feedbackState').innerHTML=reqfield;state.focus();return false;}
    if(zip.value==""){doc('feedbackZ').innerHTML=reqfield;zip.focus();return false;}
    if(atpos < 1 || atdot < 1 || atpos > atdot){doc('feedback').innerHTML=reqfield;doc('email').focus();return false;}
    
    // if all 
    if((firstName.value !="")&&(lastName.value !="")&&(streetAdd.value !="")&&(city.value !="")&&(state.value >= 1)&&(zip.value !="")&&(atpos > 1 || atdot > 1 || atdot > atpos)){
    window.open('MailingList_Confirmation.html');
    return true;
    }
    
    // if name and address
    if((firstName.value !="")&&(lastName.value !="")&&(streetAdd.value !="")&&(city.value !="")&&(state.value >= 1)&&(zip.value !="")){
    window.open('MailingList_Confirmation.html');
    return true;
    }
    
    // if name and email
    if((firstName.value !="")&&(lastName.value !="")&&(atpos > 1 && atdot > 1 && atdot > atpos)){
    window.open('MailingList_Confirmation.html');
    return true;
    }
    }
    
    </script>
    <style type="text/css">
    form{width:500px;}
    label{float:left;width:150px;font-family:"Times New Roman",Times,serif;}
    input[type=text]{float:left;width:200px;text-align:center;}
    .warning{color:Red;background-color:transparent;}
    </style>
    </head>
    <body>
    <form name="input" onsubmit="return validateForm()" action="form_info_input.asp" method="post">
    <!--First Name-->
    <label for="First name">First name:</label><input type="text" name="firstname" id="firstname" /><span style="color:#F00">*</span><p id="feedbackFN"></p>
    <!--Last Name-->
    <label for="Last name">Last name: </label><input type="text" name="lastname" id="lastname" /><span style="color:#F00">*</span><p id="feedbackLN"></p>
    <!--Street Address-->
    <label for="Street address">Street Address Line 1: </label><input type="text" name="streetaddress" id="streetaddress" /><span style="color:#F00">*</span><p id="feedbackSA"></p>
    <!--Street Address 2-->
    <label for="Street address two">Street Address Line 2:</label><input type="text" name="streetaddresstwo" id="streetaddress2" /><br/><br/>
    <!--City-->
    <label for="City">City: </label><input type="text" name="city" id="city" /><span style="color:#F00">*</span><p id="feedbackC"></p>
    <!--State-->
    <label for="State">State: </label><select name="state" id="state" tabindex="150">
    <option value="0">Select State</option>
    <option value="1">Alabama</option>
    <option value="2">Alaska</option>
    <option value="3">Arizona</option>
    <option value="4">Arkansas</option>
    <option value="5">California</option>
    <option value="6">Colorado</option>
    <option value="7">Connecticut</option>
    <option value="8">Delaware</option>
    <option value="9">Florida</option>
    <option value="10">Georgia</option>
    <option value="11">Hawaii</option>
    <option value="12">Idaho</option>
    <option value="13">Illinois</option>
    <option value="14">Indiana</option>
    <option value="15">Iowa</option>
    <option value="16">Kansas</option>
    <option value="17">Kentucky</option>
    <option value="18">Louisiana</option>
    <option value="19">Maine</option>
    <option value="20">Maryland</option>
    <option value="21">Massachusetts</option>
    <option value="22">Michigan</option>
    <option value="23">Minnesota</option>
    <option value="24">Mississippi</option>
    <option value="25">Missouri</option>
    <option value="26">Montana</option>
    <option value="27">Nebraska</option>
    <option value="28">Nevada</option>
    <option value="29">New Hampshire</option>
    <option value="30">New Jersey</option>
    <option value="31">New Mexico</option>
    <option value="32">New York</option>
    <option value="33">North Carolina</option>
    <option value="34">North Dakota</option>
    <option value="35">Ohio</option>
    <option value="36">Oklahoma</option>
    <option value="37">Oregon</option>
    <option value="38">Pennsylvania</option>
    <option value="39">Rhode Island</option>
    <option value="40">South Carolina</option>
    <option value="41">South Dakota</option>
    <option value="42">Tennessee</option>
    <option value="43">Texas</option>
    <option value="44">Utah</option>
    <option value="45">Vermont</option>
    <option value="46">Virginia</option>
    <option value="47">Washington</option>
    <option value="48">West Virginia</option>
    <option value="49">Wisconsin</option>
    <option value="50">Wyoming</option>
    </select><span style="color:#F00">*</span><p id="feedbackState"></p>
    <!--Zip Code--> 
    <label for="Zip code">Zip Code: </label><input type="text" name="zipcode" id="zipcode" /><span style="color:#F00">*</span><p id="feedbackZ"></p>
    <!--Email-->
    <label for="Email address">Email Address: </label><input type="text" name="emailaddress" id="email" /><span style="color:#F00">*</span><p id="feedback"></p>
    <!--Telephone-->
    <label for="Telephone number">Telephone Number: </label><input type="text" name="telephonenumber" id="phone" /><br/><br/>
    <input type="submit" value="Subscribe Now" id="submit" /><input type="reset" value="Clear" />
    </form>
    </body>
    </html>
    xxx: Guess Buddhist riddle: "What is the sound of one hand clapping?"
    yyy: facepalm

  7. #7
    Join Date
    Jun 2012
    Posts
    6
    I've heard Dreamweaver isn't the best way to learn to code. When I learned HTML and CSS, I just used Dreamweaver because that's what I had (I have the Adobe Creative Suite). But, the more involved I get with web development, the more I hear Dreamweaver isn't the way to do.

    Thank you for revising the code, however, it is still requiring all forms except street address line 2 and telephone.

    I would like to require name and address OR name and email. If the user wants to submit all, that's fine too.

    I guess those if statements I was using just aren't the way to do it.

  8. #8
    Join Date
    May 2006
    Location
    Somewhere behind your screen
    Posts
    1,648
    Quote Originally Posted by suzanne.miller View Post
    ... it is still requiring all forms except street address line 2 and telephone.

    I would like to require name and address OR name and email. If the user wants to submit all, that's fine too...
    sorry i missed these conditions - thought that all the fields marked with asterix were required. i'll try to alter the code and let you know
    xxx: Guess Buddhist riddle: "What is the sound of one hand clapping?"
    yyy: facepalm

  9. #9
    Join Date
    Jun 2012
    Posts
    6
    If you have time for that, that would be amazing!

  10. #10
    Join Date
    May 2006
    Location
    Somewhere behind your screen
    Posts
    1,648
    this code is far from perfection but it does some checks 'on the fly' and one final check before the form submits. you must remember that all these checks do not save you from a good hacker and all the sent data must be checked again on the server before inserting into the database:

    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Mailing List: Sign Up</title>
    <link href="Main.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript">
    var states=['Alabama','Alaska','Arizona','Arkansas','California','Colorado','Connecticut','Delaware','Florida','Georgia',
    'Hawaii','Idaho','Illinois','Indiana','Iowa','Kansas','Kentucky','Louisiana','Maine','Maryland',
    'Massachusetts','Michigan','Minnesota','Mississippi','Missouri','Montana','Nebraska','Nevada','New Hampshire','New Jersey',
    'New Mexico','New York','North Carolina','North Dakota','Ohio','Oklahoma','Oregon','Pennsylvania','Rhode Island','South Carolina',
    'South Dakota','Tennessee','Texas','Utah','Vermont','Virginia','Washington','West Virginia','Wisconsin','Wyoming'],
    bad_username_path=/[^\w\d_\-\s]{1,}/im,
    bad_address_path=/[^\w\d_\-\s,\/\.]{1,}/im,
    mail_path=/^([a-z0-9])([\w\.\-\+])+([a-z0-9])\@((\w)([\w\-]?)+\.)+([a-z]{2,4})$/i;
    
    function sweepField(obj,reg_path){
    var val=obj.value;eval("if("+reg_path+".test(val)){obj.value=val.replace("+reg_path+",'');}");
    if(typeof(sweepField.arguments[2])!='undefined'){var retval=(val.length>0)?true:false;return retval;}
    }
    
    function doc(objID){return document.getElementById(objID);}
    function init(){
    /* this builds 'state' select */
    for(var i in states){doc('state').options[doc('state').options.length]=new Option(states[i],(i+1));}
    /* this prevents sending the form if the user press Enter key.
    this way we force the user to fill the form (the required fields at least) 
    before the 'Subscribe Now' button appears */
    window.onkeydown=function(event){if(window.event.keyCode==13){return false;}};
    /* FIRSTNAME can only contain: letters, digits, spaces, - and _ */
    doc('firstname').onchange=doc('firstname').onkeyup=function(){sweepField(this,bad_username_path);}
    /* STREETADDRESS can only contain: letters, digits, spaces, commas, dots, slashes, - and _ */
    doc('streetaddress').onchange=doc('streetaddress').onkeyup=function(){sweepField(this,bad_address_path);}
    /* check EMAIL format on the field change */
    doc('email').onchange=function(){if(!mail_path.test(this.value)){this.value='Wrong Email format!';setTimeout("doc('email').value='';doc('email').focus();",1000);}}
    /* this tries to style inputs[type=text] if the browser can draw rounded corners */
    var inps=document.getElementsByTagName('INPUT');
    for(var k in inps){if(inps[k].type=='text'){
    try{inps[k].style.border='1px solid #ccc';inps[k].style.borderRadius='5px';}catch(e){}}
    /* this makes the SUBMIT button visible if FIRSTNAME is not empty and STREETADDRESS or EMAIL not empty also */
    inps[k].onblur=function(){
    if(doc('firstname').value.length>0 && (doc('streetaddress').value.length>0 || doc('email').value.length>0)){if(doc('confirm').style.display=='none'){doc('confirm').style.display='block';}}
    else{if(doc('confirm').style.display!='none'){doc('confirm').style.display='none';}}
    }
    
    }
    /* this hides the SUBMIT button on form reset if it is visible and moves focus on the first field of the form */
    doc('input').onreset=function(){doc('firstname').focus();if(doc('confirm').style.display!='none'){doc('confirm').style.display='none';}}
    doc('input').reset();
    }
    
    /* paranoid final check */
    function validateForm(){
    var valid=false;
    if(doc('firstname').value.length>0){valid=sweepField(doc('firstname'),bad_username_path,1);}
    if(doc('streetaddress').value.length>0){valid=sweepField(doc('streetaddress'),bad_username_path,1);}
    if(doc('email').value.length>0){if(!mail_path.test(doc('email').value)){valid=false;}}
    if(valid){document.input.submit();}
    }
    
    window.onload=init;
    </script>
    <style type="text/css">
    form{width:365px;}
    label{float:left;width:150px;font-family:"Times New Roman",Times,serif;}
    input[type=text]{float:left;width:200px;text-align:center;}
    select{float:left;width:200px;}
    #note{font-size:12px;font-style:italic;text-align:center;}
    .warning{color:Red;background-color:transparent;}
    .req_main{color:#000;background-color:#cfdf9a;}
    .req{color:#000;background-color:#f5eca6;}
    </style>
    </head>
    <body>
    <h3>I would like to require name and address OR name and email. If the user wants to submit all, that's fine too</h3>
    <form name="input" id="input" action="form_info_input.asp" method="post">
    <div align="left">
    <label for="firstname">First name:</label><input class="req_main" type="text" name="firstname" id="firstname" /><br /><br />
    <label for="lastname">Last name: </label><input type="text" name="lastname" id="lastname" /><br /><br />
    <label for="streetaddress">Street Address Line 1: </label><input class="req" type="text" name="streetaddress" id="streetaddress" /><br /><br />
    <label for="streetaddresstwo">Street Address Line 2:</label><input type="text" name="streetaddresstwo" id="streetaddresstwo" /><br /><br />
    <label for="city">City: </label><input type="text" name="city" id="city" /><br /><br />
    <label for="state">State: </label><select name="state" id="state" tabindex="150"><option value="0">Select State</option></select><br /><br />
    <label for="zipcode">Zip Code: </label><input type="text" name="zipcode" id="zipcode" /><br /><br />
    <label for="email">Email Address: </label><input class="req" type="text" name="email" id="email" /><br /><br />
    <label for="phone">Telephone Number: </label><input type="text" name="phone" id="phone" /><br /><br />
    <div id="note"><u><b>Note:</b></u> the <span class="req_main">green</span> and at least one of <span class="req">yellow</span> fields are required</div><br /><br />
    <div align="center"><input type="reset" value="Clear" /></div>
    <div id="confirm" style="display:none;text-align:center;margin-top:10px;"><input type="button" value="Subscribe Now" onclick="validateForm()" /></div>
    </div>
    </form>
    </body>
    </html>
    xxx: Guess Buddhist riddle: "What is the sound of one hand clapping?"
    yyy: facepalm

  11. #11
    Join Date
    Jun 2012
    Posts
    6
    Sorry for the delay, been a little busy. But, this code works perfectly!
    I really appreciate all the time you have spent on this project. Finally, someone has cleared up my confusion!

    Thank you again!

    For anyone reading this - Padonak has been unbelievably helpful, patient and timely. You will be lucky to work him/her.

  12. #12
    Join Date
    May 2006
    Location
    Somewhere behind your screen
    Posts
    1,648
    good to hear )) thank you Suzanne for the warm words ))
    xxx: Guess Buddhist riddle: "What is the sound of one hand clapping?"
    yyy: facepalm

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles