
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 range = opener.sel_range; //opener.document.selection.createRange();
        var finalElement = "";
        switch(selIndex)
        {
            case 0:
                finalElement = "<input type=checkbox";
                finalElement += " name=\"" + inputName + "\"";
                if(inputTabIndex != "")
                    finalElement += " tabindex=\"" + inputTabIndex + "\"";
                if(inputTitle != "")
                    finalElement += " title=\"" + inputTitle + "\"";
                if(inputValue != "")
                    finalElement += " value=\"" + inputValue + "\"";
                if(inputChecked)
                    finalElement += " checked";
                finalElement += ">";

                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 1:
                finalElement = "<input type=radio";
                finalElement += " name=\"" + inputName + "\"";
                if(inputTabIndex != "")
                    finalElement += " tabindex=\"" + inputTabIndex + "\"";
                if(inputTitle != "")
                    finalElement += " title=\"" + inputTitle + "\"";
                if(inputValue != "")
                    finalElement += " value=\"" + inputValue + "\"";
                if(inputChecked)
                    finalElement += " checked";
                finalElement += ">";

                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 + "\"";
                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( 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 + "\"";
                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 += "></textarea>";

                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 + "\"";
                if(inputTabIndex != "")
                    finalElement += " tabindex=\"" + inputTabIndex + "\"";
                if(inputTitle != "")
                    inputTitle = " title=\"" + inputTitle + "\"";
                finalElement += inputTitle;
                if(inputSize != "")
                    finalElement += " size=\"" + inputSize + "\"";
                if(inputChecked)
                    finalElement += " multiple";
                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( 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 + "\"";
                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 + "\"";
                if(inputTabIndex != "")
                    finalElement += " tabindex=\"" + inputTabIndex + "\"";
                if(inputTitle != "")
                    finalElement += " title=\"" + inputTitle + "\"";
                if(inputSize != "")
                    finalElement += " size=\"" + inputSize + "\"";
                if(inputValue != "")
                    finalElement += " value=\"" + inputValue + "\"";
                finalElement += ">";
                break;
        }
        if(existEmt)
        {
            range.pasteHTML(finalElement);  
        }
        else
        {
            range.pasteHTML(range.text + finalElement);  
        }
        closeWindow();
    }
    else
    {
        alert("The following errors have occured:\n" + errorMessages);
    }
}

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

function displayFields(index)
{
    switch(index){
        case 0:
            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:
            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:
            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:
            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:
            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:
            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:
            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()
{
    if (opener.document.selection.createRange().text == "")
       return false;
    
    var extEmt = false;
    if(opener.document.selection.type != null && opener.document.selection.type == 'Control')
    {
        var el = opener.document.selection.createRange().commonParentElement();
        var tr = opener.document.body.createTextRange();
        tr.moveToElementText(el);
        tr.select();
    }  
    var text = opener.document.selection.createRange().htmlText;
    if( text != "" || text.indexOf("<input") == 0 || text.indexOf("<INPUT") == 0 )
    {
        extEmt = true; 
        var link = document.createElement(text);
        if( link.getAttribute("name") != null && link.getAttribute("name") != "")
        {
            document.getElementById("element_name").value = link.getAttribute("name");
            document.getElementById("element_tabindex").value = link.getAttribute("tabIndex");
            document.getElementById("element_title").value = link.getAttribute("title");
            document.getElementById("element_size").value = link.getAttribute("size");
            document.getElementById("element_value").value = link.getAttribute("value");

            if(link.getAttribute("maxLength") != null && link.getAttribute("maxLength") != "" && link.getAttribute("maxLength") != "2147483647")
                document.getElementById("element_maxlength").value = link.getAttribute("maxLength");

            document.getElementById("element_checked").checked = link.getAttribute("defaultChecked");

            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;
                    }
            }

            var emtType = link.getAttribute("type");
            for( var j = 0; j < document.form_generator.element_list.options.length; j++ )
            {
                if( emtType == document.form_generator.element_list.options[j].value )
                {
                    document.form_generator.element_list.options[j].selected = true;
                    displayFields(j);
                    break;
                }
            }
            return extEmt;
        }
    }
    else
    {
        alert("Editing of this type of Form Element is not permitted.");
        closeWindow();
    }
}

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;
}
