function saveValue(form, existEmt)
{
    var errorMessages = "";
    var selIndex = form.element_list.selectedIndex;
    var inputName = form.element_name.value;
    var inputTabIndex = form.element_tabindex.value;
    var inputTitle = form.element_title.value;
    var inputSize = form.element_size.value;
    var inputValue = form.element_value.value;
    var inputMaxlength = form.element_maxlength.value;
    var inputChecked = form.element_checked.checked;
    var inputRequired = form.element_require.checked;
    var regExpression = / +/;

    if(inputName == null || inputName == "")
        errorMessages = "\nYou must enter a name for this form element.";
    else
    {
        regExpression = /^[a-zA-Z]/;
        if(regExpression.test(inputName) == false)
        {
            errorMessages += "\nElement names cannot start with numbers or symbols, please start with a character.";
        }
        
        regExpression = / +/;
        if(regExpression.test(inputName))
        {
            errorMessages += "\nYou are not allowed to use spaces in the element name.  Try using '_' instead.";
        }
        
        regExpression = /"+/;
        if(regExpression.test(inputName) || regExpression.test(inputTitle) || regExpression.test(inputValue))
        {
            errorMessages += "\nYou are not allowed to use double quotation marks in any field on this page.";
        }

        regExpression = /'+/;
        if(regExpression.test(inputName))
        {
            errorMessages += "\nYou are not allowed to use single quotation marks in the element name.";
        }
    }

    regExpression = /\D+/;
    if(inputTabIndex != null && inputTabIndex != "" && regExpression.test(inputTabIndex))
        errorMessages += "\nYou must enter only whole numbers for the Tab Index field.";
    if(form.element_size.style.visibility == "visible" && inputSize != null && inputSize != "" && regExpression.test(inputSize))
        errorMessages += "\nYou must enter only whole numbers for the " + document.getElementById("text_size").innerText + " field.";
    if(form.element_maxlength.style.visibility == "visible" && inputMaxlength != null && inputMaxlength != "" && regExpression.test(inputMaxlength) )
        errorMessages += "\nYou must enter only whole numbers for the " + document.getElementById("text_maxlength").innerText + " field.";
    if( inputRequired && form.element_require.style.visibility == "visible" && (form.element_title.value == null || form.element_title.value == "") )
        errorMessages += "\nIn order to make this item required, you must enter a Title.";      

    if( errorMessages == "" )
    {
        var finalElement = "";
        switch(selIndex)
        {
            case 0:
                finalElement = "<input type=checkbox";
                finalElement += " name=\"" + inputName + "\"";
                finalElement += " id=\"" + inputName + "\"";
                if(inputTabIndex != "")
                    finalElement += " tabindex=\"" + inputTabIndex + "\"";
                if(inputTitle != "")
                    finalElement += " title=\"" + inputTitle + "\"";
                if(inputValue != "")
                    finalElement += " value=\"" + inputValue + "\"";
                if(inputChecked)
                    finalElement += " checked=\"true\"";
                finalElement += ">";
                if( opener.document.getElementById("field_required_fields") )
                {
                    if( inputRequired )
                    {
                        if( opener.document.getElementById("field_required_fields") != null && opener.document.getElementById("field_required_fields").value != null && opener.document.getElementById("field_required_fields").value != NaN && opener.document.getElementById("field_required_fields").value != "" )
                        {
                            var tempRequired = opener.document.getElementById("field_required_fields").value;
                            var currentRequired = tempRequired.split(";");
                            var alreadyEntered = false;
                            for(var i=0;i<currentRequired.length-1; i++)
                            {
                                if( currentRequired[i] == inputName)
                                {
                                    alreadyEntered = true;
                                    break;
                                }
                            }
                            if(!alreadyEntered)
                            {
                                inputName += ";";
                                opener.document.getElementById("field_required_fields").value += inputName;
                            }
                        }
                        else
                        {
                            inputName += ";";
                            opener.document.getElementById("field_required_fields").value = inputName;
                            alert(opener.document.getElementById("field_required_fields").value);
                        }
                    }
                    else
                    {
                        var currentRequired = opener.document.getElementById("field_required_fields").value.split(";");
                        opener.document.getElementById("field_required_fields").value = "";
                        for(var i=0;i<currentRequired.length-1; i++)
                        {
                            if( currentRequired[i] != inputName)
                            {
                                currentRequired[i] += ";";
                                opener.document.getElementById("field_required_fields").value += currentRequired[i];
                            }
                        }
                    }
                }
                break
            case 1:
                finalElement = "<input type=radio";
                finalElement += " name=\"" + inputName + "\"";
                finalElement += " id=\"" + inputName + "\"";
                if(inputTabIndex != "")
                    finalElement += " tabindex=\"" + inputTabIndex + "\"";
                if(inputTitle != "")
                    finalElement += " title=\"" + inputTitle + "\"";
                if(inputValue != "")
                    finalElement += " value=\"" + inputValue + "\"";
                if(inputChecked)
                    finalElement += " checked=\"true\"";
                finalElement += ">";

                if( opener.document.getElementById("field_required_fields") )
                {
                if( inputRequired )
                {
                    if( opener.document.getElementById("field_required_fields") != null && opener.document.getElementById("field_required_fields").value != null && opener.document.getElementById("field_required_fields").value != NaN && opener.document.getElementById("field_required_fields").value != "" )
                    {
                        var tempRequired = opener.document.getElementById("field_required_fields").value;
                        var currentRequired = tempRequired.split(";");
                        var alreadyEntered = false;
                        for(var i=0;i<currentRequired.length-1; i++)
                        {
                            if( currentRequired[i] == inputName)
                            {
                                alreadyEntered = true;
                                break;
                            }
                        }
                        if(!alreadyEntered)
                        {
                            inputName += ";";
                            opener.document.getElementById("field_required_fields").value += inputName;
                        }
                    }
                    else
                    {
                        inputName += ";";
                        opener.document.getElementById("field_required_fields").value = inputName;
                    }
                }
                else
                {
                    var currentRequired = opener.document.getElementById("field_required_fields").value.split(";");
                    opener.document.getElementById("field_required_fields").value = "";
                    for(var i=0;i<currentRequired.length-1; i++)
                            if( currentRequired[i] != inputName)
                            {
                                currentRequired[i] += ";";
                                opener.document.getElementById("field_required_fields").value += currentRequired[i];
                            }
                }
                }
                break;
            case 2:
                finalElement = "<input type=text";
                finalElement += " name=\"" + inputName + "\"";
                finalElement += " id=\"" + inputName + "\"";
                if(inputTabIndex != "")
                    finalElement += " tabindex=\"" + inputTabIndex + "\"";
                if(inputTitle != "")
                    finalElement += " title=\"" + inputTitle + "\"";
                if(inputSize != "")
                    finalElement += " size=\"" + inputSize + "\"";
                if(inputValue != "")
                    finalElement += " value=\"" + inputValue + "\"";
                if(inputMaxlength != "")
                    finalElement += " maxlength=\"" + inputMaxlength + "\"";
                finalElement += ">";
                
                if( opener.document.getElementById("field_required_fields") )
                {
                if( inputRequired )
                {
                    if( opener.document.getElementById("field_required_fields") != null && opener.document.getElementById("field_required_fields").value != null && opener.document.getElementById("field_required_fields").value != NaN && opener.document.getElementById("field_required_fields").value != "" )
                    {
                        var tempRequired = opener.document.getElementById("field_required_fields").value;
                        var currentRequired = tempRequired.split(";");
                        var alreadyEntered = false;
                        for(var i=0;i<currentRequired.length-1; i++)
                        {
                            if( currentRequired[i] == inputName)
                            {
                                alreadyEntered = true;
                                break;
                            }
                        }
                        if(!alreadyEntered)
                        {
                            inputName += ";";
                            opener.document.getElementById("field_required_fields").value += inputName;
                        }
                    }
                    else
                    {
                        inputName += ";";
                        opener.document.getElementById("field_required_fields").value = inputName;
                    }
                }
                else
                {
                    var currentRequired = opener.document.getElementById("field_required_fields").value.split(";");
                    opener.document.getElementById("field_required_fields").value = "";
                    for(var i=0;i<currentRequired.length-1; i++)
                            if( currentRequired[i] != inputName)
                            {
                                currentRequired[i] += ";";
                                opener.document.getElementById("field_required_fields").value += currentRequired[i];
                            }
                }
                }
                break;
            case 3:
                finalElement = "<textarea";
                finalElement += " name=\"" + inputName + "\"";
                finalElement += " id=\"" + inputName + "\"";
                if(inputTabIndex != "")
                    finalElement += " tabindex=\"" + inputTabIndex + "\"";
                if(inputTitle != "")
                    finalElement += " title=\"" + inputTitle + "\"";
                if(inputSize != "")
                    finalElement += " cols=\"" + inputSize + "\"";
//                if(inputValue != "")
//                    finalElement += " value=\"" + inputValue + "\"";
                if(inputMaxlength != "")
                    finalElement += " rows=\"" + inputMaxlength + "\"";
                finalElement += ">" + inputValue + "</textarea>";

                if( opener.document.getElementById("field_required_fields") )
                {
                if( inputRequired )
                {
                    if( opener.document.getElementById("field_required_fields") != null && opener.document.getElementById("field_required_fields").value != null && opener.document.getElementById("field_required_fields").value != NaN && opener.document.getElementById("field_required_fields").value != "" )
                    {
                        var tempRequired = opener.document.getElementById("field_required_fields").value;
                        var currentRequired = tempRequired.split(";");
                        var alreadyEntered = false;
                        for(var i=0;i<currentRequired.length-1; i++)
                        {
                            if( currentRequired[i] == inputName)
                            {
                                alreadyEntered = true;
                                break;
                            }
                        }
                        if(!alreadyEntered)
                        {
                            inputName += ";";
                            opener.document.getElementById("field_required_fields").value += inputName;
                        }
                    }
                    else
                    {
                        inputName += ";";
                        opener.document.getElementById("field_required_fields").value = inputName;
                    }
                }
                else
                {
                    var currentRequired = opener.document.getElementById("field_required_fields").value.split(";");
                    opener.document.getElementById("field_required_fields").value = "";
                    for(var i=0;i<currentRequired.length-1; i++)
                            if( currentRequired[i] != inputName)
                            {
                                currentRequired[i] += ";";
                                opener.document.getElementById("field_required_fields").value += currentRequired[i];
                            }
                }
                }
                break;
            case 4:
                finalElement = "<select";
                finalElement += " name=\"" + inputName + "\"";
                finalElement += " id=\"" + inputName + "\"";
                if(inputTabIndex != "")
                    finalElement += " tabindex=\"" + inputTabIndex + "\"";
                if(inputTitle != "")
                    inputTitle = " title=\"" + inputTitle + "\"";
                finalElement += inputTitle;
                if(inputSize != "")
                    finalElement += " size=\"" + inputSize + "\"";
                if(inputChecked)
                    finalElement += " multiple=\"true\"";
                finalElement += ">";
                if(inputValue != "")
                {
                    var selectOptions = inputValue.split(";");
                    for(var p=0; p<selectOptions.length; p++)
                    {
                        finalElement += "<option value=\"" + selectOptions[p] + "\"" + inputTitle + ">" + selectOptions[p] + "</option>";
                    }
                }
                finalElement += "</select>";

                if( opener.document.getElementById("field_required_fields") )
                {
                if( inputRequired )
                {
                    if( opener.document.getElementById("field_required_fields") != null && opener.document.getElementById("field_required_fields").value != null && opener.document.getElementById("field_required_fields").value != NaN && opener.document.getElementById("field_required_fields").value != "" )
                    {
                        var tempRequired = opener.document.getElementById("field_required_fields").value;
                        var currentRequired = tempRequired.split(";");
                        var alreadyEntered = false;
                        for(var i=0;i<currentRequired.length-1; i++)
                        {
                            if( currentRequired[i] == inputName)
                            {
                                alreadyEntered = true;
                                break;
                            }
                        }
                        if(!alreadyEntered)
                        {
                            inputName += ";";
                            opener.document.getElementById("field_required_fields").value += inputName;
                        }
                    }
                    else
                    {
                        inputName += ";";
                        opener.document.getElementById("field_required_fields").value = inputName;
                    }
                }
                else
                {
                    var currentRequired = opener.document.getElementById("field_required_fields").value.split(";");
                    opener.document.getElementById("field_required_fields").value = "";
                    for(var i=0;i<currentRequired.length-1; i++)
                            if( currentRequired[i] != inputName)
                            {
                                currentRequired[i] += ";";
                                opener.document.getElementById("field_required_fields").value += currentRequired[i];
                            }
                }
                }
                break;
            case 5:
                finalElement = "<input type=reset";
                finalElement += " name=\"" + inputName + "\"";
                finalElement += " id=\"" + inputName + "\"";
                if(inputTabIndex != "")
                    finalElement += " tabindex=\"" + inputTabIndex + "\"";
                if(inputTitle != "")
                    finalElement += " title=\"" + inputTitle + "\"";
                if(inputSize != "")
                    finalElement += " size=\"" + inputSize + "\"";
                if(inputValue != "")
                    finalElement += " value=\"" + inputValue + "\"";
                finalElement += ">";
                break;
            case 6:
                finalElement = "<input type=submit";
                finalElement += " name=\"" + inputName + "\"";
                finalElement += " id=\"" + inputName + "\"";
                if(inputTabIndex != "")
                    finalElement += " tabindex=\"" + inputTabIndex + "\"";
                if(inputTitle != "")
                    finalElement += " title=\"" + inputTitle + "\"";
                if(inputSize != "")
                    finalElement += " size=\"" + inputSize + "\"";
                if(inputValue != "")
                    finalElement += " value=\"" + inputValue + "\"";
                finalElement += ">";
                break;
        }

        window.opener.tinyMCE.insertFormElement(finalElement); 
        closeWindow();
    }
    else
    {
        alert("The following errors have occured:\n" + errorMessages);
    }
}

