<%@ Page Language="C#" AutoEventWireup="true" CodeFile="LocalizeForm.aspx.cs" Inherits="Admin_LocalizeForm" EnableViewState="false" 
         ValidateRequest="false" EnableEventValidation="false" Theme="" Culture="auto" meta:resourcekey="Page1" UICulture="auto" %>

<%@ Register Assembly="Westwind.Globalization" Namespace="Westwind.Globalization"
    TagPrefix="ww" %>
<%@ Register Assembly="Westwind.AjaxToolkit" Namespace="Westwind.Web.Controls" TagPrefix="ww" %>
<%@ Register Src="~/ShowCode.ascx" TagName="ShowCode" TagPrefix="uc1" %>
<!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 runat="server">
    <title>Application Resource Localization</title>
    <link href="LocalizeForm.css" rel="stylesheet" type="text/css" />  
</head>
<body onload="OnLoad()">
    <form id="form1" runat="server">
    <br />
        <ww:wwErrorDisplay ID="ErrorDisplay" runat="server" DisplayTimeout="5000" width="600px" meta:resourcekey="ErrorDisplay" UseFixedHeightWhenHiding="False">
        </ww:wwErrorDisplay>
    <center>
    <div class="blackborder" style="background:#eeeeee;width:815px;text-align:left;">
    <table cellspacing="0" style="width:815px;">
    <tr>
    <td colspan="2" class="gridheader" style="font-size:large"><asp:Label runat="server" id="lblPageHeader" Text="Resource Localization" Title="Resource List (Alt-L)" meta:resourcekey="lblPageHeader" /></td>
    </tr>
    <tr>
        <td valign="top">
             <asp:ListBox runat="server" ID="lstResourceIds"  style="Height:510px;width:275px;" 
                onchange="GetValue()" AccessKey="L" meta:resourcekey="lstResourceIds" >
             </asp:ListBox></td>
        <td valign="top">
            <!-- Begin Toolbar -->
            <div style="vertical-align:Top;background:white;padding:4px;font-size:8pt;" id="divToolbar">
            <img runat="server" id="imgRefresh" /><asp:LinkButton runat="server" ID="btnRefresh" Title="Refresh Page" Text="Refresh Page" meta:resourcekey="btnRefresh"></asp:LinkButton>&nbsp;&nbsp;
            <img runat="server" id="imgRecycleApp" /><asp:LinkButton runat="server" ID="btnRecycleApp" Title="Recycle Application" Text="Recyle App" OnClick="btnReloadResources_Click" meta:resourcekey="btnRecycleApp"></asp:LinkButton>&nbsp;&nbsp;
            <img runat="server" id="imgExportResources"/><asp:LinkButton runat="server" ID="btnExportResources" Title="Export to Resource Files" Text="Export to Resource Files"
                 OnClick="btnExportResources_Click" OnClientClick="if (!confirm(ResourceGenerationConfirmation)) return false;" meta:resourcekey="btnExportResources"></asp:LinkButton>
            <img runat="server" id="imgCreateTable" visible="false"/><asp:LinkButton runat="server" ID="btnCreateTable" Title="Create Resource Database Table" Text="Create Table" OnClick="btnCreateTable_Click" Visible="False" meta:resourcekey="btnCreateTable"></asp:LinkButton>
            </div>
            <!-- End Toolbar -->
            
            <hr />
            <b><asp:Label runat="server" id="lblResourceSetLabel" Text="ResourceSet:" meta:resourcekey="lblResourceSetLabel"></asp:Label></b>
            <br />
            <asp:DropDownList runat="server" ID="lstResourceSet" width="450px" AutoPostBack="True" meta:resourcekey="lstResourceSet"></asp:DropDownList>
            <a href="javascript:alert('Not supported in demo');" class="hoverbutton"><asp:Image  runat="server"  ID="imgDeleteResourceSet" Title="Delete ResourceSet" meta:resourcekey="imgDeleteResourceSet" /></a>
            <a href="javascript:alert('Not supported in demo');" class="hoverbutton"><asp:Image  runat="server"  ID="imgRenameResourceSet" Title="Rename ResourceSet" meta:resourcekey="imgRenameResourceSet" /></a>
            <br />
            <br />
            <asp:Label runat="server" ID="lblLanguages" Font-Bold="True" meta:resourcekey="lblLanguages" Text="Languages:"></asp:Label>
            <br />
            <asp:ListBox ID="lstLanguages" runat="server" style="" Height="90px" Width="500px" onchange="GetValue()" meta:resourcekey="lstLanguages">
            </asp:ListBox>
            <br />
            <br />
            <asp:Label runat="server" ID="lblValue" Font-Bold="True" meta:resourcekey="lblValue" Text="Value:"></asp:Label><br />
            <asp:TextBox runat="server" ID="txtValue" TextMode="MultiLine" Height="70px" Width="500px" AccessKey="V" Tooltip="Resource Value (Alt-V)" meta:resourcekey="txtValue"></asp:TextBox>
            <br />
            <asp:Button runat="server" id="btnSaveValue" Text="Save" UseSubmitBehavior="False" AccessKey="S" OnClientClick="SaveValue(); return false;" meta:resourcekey="btnSaveValue" />
            
            <asp:Button runat="server" ID="btnAddResourceDisplay"  Text="Add" OnClientClick="ShowNewResourceDisplay();return false;" AccessKey="a" meta:resourcekey="btnAddResourceDisplay"  />
            <asp:Button runat="server" ID="btnDelete"  Text="Delete" OnClientClick="DeleteResource();return false;" accesskey="d" meta:resourcekey="btnDelete" />
            <asp:Button runat="server" id="btnTranslate" Text="Translate" OnClientClick="ShowTranslationDisplay();return false" meta:resourcekey="btnTranslate" />
            <br />
            <br />              

                        
            <div id="divValues" class="gridalternate" style="padding:5px;width:490px;border:solid 2px steelblue;height:125px;overflow-y:scroll;display:none;">
            ...
            </div>            
        </td>
    </tr>
    </table>
    <div id="lblMessages" style="background:lightgreay;padding-left:8px;padding-top:4px;padding-bottom:4px;color:Maroon;border:solid 1px gray">    
    <%= Res("Ready") %>
    </div> 
    
           <ww:wwDragPanel ID="panelNewResource" runat="server" CssClass="gridalternate blackborder" 
               style="top:200px;left:180px;width:500px;height=250px;display:none;" 
               DragHandleId="NewResourceHeader" closable="true" FadeOnClose="true"
               meta:resourcekey="panelNewResource">
                <div class='gridheader' id="NewResourceHeader">
                <asp:Label runat="server" ID="lblNewResourceHeader" Text="Add Resource" meta:resourcekey="lblNewResourceHeader"></asp:Label></div>
                <div style="padding:5px;">
                    <table cellpadding="2px"><tr>
                    <td><asp:Label runat="server" ID="lblNewLanguage" Text="Lang:" meta:resourcekey="lblNewLanguage"></asp:Label></td>
                    <td>&nbsp;<asp:Label runat="server" ID="lblNewResourceId" Text="Resource Id:" meta:resourcekey="lblNewResourceId"></asp:Label></td></tr><tr>
                    <td><asp:TextBox ID="txtNewLanguage" runat="server" Width="56px" meta:resourcekey="txtNewLanguage" /></td>
                    <td>&nbsp;<asp:TextBox ID="txtNewResourceId" runat="server" Width="405px" meta:resourcekey="txtNewResourceId" /></td>
                    </tr></table>
                  
                    <asp:Label ID="lblNewValue" runat="server" Text="Value:" meta:resourcekey="lblNewValue"></asp:Label><br />
                    <asp:TextBox ID="txtNewValue" runat="server" TextMode="MultiLine" Width="480px" meta:resourcekey="txtNewValue"></asp:TextBox><br />
                    
                    <asp:Label ID="lblNewResourceSet" runat="server" Text="ResourceSet:" meta:resourcekey="lblNewResourceSet"></asp:Label>
                    <asp:TextBox runat="server" ID="txtNewResourceSet" Width="480px" meta:resourcekey="txtNewResourceSet"></asp:TextBox>
                    
                    <asp:Button runat="server" ID="btnAddValue" Text="Add Resource" onClientclick="AddResource();return false;" meta:resourcekey="btnAddValue" />
                    
                    <hr />
                    <asp:Label runat="server" ID="lblFileUpload" Text="File Resource Upload:" meta:resourcekey="lblFileUpload"></asp:Label><br />
                    <asp:FileUpload ID="FileUpload" runat="server" Width="410px" meta:resourcekey="FileUpload" />
                    <asp:Button runat="server" ID="btnFileUpload" OnClick="btnFileUpload_Click" Text="Upload" meta:resourcekey="btnFileUpload"/>    
                </div>                
            </ww:wwDragPanel>       
            <ww:wwDragPanel ID="panelTranslate" runat="server" CssClass="gridalternate blackborder" 
                       style="top:305px;left:10px;width:365px;display:none;font-size:8pt;" 
                       DragHandleId="TranslateHeader" closable="true" FadeOnClose="true"
                       meta:resourcekey="panelTranslate">
                <div class='gridheader' id="TranslateHeader">                
                <asp:label runat="server" ID="lblTranslateHeader" Text="Web Service Translation" meta:resourcekey="lblTranslateHeader"></asp:label>
                </div>
                <div style="padding:5px">
                <asp:Label runat="server" ID="lblTranslateFrom" Text="From:" meta:resourcekey="lblTranslateFrom"></asp:Label>
                    <asp:TextBox runat="server" ID="txtTranslateFrom" Text="en" Width="40px" meta:resourcekey="txtTranslateFrom"></asp:TextBox>&nbsp;
                    <asp:Label runat="server" ID="lblTranslateTo" Text="To:" meta:resourcekey="lblTranslateTo"></asp:Label>
                    <asp:TextBox runat="server" ID="txtTranslateTo" Text="de" Width="40px" meta:resourcekey="txtTranslateTo"></asp:TextBox>
                    <br />
                    <br />
                    <asp:Label runat="server" ID="lblTranslationInputText" Text="Input Text:" meta:resourcekey="lblTranslationInputText" ></asp:Label><br />
                    <asp:TextBox runat="server" ID="txtTranslationInputText" TextMode="MultiLine" Width="300px" meta:resourcekey="txtTranslationInputText"></asp:TextBox>
                    <input type="button" runat="server" ID="btnTranslateSubmit" Value="Go" onclick="Translate()"/>
                    <hr />                    
                    <asp:HyperLink runat="server" ID="lblGoogle" Text="Google Translation:" Target="_Translate" 
                                   NavigateUrl="http://www.google.com/translate_t" meta:resourcekey="lblGoogle" />
                    <asp:TextBox runat="server" ID="txtGoogle" TextMode="MultiLine" Width="300px" meta:resourcekey="txtGoogle"></asp:TextBox>
                    <input type="button" runat="server" ID="btnUseGoogle" value="Use"  onclick="UseTranslation('Google');"/>
                    <br />
                    <asp:HyperLink runat="server" ID="lblBabelFish" Text="Babelfish/Yahoo Translation:" Target="_Translation" NavigateUrl="http://babelfish.yahoo.com/translate_txt" meta:resourcekey="lblBabelFish"/> <br />
                    <asp:TextBox runat="server" ID="txtBabelFish" TextMode="MultiLine" Width="300px" meta:resourcekey="txtBabelFish" ></asp:TextBox>
                    <input runat="server" type="button" ID="btnBabelFish" value="Use"  onclick="UseTranslation('BabelFish');"/>
                </div>
            </ww:wwDragPanel>           
            <ww:wwDragPanel ID="panelRenameResourceSet" runat="server" CssClass="gridalternate blackborder" 
                       style="top:135px;left:300px;width:365px;display:none;font-size:8pt;" 
                       DragHandleId="RenameResourceSetHeader" closable="true" FadeOnClose="true"
                       meta:resourcekey="panelRenameResourceSet">
                <div class='gridheader' id="RenameResourceSetHeader">
                <asp:label runat="server" ID="lblRenameResourceSetHeader" Text="Rename ResourceSet" meta:resourcekey="lblRenameResourceSetHeader"></asp:label>
                </div>
                <div style="padding:15px">
                    <asp:Label runat="server" ID="lblOldResourceSet" Text="Old ResourceSet:" meta:resourcekey="lblOldResourceSet"></asp:Label><br />
                    <asp:TextBox runat="server" id="txtOldResourceSet" width="300px" meta:resourcekey="txtOldResourceSet"></asp:TextBox>              
                    <br />
                    <br />
                    <asp:Label runat="server" ID="lblRenamedResourceSet" Text="New ResourceSet:" meta:resourcekey="lblRenamedResourceSet"></asp:Label><br />
                    <asp:TextBox runat="server" id="txtRenamedResourceSet" width="300px" meta:resourcekey="txtRenamedResourceSet"></asp:TextBox>                                      
                    <hr />
                    <asp:Button runat="server" ID="btnRenameResourceSet" Text="Rename ResourceSet" onclick="btnRenameResourceSet_Click" meta:resourcekey="btnRenameResourceSet" />
                 </div>
            </ww:wwDragPanel>
         
    </div>
    </center>
        <ww:wwDbResourceControl id="ResourceAdmin" runat="server" meta:resourcekey="ResourceAdmin" 
                                visible="false" CssClass="errordisplay">
        </ww:wwDbResourceControl>
        <br />

        <ww:wwMethodCallback ID="Callback" runat="server"
                            ScriptLocationType="WebResource" />   
                            

