home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 September / PCO_0998.ISO / browser / ns405lyc / netcast.z / ncjs10.jar / additem.js next >
Encoding:
JavaScript  |  1998-03-09  |  10.2 KB  |  414 lines

  1. /* 
  2.  * Additem.js
  3.  * 
  4.  * Copyright (c) 1997 Netscape Communications Corporation, All Rights Reserved
  5.  * 
  6.  */
  7.  
  8. var selector = null;
  9. var container;
  10. var containerObject = null;
  11. var gProps = null;
  12.  
  13.  
  14. function handleLoad() {
  15.     gProps = null;
  16.  
  17.     opener.PropertiesCallback(this);
  18.  
  19.     // after we've filled the item, for additions, make sure that we
  20.     // are allowed to add before going further.
  21.  
  22.     containerObject = selector.parent.titlebar.document.demo.findContainerByName(container);
  23.  
  24.     if ((gProps == null) && (containerObject != null)) {
  25.         if (!containerObject.getCanAddItems()) {
  26.             alert(window.depth.getLocalString("addBlocked"));
  27.             self.close();
  28.         }
  29.     }
  30.  
  31.     // on enter for the dialog, set the focus to the dialog
  32.     window.focus();
  33.     window.document.layers['general'].document.scheduler.name.focus();
  34.  
  35.     // For Castanet channels, disable the cache tab
  36.     if (gProps != null) {
  37.         var propType = gProps.getType();
  38.  
  39.         if (propType == 2) {
  40.             window.document.layers['cacheTab'].visibility="hide";
  41.         }
  42.     }
  43. }
  44.  
  45.  
  46. function ValidateGeneral(prefsWindow)
  47. {
  48.     var generalLayer = prefsWindow.document.layers['general'];
  49.     var form     = generalLayer.document.scheduler;
  50.  
  51.     if (fieldEmpty(form.elements['name'])) {
  52.         alert(window.depth.getLocalString("You must specify a name for this channel"));
  53.         form.elements['name'].focus();
  54.         form.elements['name'].select();
  55.         return false;
  56.     }
  57.  
  58.     if (fieldEmpty(form.url)) {
  59.         alert(window.depth.getLocalString("You must specify a location for this channel"));
  60.         form.url.focus();
  61.         form.url.select();
  62.         return false;
  63.     } else {
  64.         var newURL = null;
  65.         
  66.         newURL = selector.parent.titlebar.document.demo.getValidURL(form.url.value);
  67.         if (newURL == null) {
  68.             form.url.focus();
  69.             form.url.select();
  70.             alert(window.depth.getLocalString("invalidURL"));
  71.             return false;
  72.         } else {
  73.             form.url.value = newURL;
  74.         }
  75.     }
  76.  
  77.     return true;
  78. }
  79.  
  80. function UpdateTimeFields(prefsWindow)
  81. {
  82.     var generalLayer    = prefsWindow.document.layers['general'];
  83.     var form            = generalLayer.document.scheduler;
  84.     var newInterval        = form.freq.options[form.freq.selectedIndex].value;
  85.     var specialLayer;
  86.  
  87.     if (newInterval == "-5") {
  88.         generalLayer.document.layers['weekLayer'].visibility="hide";
  89.  
  90.         specialLayer = generalLayer.document.layers['dayLayer'];
  91.         specialLayer.visibility="show";
  92.  
  93.     } else if (newInterval == "-6") {
  94.         generalLayer.document.layers['dayLayer'].visibility="hide";
  95.  
  96.         specialLayer = generalLayer.document.layers['weekLayer'];
  97.         specialLayer.visibility="show";
  98.     } else {
  99.         generalLayer.document.layers['weekLayer'].visibility="hide";
  100.         generalLayer.document.layers['dayLayer'].visibility="hide";
  101.     }
  102.  
  103.     return;
  104. }
  105.  
  106. function FormValues(prefsWindow) {
  107.     var scheduler = prefsWindow.document.layers['general'].document.scheduler;
  108.     var cache     = prefsWindow.document.layers['cache'].document.cache;
  109.     var display   = prefsWindow.document.layers['display'].document.winType;
  110.     var day          = prefsWindow.document.layers['general'].layers['dayLayer'].document.times;
  111.     var week      = prefsWindow.document.layers['general'].layers['weekLayer'].document.times;
  112.  
  113.     this.index  = scheduler.index.value;
  114.  
  115.     this.name   = scheduler.name.value; 
  116.     this.url    = scheduler.url.value; 
  117.  
  118.     if ((this.url != null) &&
  119.         ((this.url.indexOf("castanet") != -1) || (this.url.indexOf("?start")==(this.url.length-6))) ) {
  120.         this.type = 2;
  121.     } else {
  122.         this.type   = scheduler.type.value; 
  123.     }
  124.  
  125.     this.active = scheduler.active.checked;
  126.     this.freq   = scheduler.freq.options[scheduler.freq.selectedIndex].value;
  127.  
  128.     if (this.freq == "-5" ) {
  129.         this.time   = day.time.value; 
  130. // 24h clock
  131. //        this.ampm   = day.ampm.options[day.ampm.selectedIndex].value; 
  132.         this.ampm   = "0"; 
  133.     }
  134.     else if (this.freq == "-6" ) {
  135.         this.time   = week.time.value; 
  136. // 24h clock
  137. //        this.ampm   = week.ampm.options[week.ampm.selectedIndex].value;
  138.         this.ampm   = "0"; 
  139.         this.day    = week.day.options[week.day.selectedIndex].value; 
  140.     }
  141.  
  142.     this.depth  = cache.depth.value; 
  143.     this.size   = cache.size.value;
  144.     this.inSiteOnly = (cache.external.value == "0")
  145.  
  146.     this.mode   = prefsWindow.document.layers['display'].mode;
  147. }
  148.  
  149. function handleOK() {
  150.     var props = gProps;
  151.     var updateTimer = false;
  152.  
  153.     if ( !ValidateGeneral(window) ) return;
  154.  
  155.     var form = new FormValues(window);
  156.  
  157.     if (form.index == "-1") {
  158.  
  159.         var oldData = selector.parent.titlebar.document.demo.findItemByName(form.name);
  160.         if (oldData != null) {
  161.               if (!confirm(window.depth.getLocalString("A channel with the name ") + form.name + window.depth.getLocalString(" already exists.")))
  162.                 return;
  163.         }
  164.  
  165.         var newName = selector.parent.titlebar.document.demo.getEncodedName(form.name, container);
  166.         if (newName == null || newName == "") {
  167.             alert("Fehler beim Speichern des Eintrags");
  168.         }
  169.  
  170.         var prefName = "netcaster.channel." + newName;
  171.  
  172.         props = selector.parent.titlebar.document.demo.newDataItem(form.url);
  173.         props.setPrefsKey(prefName);
  174.     } else {
  175.  
  176.       props.setURL(form.url);
  177.     }
  178.  
  179.     props.setItemName(form.name);
  180.  
  181.     if (props.getType() != 2)
  182.     {
  183.         props.setDepth(java.lang.Integer.parseInt(form.depth));
  184.         var tmp = (parseInt(form.size) * 1024);
  185.         props.setMaxSize(java.lang.Integer.parseInt(tmp));
  186.  
  187.         if (form.inSiteOnly) {
  188.             props.setCrawlInSite(java.lang.Boolean.TRUE);
  189.         }
  190.         else {
  191.             props.setCrawlInSite(java.lang.Boolean.FALSE);
  192.         }
  193.  
  194.     }
  195.  
  196.     var newFreq = java.lang.Integer.parseInt(form.freq);
  197.     if (form.index != "-1") {
  198.         updateTimer = (props.getFrequency() != newFreq);
  199.     }
  200.     props.setFrequency(newFreq);
  201.  
  202.     var time = parseTimeForBackend(form);
  203.     if (time == -10) {
  204.       alert("Bitte geben Sie eine gⁿltige Uhrzeit fⁿr die Aktualisierung ein.");
  205.       return;
  206.     }
  207.  
  208.     if (form.index != "-1") {
  209.         updateTimer |= (props.getUpdateTime() != time);
  210.     }
  211.     props.setUpdateTime(java.lang.Integer.parseInt(time));
  212.  
  213.     if (form.active) {
  214.         props.setScheduled(java.lang.Boolean.TRUE);
  215.     }
  216.     else {
  217.         props.setScheduled(java.lang.Boolean.FALSE);
  218.     }
  219.  
  220.     props.setType(java.lang.Integer.parseInt(form.type));
  221.     props.setMode(form.mode);
  222.  
  223.     if (form.index == "-1") {
  224.         selector.parent.titlebar.document.demo.addItem(props, container);
  225.     }
  226.     else {
  227.         props.changed();
  228.  
  229.         if (updateTimer == 1) {
  230.           props.updateProps();
  231.         }
  232.     }
  233.  
  234.     if (opener.EditCallback && opener.EditCallback != null) {
  235.         if (form.index == -1) {
  236.             opener.EditCallback(true);
  237.         } else {
  238.             opener.EditCallback(false);
  239.         }
  240.     }
  241.         
  242.     self.close();
  243. }
  244.  
  245. function editItem(props) {
  246.     var scheduler = document.layers['general'].document.scheduler;
  247.     var cache = document.layers['cache'].document.cache;
  248.  
  249.      scheduler.index.value  = 0;
  250.     gProps                    = props;
  251.     scheduler.name.value   = props.getItemName();
  252.     scheduler.url.value    = props.getURL();
  253.     scheduler.type.value   = props.getType();
  254.     scheduler.freq.value   = props.getFrequency();
  255.     scheduler.interval.value = props.getFrequency();
  256.     scheduler.active.checked = (props.getScheduled());
  257.  
  258.     parseTimeForFrontend(document.layers['general'], scheduler, props.getUpdateTime());
  259.  
  260.     if (props.getType() == 2)
  261.     {
  262.         cache.depth.value        = 0;
  263.         cache.size.value         = "" + (parseInt(props.getMaxSize()));
  264.     }
  265.     else {
  266.         cache.depth.value        = props.getDepth();
  267.         cache.size.value         = "" + (parseInt(props.getMaxSize()) / 1024);
  268.  
  269.         if (props.crawlInSite()) {
  270.             cache.external.value     = "0";
  271.         } else {
  272.             cache.external.value     = "1";
  273.         }
  274.     }
  275.  
  276.     var mode = props.getMode();
  277.  
  278.     mode = mode + "";
  279.     switch (mode) {
  280.         case "webtop":
  281.             document.layers['display'].document.forms["winType"].mode[1].checked = true;
  282.             break;
  283.         case "full":
  284.             document.layers['display'].document.forms["winType"].mode[0].checked = true;
  285.             break;
  286.         case "window":
  287.             document.layers['display'].document.forms["winType"].mode[0].checked = true;
  288.     }
  289.     document.layers['display'].ChangeThumbnail();
  290. }
  291.  
  292. function parseTimeForFrontend(first, form, time) {
  293.     var tmp = 0;
  294.     var applet = selector.parent.titlebar.document.demo;
  295.     
  296.     for (tmp = 0; tmp < form.freq.length; tmp++) {
  297.         if (form.interval.value == form.freq[tmp].value)
  298.             form.freq.selectedIndex = tmp;
  299.     }
  300.  
  301.     if ( form.interval.value == '-6' ) {
  302.         var week = first.layers['weekLayer'].document.times;
  303.         if (time < 1440)
  304.             tmp = 0;
  305.         else
  306.             tmp = time / 1440;
  307.  
  308.         week.day.selectedIndex = parseInt(tmp);
  309.         time = time - ( (parseInt(tmp) * 1440) );
  310.     }
  311.     if ( parseInt(form.interval.value) <= -5 ) {
  312.         var week = first.layers['weekLayer'].document.times;
  313.         var day = first.layers['dayLayer'].document.times;
  314.  
  315. // 24h clock
  316.  
  317. //        if (time < 720)
  318. //             tmp = 0;
  319. //        else
  320. //            tmp = 1;
  321.  
  322. //        if ( parseInt(form.interval.value) == -6 ) 
  323. //            week.ampm.selectedIndex = parseInt(tmp);
  324. //        else
  325. //            day.ampm.selectedIndex = parseInt(tmp);
  326. //        time -= parseInt( (parseInt(tmp) * 720) );
  327.  
  328.         // Find the hour
  329.         tmp = time / 60;
  330.  
  331.         if (isNaN(parseInt(tmp))) {
  332.             tmp = 0;
  333.         }
  334.  
  335.         time -= (parseInt(tmp) * 60);
  336.  
  337.         if ( parseInt(time) < 10 )
  338.             time = "0" + parseInt(time);
  339.         else
  340.             time = parseInt(time);
  341.  
  342.         if (parseInt(tmp) == 0) {
  343. //            tmp = 12;
  344.             tmp = 0;
  345.         }
  346.  
  347.         if ( parseInt(form.interval.value) == -6 ) {
  348.             week.time.value = parseInt(tmp) + ":" + time;
  349.         }
  350.         else {
  351.             day.time.value = parseInt(tmp) + ":" + time;
  352.         }
  353.         UpdateTimeFields(window);
  354.     }
  355. }
  356.  
  357. function parseTimeForBackend(form) {
  358.     var ret    = -1;
  359.     var applet = selector.parent.titlebar.document.demo;
  360.     
  361.     if ( parseInt(form.freq) <= -5 ) {
  362.         var hour, minute;
  363.         if (!applet.validateTimeString(form.time))
  364.             return -10;
  365.         
  366.         hour = applet.getHour(form.time);
  367.  
  368.         minute = applet.getMinute(form.time);
  369.  
  370.         var hourInt = parseInt(hour);
  371.         
  372. // 24h clock
  373. //        if (hourInt == 12) {
  374. //            hourInt = 0;
  375. //        }
  376.  
  377.         hourInt = hourInt * 60;
  378.         var minInt = parseInt(minute);
  379.         if ((hourInt < 0) && (minInt <= 0))
  380.             return -10;
  381.  
  382. // 24h clock
  383. //        ret = hourInt + minInt + parseInt(form.ampm);
  384.         ret = hourInt + minInt;
  385.  
  386.         if (ret > 1440)
  387.             return -10;
  388.  
  389.     }
  390.     if ( form.freq == '-6' ) {
  391.         ret += parseInt(form.day);
  392.     }
  393.  
  394.     if (ret >= 10080) {
  395. // 24:00 Sat -> 0:00 Sun
  396.         ret = 0;
  397.     }
  398.  
  399.     return ret;
  400. }
  401.  
  402. function clearCache() {
  403.   var props = gProps;
  404.  
  405.   props.clearCache();
  406. }
  407.  
  408. function cancelUpdate() {
  409.     var props = gProps;
  410.  
  411.     props.cancelUpdate();
  412. }
  413.  
  414. void(0);