function closeWindow()
{
    opener.focus();
    window.close();
}

function displayFields(index)
{
    switch(index){
        case 0:
            //check box
            document.getElementById("element_size").style.visibility="hidden";
            document.getElementById("text_size").style.visibility="hidden";
            document.getElementById("element_maxlength").style.visibility="hidden";
            document.getElementById("text_maxlength").style.visibility="hidden";
            document.getElementById("element_checked").style.visibility="visible";
            document.getElementById("text_checked").style.visibility="visible";
            document.getElementById("text_checked").innerText = "Checked:";
            document.getElementById("element_require").style.visibility="visible";
            document.getElementById("text_require").style.visibility="visible";
            document.getElementById("text_value").innerText = "Value:";
            break
        case 1:
            //radio button
            document.getElementById("element_size").style.visibility="hidden";
            document.getElementById("text_size").style.visibility="hidden";
            document.getElementById("element_maxlength").style.visibility="hidden";
            document.getElementById("text_maxlength").style.visibility="hidden";
            document.getElementById("element_checked").style.visibility="visible";
            document.getElementById("text_checked").style.visibility="visible";
            document.getElementById("text_checked").innerText = "Checked:";
            document.getElementById("element_require").style.visibility="visible";
            document.getElementById("text_require").style.visibility="visible";
            document.getElementById("text_value").innerText = "Value:";
            break;
        case 2:
            //text box
            document.getElementById("element_size").style.visibility="visible";
            document.getElementById("text_size").style.visibility="visible";
            document.getElementById("text_size").innerText = "Size:";
            document.getElementById("element_maxlength").style.visibility="visible";
            document.getElementById("text_maxlength").style.visibility="visible";
            document.getElementById("text_maxlength").innerText = "Max. Length:";
            document.getElementById("element_checked").style.visibility="hidden";
            document.getElementById("text_checked").style.visibility="hidden";
            document.getElementById("element_require").style.visibility="visible";
            document.getElementById("text_require").style.visibility="visible";
            break;
        case 3:
            //text area
            document.getElementById("element_size").style.visibility="visible";
            document.getElementById("text_size").style.visibility="visible";
            document.getElementById("text_size").innerText = "Columns:";
            document.getElementById("element_maxlength").style.visibility="visible";
            document.getElementById("text_maxlength").style.visibility="visible";
            document.getElementById("text_maxlength").innerText = "Rows:";
            document.getElementById("element_checked").style.visibility="hidden";
            document.getElementById("text_checked").style.visibility="hidden";
            document.getElementById("element_require").style.visibility="visible";
            document.getElementById("text_require").style.visibility="visible";
            document.getElementById("text_value").innerText = "Value:";
            break;
        case 4:
            //select box
            document.getElementById("element_size").style.visibility="visible";
            document.getElementById("text_size").style.visibility="visible";
            document.getElementById("text_size").innerText = "Size:";
            document.getElementById("element_maxlength").style.visibility="hidden";
            document.getElementById("text_maxlength").style.visibility="hidden";
            document.getElementById("element_checked").style.visibility="visible";
            document.getElementById("text_checked").style.visibility="visible";
            document.getElementById("text_checked").innerText = "Allow Multiple Selections:";
            document.getElementById("element_require").style.visibility="visible";
            document.getElementById("text_require").style.visibility="visible";
            document.getElementById("text_value").innerHTML = "List Values: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:purple;font-weight:bold;\" onclick=\"alert(\'Enter list values (separated by semicolons).\');\" onmouseover=\"this.style.cursor=\'pointer\';\" onmouseout=\"this.style.cursor=\'none\';\">?</span>";
            break;
        case 5:
            //reset button
            document.getElementById("element_size").style.visibility="visible";
            document.getElementById("text_size").style.visibility="visible";
            document.getElementById("text_size").innerText = "Size:";
            document.getElementById("element_maxlength").style.visibility="hidden";
            document.getElementById("text_maxlength").style.visibility="hidden";
            document.getElementById("element_checked").style.visibility="hidden";
            document.getElementById("text_checked").style.visibility="hidden";
            document.getElementById("element_require").style.visibility="hidden";
            document.getElementById("text_require").style.visibility="hidden";
            document.getElementById("text_value").innerText = "Value:";
            break;
        case 6:
            //submit button
            document.getElementById("element_size").style.visibility="visible";
            document.getElementById("text_size").style.visibility="visible";
            document.getElementById("text_size").innerText = "Size:";
            document.getElementById("element_maxlength").style.visibility="hidden";
            document.getElementById("text_maxlength").style.visibility="hidden";
            document.getElementById("element_checked").style.visibility="hidden";
            document.getElementById("text_checked").style.visibility="hidden";
            document.getElementById("element_require").style.visibility="hidden";
            document.getElementById("text_require").style.visibility="hidden";
            document.getElementById("text_value").innerText = "Value:";
            break;
    }
}


