private TreeNode CreateZipNode(EkJobDS.LocalizationJobFileRow data)
    {
        TreeNode node = new TreeNode();
        StringBuilder sb = new StringBuilder();
        string strUrl = null;
        string strName = null;
        string strFileExt = null;

        strFileExt = System.IO.Path.GetExtension(data.FileName).ToLower();
        strUrl = Ektron.Cms.Common.EkFunctions.QualifyURL(this.localizationApi.GetLocalizationUrl(), data.FileUrl);
        node.Value = "zip" + data.FileID;
        node.PopulateOnDemand = false;
        node.SelectAction = TreeNodeSelectAction.None;

        switch (strFileExt)
        {
            case ".zip":
                node.PopulateOnDemand = true;
                node.SelectAction = TreeNodeSelectAction.Expand;
                node.ImageUrl = GetCommonApi().AppPath + "images/UI/Icons/FileTypes/zip.png";
                node.ImageToolTip = GetMessage("alt zip file");
                break;
            case ".xlf":
            case ".xml":
                // .xml for Trados
                if (data.ErrorMessage != null && data.ErrorMessage.Length > 0)
                {
                    node.PopulateOnDemand = true;
                    node.SelectAction = TreeNodeSelectAction.Expand;
                }

                node.ImageUrl = GetCommonApi().AppPath + "images/UI/Icons/translation.png";
                node.ImageToolTip = GetMessage("alt xliff file");
                break;
            default:
                node.ImageUrl = GetCommonApi().AppPath + "images/UI/Icons/FileTypes/text.png";
                node.ImageToolTip = GetMessage("lbl generic file");
                break;
        }

        if (File.Exists(Server.MapPath(strUrl)))
        {
            node.PopulateOnDemand = false;
            node.SelectAction = TreeNodeSelectAction.Select;
            node.NavigateUrl = strUrl;
            sb.Append("<div class=\"L10nZipLink\">");
        }
        else
        {
            node.NavigateUrl = string.Empty;
            sb.Append("<div class=\"L10nZip\">");
        }

        sb.Append("<div class=\"L10nZipFileName\">");
        sb.Append(this.FormatErrorMessage(data.ErrorMessage));
        strName = data.FileName;
        if (!data.IsTargetLanguageNull())
        {
            Ektron.Cms.Localization.LocaleData sourceLocale = this.GetLocaleData(data.SourceLanguage);
            Ektron.Cms.Localization.LocaleData targetLocale = this.GetLocaleData(data.TargetLanguage);
            if (targetLocale != null)
            {
                string targetFlag = targetLocale.FlagUrl;
                if (targetFlag.Length > 0)
                {
                    if (!data.IsSourceLanguageNull() && sourceLocale != null)
                    {
                        string sourceFlag = sourceLocale.FlagUrl;
                        if (sourceFlag.Length > 0)
                        {
                            // 8594 is right arrow
                            sb.AppendFormat("<img src=\"{0}\" alt=\"{1}\" title=\"{1}\" class=\"L10nFlag\" />&#160;&#8594;&#160;", sourceFlag, sourceLocale.EnglishName);
                        }
                    }

                    sb.AppendFormat("<img src=\"{0}\" alt=\"{1}\" title=\"{1}\" class=\"L10nFlag\" />&#160;", targetFlag, targetLocale.EnglishName);
                    strName = targetLocale.CombinedName;
                }
            }
        }

        sb.Append(strName);
        sb.Append("</div>");
        sb.Append("<div class=\"L10nZipFileSize\">");
        if (data.IsFileSizeNull())
        {
            sb.Append("&#160;");
        }
        else
        {
            sb.Append(FormatFileSize(data.FileSize));
        }

        sb.Append("</div>");
        sb.Append("</div>");

        node.Text = sb.ToString();

        if (!this.methodCreateZipNode_isFirstErrorExpanded && data.ErrorMessage != null && data.ErrorMessage.Length > 0)
        {
            this.methodCreateZipNode_isFirstErrorExpanded = true;
            node.Expand();
        }

        return node;
    }
    private TreeNode CreateXlfNode(EkJobDS.LocalizationTargetRow data)
    {
        TreeNode node = new TreeNode();
        StringBuilder sb = new StringBuilder();
        string strHover = string.Empty;
        EkJobDS.LocalizationTargetRow.States state = (EkJobDS.LocalizationTargetRow.States)data.State;

        node.Value = "xlf" + data.TargetID;
        if (data.ErrorMessage == null || 0 == data.ErrorMessage.Length)
        {
            node.PopulateOnDemand = false;
            node.SelectAction = TreeNodeSelectAction.None;
            strHover = " onmouseover=\"myTVNodeHover(this)\" onmouseout=\"myTVNodeUnhover(this)\"";
        }
        else
        {
            node.PopulateOnDemand = true;
            node.SelectAction = TreeNodeSelectAction.Expand;
        }

        node.ImageUrl = GetCommonApi().AppPath + "images/UI/Icons/translation.png";
        node.ImageToolTip = GetMessage("alt xliff");
        sb.Append("<div class=\"L10nXlf\"" + strHover + ">");
        sb.Append("<div class=\"L10nXlfFileName\">");
        sb.Append(this.FormatErrorMessage(data.ErrorMessage));
        if (!data.IsTargetLanguageNull())
        {
            Ektron.Cms.Localization.LocaleData targetLocale = this.GetLocaleData(data.TargetLanguage);
            if (targetLocale != null)
            {
                string targetFlag = targetLocale.FlagUrl;
                if (targetFlag.Length > 0)
                {
                    sb.AppendFormat("<img src=\"{0}\" alt=\"{1}\" title=\"{1}\" class=\"L10nFlag\" />&#160;", targetFlag, targetLocale.EnglishName);
                }
            }
        }

        sb.Append(data.FileName);
        sb.Append("</div>");
        if (data.IsLastEditDateNull())
        {
            sb.Append(this.FormatDateTime(DateTime.MinValue, "L10nXlfDate"));
        }
        else
        {
            sb.Append(this.FormatDateTime(data.LastEditDate, "L10nXlfDate", GetMessage("generic date modified")));
        }

        sb.Append("<div class=\"L10nXlfState\">");
        if (data.IsStateNull())
        {
            sb.Append("&#160;");
        }
        else
        {
            switch (state)
            {
                case EkJobDS.LocalizationTargetRow.States.ErrorOccurred:
                    sb.Append(GetMessage("lbl error"));
                    if (!this.methodCreateXlfNode_isFirstErrorExpanded && data.ErrorMessage != null && data.ErrorMessage.Length > 0)
                    {
                        this.methodCreateXlfNode_isFirstErrorExpanded = true;
                        node.Expand();
                    }

                    break;
                case EkJobDS.LocalizationTargetRow.States.NeedsReview:
                    sb.Append(GetMessage("lbl needs review"));
                    break;
                case EkJobDS.LocalizationTargetRow.States.NeedsTranslation:
                    sb.Append(GetMessage("lbl needs translation"));
                    break;
                case EkJobDS.LocalizationTargetRow.States.SignedOff:
                    sb.Append(GetMessage("lbl signed off"));
                    break;
                case EkJobDS.LocalizationTargetRow.States.Translated:
                    sb.Append(GetMessage("lbl translated"));
                    break;
                default:
                    sb.Append(state.ToString());
                    break;
            }
        }

        sb.Append("</div>");
        sb.Append("</div>");

        node.Text = sb.ToString();

        return node;
    }