var gShowErrors = false;
var firstSubmitField;
var firstSubmitFieldType;
var ReqFields = '';
var notReqFields = '';
    function IsRequired(fld) {
       ReqFields += "," + fld;
    }
   function checkRequired(fld) {
        found = false;
        arrReqFields = ReqFields.split(",");
        for (var i=0; i < arrReqFields.length; i++) {
          if (fld == arrReqFields[i]) {
             found = true;
             break;
          }
        }
        return found;
    }
                
    function GetElement(theID) {
        if (document.all) {
            return document.all(theID);
        }
        if (document.ids) {
            return document.ids[theID];
        }
        return document.getElementById(theID);
    }
    
    function checkNotRequired(fld) {
        found = false;
        arrNotReqFields = notReqFields.split(",");
        for (var i=0; i < arrNotReqFields.length; i++) {
            if (fld == arrNotReqFields[i]) {
                found = true;
                break;
            }
        }
        return found;
    }

    function IsInvisible(theField) {
        var str = theField;
        //check the visibility
        for (var c = 0; c <document.getElementsByTagName("tr").length; c++) {
            if (str==document.getElementsByTagName("tr")[c].getAttribute("id")) {
                if(document.getElementsByTagName("tr")[c].style.display=='none') {
                    return true;
                }
            }
        }
        return false;
    }

    function IsEmpty(theField) {
        if (!theField) return true;
        if (theField.classid) return theField.IsEmpty();
        
        if (theField.value != null) {
            if (theField.value.length == 0) return true;
            for (var i=0; i < theField.value.length; i++) {
                var ch=theField.value.charAt(i);
                if (ch !=' ' && ch !='\t')
                    return false;
            }
        }
        return true;
    }

    function checkEntries(frm, elementName) {
        var filledIn = false;
        if (frm.elements[elementName].checked == true) filledIn = true;
        else filledIn = false;
           
        for (var counter = 0; counter < frm.elements[elementName].length; counter++) {
            if (frm.elements[elementName](counter).checked == true) filledIn = true;
        }
        if (filledIn == false) {
                return false;
        }
        return true;
    }

    function qparse(elementLabel) {
        var label = elementLabel.split('"');
        var element = '';
        for (var c = 0; c < label.length; c++) {
            element += label[c]
            if (c != label.length-1) {
                element += "'";
            }
        }
        return element;
    }
    
    function reportRequiredMissing(firstField, showErrors, elementName, rowId, displayName, spanName) {
        var msg = '';
        if (checkRequired(elementName)) {
           if (!IsInvisible(rowId) && IsEmpty(document.forms["formBean"].elements[elementName])) {
             if (!firstField) firstField = document.forms["formBean"].elements[elementName];
               msg += qparse(displayName);
               if (showErrors) GetElement(spanName).className = 'ELABEL';
           }
        }
        return msg;
    }
    
    function fntestdrop(showstr,answer) {
        var w = document.forms['formBean'].elements[showstr].selectedIndex;
        var selected_text = document.forms['formBean'].elements[showstr].options[w].text;
        var elementvalue = document.forms['formBean'].elements[showstr].value;
        document.forms['formBean'].ChangeTest.value = selected_text;
        showquestions("id"+showstr,selected_text);
        hidequestions("id"+showstr,selected_text);
    }

    function emptyonchangeHandler() {
    // Empty handler for drowpdown boxes that don't have an onchange handle
        alert("emptyonchangeHandler");
    }
    function fntest(showstr, hidestr) {
        showquestions(showstr, hidestr);
        hidequestions(showstr, hidestr);     
    }
    function hidequestions(tabin,selected_text) {
        for (var c = 0; c < document.getElementsByTagName("tr").length; c++) {
            document.getElementsByTagName("tr")[c].firstChild.normalize()
            
            if (tabin==document.getElementsByTagName("tr")[c].getAttribute("id") && selected_text != document.getElementsByTagName("tr")[c].getAttribute("id2")) {
                var sub;
                document.getElementsByTagName("tr")[c].style.display="none";
                if (document.getElementsByTagName("tr")[c].firstChild){
                    var sub = document.getElementsByTagName("tr")[c].firstChild.firstChild.firstChild.id;
                }
                if(sub != null && sub != ''){
                    sub = sub.substring(2, sub.length);
                    if (document.forms['formBean'].elements[sub][1] != null) {
                        document.forms['formBean'].elements[sub][0].checked = false;
                        document.forms['formBean'].elements[sub][1].checked = false;
                    }
                    document.forms['formBean'].elements[sub].value = '';
                    //alert("will hide "+sub+" recursively");
                     hidequestions('id'+sub);
                }
            }
        }
    }

    function showquestions(tabin,selected_text) {
        for (var c = 0; c < document.getElementsByTagName("tr").length; c++) {
             
            if (tabin == document.getElementsByTagName("tr")[c].getAttribute("id") 
                && selected_text == document.getElementsByTagName("tr")[c].getAttribute("id2")) {
                document.getElementsByTagName("tr")[c].style.display="inline";
            } 
        }
    }

    function submitPoll() {
        var msg = "";
         if (msg.length == 0) {
            msg = getSubmitDisplay(1,'1');
         }
                
        if (msg != null && msg.length == 0) {
         
            document.forms['formBean'].save.value = "true";
            document.forms['formBean'].operation.value = "Exit" ;
            document.forms['formBean'].savePage.value = "false";
            document.forms['formBean'].refUrl.value = document.referrer;
            //document.forms['formBean'].PollUrl.value = window.location.href;
	    document.forms['formBean'].PollUrl.value = '<a href='+window.location.href+'>pollingPage</a>';
            document.forms['formBean'].submit();
            return true;
            //document.forms['formBean'].btnSubmit.enabled = false;
        } else if (firstSubmitFieldType != "RadioButton/CheckBox") {
         
            // The main report on missing fields is here
            alert('Please provide a response.');
            document.forms.elements[firstSubmitField].focus();
            //firstSubmitField.focus();
        } else{
            // This must be a RadioButton or CheckBox control not filled in
            alert('Please provide a response.');
        }
    }
    
    function getSubmitDisplay(index, tabName) {
        var msg= "";
        
        msg = validateInfo(document.forms['formBean'], index, true, true);
        
        if (msg.length == 0) {}
        else {
            document.forms['formBean'].tabindex.value = index;
            document.forms['formBean'].tabname.value = tabName;
        }
        return msg;
    }
    
    function validateInfo(form, tabNo, showErrors, submitFlag) {
        var msg = '';
        var firstField, fieldType;
            
        firstSubmitFieldType = "RadioButton/CheckBox";
        if (!IsInvisible('idnull') && !checkEntries(form, "Qn001")) {
            if (!firstField) firstField = form.elements["Qn001"];
            msg += "Has this been helpful?";
            if (showErrors) GetElement('lbQn001').className = 'ELABEL';
        }
        if (form.elements["email"] != null) {
            if (form.elements["email"].value != "") {
              if (!validateEmail(form.elements["email"])) {
                if (!firstField) firstField = form.elements["email"];
                msg += '\n'+'Email is blank or invalid';
                if ( showErrors ) GetElement("lblEmail").className = 'ELABEL';
              }
            }
        }
        // If No then please give a reason
        //if (form.elements['Qn001'][1].value == 'No'
        //&& form.elements['Qn001'][1].checked == true) {
        //if (form.elements['Qn003'].value == 'Choose One'
        //  || form.elements['Qn003'].value == '' ){
        //   msg += '\n'+'Please give us some feed back';
        //}
        //}
        if (showErrors && !submitFlag && msg.length > 0) {
            alert(msg);
            firstField.focus();
        }
        //set the firstSubmitField in case this is a submit
        //alert('validateInfo: set the firstSubmitField var');
        if (submitFlag){
         firstSubmitField = firstField;
            //alert('firstField '+firstField+' name '+firstField.name);
        }
        return msg;
    }

    function validateEmail(field) {
        /*var field = form.elements["emailAddress"];    */
        var retVal = true ;
        var regExp = /^\w[\w\.-]*@\w[\w-]*\.[\w\.-]*\w$/ ;
        var val = field.value /*= field.value.trim() ;*/
        retVal = regExp.test(val) ;
        return retVal;
    }