// -----------------------------
// Check if the current selection is a form element and populate the form with
// the elements values.
// returns true if a form element is selected
// -----------------------------
function findExistingValues(element)
{
    if( element == null )
    {
        return false;
    }
    
    var text = element.nodeName.toLowerCase();
    document.getElementById("element_name").value = opener.tinyMCE.getAttrib(element, 'name');
    document.getElementById("element_tabindex").value = opener.tinyMCE.getAttrib(element, 'tabIndex');
    document.getElementById("element_title").value = opener.tinyMCE.getAttrib(element, 'title');

    if( text == "input" )
    {
        if( opener.tinyMCE.getAttrib(element, 'type') == 'checkbox' )
        {
            displayFields(0);
            document.getElementById("element_list").selectedIndex = 0;
            document.getElementById("element_checked").checked = opener.tinyMCE.getAttrib(element, 'checked');
        }
        else if( opener.tinyMCE.getAttrib(element, 'type') == 'radio' )
        {
            displayFields(1);
            document.getElementById("element_list").selectedIndex = 1;
            document.getElementById("element_checked").checked = opener.tinyMCE.getAttrib(element, 'checked');
        }
        else if( opener.tinyMCE.getAttrib(element, 'type') == 'text' )
        {
            displayFields(2);
            document.getElementById("element_list").selectedIndex = 2;
            document.getElementById("element_size").value = opener.tinyMCE.getAttrib(element, 'size');
            if( opener.tinyMCE.getAttrib(element, 'maxlength') != 2147483647 )
            {
                document.getElementById("element_maxlength").value = opener.tinyMCE.getAttrib(element, 'maxlength');
            }
        }
        else if( opener.tinyMCE.getAttrib(element, 'type') == 'reset' )
        {
            displayFields(5);
            document.getElementById("element_list").selectedIndex = 5;
            document.getElementById("element_size").value = opener.tinyMCE.getAttrib(element, 'size');
        }
        else if( opener.tinyMCE.getAttrib(element, 'type') == 'submit' )
        {
            displayFields(6);
            document.getElementById("element_list").selectedIndex = 6;
            document.getElementById("element_size").value = opener.tinyMCE.getAttrib(element, 'size');
        }

        document.getElementById("element_value").value = opener.tinyMCE.getAttrib(element, 'value');
    }
    else if( text == "textarea" )
    {
        displayFields(3);
        document.getElementById("element_list").selectedIndex = 3;
        document.getElementById("element_value").value = opener.tinyMCE.getAttrib(element, 'value');
        document.getElementById("element_size").value = opener.tinyMCE.getAttrib(element, 'cols');
        document.getElementById("element_maxlength").value = opener.tinyMCE.getAttrib(element, 'rows');
    }
    else if ( text == "select" )
    {
        displayFields(4);
        document.getElementById("element_list").selectedIndex = 4;
        document.getElementById("element_size").value = opener.tinyMCE.getAttrib(element, 'size');
        document.getElementById("element_checked").checked = opener.tinyMCE.getAttrib(element, 'multiple');

        var elementOptions = opener.tinyMCE.getAttrib(element, 'options');
        var optionCounter = 0;
        var optionValues = "";

        while( elementOptions != null && optionCounter < elementOptions.length )
        {
            optionValues += opener.tinyMCE.getAttrib(elementOptions[optionCounter], 'value') + ";";
            optionCounter++;
        }
        document.getElementById("element_value").value = optionValues;
    }
    else
    {
        return false;
    }

    if( opener.document.getElementById("field_required_fields") != null && opener.document.getElementById("field_required_fields").value != null && opener.document.getElementById("field_required_fields").value != NaN && opener.document.getElementById("field_required_fields").value != "" )
    {
        var currentRequired = opener.document.getElementById("field_required_fields").value.split(";");
        for(var i=0;i<currentRequired.length-1; i++)
        {
            if( currentRequired[i] == document.getElementById("element_name").value)
            {
                document.getElementById("element_require").checked = true;
                break;
            }
        }
    }

    return true;
}

