# Source: jala/code/PodcastWriter.js

    //
    // Jala Project [http://opensvn.csie.org/traccgi/jala]
    //
    // Copyright 2004 ORF Online und Teletext GmbH
    //
    // Licensed under the Apache License, Version 2.0 (the ``License'');
    // you may not use this file except in compliance with the License.
    // You may obtain a copy of the License at
    //
    //    http://www.apache.org/licenses/LICENSE-2.0
    //
    // Unless required by applicable law or agreed to in writing, software
    // distributed under the License is distributed on an ``AS IS'' BASIS,
    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    // See the License for the specific language governing permissions and
    // limitations under the License.
    //
    // $Revision$
    // $LastChangedBy$
    // $LastChangedDate$
    // $HeadURL$
    //

    /**
     * @fileoverview Fields and methods of the jala.PodcastWriter class.
     */

    // Define the global namespace for Jala modules
    if (!global.jala) {
       global.jala = {};
    }

    /**
     * Jala dependencies
     */
    app.addRepository(getProperty("jala.dir", "modules/jala") +
                      "/code/Rss20Writer.js");

    /**
     * @class Class to create, modify and render standard-compliant
     * RSS 2.0 feeds including support for Apple's Podcast specification.
     * @constructor
     * @extends jala.Rss20Writer
     * @param {String} header Optional XML header.
     */
    jala.PodcastWriter = function(header) {
       jala.Rss20Writer.apply(this, arguments);

       var CATEGORY = {
          name: "itunes:category",
          attributes: {
             name: "text"
          }
       };

       var OWNER = {
          name: "itunes:owner",
          value: [{
             name: "itunes:name"
          }, {
             name: "itunes:email"
          }]
       };

       this.addNamespace("itunes", "http://www.itunes.com/dtds/podcast-1.0.dtd");

       this.extendChannel([{
          name: "itunes:author"
       }, {
          name: "itunes:subtitle"
       }, {
          name: "itunes:summary"
       }, {
          name: "itunes:new-feed-url"
       }, {
          name: "itunes:image",
          attributes: [{
             name: "href"
          }]
       }, {
          name: "itunes:link",
          attributes: [{
             name: "rel"
          }, {
             name: "type"
          }, {
             name: "href"
          }]
       }]);

       this.getChannel().setValue(this.createElement(OWNER));

       this.extendItem([{
          name: "itunes:duration"
       }, {
          name: "itunes:subtitle"
       }]);

       /**
        * Add an iTunes Podcast category.
        * @param {String} name The category's name.
        * @param {String} subName The (optional) sub-category's name.
        * @param {jala.XmlWriter.XmlElement} parent Optional parent
        * element to add the category to.
        */
       this.addItunesCategory = function(name, subName, parent) {
          if (!parent)
             parent = this.getChannel();
          var cat = this.createElement(CATEGORY);
          cat.populate({attributes: {text: name}});
          if (subName) {
             var subCat = this.createElement(CATEGORY);
             subCat.populate({attributes: {text: subName}});
             cat.addValue(subCat);
          }
          parent.addValue(cat);
          return;
       };

       return this;
    };

    /** A typical XML header as default.
        @type {String}
        @final */
    jala.PodcastWriter.XMLHEADER = '<?xml version="1.0" encoding="UTF-8"?>';