<script  type="text/javascript">
function OnLoad()
{
    var List = $w("lstResourceIds");
    if (List.options.length > 0)
       List.onchange();
}
function ShowNewResourceDisplay()
{
    var Ctl = new wwControl("panelNewResource");
    Ctl.element.style.position = "absolute";
    Ctl.show();
    Ctl.showShadow();

    var ResourceId = $w("lstResourceIds").value;
    if (ResourceId == null || ResourceId == "")
       ResourceId = $w("lstResourceIds").options[0].value;
       
    var Language = $w('lstLanguages').value;    
    
    var Ctl = new wwControl("txtNewLanguage");
    Ctl.setText(Language);            
    
    Ctl = new wwControl("txtNewResourceId");
    Ctl.setText(ResourceId);
    
    Ctl = new wwControl("txtNewResourceSet");
    Ctl.setText( $w("lstResourceSet").value );
    
}
function HideNewResourceDisplay()
{
   var Panel = new wwControl("panelNewResource");
   Panel.hideShadow();
}
function ShowTranslationDisplay()
{
    var Ctl1 = new wwControl("txtValue");
    var Ctl2 = new wwControl("txtTranslationInputText");
    
    if (Ctl1 && Ctl2)
        Ctl2.setText( Ctl1.getText() );

    var Ctl1 = new wwControl("lstLanguages");
    var Ctl2 = new wwControl("txtTranslateFrom");
    
    var Text = Ctl1.element.value;
    if (Text == "")
       Text = "en";
    if (Text.length > 2)
       Text = Text.substring(0,2);
    
    Ctl2.setText(Text);
    
    var Ctl = new wwControl("panelTranslate");
    Ctl.element.style.position = "absolute";
    Ctl.show();
    Ctl.showShadow();
}
function HideTranslationDisplay()
{
   var Panel = new wwControl("panelTranslate");
   Panel.hideShadow();
}
function ShowResourceSetRenameDisplay()
{
    var OldResourceSet = $w("lstResourceSet").value;
    if (OldResourceSet == null || OldResourceSet == "")
       return;
       
    $w("txtOldResourceSet").value = OldResourceSet;
    
    var Ctl = new wwControl("panelRenameResourceSet");
    Ctl.show();
    Ctl.showShadow();
}
function HideResourceSetRenameDisplay()
{
      new wwControl("panelRenameResourceSet").hideShadow();
}
function PreviewPanelDisplay(Show)
{
    if (Show)
        $w("divValues").style.display='';
    else
        $w("divValues").style.display='none';
}
function GetValue()
{
    var ResourceId = $w("lstResourceIds").value;
    if (ResourceId == null || ResourceId == "")
       ResourceId = $w("lstResourceIds").options[0].value;

    var ResourceSet = $w("lstResourceSet").value;
           
    var LocaleId = $w("lstLanguages").value;
    if (LocaleId == null)
       LocaleId = "";
        
    Callback.GetResourceString(ResourceId,ResourceSet,LocaleId,GetResourceString_Callback );
    
    // *** Also load the preview list
    GetResourceStrings();
}
function GetResourceString_Callback(Result)
{
    if (Result == null)
        Result = "";
    
    $w("txtValue").value = Result;    
    $w("panelNewResource").style.display="none";     
}
function GetResourceStrings()
{
    var ResourceId = $w("lstResourceIds").value;
    if (ResourceId == null || ResourceId == "")
       ResourceId = $w("lstResourceIds").options[0].value;

    var ResourceSet = $w("lstResourceSet").value;

    Callback.GetResourceStrings(ResourceId,ResourceSet,GetResourceStrings_Callback );
}
function GetResourceStrings_Callback(Resources)
{
    // returns a two col array
    if (Resources == null)
    {
        this.ShowMessage(<%= ResC("NoResourcesAvailable") %>);
        return;
    }
    
    var Output = "";
    for( var x = 0; x < Resources.length; x++)
    {
        var Resource = Resources[x];
        if (Resource.Key == "")
            Resource.Key = "Invariant"
            
        Output = Output +  "<div style='padding:5px;border-bottom:solid 1px steelblue;'><a href='javascript:ChangeLanguage(\"" + Resource.Key  + "\");' >" + Resource.Key + "</a>: " + Resource.Value + "</div>";
    }
    
    $w("divValues").innerHTML = Output;
    PreviewPanelDisplay(true);
}
function ChangeLanguage(Lang)
{
    if (Lang == "Invariant")
        Lang = "";
    
    var Ctl = $w("lstLanguages");
        
    for(var x = 0; Ctl.options.length; x++)
    {
        if (Ctl.options[x].value == Lang)
        {
            Ctl.value = Lang;
            Ctl.onchange();
            return;
        }
    }
}
function SaveValue()
{  
    var Value = $w("txtValue").value;
    
    if ( (Value == null || Value == "") && !confirm(<%= ResC("AreYouSureYouWantToRemoveValue") %>) )
        return;
    
    var ResourceId = $w("lstResourceIds").value;
    if (ResourceId == null || ResourceId == "")
       ResourceId = $w("lstResourceIds").options[0].value;

    var ResourceSet = $w("lstResourceSet").value;

    var LocaleId = $w("lstLanguages").value;
    if (LocaleId == null)
       LocaleId = "";
       
      Callback.UpdateResourceString(Value,ResourceId,ResourceSet,LocaleId,SaveValue_Callback,OnPageError);    
}
function SaveValue_Callback(Result)
{
    if (Result)
        ShowMessage(<%= ResC("ResourceUpdated") %>,5000);
    else
        ShowMessage(<%= ResC("ResourceUpdateFailed") %>,5000);
   
}
function AddResource()
{
    var Value = $w("txtNewValue").value;    
    
    if ( (Value == null || Value == "") )
    {
        alert(<%= ResC("NoValueEntered") %>);
        return;
    }
    
    var ResourceId = $w("txtNewResourceId").value;
    if ( (Value == null || Value == "") )
    {
        alert(<%= ResC("NoValueEntered") %>);
        return;
    }

    var ResourceSet = $w("txtNewResourceSet").value;
           
    var LocaleId = $w("txtNewLanguage").value;
    if (LocaleId == null)
       LocaleId = "";
       
    Callback.UpdateResourceString(Value,ResourceId,ResourceSet,LocaleId,AddResource_Callback,OnPageError);        
    
    // *** Force list to update
    SetResourceIdValue = ResourceId;
}
function AddResource_Callback(Result)
{
    if (Result)
    {
        ShowMessage(<%= this.ResC("ResourceUpdated") %>,5000);
        GetResourceList();        
        HideNewResourceDisplay();
    }
    else
        ShowMessage(<%= ResC("") %>,5000);
   
}
function DeleteResource()
{
    var ResourceId = $w("lstResourceIds").value;
    if (ResourceId == null || ResourceId == "")
       ResourceId = $w("lstResourceIds").options[0].value;

    var ResourceSet = $w("lstResourceSet").value;
           
    var LocaleId = $w("lstLanguages").value;
    if (LocaleId == null)
       LocaleId = "";
    
    Callback.DeleteResource(ResourceId,ResourceSet,LocaleId,DeleteResource_Callback,OnPageError);
}
function DeleteResource_Callback(Result)
{
    if (Result)
    {
        ShowMessage("Resource has been deleted",3000);
        GetResourceList();
    }
}
var SetResourceIdValue = null;
function GetResourceList()
{
    var ResourceSet = $w("lstResourceSet").value;
    
    Callback.GetResourceList(ResourceSet,GetResourceList_Callback,OnPageError);
}
function GetResourceList_Callback(Table)
{
    // *** Callback result is a DataTable
    var List = new wwList("lstResourceIds");
    
    // *** Bind it to the list
    List.dataValueField = "ResourceId";
    List.dataTextField = "ResourceId";
    List.setData(Table);
    
    // *** Select item
    if (SetResourceIdValue)
    {
       List.element.value = SetResourceIdValue;
       List.element.onchange();
       SetResourceIdValue = null;
    }
    
}
function DeleteResourceSet()
{
    var ResourceSet = $w("lstResourceSet").value;
    
    if (!confirm("Are you sure you want to delete this resource set?\r\n" + ResourceSet) )
       return;      
     
    Callback.DeleteResourceSet(ResourceSet,DeleteResourceSet_Callback,OnPageError);      
}
function DeleteResourceSet_Callback(Result)
{
   if (Result)
        ShowMessage("ResourceSet deleted...",5000);
   else
       ShowMessage("ResourceSet deletion failed...",5000);
}
function Translate()
{
    var Value = $w("txtTranslationInputText").value;
    var From = $w("txtTranslateFrom").value;
    var To = $w("txtTranslateTo").value;
    
    if (To == From)
    {
       ShowMessage("Please select two separate languages to translate")
       return;
    }
    
    var Loading = <%= ResC("Loading") %>  + "...";       
    $w("txtGoogle").value = Loading;
    $w("txtBabelFish").value = Loading;
    
    // *** Use two separate instances here so there won't be any interference in callbackss   
    Callback.Translate(Value,From,To,"Google",TranslateGoogle_Callback,OnPageError);    
    Callback.Translate(Value,From,To,"BabelFish",TranslateBabelFish_Callback,OnPageError);
}
function TranslateGoogle_Callback(Result)
{
    var Ctl = new wwControl("txtGoogle");
    Ctl.setText( Result );
}
function TranslateBabelFish_Callback(Result)    
{
    var Ctl = new wwControl("txtBabelFish");
    Ctl.setText( Result );
}
function UseTranslation(Service)
{
    var Ctl = $w("txt" + Service);
    var Text = Ctl.value;
    if (Text == null || Text == "")
       return;
       
    Ctl = $w("txtTranslateTo");
    Lang = Ctl.value;
    
    var CtlValue = new wwControl("txtValue");
    
    Ctl = $w("lstLanguages");
    
    if (Ctl.value == Lang)
    {
        CtlValue.setText(Text);
        HideTranslationDisplay();
        return;
    }
    
    for(var x = 0; x < Ctl.options.length; x++)
    {
        var Item = Ctl.options[x];
        if (Item.value == Lang )
        {
           Ctl.value = Lang;
           CtlValue.setText(Text);
           HideTranslationDisplay();
           return;
        }
    }   
    
    ShowMessage(<%= ResC("NoMatchingLanguage") %>);
}
function OnPageError(Error)
{
    ShowMessage(Error.message,7000);
}
function ShowMessage(Message,Timeout)
{
    var Ctl = $w("lblMessages");
    Ctl.innerText = Message;
    
    
    if (Timeout)
    {
        Ctl.style.background = "cornsilk";
        setTimeout(HideMessage,Timeout);
    }
}
function HideMessage()
{
    var Ctl = $w("lblMessages");
    Ctl.innerText = <%= ResC("Ready") %>;
    Ctl.style.background="";
}