function validateGeneratorFields(genFields)
{
    var errorMsg = "";
    var actualFields = genFields.split(";");
    
    for (var i=0;i<actualFields.length;i++) 
	{
	    var pair = actualFields[i].split("=");    
		if(pair[0] == "page_id")
		{
			document.getElementById('pageId').value = pair[1];
		}
	}
    
    for(var f=0;f<actualFields.length-1;f++)
    {
        if( document.getElementById(actualFields[f]) )
        {
            var fieldType = document.getElementById(actualFields[f]).type;

            if( fieldType == "checkbox" )
            {
                if( !document.getElementById(actualFields[f]).checked )
                    errorMsg += "\n" + document.getElementById(actualFields[f]).title + " is required.";
            }
            else if( fieldType == "radio" )
            {
                var radioSelected = false;
                var actEmt = document.getElementById(actualFields[f]);
                for(var k=0; k<actEmt.length; k++)
                {
                    if( actEmt[k].checked )
                    {
                        radioSelected = true;
                        break;
                    }
                }
                if( !radioSelected )
                    errorMsg += "\n" + document.getElementById(actualFields[f]).title + " is required.";
            }
            else if( fieldType == "text" )
            {
                if( document.getElementById(actualFields[f]).value == "" )
                    errorMsg += "\n" + document.getElementById(actualFields[f]).title + " is required.";
            }
            else if( fieldType == "textarea" )
            {
                if( document.getElementById(actualFields[f]).value == "" )
                    errorMsg += "\n" + document.getElementById(actualFields[f]).title + " is required.";
            }
            else
            {
                if( document.getElementById(actualFields[f]).selectedIndex < 0 )
                    errorMsg += "\n" + document.getElementById(actualFields[f]).title + " is required.";
            }

        }
    }
    if( errorMsg != "" )
    {
        alert("The following information is missing:\n" + errorMsg);
        return false;
    }
    else
        return true;
}

