/**
  * Sets class wide options, if no option was given, the actual set options will be returned
  *
  * @param  array  $options  Options to set
  * @throws Zend_Date_Exception
  * @return Options array if no option was given
  */
 public static function setOptions(array $options = array())
 {
     if (empty($options)) {
         return self::$_options;
     }
     foreach ($options as $name => $value) {
         $name = strtolower($name);
         if (array_key_exists($name, self::$_options)) {
             switch ($name) {
                 case 'format_type':
                     if (strtolower($value) != 'php' && strtolower($value) != 'iso') {
                         require_once 'Zend/Date/Exception.php';
                         throw new Zend_Date_Exception("Unknown format type ({$value}) for dates, only 'iso' and 'php' supported", 0, null, $value);
                     }
                     break;
                 case 'fix_dst':
                     if (!is_bool($value)) {
                         require_once 'Zend/Date/Exception.php';
                         throw new Zend_Date_Exception("'fix_dst' has to be boolean", 0, null, $value);
                     }
                     break;
                 case 'extend_month':
                     if (!is_bool($value)) {
                         require_once 'Zend/Date/Exception.php';
                         throw new Zend_Date_Exception("'extend_month' has to be boolean", 0, null, $value);
                     }
                     break;
                 case 'cache':
                     if ($value === null) {
                         parent::$_cache = null;
                     } else {
                         if (!$value instanceof Zend_Cache_Core) {
                             require_once 'Zend/Date/Exception.php';
                             throw new Zend_Date_Exception("Instance of Zend_Cache expected");
                         }
                         parent::$_cache = $value;
                         parent::$_cacheTags = Zend_Date_DateObject::_getTagSupportForCache();
                         Zend_Locale_Data::setCache($value);
                     }
                     break;
                 case 'timesync':
                     if ($value === null) {
                         parent::$_defaultOffset = 0;
                     } else {
                         if (!$value instanceof Zend_TimeSync_Protocol) {
                             require_once 'Zend/Date/Exception.php';
                             throw new Zend_Date_Exception("Instance of Zend_TimeSync expected");
                         }
                         $date = $value->getInfo();
                         parent::$_defaultOffset = $date['offset'];
                     }
                     break;
             }
             self::$_options[$name] = $value;
         } else {
             require_once 'Zend/Date/Exception.php';
             throw new Zend_Date_Exception("Unknown option: {$name} = {$value}");
         }
     }
 }