var ResourceGenerationConfirmation = <%= ResC("ResourceGenerationConfirmation") %>;
</script>            

<%--<div id="divDebug" class="errordisplay"></div>
<script>
_debug.setOutput( $w("divDebug") );
</script>
--%>

<hr />
<div style="font-size:8pt;padding:20px;">
This form allows modifying localization resources for a data-driven Resource Provider. Changing values
here allows changing resources in real-time in the main application (ok, here the CustomerList page)
by recycling the app (to force resource to unload).
<br />
<br />
This form is mostly driven by the wwMethodCallback control which makes callbacks to page level methods
that retrieve localization data and perform actions on behalf of the client page. The AJAX interface makes
this interface vastly more usable than an equivalent Postback based interface.
<br />
<br />
This form uses a fair amount of client side JavaScript, but it provides a fair amount of functionality
as well. Note that this form can also be localized through this interface...
<hr />

</div>
            <uc1:ShowCode ID="ShowSource" runat="server" CodeFile="~/ResourceProvider/LocalizationAdmin/LocalizeForm.aspx.cs">
            </uc1:ShowCode>
            <uc1:ShowCode ID="ShowAspx" runat="server" CodeFile="~/ResourceProvider/LocalizationAdmin/LocalizeForm.aspx"
                          Text="Show ASPX"></uc1:ShowCode>
                          
                          



    </form>
</body>
</html>
