diff --git a/admin.php b/admin.php new file mode 100644 index 0000000..31163fb --- /dev/null +++ b/admin.php @@ -0,0 +1,1353 @@ +' + . '' .$plugin_tx['calendar']['menu_main'].'  ' + . '' .$plugin_tx['calendar']['menu_test_event_list'].'  ' + . '' .$plugin_tx['calendar']['menu_show_calendar'].'  '; + + if ($plugin_cf['calendar']['second-calendar_filename']) { + $o .= '2. ' .$plugin_tx['calendar']['menu_main'].'  ' + . '2. ' .$plugin_tx['calendar']['menu_test_event_list'].'  ' + . '2. ' .$plugin_tx['calendar']['menu_show_calendar'].'  '; + } + + $o .= '' .$plugin_tx['calendar']['menu_marquee'].'  ' + . '' .$plugin_tx['calendar']['menu_holidays'].'  ' + . '' .$plugin_tx['calendar']['menu_backup'].'  ' + . '' .$plugin_tx['calendar']['menu_config'].'  ' + . '' .$plugin_tx['calendar']['menu_css'].'  ' + . '' .$plugin_tx['calendar']['menu_language'].'  ' + . '' .$plugin_tx['calendar']['menu_help'].'  ' + . '' .$plugin_tx['calendar']['menu_credits'].'

' . "\n"; + + + // enabling navigation to stylesheet, config, language + if($admin){ + $o .= plugin_admin_common($action,$admin,$plugin); + $hjs .= ''."\n"; + + } elseif(!$admxx) $admxx='plugin_main'; + + + // ================ + // editing events + // ================ + if($admxx=='plugin_main'){ + + $o .= '
Calendar_XH '.constant('CALENDAR_VERSION').'
'; + $o .= '

'. $plugin_tx['calendar']['menu_main'] + . '   '; + + $o .= $plugin_tx['calendar']['config_presets']; + if(isset($_POST['preset']) || isset($_POST['backup'])) { + $o .= tag('input type="button" value="–" class="calendar_edit_on" id="presets_button" style="margin-left:0;" + onclick=\'openedit("presets_button","presets","–","+","block");\''); + $displaypresets = ''; + } else { + $o .= tag('input type="button" value="+" class="calendar_edit_off" id="presets_button" style="margin-left:0;" + onclick=\'openedit("presets_button","presets","–","+","block");\''); + $displaypresets = 'style="display:none;"'; + } + + $o .= '   '. $plugin_tx['calendar']['menu_eventlistconfig']; + if(isset($_POST['config'])) { + $o .= tag('input type="button" value="–" class="calendar_edit_on" id="eventlistconfig_button" style="margin-left:0;" + onclick=\'openedit("eventlistconfig_button","eventlistconfig","–","+","block");\''); + $displayeventlistconfig = ''; + } else { + $o .= tag('input type="button" value="+" class="calendar_edit_off" id="eventlistconfig_button" style="margin-left:0;" + onclick=\'openedit("eventlistconfig_button","eventlistconfig","–","+","block");\''); + $displayeventlistconfig = 'style="display:none;"'; + } + + $o .= '

' . "\n"; + $o .= "
" + . presets('eventlist') + . "
\n"; + $o .= "
" + . eventlistConfig() + . "
\n"; + $o .= editevents(); + } + if($admxx=='editevents2'){ + $o .= '

'. $plugin_tx['calendar']['menu_main'] + . ' 2  '.$plugin_cf['calendar']['second-calendar_filename'] . '

'; + $o .= editevents($plugin_cf['calendar']['second-calendar_filename'],1,1); + } + + + //*********************** + // show the event list + //*********************** + if ($admxx=='eventlist') { + $o .= eventlistconfigmenu(); + $o .= events('','','','','','',$calendar_cf['show_eventlist_style']); + } + if ($admxx=='eventlist2') { + $o .= eventlistconfigmenu(); + $o .= events('','','','',$plugin_cf['calendar']['second-calendar_filename'],'',$calendar_cf['show_eventlist_style']); + } + + + //********************* + // show the marquee + //********************* + if ($admxx=='marquee') { + $o .= '

'.$plugin_tx['calendar']['menu_marquee'].'

'; + $o .= marqueeConfig(); + $o .= nextevent(); + $o .= tag('br') . '

'.$plugin_tx['calendar']['marquee_contents'].':

'; + $o .= nextevent('','','',1); + } + + + //********************* + // show holiday wizard + //********************* + if ($admxx=='holidays') { + $o .= '

'.$plugin_tx['calendar']['menu_holidays'].'

'; + $o .= holidayConfig(); + } + + //************************************************** + // options and display of month and year calendar + //************************************************** + if ($admxx=='calendar') { + $o .= calendarconfigmenu(); + if($calendar_cf['show_year_in_backend']) { + $o .= bigcalendar(); + } else { + $o .= year(); + } + } + if ($admxx=='calendar2') { + $o .= calendarconfigmenu(); + if($calendar_cf['show_year_in_backend']) { + $o .= bigcalendar2(); + } else { + $o .= year2(); + } + } + + + //*************************************** + // credits page with version check + //*************************************** + if ($admxx=='credits') { + $o .= '

Calendar_XH '.constant('CALENDAR_VERSION')."

\n"; + + $o .= "
    \n" + . "
  • © 2011-2013 by svasti, based on" + . "
  • versions 1.2.1–1.2.9 and 1.3 beta 1–9 by svasti\n" + . "
  • version 1.2 © 2011 by Holger
  • \n" + . "
  • version 1.1 (major update) by svasti
  • \n" + . "
  • version 1.0 by Tory
  • \n" + . "
  • mod 02/2008 by Bob (cmsimple.fr)
  • \n" + . "
  • versions 0.6–0.9 by Tory
  • \n" + . "
  • versions 0.1–0.5 by Michael Svarrer, who started the plugin in 2005.
\n" + . '

Acknowledgements:' . tag('br') + . 'This version uses JSColor by Jan Odvárko (CZ),'. tag('br') + . 'datePicker by Brian McAllister (IR/FR),'. tag('br') + . 'and was written using the PSpad-Editor of Jan Fiala (CZ).

' + . '

A big thank you to cmb (D) for valuable coding hints,' . tag('br') + . 'and to oldnema (CZ) for repeated testing during development of the plugin.' + . '

' + . '

For bug reports and suggestions please use the CMSimple Forum

' + . "\n"; + } + + + //****************************** + // backup and file managing + //****************************** + + // here the user can look into all event files, merge and delete files, and save files under a new name + //===================================================================================================== + if (substr($admxx,0,6)=='backup') { + + // 3 choices; e = edit view, s = source code view, t = templates/presets + // everything is there, but is rendered invisible by java script + $view = substr($admxx,6,1); + if($action=="delete") $view='e'; + if($action=="delete1") $view='s'; + if($action=="delete2") $view='t'; + + $returnview = isset($_POST['returnview'])? $_POST['returnview'] : ''; + $view = $returnview? $returnview : $view; + + $o .= '

Calendar Backup   ' + . $plugin_tx['calendar']['notice_backup_setting'] .': ' + . $plugin_cf['calendar']['backups'] + . "

\n"; + + // 3 buttons for selection: Open in edit view/ in source code view/ open template-files + $o .= "

\n"; + $o .= ""; + + $o .= ""; + + $o .= ""; + + $o .= tag('br') . $plugin_tx['calendar']['backup-admin_saving_hint'] . "\n

\n"; + + // this listing disappears after actions. The actions call listFiles again to get an updated file list + + if(!isset($_POST['action']) && !$newfilename) $o .= listFiles(); + + // forwarding the file for opening + //================================ + $file_to_open = substr($admxx,7); + if($file_to_open) { + + // 1st case: edit view chosen + if ($view == "e") { + if(!$newfilename)$o .= closeFileViewButton(); + $o .= editevents($file_to_open,false); + } + + // 2nd case: source view chosen + if ($view == "s") { + if(!isset($_POST['action'])) $o .= closeFileViewButton('s'); + $o .= sourceView($file_to_open); + } + // 3nd case: templates chosen + if ($view == "t") { + if(!isset($_POST['action'])) $o .= closeFileViewButton('t'); + $o .= sourceView($file_to_open,1); + } + + } else { + // nothing chosen: show 2 buttons for merging and deleting files + $o .= deleteAndCombine(); + } + + if($view=='s') $o .= ''; + if($view=='t') $o .= ''; + } +} +//================================== +// +// F U N C T I O N S +// +//================================== + + +//******************************************* +// configuration functions +//******************************************* +function presets($filetype) +{ + global $pth; include_once ($pth['folder']['plugins'].'calendar/includes/presets.php'); + return $o; +} +function eventlistConfig() +{ + global $pth; include_once ($pth['folder']['plugins'].'calendar/includes/eventlistconfig.php'); + return $o; +} +function calendarConfig() +{ + global $pth; include_once ($pth['folder']['plugins'].'calendar/includes/calendarconfig.php'); + return $o; +} +function marqueeConfig() +{ + global $pth; include_once ($pth['folder']['plugins'].'calendar/includes/marqueeconfig.php'); + return $o; +} +function holidayConfig() +{ + global $pth; include_once ($pth['folder']['plugins'].'calendar/includes/holidayconfig.php'); + return $o; +} + + +//******************************************* +// function to change values in files +//******************************************* +function changevalue($valuearray,$file,$type=0) +{ + global $plugin_cf; + + foreach ($valuearray as $trigger=>$value) { + if($type==1) { + //config files, also language files + $pattern = "!(".$trigger."']=\")(.*)\"!"; + $replacement ='${1}'.$value.'"'; + } + + if($type==2) { + //language files with check if entry is missing and generation of missing entries + $pattern = "!(".$trigger."']=\")(.*)\"!"; + $replacement ='${1}'.$value.'"'; + + if (!preg_match($pattern,$file)) { + $file = str_replace('?>',"\t".'$plugin_tx[\'calendar\'][\''.$trigger.'\']="";'."\n?>",$file); + } + } + + if(!$type) { + //css files + $special = ''; //for special cases + if(strpos($trigger,',')) { + list($trigger,$special) = explode(',',$trigger); + } + + if($special=='sU') { + $pattern = "!(\/\*".$trigger."\*\/)(.*)\}!sU"; + $replacement ='${1}'.$value.'}'; + + } else $pattern = "!(\/\*".$trigger."\*\/)(.*);!"; + + if($special=='!im') { + $replacement ='${1}'.$value.' !important;'; + + } elseif ($special=='url!' && $value) { + $replacement ='${1} url(' . $plugin_cf['calendar']['filepath_calendar_background_images'] . $value .') !important;'; + + } elseif ($special=='url' && $value) { + $replacement ='${1} url(' . $plugin_cf['calendar']['filepath_calendar_background_images'] . $value .');'; + + } elseif ($special!='sU') $replacement ='${1}'.$value.';'; + } + + $file = preg_replace($pattern,$replacement,$file); + } + + return $file; +} + + +//============================================== +// little helper function of eventlist and +// calendar configuration, +// shows options menu of available templates +//============================================== +function templateSelect($cf_value,$name_postvar) +{ + global $pth,$plugin_tx; + $o = ''; + + // basic code taken from Martin Dampken's page_params + // and modified by svasti + $handle = opendir($pth['folder']['templates']); + $templates = array(); + while(false !== ($file = readdir($handle))) { + if(is_dir($pth['folder']['templates'].$file) && strpos($file, '.') !== 0) { + $templates[] = $file; + } + } + natcasesort($templates); + $templates_select = ''; + foreach($templates as $file){ + $selected = ''; + if($cf_value && $file == $cf_value) {$selected = 'selected';} + $templates_select .= "\n\t".''; + } + $o .= ""; + + return $o; +} + +//============================================== +// config menu on top of calendar +//============================================== +function calendarconfigmenu() +{ + global $pth,$plugin_tx,$plugin,$calendar_cf; + $o = ''; + + //settings for hiding or showing of configuration possibilities + if(isset($_POST['hideconfig'])) { + $configfile = file_get_contents($pth['folder']['plugins'] . $plugin . '/config/config2.php'); + if(isset($_POST['showbigcalendar'])) $configfile = preg_replace("!show_bigcalendar_config.*\"(.*)\"!","show_bigcalendar_config']=\"1\"",$configfile); + if(isset($_POST['hidebigcalendar'])) $configfile = preg_replace("!show_bigcalendar_config.*\"(.*)\"!","show_bigcalendar_config']=\"\"",$configfile); + if(isset($_POST['showsmallcalendar'])) $configfile = preg_replace("!show_smallcalendar_config.*\"(.*)\"!","show_smallcalendar_config']=\"1\"",$configfile); + if(isset($_POST['hidesmallcalendar'])) $configfile = preg_replace("!show_smallcalendar_config.*\"(.*)\"!","show_smallcalendar_config']=\"\"",$configfile); + if(isset($_POST['showpopupconfig'])) $configfile = preg_replace("!show_popup_config.*\"(.*)\"!","show_popup_config']=\"1\"",$configfile); + if(isset($_POST['hidepopupconfig'])) $configfile = preg_replace("!show_popup_config.*\"(.*)\"!","show_popup_config']=\"\"",$configfile); + if(isset($_POST['show_year_in_backend'])) $configfile = preg_replace("!show_year_in_backend.*\"(.*)\"!","show_year_in_backend']=\"1\"",$configfile); + if(isset($_POST['show_month'])) $configfile = preg_replace("!show_year_in_backend.*\"(.*)\"!","show_year_in_backend']=\"\"",$configfile); + unset( + $_POST['showbigcalendar'], + $_POST['hidebigcalendar'], + $_POST['showsmallcalendar'], + $_POST['hidesmallcalendar'], + $_POST['showpopupconfig'], + $_POST['hidepopupconfig'], + $_POST['show_year_in_backend'], + $_POST['show_month'] + ); + file_put_contents($pth['folder']['plugins'] . $plugin . '/config/config2.php',$configfile); + include ($pth['folder']['plugins'] . $plugin .'/config/config2.php'); + } + + + $o .= "
\n"; + $o .= tag('input type="hidden" value="1" name="hideconfig"') . "\n"; + + $o .= '

'; + + $o .= $plugin_tx['calendar']['config_presets']; + if(isset($_POST['preset']) || isset($_POST['backup'])) { + $o .= tag('input type="button" value="–" class="calendar_edit_on" id="presets_button" style="margin-left:0;" + onclick=\'openedit("presets_button","presets","–","+","block");\''); + $displaypresets = ''; + } else { + $o .= tag('input type="button" value="+" class="calendar_edit_off" id="presets_button" style="margin-left:0;" + onclick=\'openedit("presets_button","presets","–","+","block");\''); + $displaypresets = 'display:none;"'; + } + + $o .= ' '; + + $o .= $plugin_tx['calendar']['config_bigcalendar']; + if($calendar_cf['show_bigcalendar_config']) { + $o .= tag('input type="submit" class="config_button_pressed" value="–" name="hidebigcalendar" '); + } else $o .= tag('input type="submit" class="config_button" value="+" name="showbigcalendar" '); + + + $o .= ' '; + + $o .= $plugin_tx['calendar']['config_small_calendar']; + if($calendar_cf['show_smallcalendar_config']) { + $o .= tag('input type="submit" class="config_button_pressed" value="–" name="hidesmallcalendar" '); + } else $o .= tag('input type="submit" class="config_button" value="+" name="showsmallcalendar" '); + + $o .= ' '; + + $o .= '' . $plugin_tx['calendar']['config_popup']; + if($calendar_cf['show_popup_config']) { + $o .= tag('input type="submit" class="config_button_pressed" value="–" name="hidepopupconfig" '); + } else $o .= tag('input type="submit" class="config_button" value="+" name="showpopupconfig" '); + $o .= ''; + + $o .= ' '; + + if($calendar_cf['show_year_in_backend']) { + $o .= tag('input type="submit" style="width:auto;" value="'.$plugin_tx['calendar']['config_year'].'" name="show_month" '); + } else $o .= tag('input type="submit" style="width:auto;" value="'.$plugin_tx['calendar']['config_month'].'" name="show_year_in_backend" '); + + + $o .= "

\n"; + $o .= "
"; + + $o .= "
" + . presets('calendar') + . "
\n"; + + $o .= calendarConfig(); + + return $o; +} + +//============================================== +// config menu on top of eventlist +//============================================== +function eventlistconfigmenu() +{ + global $pth,$cf,$calendar_cf,$plugin_tx,$plugin,$datapath; + $o = ''; + + $style = isset($_POST['style']) ? $_POST['style'] : $calendar_cf['show_eventlist_style']; + + if(isset($_POST['style'])) { + $configfile = file_get_contents($pth['folder']['plugins'] . $plugin . '/config/config2.php'); + $configfile = preg_replace("!show_eventlist_style.*\"(.*)\"!","show_eventlist_style']=\"$style\"",$configfile); + file_put_contents($pth['folder']['plugins'] . '/calendar/config/config2.php',$configfile); + include ($pth['folder']['plugins'] . '/calendar/config/config2.php'); + } + + // template change + if ($calendar_cf['test_event_list_template']) { + $cf['site']['template'] = $calendar_cf['test_event_list_template']; + $pth['folder']['template'] = $pth['folder']['templates'].$cf['site']['template'].'/'; + $pth['file']['template'] = $pth['folder']['template'].'template.htm'; + $pth['file']['stylesheet'] = $pth['folder']['template'].'stylesheet.css'; + $pth['folder']['menubuttons'] = $pth['folder']['template'].'menu/'; + $pth['folder']['templateimages'] = $pth['folder']['template'].'images/'; + } + $o .= "
\n"; + + // list all availabel event-list templates + $handle=opendir($pth['folder']['plugins'].'/calendar/templates/'); + $templates = array(); + while (false !== ($reading = readdir($handle))) { + if(strpos($reading, '.tpl')) { + $templates[] = $reading; + } + } + closedir($handle); + natcasesort($templates); + $styles_select = ''; + foreach($templates as $key=>$eventliststyle){ + $selected = ''; + if($eventliststyle == $calendar_cf['show_eventlist_style']) {$selected = ' selected';} + $styles_select .= "\n"; + } + + $standardselected = !$calendar_cf['show_eventlist_style']? ' selected':''; + $tableselected = $calendar_cf['show_eventlist_style'] == 1? ' selected':''; + +// $o .= tag('input type="submit" value="'.$plugin_tx['calendar']['menu_test'].'"'); + $o .= "\n"; + + $o .= "
"; + + return $o; +} + +//============================================== +// little helper function of basic configuration +// shows the Icons used +//============================================== +function showIcons() +{ + global $pth,$plugin,$plugin_tx; + $path = $pth['folder']['plugins'] . '/calendar/images/'; + + $icon_set_array = array(); + $icon_set = ''; + $o = ''; + + $handle = opendir ($path); + while (false !== ($icon_folder = readdir ($handle))) { + if ($icon_folder != "." && $icon_folder != ".." && is_dir($path . $icon_folder)) { + + $icon_set .= $icon_folder.": \n"; + $icon_array = array(); + $handle2 = opendir ($path.$icon_folder); + while (false !== ($icon = readdir ($handle2))) { + if ($icon != "." && $icon != "..") { + list($width, $height, $type, $attr) = getimagesize($path.$icon_folder."/".$icon); + array_push($icon_array, tag('img src="'.$path.$icon_folder.'/'.$icon.'" '.$attr.'') ." \n"); + } + } + closedir($handle2); + rsort($icon_array); + $icon_set .= implode (" ",$icon_array); + array_push($icon_set_array,$icon_set); + $icon_set = ''; + } + } + closedir($handle); + //sorting necessary, otherwise on some servers the list will be disordered + natsort($icon_set_array); + foreach($icon_set_array as $key => $value){ + if (!strpos($value, "past")) { + $o .= "Icon set $value\n" . tag('br') . tag ('br'); + } else { + $o .= "                \n" + . preg_replace('!^.+(past:)!','',$value) + . "\n" . tag('br') . tag ('br'); + } + } + //$o .= "(→ ".$plugin_tx['calendar']['menu_config'].")"; + return $o; +} + + +//============================================= +// a little helper function of Backup function +// closees the shown file view +//============================================= +function closeFileViewButton($mode='') +{ + global $plugin_tx,$plugin; + $o = ''; + $o .= ''; + $o .= tag('br'); + return $o; +} + + +//******************************************************* +// +// showing the list of files in calendar/content/ + calendar/templates/ +// +//******************************************************* +function listFiles() +{ + global $pth,$plugin,$file,$datapath; + $o = ''; + + // 1st list for edit view + //================================ + $o .= "\n"; + + $handle=opendir ($datapath); + while (false !== ($file = readdir ($handle))) { + if ($file!='.' && $file!='..' ) { + $o .= "\n\n"; + } + } + closedir($handle); + $o .= "\n"; + + // 2nd list for source code view + //================================ + $o .= "\n"; + $handle=opendir ($datapath); + while (false !== ($file = readdir ($handle))) { + if ($file!='.' && $file!='..') { + $o .= "\n\n"; + } + } + closedir($handle); + $o .= "\n"; + + // 3nd list for presets/templates + //================================= + $o .= "\n"; + $handle=opendir ($pth['folder']['plugins'].'/calendar/templates/'); + while (false !== ($file = readdir ($handle))) { + if ($file!='.' && $file!='..') { + list($f1,$f2) = explode ('.',$file,2); + $f1array[] = $f1; + $f2array[] = $f2; + } + } + array_multisort($f2array,$f1array); + foreach ($f2array as $key=>$value) { + $templatefile = $f1array[$key].'.'.$f2array[$key]; + $o .= "\n\n"; + } + closedir($handle); + $o .= "\n"; + + return $o; +} + + + +//***************************************** +// +// showing and saving the source-code +// +//***************************************** +function sourceView($file,$template=0) +{ + global $plugin_tx,$pth,$plugin,$plugin_cf,$tx,$datapath; + $notice = ""; + $name_error = FALSE; + $o = ''; + + $datapath2 = $template? $pth['folder']['plugins'].'/calendar/templates/' : $datapath; + // saving function + //=================================================== + $action = isset($_POST['action']) ? $_POST['action'] : ''; + $savedfile = isset($_POST['file']) ? $_POST['file'] : ''; + $data = isset($_POST['data']) ? $_POST['data'] : ''; + if(get_magic_quotes_gpc()) $data = stripslashes($data); + $data = str_replace('¬','­',$data); + + // check if the new filename has unwanted characters + if(preg_match('/[^(\w|.)]/',$savedfile)) { + $notice .= "" + . $plugin_tx['calendar']['error_file_name_wrong'] . ''; + $name_error = True; + + } else { + if ($action == "savesource") { + if(is_file($datapath2.$savedfile)) chmod($datapath2.$savedfile, 0666); + $savedbytes = file_put_contents($datapath2.$savedfile,$data); + if ($savedbytes!==FALSE) { + $notice = "$savedbytes " + . $plugin_tx['calendar']['backup-admin_bytes_saved_in'] . " \"$savedfile\""; + } else { + $notice = "".$plugin_tx['calendar']['error_file_not_writable'].""; + } + } + } + + // if the function performed an action, the file view has to be adjusted accordingly + if($savedfile) $file = $savedfile; + if(!$name_error) {$eventfile = file_get_contents($datapath2.$file);} else {$eventfile = $data;} + + // after actions: updating the file list + if($action) { + $o .= listFiles(); + $o .= $template? closeFileViewButton('t') : closeFileViewButton('s'); + } + + // This java script "presses the button" for source code or template view, so that after an action you stay in the previous mode + if(strpos($file,'.php') || strpos($file,'.tpl')) { + $o .= ''; + } else { + $o .= ''; + } + + // for bug hunting only + //$o = "data: $data magic quotes:".get_magic_quotes_gpc() ; + + //=================================================== + // displaying the source code + //=================================================== + $o .= '
'; + $o .= tag('input type="hidden" value="savesource" name="action"'); + $source_view_zindex = $plugin_cf['calendar']['z-index']? 2+$plugin_cf['calendar']['z-index']:2; + $o .= ''."\n"; + $o .= ''; + $o .= ''; + if(substr($file,-3)!='php' && substr($file,-3)!='tpl') { + $o .= ''; + $o .= ''; + } + $eventfile = str_replace('­','¬',$eventfile); + $o .= ''; + $o .= ""; + $o .= ''; + $o .= '
' . tag('input class="submit" type="submit" value="' . ucfirst($tx['action']['save']).'" name="send"'); + $o .= tag('input type="text" value="'.$file.'" name="file" style="width:17em" class="filename"') . $notice; + $o .= '
[*=' . $plugin_tx['calendar']['event_not_on_marquee'] . ']' + . $plugin_tx['calendar']['event_start'].$plugin_tx['calendar']['event_date'] . ',' + + . '[*=' .$plugin_tx['calendar']['event_booked_out']. "]" + . $plugin_tx['calendar']['event_end'].$plugin_tx['calendar']['event_date'] . ',' + + . '[*=' .$plugin_tx['calendar']['event_times_are_daily']. "]" + . $plugin_tx['calendar']['event_end'].$plugin_tx['calendar']['event_time'] . ',' + . $plugin_tx['calendar']['event_entry1'] . ';' + + . '[' . $plugin_tx['calendar']['event_additional'] . '|]' + . $plugin_tx['calendar']['event_main_entry'] . ';' + . '[###/#*#=' . $plugin_tx['calendar']['event_yearly'] + . '|***=' . $plugin_tx['calendar']['event_weekly'] + . '|*#*=' . $plugin_tx['calendar']['event_multiple'] + . '][' . $plugin_tx['calendar']['event_except'] . '|]' + + . $plugin_tx['calendar']['event_entry3'] . ';' + . "[*=" .$plugin_tx['calendar']['event_icon']. "](ext:|int:)" + . $plugin_tx['calendar']['hint_links'] . ',' + . $plugin_tx['calendar']['event_link_text'] . ',' + . "[*/+=" . $plugin_tx['calendar']['event_icon'] . "]" + . $plugin_tx['calendar']['event_info_text'] . ';' + . $plugin_tx['calendar']['event_start'].$plugin_tx['calendar']['event_time'] . ';' + . $plugin_tx['calendar']['event_description']; + $o .= '
'; + $o .= '
'; + $o .= ''; + + +return $o; +} + + +//***************************************** +// +// deleting and merging files +// +//***************************************** +function deleteAndCombine() +{ + global $plugin_tx,$pth,$plugin,$datapath; + $o = ''; + $notice = ''; + + if(isset($_POST['action'])) + $action = $_POST['action']; + elseif(isset($_GET['action'])) + $action = $_GET['action']; + else + $action = ""; + + // starting with the actions to be done + + if ($action == "") $notice = ""; + + // deleting files + //========================================================= + if ($action == "delete" || $action == "delete1" || $action == "delete2" ) { + + $file = isset($_POST['file']) ? $_POST['file'] : $file; + + $datapath2 = $action == "delete2"? $pth['folder']['plugins'].'/calendar/templates/' : $datapath; + + if(is_file($datapath2.$file)) { + $notice .= "$file ".$plugin_tx['calendar']['backup-admin_found']."" . tag('br'); + + chmod($datapath2.$file, 0666); + $x = unlink($datapath2.$file); + if($x===TRUE) { + $notice .= "$file ".$plugin_tx['calendar']['backup-admin_deleted']."" . tag('br'); + + } else $notice .= "$file ".$plugin_tx['calendar']['backup-admin_not_deleted']."" . tag('br'); + + } else $notice .= "$file ".$plugin_tx['calendar']['backup-admin_not_found']."" . tag('br'); + + $o .= listFiles(); + + } + + // merging files + //========================================================== + if ($action == "merge" || $action == "merge1") { + + $firstfile = isset($_POST['firstfile']) ? $_POST['firstfile'] : ''; + $secondfile = isset($_POST['secondfile']) ? $_POST['secondfile'] : ''; + $f = 0; + $s = 0; + + if(is_file($datapath.$firstfile)) { + $firstfilearray = file($datapath.$firstfile,FILE_SKIP_EMPTY_LINES); + $f = count($firstfilearray); + // checking the version of the event file + if (isset($firstfilearray[0]) && substr($firstfilearray[0],0,19)=="Calendar eventfile ") { + $version1 = substr($firstfilearray[0],19,3);print_r($firstfilearray); + array_shift($firstfilearray);print_r($firstfilearray); + $f--; + } else { + $version1 = FALSE; + } + $notice .= "$firstfile ".$plugin_tx['calendar']['backup-admin_found_with']." $f " + . $plugin_tx['calendar']['backup-admin_events']."" . tag('br'); + } else $notice .= "".$plugin_tx['calendar']['backup-admin_1st_file'] + . " $firstfile ".$plugin_tx['calendar']['backup-admin_not_found']."" . tag('br'); + + + if(is_file($datapath.$secondfile)) { + chmod($datapath.$secondfile, 0666); + $secondfilearray = file($datapath.$secondfile,FILE_SKIP_EMPTY_LINES); + $s = count($secondfilearray); + if(!strpos("\n",$secondfilearray[($s-1)])) $secondfilearray[($s-1)] .= "\n"; + // checking the version of the event file + if (isset($secondfilearray[0]) && substr($secondfilearray[0],0,19)=="Calendar eventfile ") { + $version2 = substr($secondfilearray[0],19,3);print_r($secondfilearray); + $s--; + } else { + $version2 = FALSE; + } + $notice .= "$secondfile ".$plugin_tx['calendar']['backup-admin_found_with']." $s " + . $plugin_tx['calendar']['backup-admin_events']."" . tag('br'); + } else $notice .= "".$plugin_tx['calendar']['backup-admin_2nd_file'] + . " $secondfile ".$plugin_tx['calendar']['backup-admin_not_found']."" . tag('br'); + + if($f && $s && $version1==$version2) { + // merge the file arrays + $secondfilearray = array_merge($secondfilearray,$firstfilearray); + // remove duplicates + $secondfilearray = array_unique($secondfilearray); + // count number of events in resulting file + $sf = count($secondfilearray); + if($version2) $sf--;print_r($secondfilearray); + if (($f + $s) > $sf) $notice .= "".(($f + $s) - $sf) . " ".$plugin_tx['calendar']['backup-admin_duplicates_deleted']."". tag('br'); + // save the resulting file or give an error notice + $success = file_put_contents($datapath.$secondfile,$secondfilearray); + if ($success!==false) { + $notice .= "$secondfile ". $plugin_tx['calendar']['backup-admin_saved_with'] + . " $sf ".$plugin_tx['calendar']['backup-admin_events'].''. tag('br'). tag('br'); + } else $notice .= "ERROR: could not save $secondfile". tag('br'). tag('br'); + } elseif($f && $s && $version1!=$version2) { + $notice .= '' + . $plugin_tx['calendar']['error_cant_combine_eventfiles_of_different_versions'] + . '' + . tag('br'). tag('br'); + } else $notice .= ''.$plugin_tx['calendar']['backup-admin_no_merge'].''. tag('br'). tag('br'); + + $o .= listFiles(); + + } + + //"merge files" button switching the following dialogue on and off + //========================================================================================================== + $o .= "" + . "
".$plugin_tx['calendar']['backup-admin_merge_instruction'] ."". tag('br') ."\n" + . "
" + . "
"; + + // starting the merge dialogue + // make a list of files that can be chosen as initial files of the merging process + $handle=opendir ($datapath); + while (false !== ($files = readdir ($handle))) { + if ($files != "." && $files != ".." && substr($files,-3)!='php') { + $o .= "$files" . tag('br') ."\n"; + } + } + closedir($handle); + // display a big arrow + $o .= "  →  "; + + // again a list of files that can be chosen receiving files in the merging process + $handle=opendir ($datapath); + while (false !== ($files = readdir ($handle))) { + if ($files != "." && $files != ".." && substr($files,-3)!='php') { + $o .= "$files" . tag('br') ."\n"; + } + } + closedir($handle); + $o .= "
" + . "" + . "" + . "" + . "
" . tag('br') . "\n
"; + // end of merge dialogue + + + //"delete files" (edit-mode) button switching the following dialogue on and off (button alway visible)) + //=========================================================================================================== + $o .= ""; + + //"delete files" (source mode) button + //=========================================================================================================== + $o .= ""; + + $handle=opendir($datapath); + $filearray = array(); + while (false !== ($file = readdir($handle))) { + if($file != "." && $file != "..") { + $filearray[] = $file; + } + } + closedir($handle); + natcasesort($filearray); + $files_select = ''; + foreach($filearray as $file){ + $files_select .= "\n"; + } + + //div controlled by delete button (edit mode) + $o .= "
".$plugin_tx['calendar']['backup-admin_delete_instruction'] ."". tag('br') ."\n" + . "
"; + $o .= '
' + . ""; + $o .= "
\n"; + $o .= "\n" + . "" + . "
\n
\n\n"; + + //div controlled by delete button (source mode) + $o .= "\n\n"; + + + //"delete templates" button switching the following dialogue on and off (button always visible)) + //=========================================================================================================== + $o .= "" + . "\n\n"; + + $o .= "

$notice

\n"; + + return $o; +} + + +//***************************************** +// +// select font and fontsize +// +//***************************************** +function selectFont($name=0,$fontvalue=0,$size=0,$sizevalue=0,$height=0,$heightvalue=0) +{ + global $plugin_tx,$plugin_cf; + $o = ''; + + if($name) { + $array = explode(";", $plugin_cf['calendar']['selectable_fonts']); + $values_select = ''; + $j = 0; + foreach ($array as $option) { + $selected = ''; + if($option == $fontvalue) {$selected = ' selected'; $j = 1;} + $values_select .= "\n"; + } + $preselect = (!$j && $fontvalue && $fontvalue!='inherit')? '' : ''; + $o .= ""; + } + + if($size) { + $array = explode(",", $plugin_cf['calendar']['selectable_fontsizes']); + $values_select = ''; + $j = 0; + foreach ($array as $option) { + $selected = ''; + if($option == $sizevalue) {$selected = ' selected'; $j = 1;} + $values_select .= "\n"; + } + $preselect = (!$j && $sizevalue && $sizevalue!='inherit')? '' : ''; + $o .= "'; + } + + if($height) { + $array = explode(",", $plugin_cf['calendar']['selectable_lineheights']); + $values_select = ''; + $j = 0; + foreach ($array as $option) { + $selected = ''; + if($option == $heightvalue) {$selected = ' selected'; $j = 1;} + $values_select .= "\n"; + } + $preselect = (!$j && $heightvalue && $heightvalue!='inherit')? '' : ''; + $o .= "'; + } + return $o; +} + +?> diff --git a/backgroundimages/blue_lozange.gif b/backgroundimages/blue_lozange.gif new file mode 100644 index 0000000..c3fe8f3 Binary files /dev/null and b/backgroundimages/blue_lozange.gif differ diff --git a/backgroundimages/blue_nebula.jpg b/backgroundimages/blue_nebula.jpg new file mode 100644 index 0000000..23dc96f Binary files /dev/null and b/backgroundimages/blue_nebula.jpg differ diff --git a/backgroundimages/blue_x.gif b/backgroundimages/blue_x.gif new file mode 100644 index 0000000..6a52f9d Binary files /dev/null and b/backgroundimages/blue_x.gif differ diff --git a/backgroundimages/flower.jpg b/backgroundimages/flower.jpg new file mode 100644 index 0000000..a2ad143 Binary files /dev/null and b/backgroundimages/flower.jpg differ diff --git a/backgroundimages/green_lozange.gif b/backgroundimages/green_lozange.gif new file mode 100644 index 0000000..17d887c Binary files /dev/null and b/backgroundimages/green_lozange.gif differ diff --git a/backgroundimages/nebula.jpg b/backgroundimages/nebula.jpg new file mode 100644 index 0000000..fd0441b Binary files /dev/null and b/backgroundimages/nebula.jpg differ diff --git a/backgroundimages/red_lozange.gif b/backgroundimages/red_lozange.gif new file mode 100644 index 0000000..9326bbd Binary files /dev/null and b/backgroundimages/red_lozange.gif differ diff --git a/backgroundimages/red_x.gif b/backgroundimages/red_x.gif new file mode 100644 index 0000000..088784a Binary files /dev/null and b/backgroundimages/red_x.gif differ diff --git a/backgroundimages/roses.jpg b/backgroundimages/roses.jpg new file mode 100644 index 0000000..4dda09b Binary files /dev/null and b/backgroundimages/roses.jpg differ diff --git a/backgroundimages/sky.jpg b/backgroundimages/sky.jpg new file mode 100644 index 0000000..0ccca1e Binary files /dev/null and b/backgroundimages/sky.jpg differ diff --git a/backgroundimages/takelage.jpg b/backgroundimages/takelage.jpg new file mode 100644 index 0000000..f737c26 Binary files /dev/null and b/backgroundimages/takelage.jpg differ diff --git a/backgroundimages/yellow_lozange.gif b/backgroundimages/yellow_lozange.gif new file mode 100644 index 0000000..35fec2d Binary files /dev/null and b/backgroundimages/yellow_lozange.gif differ diff --git a/changelog.txt b/changelog.txt new file mode 100644 index 0000000..48b8b86 --- /dev/null +++ b/changelog.txt @@ -0,0 +1,334 @@ +******************************************************************************************************* +** ** +** ** +** V E R S I O N H I S T O R Y ** +** ** +** of ** +** ** +** CMSimple Calendar Plugin ** +** ** +** ** +******************************************************************************************************* + +CMSimple Calendar Plugin started 2005 by Michael Svarrer, modified by Tory, Bob, +and rewritten by Svasti, Holger, and again Svasti + +todo: +Auf einer Seite soll die Eventliste dargestellt werden (vollständig mit allen Terminen) +Wäre es möglich z.B. auf der Startseite eine "verkürzte" Eventliste darzustellen, die z.B. die nächsten 5 Termine anzeigt? +Damit soll nicht die nextevent Funktion gemeint sein, sondern die Liste. + +-- 1.4.6 (Dec 2013) bugfix (2 digit hours got corrupted on saving the event, fix by cmb) + +-- 1.4.5 (Nov 2013) + - bugfix (by cmb) to make editevents.php work under php4 + - bugfix sorting events by time on the same day (reported by Stephanie Vetter) + - navigation is now limited to previous or next years/months, so that google stops following 20 years back etc + - when wrong name for event template is given, default table view will be shown + - eventlist templates without ".tpl" are also accepted now + - changing an event and clicking "add" will not delete the changes any more + - added metaconfig for use in XH 1.6 (including function to get eventlist templates) + + +-- 1.4.4 (August 2013) + - bugfix in presets.php which caused blanc screen under php 4 (fix by cmb) + - bugfix: remove slashes had been forgotten + - annoying alert from ckeditor (on save) eliminated (code from cmb) and save button of ckeditor removed + +-- 1.4.3 (July 2013) + - bugfix to prevent data loss. On save not the complete eventfile is send to the server, but only + the events which was changed, added, deleted or copied. In the backup section a new button to save + the eventfile under a new name was added, as the general save button has gone. + - version.nfo file added, "native" check version deleted + +-- 1.4.2 (September 2012) by svasti + - Links to external pdfs and pdfs in subfolders of downloads folder now possible (user demand) + - Help file updated + - Added a suggestion (eventlist.php) by cmb, to prevent failiure of js routines in calendar-backend, + when tinymce is for some reason not working. + - Changed the routine to link to pdfs in downloadfolder, so that it will work also in CMSimple 3.4 which + has no special setting in config for "downloads" (idea by cmb) + +-- 1.4.1 (August 2012) by svasti + - Bugfix "not in marquee" wouldn't save + +-- 1.4 (July 2012) by svasti + - Two lines, which had $key=>&$value, which is not implementend in PHP 4, changed with workaround (by cmb) + - Fixed bug which prevented correct internal links from secondary languages + - Fixed bug which prevented a second internal link with & in heading + - Calendar file merging improved + - some small fixes in stylesheet.css and editor.css, and bugfix in editorconfig by cmb + - Added holiday-config menu + - Czech translation updated by oldnema + +-- 1.4 rc (May 2012) by svasti + - shifting of displayed period in event list to clicked event can be set + (This was the default behavior up to v 1.3. Now default behavior is enlargement of period to clicked event) + - internal link and event-list page can be selected by options list. + - multiple links and multiple link texts are possible + - error messages on missing writing permissions + - interface simplification + some bug corrections + - added simplified function calls for calendars/lists/marquees based on a combination of two event files + - added configuration possibility for pop-up location (right, left, down) in big calendar + - checking availability of function easter_date and providing an alternative (by cmb) + +-- 1.4 beta (March 2012) by svasti + + Configuration + - New direct configuration possibility in Edit Events and Calendar; changes can be seen right after saving. + - Grown complexity hidden from first time user. Presets are offered. + - User can save his own settings as a preset, could be used in upgrades, presets can be deleted too + - Presets and plugin content have configurable filepath + - huge set of direct configuration possibilites for big and small calendars + - Support for TinyMCE of CMSimple 1.5 added (with some help by cmb) and CKeditor + + Second Calendar + - An independent second calendar can be enabled by entering an event file name in config + - Automatic enlargement of the backend plugin menu by 3 items (edit2, view list2, view calendar2) + - The second calendar has its own event list page. All styling same as standard calendar. + - 6 new commands for the 2nd calendar + + Edit Events + - Delete Button function changed: now deletes without right away without again clicking save + (saving the user 1 page reloading) + - Checkbox to premark delete, on checking this, entries are crossed out visually, can be unchecked also. + - Master color picker to control the other color pickers. Code specially send by Jan Odvárko + - Main event field and additional dates field can be configured as textareas + - Possibility to mark booked out added + + Event List + - additional entry field added (user request), could be used for location + - 2 types of yearly events: with or without age calculation (user request) + - Editors configured to be able to use standard styles of the site + - Soft hyphens can be entered as \- + - Weekly events can be entered together with exceptions and additional dates + - Exceptions also work with long events + - Multiple dates can be assigned to a single event entry (only for 1 day events) . + - Combinations of 2 event files can be shown + - Template driven event list possible. + - Event list templates can be edited in Backup menu + - Added checkboxes for "show no past event" and "show past events in grey" and the + possibility of such choices through varibles in the function call events() + - Booked out (new item) when checked hovers on top of an event entry, which gets striped background color + - Dynamic enlargement of displayed event-list period: if you click in a calendar on an event which is outside the shown period of the event-list, + the event-list period will be enlarged to the future or past to display the requested event. So even if you show only 1 month + in youe event list, still every event can be accessed through clicking on an event day in calendar. + - Linking to Pages of CMSimpleRealBog and to Pages of Subsites enabled, Entry must start with ? or / + + New calendar features + - Holidaylist can be entered in language file; holiday names are shown in title and pup-up frames + complex holiday dates like "easter + 50 days" or "11 days 1 sunday 26.11" can be entered + - New function bigcalendar() with extensive config possibilities + - bigcalendar with different background images, image file path is configurable + - Multiple months can be shown (user request), one under another or in columns, made a little easier through + year() and multicalendar(). Headline will annonce the year(s) shown. + If months from more than one year are shown, the months display the years also. + - Calendar can be shown from other than default file, i.e. archived file + - Different events on the same day will be sorted and displayed in the order of the starting time + - Combinations of 2 event files can be shown in Calendar, Year, Event-List + - 8 levels of visual stacking of events possible and explained in help file + + Marquee + - Anniversaries and weekly events now also in marquee function + - New direct configuration and marquee in action plus actionless overview + - New config possibility to choose which fields shall be displayed in which order, including age field + - New plugin main menu item Marquee + - Added function stop on mouse over + (code by oldnema for standart marquee, code for jQuery adaped by svasti from code by Remy Sharp) + - reduced the java script call for marquee (originally by cmb) because it wouldn't work with new function + - if javascript is disabled in the browser the first marquee event is shown in marquee window + + Popup in Calendar + - Reorganisation of popup display of events: time and holiday name are outdented, the rest indented, + horizontal rule separates different events on the same day + Popups validate and work even in IE 6 + - Plugin works without eventlist page, popups show events, without eventlist + eventdays aren't clickable any more, simply mouse-over (like tool tip) shows the event information. + + Bug correction + - source view table width now adjusted by javascript to fit nicely into screen size + - Bug correction by cmb (notice "no event scheduled" didn't show as expected) + - Multiday events starting before the period display in the event list, but lasting into the shown period + are now shown (internally marked $oldlonglastingevents) + - Several other bugs were detected by oldnema and could be corrected + - stripslashed now used only when magic_quotes_gpc is on + + Translation + - Czech translation by oldnema + + Security + - Securitycheck introduced by Holger hat to be modified, since it wasn't compatible with subsite feature of CMSimple 1.5 + - Security check now on nearly all files as suggested by cmb + - Filebrowser of FCKeditor disabled when calling editevents from frontend (done by cmb, thanx) + + +---------------------------------------------------------------------------------------------------------------- + +-- 1.3 beta 9 by svasti + Backend + - only one type of input table now, no more narrow, medium, wide input tables. Lots of simplification in the code. + - Event list lookalike backend, editing table can be made visible for every event separately + - Editor field has to be activated for every field separately. This was done because too many instances of the editor made + loading the page very slow. + + +-- 1.3 beta 7 by svasti + - some bugs corrected + + Calendar + - popup text from mouse over colored calender days + - visual differentiation between fist, mid and last days of multi day events, single day events and birthdays + + Marquee + - jQuery function used (with help of cmb) + - improved internal sorting (with help of cmb) + + +-- 1.3 beta 6 (September 2011) by svasti http://svasti.de + + Event List + - Past events and icons in the standard event list are automatically displayed in light grey + - Choice of different sets of icons for internal or external links and tooltip style info text + - Short info text can be entered in the link field and can be shown in tool tip style + - Text and images (description field) can be added under every event, with fckeditor support + + Editing Events + - Date can again be entered directly, -,--,?,?? are allowed as days (of planned events), + simple date-check included, 1.1.11 will automatically become 01.01.2011, (but 31.02.11 still possible) + - Automatic link recognition (external, internal, doc(x) or pdf) and detailed error reporting, + - Hint pop-up buttons for how to formate and for how to enter links + - Copy button for (recurring) events, + - Top new-event-button creates new events at the top of the editing table, + while bottom the new-event-button creates them at the bottom of the table + - Title hints added to new event, copy, delete buttons in editevents table + - Some algorithms to catch user input errors (forgotten link text, unnecessary http://) + - Chronological sorting of events on save, function written by manu + - Saving the event file will produce a user-defined number of backup files, which can be inspected in backup admin + - Pop-up of available icon sets + + Formatting + - Standard FCKeditor can be used in description field + - Custom version of FCKeditor added (necessary if FCKeditor isn't there) + - FCKeditor image dialog (of custom FCKeditor) changed, so that class can be selected easily + - Custom templates dialog added, adapted to calendar plugin + - Simple formatting possibility added using chars: *,_,~,#,+ + with examples shown via popup button in editevents input table + + Admin + - Detailed Backup menu added, where all event files can be inspected in source code or via standard + editing events input table, and files can be copied under new names, deleted and merged + - Archived event lists (e.g. of events of former years) can be put on normal pages + - Credits page with version check + + Next Event Announcement + - Marquee-function rewritten, now with possibility to announce more than 1 event + + Code + - Event files now start with version nr. so that in future versions the item order can be changed + - Lots of code rewritten or reformatted + - Width definitions of input fields moved to css, so that display in IE is similar to FF + - changed all config input to "1" or "", wich was "true" or "" (preparing for future check box config) + - Some bugs from v.1.0 corrected, e.g. switching off fields meant + corresponding data got lost. Now data is saved via hidden fields, + and fixed colspan setting (from v.1.0) disfigured the event list in IE (Holger found this bug) + +---------------------------------------------------------------------------------------------------------------- + +-- Version 1.2 modified by Holger http://cmsimple.holgerirmler.de + - Fixed some PHP 5.3.0 deprecated code (split() ...) + - Added xh_debugmode() and a bit security + - Removed direct edit of the eventfiles in admin-area + - Bugfix: layout crashed on eventspage when a birthday (###) was the first event in a month + - Added the DatePicker v5.4 by frequency-decoder.com and made the date inputs readonly + - Replaced ";" by " " in users input to prevent a script-crash and to keep the field-structure in the event-files + - nextevent() will return now nothing when there is no future event + - $plugin_cf['calendar']['date_delimiter']: is ready to use full-stop ".", forward slash "/" and minus/dash "-", + a changed delimitter at runtime will be converted by the DatePicker, so no crashed eventfiles anymore + - Slightly changed the "narrow" style in the backend + +---------------------------------------------------------------------------------------------------------------- + +-- Version 1.1 (April 2011) modified by svasti http://svasti.de + - xh-unicode-compatible + - lots of obsolete attributes moved from config to css (otherwise no validation in html5) + - elimination of unnecessary attributes + - changed obsolete php code ("eregi" is obsolete in php 5.3) + - improvement in backend, 3 input styles available (wide, medium narrow) + - tooltips in config + - extra line in event display giving the period for which the events are listed, + - possibility to show past events, new way to show end of events + - bug corrections: begin and end display of events lasting several days were mixed up + - events from different years would mess up the event-display, + - new way to show end of events (date and/or time), + - correction of other minor bugs (like birthday in calendar view) plus beautifying the code display a bit... but not too much + +---------------------------------------------------------------------------------------------------------------- + + -- Version 1.0 By Tory + - The function of showing/not showing time, location and link in event view will now work again + +---------------------------------------------------------------------------------------------------------------- + + Modified by Bob (cmsimple.fr), 02/2008. (this is from CMSimple Flex package) + +---------------------------------------------------------------------------------------------------------------- + + -- Version 0.9 By Tory + - Minor bugs corrected regarding Date-delimiter problem in events in Calendar view. + - Event Page is now configured in the language file. You therefore don't need to add Eventpage-name in Calender call in Template or Calendar-page + - Singular-Plural text regarding age in birtdays in EventPage are now added to language files. + - Parameters added to language files are: + $plugin_tx['calendar']['admin_event_page']="Events"; - The Eventpage, in wich Events in Calendar are related to. + $plugin_tx['calendar']['age_singular_text']="year"; age text for ages <2 Years + $plugin_tx['calendar']['age_plural1_text']="years"; + age text for ages >1 and <5 years + $plugin_tx['calendar']['age_plural2_text']="years"; age text for ages >4 years, used in many east european contries + + -- Version 0.8 By Tory + Events can now be added / edited / deleted from a CMSimple page, without the Administrator Rights. + Just create a page and add the following line: + #CMSimple $output.=editevents();# + The page can be behind Memberspage or Register plugin to allow just a single group of members to be Editor of the Event File. + Eg.: #CMSimple $output.=access('admin');$output.=editevents();# (Used in combination with register plugin.) + Only index.php file in Calender plugin has been changed since Version 0.7 + + -- Version 0.7 By Tory based on Svarrers version 0.5 : 20. Sep. 2007 + Several dates events are now handled so that they can last over several days, weeks, month or years. + Begin and End date/time are entered in the eventfile separately. They are only shown in Eventpage with + the Begin date and End date. In the Calender it is possible to select whether the between dates should be + higlighted or not. + In Nextevent and Event-page are automatically written Begin date-time or End date-time to a several dates event. + + -- Version 0.6 Mod by Tory : 16. Sep 2007 + New Function added: nextevent() will display next coming event compared to current date-time. + New way of sorting events that makes it possible to have more events the same day, and have them sorted + by date and time. + Events are entered in the eventfile this way: + Date;Event;Location (### = birthday);Link (int:?InternalPage / ext:www.ExternalPage.com),LinkTxT;Time (eg: 09:45) + Date can be: begin-date,end-date,end-time for events over several days e.g: 19-6-2007,27-6-2007,16:30 + +---------------------------------------------------------------------------------------------------------------- + + -- Version 0.5 : 17. mar 2006 + New feature added external linkage and miltiple dates for same event syntax + date delimiter can be /.- for input. For output the event table parameter + $plugin_cf['calendar']['date_delimiter'] controls the output + New CSS clases added for the event_monthyear, event_heading,event_data + Improved way of generating event table implemented + + -- Version 0.4 : 11. sept 2005 + Title added to link in calendar mode showing event + $end_month added in the events function, here you specify the amount + of months the events function should show. + Prev/Next month button avaliable, set 'prev_next_button' to true to enable + Bug when using week_starts_mon = false + + -- Version 0.3 : Third release - 16. jun 2005 + Parameters added to config + $plugin_cf['calendar']['calendar_width'] + $plugin_cf['calendar']['event_width_date']="20%"; + $plugin_cf['calendar']['event_width_event']="60%"; + $plugin_cf['calendar']['event_width_location']="20%"; + + -- Version 0.2 : Second release - 15. jun 2005 + Some Notice: Undefined variable: for different variables diff --git a/config/config.php b/config/config.php new file mode 100644 index 0000000..aee33d8 --- /dev/null +++ b/config/config.php @@ -0,0 +1,34 @@ +%s"; +$plugin_cf['calendar']['style_headline_year']=""; +$plugin_cf['calendar']['z-index']=""; + +?> diff --git a/config/config2.php b/config/config2.php new file mode 100644 index 0000000..615c7e1 --- /dev/null +++ b/config/config2.php @@ -0,0 +1,88 @@ + diff --git a/config/metaconfig.php b/config/metaconfig.php new file mode 100644 index 0000000..ce46232 --- /dev/null +++ b/config/metaconfig.php @@ -0,0 +1,34 @@ + diff --git a/content/.gitignore b/content/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/css/crossout.gif b/css/crossout.gif new file mode 100644 index 0000000..584837b Binary files /dev/null and b/css/crossout.gif differ diff --git a/css/editor.css b/css/editor.css new file mode 100644 index 0000000..5cc12ec --- /dev/null +++ b/css/editor.css @@ -0,0 +1,48 @@ +#fullscreen { + width:600px; + margin:5px auto; +} +body { + margin:0; +} +p,li { +} + +i, em { + color:#006; + letter-spacing:0.05em; +} +.big, +big { + font-weight:bold; + font-size:120%; + color:#447 +} +small { + color:#444; +} +img.left { + float:left; + margin:0 10px 2px 0; +} +img.left_under { + clear:left; + float:left; + margin:0 10px 2px 0; +} +img.left2 { + float:left; + margin:0 40px 2px 0; +} +img.right { + float:right; + margin:0 0 2px 10px; +} +img.right_under { + clear:right; + float:right; + margin:0 0 2px 10px; +} +.red { + color:red; +} diff --git a/css/overwrite.css b/css/overwrite.css new file mode 100644 index 0000000..1f3561d --- /dev/null +++ b/css/overwrite.css @@ -0,0 +1,183 @@ +/******************************************/ +/* + These css-value serve just to send some + dummy values to the browser, so that the + the browser cache will be overwritten. + This is necessary, because if the changed + css-file has some empty values, the browser + will take old values from the cache. This + is prevented through this dummy values. +*/ +/******************************************/ +.calendar_main td { +/*sc1*/line-height:inherit; +/*sc2*/font-family:inherit; +/*sc3*/font-size:inherit; +} +.calendar_monthyear { +/* smallcalfontsize */ +/*sc3*/font-size:inherit; +} +.bigcalendar_main { +/*c2*/background-color:transparent; +/*c3*/background-image: none; +/*c4*/border-color:transparent; +/*c5*/border-width:0; +/*c37*/border-collapse:inherit; +/*c6*/border-spacing:3px; +} +.bigcalendar_monthyear { +/*c14*/margin-top:0; +} +.bigcalendar_main tr.weekdaynames td { +/*c10*/padding-top:0; +/*c11*/padding-bottom:0; +} + +.bigcalendar_monthyear_color { +/*c1*/color:; +} +.bigcalendar_monthyear span { +/*all set by config*/ +/*c31*/ + border:none; + background:none transparent; + border-radius:0; + padding:0; + margin:0; + box-shadow:0 0 0 transparent; + opacity:1; + font-size:100%; + text-transform:none; + word-spacing: 0; + letter-spacing: 0; +} +/*daynames big calendar set via program*/ +.bigcalendar_main .calendar_daynames span { + border:none; + background:transparent; + border-radius:0 0 0 0; + padding:0; + box-shadow:0 0 0 transparent; + opacity:1; + font-size:inherit; + text-transform:none; + word-spacing: 0; + letter-spacing: 0; +} +.bigcalendar_main .calendar_daynames span.today { +/*c33*/ +/*values for today‘s weekday*/ + background:transparent; + opacity:inherit; +} +.bigcalendar_main tr.calendardays { +/*c34*/font-family:inherit; +/*c35*/font-size:inherit; +} +.bigcalendar_main .eventday a { +/*c20*/border-radius:0 0 0 0; +} +.bigcalendar_main td.calendar_weekend, +.bigcalendar_main td.calendar_workday { +/*c36*/border:none; +/*c13*/height:inherit; + vertical-align: top; + text-align: left; + line-height: 1.3; + background:#fff; +/*c22*/opacity:1; +/*c20*/border-radius:0 0 0 0; +/*c21*/box-shadow:0 0 0 white; +} +.calendar_today { +/*c8*/background:transparent; +} +.calendar_shortevent3 { + border-color:/*a8*/inherit; + border-style:dotted; + border-width:/*a9*/0; +} +.calendar_startevent3 { + border-left-color:/*a8*/inherit; + border-left-style:none; + border-left-width:/*a9*/o; + border-bottom-color:/*a8*/inherit; + border-bottom-style:none; + border-bottom-width:/*a9*/0; + border-top-color:/*a8*/inherit; + border-top-style:none; + border-top-width:/*a9*/0; +} +.calendar_midevent3 { + border-bottom-color:/*a8*/inherit; + border-bottom-style:none; + border-bottom-width:/*a9*/0; + border-top-color:/*a8*/inherit; + border-top-style:none; + border-top-width:/*a9*/0; +} +.calendar_endevent3 { + border-bottom-color:/*a8*/inherit; + border-bottom-style:none; + border-bottom-width:/*a9*/0; + border-top-color:/*a8*/inheritv; + border-top-style:none; + border-top-width:/*a9*/0; + border-right-color:/*a8*/inherit; + border-right-style:none; + border-right-width:/*a9*/0; +} + +.calendar_startevent { + border-left-color:/*a6*/inherit; + border-left-style:none; + border-left-width:/*a7*/0; + border-bottom-style:none; + border-bottom-color:/*a6*/inherit; + border-bottom-width:/*a7*/0; +} +.calendar_midevent { + border-bottom-style:none; + border-bottom-color:/*a6*/inherit; + border-bottom-width:/*a7*/0; +} +.calendar_endevent { + border-bottom-style:none; + border-bottom-color:/*a6*/inherit; + border-bottom-width:/*a7*/0; + border-right-color:/*a6*/inherit; + border-right-style:none; + border-right-width:/*a7*/0; +} +.bigcalendar_main .calendar_shortevent3 a, +.bigcalendar_main .calendar_startevent3 a, +.bigcalendar_main .calendar_midevent3 a, +.bigcalendar_main .calendar_endevent3 a { + border-bottom-color:/*a8*/inherit; + border-bottom-style:none; + border-bottom-width:/*a9*/inherit; +} +.calendar_today, .calendar_today a { +/*sc6*/background-color:inherit; +/*sc5*/color:inherit; +/*sc7*/font-weight:inherit; +} + +.calendar_main .calendar_birthday a { +/*sc4*/background-image:none; +background-position: inherit; +background-repeat:inherit; +} +.anniversary { +/*c19*/background-color:inherit; +} +span.anniversary .big { +/*c19*/background-color:inherit; +} + +/*different background-color for birthdays*/ +.birthday_data_row td { +/*b11*/background-color:; +} + diff --git a/css/redstripes.gif b/css/redstripes.gif new file mode 100644 index 0000000..1bd5910 Binary files /dev/null and b/css/redstripes.gif differ diff --git a/css/stripes.gif b/css/stripes.gif new file mode 100644 index 0000000..25f265e Binary files /dev/null and b/css/stripes.gif differ diff --git a/css/stylesheet.css b/css/stylesheet.css new file mode 100644 index 0000000..c05dace --- /dev/null +++ b/css/stylesheet.css @@ -0,0 +1,1080 @@ +/******************************************/ +/* */ +/* Display of Calendar */ +/* */ +/******************************************/ +/*Codes like "c27" let the config utility +find the values to be changed. So don't +separate these values from their css-variables. +You may however change the css-values by hand +and move the variable together with the code. */ + +.calendar_main, +.bigcalendar_main { + text-align: center; + border-collapse: collapse; + width:100%; + table-layout: fixed; +} +.calendar_main td { + line-height:/*sc1*/2.2; + font-family:/*sc2*/inherit; + font-size:/*sc3*/8pt; + width:14%; +} +.calendar_main td a, +.bigcalendar_main td a { + text-decoration: none; + display: block; +} +.calendar_main td a:hover, +.bigcalendar_main td a:hover { + background-color: red !important; + color: white !important; + font-weight: bold !important; +} + +/*Calendar headline of month and year*/ +/* =================================== */ +.calendar_monthyear { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-weight: bold; +/* smallcalfontsize */ + font-size:/*sc3*/8pt; + white-space: nowrap; +} +/*previous and next month button*/ +.calendar_monthyear a { + text-decoration: none; + color: red; + display: inline !important; +} +/*Calendar subheading with daynames*/ +.calendar_daynames { + color: #888; + font-weight: bold; +} +/* columns? */ +.months_in_columns { + vertical-align: top; + border:1px solid silver; +} +.calendarheadline { + text-align: center; +} +.calendarheadline a { + text-decoration: none; +} + +/* ============================================ */ +/* Special settings for B I G C A L E N D A R */ +/* ============================================ */ + +/* General settings */ +/*==================*/ +.bigcalendar_main { + background-color:/*c2*/; + background-image:/*c3*/; + border-color:/*c4*/black; + border-width:/*c5*/0px; + border-style: solid; + border-collapse:/*c37*/collapse; + border-spacing:/*c6*/0px; +} +.bigcalendar_main td { + width:14%; +} +/* Headline of big calendar */ +/*============================*/ +.bigcalendar_monthyear { + white-space: nowrap; + margin-top:/*c14*/; +} +.bigcalendar_monthyear a { + display: inline !important; + color:red; +} +.bigcalendar_monthyear span { +/*these values are entered via config-program*/ +/*c31*/ + +} +.bigcalendar_monthyear_color { + color:/*c1*/; +} +.bigcalendar_monthyear span a, +.bigcalendar_monthyear span a:hover{ + font-weight: normal !important; +} +/* weekday names big calendar */ +/*==============================*/ +.bigcalendar_main tr.weekdaynames td { + padding-top:/*c10*/; + padding-bottom:/*c11*/1em; +} +.bigcalendar_main .calendar_daynames { + text-align:center; + font-size: 12px; + color:/*c18*/; +} +/*weekday names additional css*/ +.bigcalendar_main .calendar_daynames span { +/*these values are entered via config program*/ +/*c32*/ + +} +/*today's weekday name in subhead big calendar*/ +.bigcalendar_main .calendar_daynames span.today { +/*these values are entered via config program*/ +/*c33*/ +/*values for today‘s weekday*/ +} + +/* Day fields big calendar */ +/*=============================*/ +.bigcalendar_main tr.calendardays { + font-family:/*c34*/inherit; + font-size:/*c35*/8pt; +} +span.no_event { + padding-left: 3px; +} +.bigcalendar_main .eventday a { + border-radius:/*c20*/; + padding-left: 3px; +} +.bigcalendar_main td.calendar_weekend, +.bigcalendar_main td.calendar_workday { + border:/*c36*/1px solid #000000; + height:/*c13*/8em; + vertical-align: top; + text-align: left; + line-height: 1.3; + background:#fff; + opacity:/*c22*/1; + border-radius:/*c20*/; + box-shadow:/*c21*/; +} +.bigcalendar_main td.eventday { + opacity:1 !important; +} + +/* Contents of big calendar day fields */ +/* =================================== */ +.big_holidayname { + white-space: nowrap; + overflow:hidden; + font-weight:normal; + color:#444; + font-size:80% +} +.big_entry { + white-space:/*c7*/normal; + overflow:hidden; + padding-left:/*c38*/1px; + padding-bottom:/*c38*/1px; +} +.big_time { + font-weight:normal; + font-style: italic; + color:#04f; +} +.big_entry1 { + font-weight:normal; + font-style: italic; + color:#048; +} +.big_event { + font-weight:normal; + font-style: normal; + color:#620; +} +.bigcalendar_main .anniversary { + font-weight:normal; + font-style: normal; + color:#d20; +} +div.anniversary { + /* border-top:2px solid #bbb; + border-bottom:2px solid #bbb; */ + background-color:/*c19*/#F5EDFF !important; + /* padding-bottom:2px; + margin: 2px 0 1px; */ + overflow: hidden; +} + +p.hint_under_bigcalendar { + text-align:center; + margin-top:0; +} + +/* Styling of calendar days */ +/* ======================== */ +.calendar_noday { +/*empty fields in the beginning +and end of month day numbers*/ +} + +/*normal day*/ +.calendar_workday, +.calendar_workday a { + color:/*a1*/#055; + font-weight: normal; +} +/*weekends*/ +.calendar_weekend, +.calendar_weekend a { + color:/*a2*/#0033FF; + font-weight: bold; +} +/*holidays*/ +.calendar_holiday a { + color:/*a3*/#FF0000; + font-weight: bold; +} + +.calendar_shortevent a, +.calendar_startevent a, +.calendar_startevent2 a, +.bigcalendar_main .calendar_midevent a, +.bigcalendar_main .calendar_endevent a, +.bigcalendar_main .calendar_startevent a, +.calendar_midevent2 a, +.calendar_endevent2 a { + color:/*a4*/; + background-color:/*a5*/#E3FFE4 !important; + font-weight:/*a10*/; +} + +.calendar_shortevent3 { + border-color:/*a8*/#3029FF; + border-style:dotted; + border-width:/*a9*/1px; +} +.calendar_startevent3 { + border-left-color:/*a8*/#3029FF; + border-left-style:dotted; + border-left-width:/*a9*/1px; + border-bottom-color:/*a8*/#3029FF; + border-bottom-style:dotted; + border-bottom-width:/*a9*/1px; + border-top-color:/*a8*/#3029FF; + border-top-style:dotted; + border-top-width:/*a9*/1px; +} +.calendar_midevent3 { + border-bottom-color:/*a8*/#3029FF; + border-bottom-style:dotted; + border-bottom-width:/*a9*/1px; + border-top-color:/*a8*/#3029FF; + border-top-style:dotted; + border-top-width:/*a9*/1px; +} +.calendar_endevent3 { + border-bottom-color:/*a8*/#3029FF; + border-bottom-style:dotted; + border-bottom-width:/*a9*/1px; + border-top-color:/*a8*/#3029FF; + border-top-style:dotted; + border-top-width:/*a9*/1px; + border-right-color:/*a8*/#3029FF; + border-right-style:dotted; + border-right-width:/*a9*/1px; +} + +.calendar_startevent { + border-left-color:/*a6*/#43E85F; + border-left-style:dotted; + border-left-width:/*a7*/2px; + border-bottom-style:dotted; + border-bottom-color:/*a6*/#43E85F; + border-bottom-width:/*a7*/2px; +} +.calendar_midevent { + border-bottom-style:dotted; + border-bottom-color:/*a6*/#43E85F; + border-bottom-width:/*a7*/2px; +} +.calendar_endevent { + border-bottom-style:dotted; + border-bottom-color:/*a6*/#43E85F; + border-bottom-width:/*a7*/2px; + border-right-color:/*a6*/#43E85F; + border-right-style:dotted; + border-right-width:/*a7*/2px; +} +.bigcalendar_main .calendar_shortevent3 a, +.bigcalendar_main .calendar_startevent3 a, +.bigcalendar_main .calendar_midevent3 a, +.bigcalendar_main .calendar_endevent3 a { + border-bottom-color:/*a8*/#3029FF; + border-bottom-style:dotted; + border-bottom-width:/*a9*/1px; +} + +.calendar_today, .calendar_today a { + background-color:/*sc6*/#DAD9FF !important; + color:/*sc5*/; + font-weight:/*sc7*/; +} + +.calendar_main .calendar_birthday a { + background-image:/*sc4*/ url(../backgroundimages/yellow_lozange.gif) !important; + background-position: center !important; + background-repeat: no-repeat !important; +} + + +/* ==================================== */ +/* ======== Calendar-Popups =========== */ +/* ==================================== */ +.calendar_main a.info_pop-up:hover span, +.bigcalendar_main a.info_pop-up:hover span { + text-align:left; + font-weight:normal; + font-family:/*p4*/Verdana, Sans-Serif; + font-size:/*p5*/8.5pt; +} +.holiday_name, .cal_separator { + padding-bottom:2px !important; + margin-bottom:3px !important; + border-bottom: 1px solid #999 !important; + display:block !important; +} +.time_popup { + color: #03a !important; + font-style: italic; + letter-spacing: 1px; + display:block !important; +} +.endtime_popup { + color: #037; + font-style: italic; + letter-spacing: 1px; + padding-left:32px; + display:block !important; +} +.date_popup, .entry1_popup { + padding-left:32px !important; + display:block !important; +} +.entry1_popup { + font-style:italic; + color:#037 !important; +} +.event_popup { + font-weight:bold !important; + padding-left:32px !important; + color:black; + display:block !important; +} +.entry3_popup { + color: #940 !important; + padding-left:32px !important; + display:block !important; +} +span.anniversary { + background-color:/*c19*/#F5EDFF !important; +} +span.anniversary .big { + background-color:/*c19*/#F5EDFF !important; +} +.calendar_main a.info_pop-up:hover span .anniversary, +.bigcalendar_main a.info_pop-up:hover span .anniversary { + border:none; +} + +.bigcalendar_main a.info_pop-up, +.calendar_main a.info_pop-up { + cursor: pointer; +} +/*location of the pop-up frames*/ +/*there are different possibilites*/ +.calendar_main a.info_pop-up:hover span.right { + top:1em; + left:200px; +} +a.info_pop-up:hover span.down0 { + top:3em; + left:160px; +} +a.info_pop-up:hover span.down1 { + top:3em; + left:150px; +} +a.info_pop-up:hover span.down2 { + top:3em; + left:140px; +} +a.info_pop-up:hover span.down3 { + top:3em; + left:90px; +} +a.info_pop-up:hover span.down4 { + top:3em; + left:40px; +} +a.info_pop-up:hover span.down5 { + top:3em; + left:30px; +} +a.info_pop-up:hover span.down6 { + top:3em; + left:20px; +} +.bigcalendar_main a.info_pop-up:hover span { + top:4.5em; +} +.bigcalendar_main a.info_pop-up:hover span.left { + left:3em; +} +.bigcalendar_main a.info_pop-up:hover span.right { + left:200px; +} + + +/******************************************/ +/* */ +/* Display of event list */ +/* */ +/******************************************/ + +table.eventlist, +table.crossout { + width:100%; +} +table.crossout .event_data_row td, +table.crossout .birthday_data_row td, +table.crossout .event_description { + background:url(crossout.gif); +} +.eventfull td { + background-image:url(stripes.gif); +} +.bookedout { + position:absolute; + margin:0 0 0 5em; + color:#fbb; + font-weight:normal; + font-size:180%; + letter-spacing:.7em; + line-height:.5; + /* opacity:.7; */ +} +.event_data { + font-family:/*b15*/inherit; +} + +/* announcing text in event list */ +.period_of_events { + font-size: 110%; + font-variant: small-caps; + margin-bottom: .5em; +} +.period_of_events span { + font-size: 91%; + font-weight: bold; + font-variant: normal; +} + +/*Heading with month and year*/ +.event_monthyear { + font-weight: bold !important; + font-size:/*b18*/110%; + padding-top: 1.5em !important; + padding-bottom: .2em; +} +/*sub heading*/ +.event_heading_row td { + background-color: #eee; + line-height:1.25; + color: #777 !important; + font-weight: bold; + font-style: italic; + font-size:/*b17*/70%; +} +.event_heading { + height:12px; + padding-left:1px; +} + +.event_data_row td, +.birthday_data_row td { +/*definition here take precedence + over definitions in fields*/ + /* color:black;*/ + font-size:/*b16*/95%; + line-height:1.5; + padding:.4em .15em; +} + +/*different background-color for birthdays*/ +.birthday_data_row td { + background:/*b11*/#FFE8BF; +} + +/*================================*/ +/*show past events in grey*/ +/*================================*/ +.past_event td, .past_event a, +.past_event i, .past_event li, +.past_event u { + background: transparent; + color:#999 !important; +} +.past_event span.big { + color:#999 !important; +} +.past_event b, .past_event td b { + color:#aaa !important; +} +.past_event a.info_pop-up:hover span { + background: white; + border:2px solid #ddd; +} +/*no description in past events*/ +.past_event td.event_description { + display: none; +} +/*================================*/ + + +/*this is for ALL data fields*/ +.event_data { + vertical-align: middle; +} + +.event_date { + width:/*b1*/15%; + background:/*b9*/#FFFBF0; +} +.event_time { + width:/*b2*/11%; + background:/*b10*/#E6FFE8; +} +.event_entry1 { + width:/*b13*/14%; + background:/*b14*/#EBFFFC; +} +.event_main_entry { + width:/*b3*/17%; + background:/*b4*/#EDEBFF; + font-weight:/*b12*/normal; +} +.event_entry3 { + width:/*b5*/17%; + background:/*b6*/#FFF0FB; +} +.event_link { + width:/*b7*/8.5%; + background:/*b8*/#eee; + text-align:center; +} +/*description field*/ +td.event_description { + padding:0; +} +.event_description { + padding-bottom:2em !important; +} + + +/*====================================*/ +/*settings for some reduced formatting in +fields, mainly additional description field*/ + + +td.event_description span.big, +td.event_description big, +td.event_data span.big, +td.event_data big, +a.info_pop-up:hover span span.big, +a.info_pop-up:hover span big { + font-size:120%; + font-weight:bold; + color: #337; +} +td.event_data small, +td.event_description small, +a.info_pop-up:hover span small { + color:#444; +} +td.event_data i, +td.event_data em, +td.event_description i, +td.event_description em, +a.info_pop-up:hover span i, +a.info_pop-up:hover span em { + letter-spacing: 0.05em; + color:#006; +} + +td.event_description p span.red, +td.event_description span.red, +td.event_data .red, +a.info_pop-up:hover span .red, +.bigcalendar_main .red { + color:red; +} + +.eventlist img.left, +.crossout img.left { + float:left; + margin:0 10px 2px 0; +} +.eventlist img.left_under, +.crossout img.left_under { + clear:left; + float:left; + margin:0 10px 2px 0; +} +.eventlist img.left2, +.crossout img.left2 { + float:left; + margin:0 40px 2px 0; +} +.eventlist img.right, +.crossout img.right { + float:right; + margin:0 0 2px 10px; +} +.eventlist img.right_under, +.crossout img.right_under { + clear:right; + float:right; + margin:0 0 2px 10px; +} + + + +/*********************************************/ +/* pop-up with mouse over the info icon */ +/*********************************************/ +td.event_link a img, a.info_pop-up img { + border:none; +} +a.info_pop-up:hover img { /*IE8 Hack*/ + vertical-align:text-bottom\9; +} +a.info_pop-up { + position:relative; + cursor: help; + text-decoration: none; + background: transparent; +} +a.info_pop-up:hover { + background:#ffffff; + text-decoration:none; + z-index: 1; +} +a.info_pop-up span { + display: none; +} +a.info_pop-up:hover span { + font-family:/*p4*/Verdana, Sans-Serif; + font-size:/*p5*/8.5pt; + line-height:1.4; + display:inline; + position:absolute; + top:-3em; + left:-2em; + width:15em; + border-width:/*p2*/2px; + border-style: solid; + border-color:/*p1*/#f00; + padding: 4px 5px; + margin-left: -160px; + width: 160px; + background:/*p3*/#dfd; + color:black; + text-align:left; +} +a.info_pop-up.wider:hover span { + width:35em; + left:-25em; +} +a.info_pop-up:hover span span { + position: static; + width:auto; + border:none; + padding:0; + margin:0; +} +a.info_pop-up span table td { + font-family:/*p4*/Verdana, Sans-Serif; + font-size:/*p5*/8.5pt; +} + + +/*********************************************/ +/* marquee style announcement of next event */ +/*********************************************/ + +.calendar_marquee { + width: 100%; + /*height set in config!*/ + color: #777; + margin: 10px 0; + padding:0; + border: 1px solid #aaf; + +} +.calendar_marquee div { + width: 100%; + +} +.nextevent_dateline { + width: 100%; + color: #555; + letter-spacing: 0.15em; + font-size: 85%; + font-weight: bold; + text-align: center; + padding:0 0 2px; + margin:0; + /*height set in config!*/ + background: #def; +} +.color1 { + background:#efe; +} +.color2 { + background:#fee; +} +.color3 { + background:#eff; +} +.color4 { + background:#fef; +} +.color5 { + background:#ffe; +} +.color6 { + background:#eef; +} +.color7 { + background:#dee; +} +.color8 { + background:#edf; +} +.color9 { + background:#ede; +} +.nextevent_1stline { + font-size: 16px; + font-weight: bold; + letter-spacing: .1em; + margin:0; + text-align: center; +} +.nextevent_2ndline { + font-size: 13px; + font-style: italic; + margin:0; + text-align: center; +} + + +/*========================================*/ +/*========================================*/ +/* */ +/* B A C K E N D */ +/* */ +/*========================================*/ +/*========================================*/ +/* Admin menu */ +/******************************************/ +.calendar_admin_menu a { + font-size:80%; +} +.calendar_admin_menu a.selected{ + border-bottom: 2px solid red; + text-decoration: none; +} + +/******************************************/ +/* backend input */ +/******************************************/ +.nowrap { + white-space: nowrap; +} + +/* ============= config ================ */ +.eventlistconfig div { + width:9em; + float:left; +} +.eventlistconfig { + line-height: 1.8; + font-size: 12px; + font-family: tahoma, verdana,arial, sans-serif; +} +.eventlistconfig input { + vertical-align: baseline; +} +.calendar_config div div { + float:left; + height:2.3em; + white-space: nowrap; + margin-right:1em; + font: normal normal 12px tahoma, verdana,arial, sans-serif; +} +.config_text, .config_text form { + font: normal normal 12px tahoma, verdana,arial, sans-serif; + margin:0; + padding:0; +} +.calendar_config .cal_separator { + clear:both; + width:100%; + border-top:1px solid #999; + border-bottom-style: none !important; + height:4px; + margin:2px 0 0 0; + padding:0; +} +#eventlistconfig .cal_separator { + padding-top:3px; + margin-bottom:8px; +} +.calendar_config textarea { + clear:both; + padding:0; + margin:0; + font: normal normal 12px/1.4 verdana; + background:white; + color:black; +} +#headlineconfig, #daynameconfig { + clear:both; + display:none; + height:10em; + width:25em; +} + +.title { + border-bottom:1px dashed #888; +} +.color, #master-picker { + width:5em; +} +#eventlistconfig input { + font-size:12px; +} +.config_button { + width:1.5em; + padding:0; + border-style:outset; + background:#ccc; +} +.config_button_pressed { + width:1.5em; + padding:0; + border-style:inset; + background:#eee; +} +/* =========== input table ============= */ +.error { + color:red; + font-weight: bold; +} +.success { + color:green; + font-weight: bold; +} +.calendar_input td.eventfile_notice { + font: normal normal 10pt/1.3 Arial, sans-serif; + color:black; +} +.calendar_input { + border: 2px solid #777; + padding:0 3px 3px; + background: #eee; + width:100%; + margin-bottom: .5em; + /*table-layout: fixed;*/ +} +.calendar_input .column1 { + min-width:86px; +} +.calendar_input .column2 { + min-width:40px; +} +.calendar_input .column3 { + min-width:40px; +} +.calendar_input .column4 { + min-width:86px; +} + +.calendar_input td { + font-family: arial, sans-serif; + margin:0; + padding:0; +} + +.calendar_input input, +.calendar_input textarea, +.calendar_input select { + font-family: tahoma, verdana, arial, sans-serif; + font-size:8.5pt; + text-indent:0; + vertical-align: middle; +} +.calendar_input textarea { + padding:0; + margin:0; + background:white; +} +.calendar_input textarea.calendar_input_event { + height:5em; +} + +.calendar_input textarea.description { + font: normal normal 12px/1.4 Consolas,monospace; + width:100%; +} +.calendar_input_caption, +.calendar_input_caption td { + vertical-align: bottom; + font-size: 11px; + line-height:1.3; + color:black; +} +.calendar_input_caption_rightaligned, +.calendar_input_caption_leftaligned { + text-align: right; + font-size: 11px; + line-height:1.3; + padding-right:3px; + vertical-align: middle; + color:black; +} +.calendar_input_caption_leftaligned { + text-align: left; + color:black; +} + +.calendar_input_date { + width:60px; +} +.calendar_input_time { + width:34px; +} +.moredates { + width:100%; +} +.calendar_input_event { +/*controls main_entry and entry3*/ + min-width:200px; + width: 100%; +} +input.calendar_input_links { + font-family:consolas,'Courier New', 'Andale Mono',monospace !important; +} +.input_highlighting { + color:#c00; +} +.calendar_edit_off, +.calendar_edit_on { + width:16px; + margin-left:-16px; + background:white; + border:1px solid grey; + color:black; +} +.calendar_edit_off:hover, +.calendar_edit_on:hover { + border:1px solid red; + color:red; +} +.toggle { + width:16px; + background:white; + border:1px solid grey; + color:black; +} +.toggle:hover { + border:1px solid red; + color:red; +} + + +/******************************************/ +/* backup admininistration and file view */ +/******************************************/ +table.source_view { + border: 2px solid #777; + padding:0 3px 3px; + background: #eee; + margin-bottom: 2em; + position: absolute; + width:900px; + margin-left:-450px; + left: 50%; +} +.source_view input.submit { + min-width: 100px; + letter-spacing: .2em; + font-weight: bold; +} +table.source_view textarea { + height:30em; + padding:0; + margin:0; + background:white; + font: normal normal 13px/1.4 Consolas, monospace; +} +table.source_view td.filestructure { + font: bold normal 11px/1.5 Consolas, monospace; + letter-spacing: 0.01em; + color:black; +} +table.source_view input { + width: 15em; +} +table.source_view td.filestructure span.comma { + color: red; + font-weight:bold; + font-size: 140%; + line-height: 60%; + background:#bfb; +} +#hidden_merge_menu, +#hidden_delete_menu, +#hidden_source_view_links, +#hidden_preset_links { + display: none; +} + +.filelist td{ + margin:0; + font-family:verdana; + font-size:12px; + line-height:1.4; + color:black; +} + +.filename { + font-size:15px !important; + font-family: Consolas,monospace !important; + height:3ex !important; + width:14em; +} +.calendar_button { + color:black; + border-style:outset; + background: #dedede; + letter-spacing: 1px; + padding:1px 0; +} +.calendar_button_pressed { + color: #a00; + border-style:inset; + background:#eee; + letter-spacing: 1px; + padding:1px 0; +} + diff --git a/dp/backstripes.gif b/dp/backstripes.gif new file mode 100644 index 0000000..63f1403 Binary files /dev/null and b/dp/backstripes.gif differ diff --git a/dp/bg_header.jpg b/dp/bg_header.jpg new file mode 100644 index 0000000..10dbd74 Binary files /dev/null and b/dp/bg_header.jpg differ diff --git a/dp/bullet1.gif b/dp/bullet1.gif new file mode 100644 index 0000000..ae352c2 Binary files /dev/null and b/dp/bullet1.gif differ diff --git a/dp/bullet2.gif b/dp/bullet2.gif new file mode 100644 index 0000000..04b293d Binary files /dev/null and b/dp/bullet2.gif differ diff --git a/dp/cal-grey.gif b/dp/cal-grey.gif new file mode 100644 index 0000000..484e977 Binary files /dev/null and b/dp/cal-grey.gif differ diff --git a/dp/cal.gif b/dp/cal.gif new file mode 100644 index 0000000..8526cf5 Binary files /dev/null and b/dp/cal.gif differ diff --git a/dp/datepicker.css b/dp/datepicker.css new file mode 100644 index 0000000..6584ef3 --- /dev/null +++ b/dp/datepicker.css @@ -0,0 +1,511 @@ +/* This is a very basic stylesheet for the date-picker. Feel free to create your own. */ + +/* Hide the input by using a className */ +input.fd-hidden-input, +select.fd-hidden-input + { + display:none; + } +/* Screen reader class - hides it from the visual display */ +.fd-screen-reader + { + position:absolute; + left:-999em; + top:0; + width:1px; + height:1px; + overflow:hidden; + outline: 0 none; + -moz-outline: 0 none; + } +/* Disabled datePicker and activation button */ +a.dp-disabled, +.dp-disabled table + { + opacity:.3 !important; + filter:alpha(opacity=40); + } +.dp-disabled, +.dp-disabled td, +.dp-disabled th, +.dp-disabled th span + { + cursor:default !important; + } +a.date-picker-control:focus, +div.datePicker table td:focus + { + overflow:hidden; + outline:0 none; + -moz-outline: 0 none; + color:rgb(100,130,170) !important; + } +/* The wrapper div */ +div.datePicker + { + position:absolute; + z-index:9999; + text-align:center; + + /* Change the font-size to suit your design's CSS. The following line is for the demo that has a 12px font-size defined on the body tag */ + font:900 0.8em/1em Verdana, Sans-Serif; + + /* For Example: If using the YUI font CSS, uncomment the following line to get a 10px font-size within the datePicker */ + /* font:900 77%/77% Verdana, sans-serif; */ + + /* Or, if you prefer a pixel precision */ + /* font:900 12px/12px Verdana, sans-serif; */ + + background:transparent; + + /* Mozilla & Webkit extensions to stop text-selection. */ + -moz-user-select:none; + -khtml-user-select:none; + } +/* Styles for the static datePickers */ +div.static-datepicker + { + position:relative; + top:5px; + left:0; + } +div.datePicker table + { + width:auto; + height:auto; + border-collapse:separate; + } +/* Draggable datepickers */ +div.datePicker tfoot th.drag-enabled, +div.datePicker thead th.drag-enabled, +div.datePicker thead th.drag-enabled span + { + cursor:move; + } +/* The iframe hack to cover selectlists in Internet Explorer <= v6 */ +iframe.iehack + { + position:absolute; + background:#fff; + z-index:9998; + padding:0; + border:0; + display:none; + margin:0; + } +/* The "button" created beside each input for non-static datePickers */ +a.date-picker-control:link, +a.date-picker-control:visited + { + position:relative; + /* Moz & FF */ + display: -moz-inline-stack; + border:0 none; + padding:0; + margin:0 0 0 4px; + background:transparent url(cal-grey.gif) no-repeat 50% 50%; + min-width:16px; + line-height:1; + cursor:pointer; + visibility:visible; + text-decoration:none; + vertical-align:top; + } +a.date-picker-control:hover, +a.date-picker-control:active, +a.date-picker-control:focus, +a.dp-button-active:link, +a.dp-button-active:visited, +a.dp-button-active:hover, +a.dp-button-active:active, +a.dp-button-active:focus + { + background:transparent url(cal.gif) no-repeat 50% 50% !important; + } +/* Feed IE6 the following rule, IE7 should handle the min-width declared above */ +* html a.date-picker-control + { + width:16px; + } +/* IE, Safari & Opera. Seperate CSS rule seems to be required. */ +a.date-picker-control + { + display:inline-block; + } +a.date-picker-control span + { + display:block; + width:16px; + height:16px; + margin:auto 0; + } +/* Default "button" styles */ +div.datePicker thead th span + { + display:block; + padding:0; + margin:0; + text-align:center; + line-height:1em; + border:0 none; + background:transparent; + font-weight:bold; + cursor:pointer; + } +/* The "month, year" display */ +div.datePicker th span.month-display, +div.datePicker th span.year-display + { + display:inline; + text-transform:uppercase; + letter-spacing:1px; + font:normal 1.2em Verdana, Sans-Serif; + cursor:default; + } +/* Next & Previous (month, year) buttons */ +div.datePicker th span.prev-but, +div.datePicker th span.next-but + { + font-weight:lighter; + font-size:2.4em; + font-family: georgia, times new roman, palatino, times, bookman, serif; + cursor:pointer !important; + } +/* Hover effect for Next & Previous (month, year) buttons */ +div.datePicker th span.prev-but:hover, +div.datePicker th span.next-but:hover, +div.datePicker th span.today-but:hover + { + color:#a84444; + } +/* Today button */ +div.datePicker th span.today-but + { + text-align:center; + margin:0 auto; + font:normal 1em Verdana, Sans-Serif; + width:100%; + text-decoration:none; + padding-top:0.3em; + text-transform:uppercase; + vertical-align:middle; + cursor:pointer !important + } +/* Disabled buttons */ +div.dp-disabled th span.prev-but, +div.dp-disabled th span.next-but, +div.dp-disabled th span.today-but, +div.dp-disabled th span.prev-but:hover, +div.dp-disabled th span.next-but:hover, +div.dp-disabled th span.today-but:hover, +div.datePicker th span.prev-but.fd-disabled:hover, +div.datePicker th span.next-but.fd-disabled:hover, +div.datePicker thead th span.fd-disabled, +div.datePicker th span.fd-disabled:hover + { + color:#aaa; + cursor:default !important; + opacity:1; + } +/* The mon, tue, wed etc day buttons */ +div.datePicker th span.fd-day-header + { + text-align:center; + margin:0 auto; + font:900 1em Verdana, Sans-Serif; + text-decoration:none; + text-transform:lowercase; + cursor:pointer; + } +/* The table */ +div.datePicker table + { + margin:0; + padding:0; + border:1px solid #ccc; + background:#fff url(gradient-e5e5e5-ffffff.gif) repeat-x 0 -20px; + text-align:center; + border-spacing:2px; + padding:0.3em; + width:auto; + empty-cells:show; + border-radius:0.8em; + -moz-border-radius:0.8em; + -moz-box-shadow:0px 0px 5px #aaa; + } +/* Common TD & TH styling */ +div.datePicker table td, +div.datePicker table tbody th + { + border:0 none; + padding:0; + text-align:center; + vertical-align:middle; + cursor:pointer; + background:#fff url(gradient-e5e5e5-ffffff.gif) repeat-x 0 -40px; + width:3em; + height:3em; + overflow:hidden; + outline:transparent none 0px; + border:1px solid #ccc; + text-transform:none; + -moz-border-radius:2px; + border-radius:2px; + } +div.datePicker table td:focus, +div.datePicker table td:active + { + outline:0 none red; + } +div.datePicker table th + { + border:0 none; + padding:0; + font-weight:bold; + color:#222; + text-align:center; + vertical-align:middle; + text-transform:none; + } +div.datePicker table thead th + { + height:auto !important; + } +div.datePicker table tbody th + { + border:1px solid #dcdcdc; + } +/* Week number display */ +div.datePicker table thead th.date-picker-week-header, +div.datePicker table tbody th.date-picker-week-header + { + font-style:oblique; + background:transparent; + cursor:default; + } +div.datePicker table thead th.date-picker-week-header + { + cursor:help; + border:0 none; + padding:0 0 0.2em 0; + } +/* tfoot status bar */ +div.datePicker tfoot th + { + cursor:default; + font-weight:normal; + text-transform:uppercase; + letter-spacing:0.1em; + border:0 none; + background:#fff; + height:2.8em; + } +/* TD cell that is _not_ used to display a day of the month */ +div.datePicker table tbody td.date-picker-unused + { + background:#fff url(backstripes.gif); + border-color:#dcdcdc; + cursor:default !important; + } + +/* The TH cell used to display the "month, year" title */ +div.datePicker table thead th.date-picker-title + { + width:auto; + height:auto; + padding:0.4em 0; + } +/* The "mon tue wed etc" day header styles */ +div.datePicker table thead th.date-picker-day-header + { + text-transform:lowercase; + cursor:help; + height:auto; + } +/* The "todays date" style */ +div.datePicker table tbody td.date-picker-today + { + background:#fff url(bullet2.gif) no-repeat 0 0; + color:rgb(100,100,100) !important; + } + +div.datePicker table tbody td.month-out.date-picker-highlight + { + color:#aa8866 !important; + } +/* The "highlight days" style */ +div.datePicker table tbody td.date-picker-highlight, +div.datePicker table thead th.date-picker-highlight + { + color:#a86666 !important; + } +/* The "active cursor" style */ +div.datePicker table tbody td.date-picker-hover + { + background:#fff url(bg_header.jpg) no-repeat 0 0; + cursor:pointer; + border-color:rgb(100,130,170) !important; + color:rgb(100,130,170); + text-shadow: 0px 1px 1px #fff; + } +/* The "disabled days" style */ +div.datePicker table tbody td.day-disabled + { + background:#fff url(backstripes.gif) no-repeat 0 0; + color:#aaa !important; + cursor:default; + text-decoration:line-through; + } +div.datePicker table tbody td.month-out + { + border-color:#ddd; + color:#aaa !important; + background:#fff url(gradient-e5e5e5-ffffff.gif) repeat-x 0 -40px; + } +/* The "selected date" style */ +div.datePicker table tbody td.date-picker-selected-date + { + color:#333 !important; + border-color:#333 !important; + } +/* The date "out of range" style */ +div.datePicker table tbody td.out-of-range, +div.datePicker table tbody td.not-selectable + { + color:#ccc !important; + font-style:oblique; + background:#fcfcfc !important; + cursor:default !important; + } +/* Week number "out of range" && "month-out" styles */ +div.datePicker table tbody th.month-out, +div.datePicker table tbody th.out-of-range + { + color:#aaa !important; + font-style:oblique; + background:#fcfcfc !important; + } +/* week numbers "out of range" */ +div.datePicker table tbody th.out-of-range + { + opacity:0.6; + filter:alpha(opacity=60); + } +/* Used when the entire grid is full but the next/prev months dates cannot be selected */ +div.datePicker table tbody td.not-selectable + { + opacity:0.8; + filter:alpha(opacity=80); + } +div.datePicker table tbody tr + { + display:table-row; + } +div.datePicker table tfoot sup + { + font-size:0.86em; + letter-spacing:normal; + text-transform:none; + height: 0; + line-height: 1; + position: relative; + top: -0.2em; + vertical-align: baseline !important; + vertical-align: top; + } +div.datePicker table thead th.date-picker-day-header, +div.datePicker table thead span.month-display, +div.datePicker table thead span.year-display + { + text-shadow: 0px 1px 1px #fff; + } +/* You can add focus effects (for everything but IE6) like so: */ + +div.datepicker-focus table.datePickerTable + { + border-color:#999 !important; + } +div.datePicker table tbody tr td:focus, +div.datePicker table tbody td.date-picker-hover + { + overflow:hidden; + outline:0px solid #ff0000; + -moz-outline: 0 none; + -o-highlight:0 none; + color:rgb(100,130,170) !important; + } +div.static-datepicker table + { + -moz-box-shadow:0 0 0 transparent; + + } +div.datepicker-focus table + { + /* Naughty, naughty - but we add a highlight using the table's border colour */ + outline:none; + -moz-box-shadow:0px 0px 5px #aaa; + } + *:-o-prefocus{outline : -o-highlight-border;} + +/* INTERNET EXPLORER WOES + ====================== + + Hover Effects + ------------- + + IE cannot deal with :focus on the TR so the datePicker script adds the class "dp-row-highlight" to the + row currently being hovered over. This should enable you to add hover effects if desired. + + e.g. the following rule will highlight the cell borders in another colour when a row is moused over, + it looks like crap though so I didn't include the rule within the demo: + +div.datePicker table tbody tr.dp-row-highlight td + { + border-color:#aaa; + } +*/ + +/* Remove the images for Internet Explorer <= v6 using the "* html" hack + This is a workaround for a nasty IE6 bug that never caches background images on dynamically created DOM nodes + which means that they are downloaded for every cell for every table - nasty! */ +* html div.datePicker table td + { + background-image:none; + } +* html div.datePicker table td.date-picker-unused + { + background:#f2f2f2; + } +body.fd-drag-active + { + -webkit-user-select:none; + } +/* Chrome has problems with the -webkit-box-shadow and -webkit-border-radius styles together + Remove one or the other to get things looking less ugly */ +@media screen and (-webkit-min-device-pixel-ratio:0) { + div.datePicker table + { + border-spacing:0.3em; + /* Naughty, naughty */ + -webkit-box-shadow:0px 0px 5px #aaa; + -webkit-border-radius:0.8em; + } + div.static-datepicker table + { + -webkit-box-shadow:0 0 0 transparent; + } + div.datepicker-focus table + { + -webkit-box-shadow:0px 0px 5px #aaa; + } + div.datePicker table td, + div.datePicker table tbody th + { + padding:0.1em; + -webkit-border-radius:2px; + } + div.datePicker table tbody td.date-picker-hover + { + -webkit-box-shadow:0px 0px 1px rgb(100,130,170); + } +} \ No newline at end of file diff --git a/dp/datepicker.js b/dp/datepicker.js new file mode 100644 index 0000000..58bae07 --- /dev/null +++ b/dp/datepicker.js @@ -0,0 +1,2898 @@ +/* + DatePicker v5.4 by frequency-decoder.com + + Released under a creative commons Attribution-Share Alike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/) + + Please credit frequency-decoder in any derivative work - thanks. + + You are free: + + * to Share to copy, distribute and transmit the work + * to Remix to adapt the work + + Under the following conditions: + + * Attribution You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). + * Share Alike If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible license. +*/ + +var datePickerController = (function datePickerController() { + + var debug = false, + isOpera = Object.prototype.toString.call(window.opera) === "[object Opera]", + isMoz = /mozilla/.test( navigator.userAgent.toLowerCase() ) && !/(compatible|webkit)/.test( navigator.userAgent.toLowerCase() ), + languageInfo = parseUILanguage(), + datePickers = {}, + uniqueId = 0, + weeksInYearCache = {}, + localeImport = false, + nbsp = String.fromCharCode(160), + describedBy = "", + nodrag = false, + buttonTabIndex = true, + returnLocaleDate = false, + mouseWheel = true, + cellFormat = "d-sp-F-sp-Y", + titleFormat = "F-sp-d-cc-sp-Y", + formatParts = isOpera ? ["placeholder"] : ["placeholder", "sp-F-sp-Y"], + dividors = ["dt","sl","ds","cc","sp"], + dvParts = "dt|sl|ds|cc|sp", + dParts = "d|j", + mParts = "m|n|M|F", + yParts = "Y|y", + kbEvent = false, + bespokeTitles = {}, + finalOpacity = 100, + validFmtRegExp = /^((sp|dt|sl|ds|cc)|([d|D|l|j|N|w|S|W|M|F|m|n|t|Y|y]))(-((sp|dt|sl|ds|cc)|([d|D|l|j|N|w|S|W|M|F|m|n|t|Y|y])))*$/, + rangeRegExp = /^((\d\d\d\d)(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))$/, + wcDateRegExp = /^(((\d\d\d\d)|(\*\*\*\*))((0[1-9]|1[012])|(\*\*))(0[1-9]|[12][0-9]|3[01]))$/; + + (function() { + var scriptFiles = document.getElementsByTagName('script'), + scriptInner = String(scriptFiles[scriptFiles.length - 1].innerHTML).replace(/[\n\r\s\t]+/g, " ").replace(/^\s+/, "").replace(/\s+$/, ""), + json = parseJSON(scriptInner); + + if(typeof json === "object" && !("err" in json)) { + affectJSON(json); + }; + + if(typeof(fdLocale) != "object") { + var head = document.getElementsByTagName("head")[0] || document.documentElement, + loc = scriptFiles[scriptFiles.length - 1].src.substr(0, scriptFiles[scriptFiles.length - 1].src.lastIndexOf("/")) + "/lang/", + script; + + for(var i = 0; i < languageInfo.length; i++) { + script = document.createElement('script'); + script.type = "text/javascript"; + script.src = loc + languageInfo[i] + ".js"; + script.charSet = "utf-8"; + + /*@cc_on + /*@if(@_win32) + var bases = document.getElementsByTagName('base'); + if (bases.length && bases[0].childNodes.length) { + bases[0].appendChild(script); + } else { + document.getElementsByTagName('head')[0].appendChild(script); + }; + bases = null; + @else @*/ + head.appendChild(script); + /*@end + @*/ + }; + script = null; + } else { + returnLocaleDate = true; + }; + })(); + + function parseUILanguage() { + var languageTag = document.getElementsByTagName('html')[0].getAttribute('lang') || document.getElementsByTagName('html')[0].getAttribute('xml:lang'); + + if(!languageTag) { + languageTag = "en"; + } else { + languageTag = languageTag.toLowerCase(); + }; + + return languageTag.search(/^([a-z]{2,3})-([a-z]{2})$/) != -1 ? [languageTag.match(/^([a-z]{2,3})-([a-z]{2})$/)[1], languageTag] : [languageTag]; + }; + + function affectJSON(json) { + if(typeof json !== "object") { return; }; + for(key in json) { + value = json[key]; + switch(key.toLowerCase()) { + case "lang": + if(value.search(/^[a-z]{2,3}(-([a-z]{2}))?$/i) != -1) { + languageInfo = [value.toLowerCase()]; + returnLocaleDate = true; + }; + break; + case "nodrag": + nodrag = !!value; + break; + case "buttontabindex": + buttonTabIndex = !!value; + break; + case "mousewheel": + mouseWheel = !!value; + break; + case "cellformat": + if(typeof value == "string" && value.match(validFmtRegExp)) { + parseCellFormat(value); + }; + break; + case "titleformat": + if(typeof value == "string" && value.match(validFmtRegExp)) { + titleFormat = value; + }; + break; + case "describedby": + if(typeof value == "string") { + describedBy = value; + }; + break; + case "finalopacity": + if(typeof value == 'number' && (+value > 20 && +value <= 100)) { + finalOpacity = parseInt(value, 10); + }; + break; + case "bespoketitles": + bespokeTitles = {}; + for(var dt in value) { + bespokeTitles[dt] = value[dt]; + }; + }; + }; + }; + + function parseCellFormat(value) { + if(isOpera) { + // Don't use hidden text for opera due to focus outline problems + formatParts = ["placeholder"]; + cellFormat = "j-sp-F-sp-Y"; + return; + }; + + // I'm sure this could be done with a regExp and a split in one line... seriously... + var parts = value.split("-"), + fullParts = [], + tmpParts = [], + part; + + for(var pt = 0; pt < parts.length; pt++) { + part = parts[pt]; + if(part == "j" || part == "d") { + if(tmpParts.length) { + fullParts.push(tmpParts.join("-")); + tmpParts = []; + }; + fullParts.push("placeholder"); + } else { + tmpParts.push(part); + }; + }; + + if(tmpParts.length) { + fullParts.push(tmpParts.join("-")); + }; + + if(!fullParts.length || fullParts.length > 3) { + formatParts = ["placeholder", "sp-F-sp-Y"]; + cellFormat = "j-sp-F-sp-Y"; + return; + }; + + formatParts = fullParts; + cellFormat = value; + }; + + function pad(value, length) { + length = length || 2; + return "0000".substr(0,length - Math.min(String(value).length, length)) + value; + }; + + function addEvent(obj, type, fn) { + try { + if( obj.attachEvent ) { + obj["e"+type+fn] = fn; + obj[type+fn] = function(){obj["e"+type+fn]( window.event );}; + obj.attachEvent( "on"+type, obj[type+fn] ); + } else { + obj.addEventListener( type, fn, true ); + }; + } catch(err) {} + }; + + function removeEvent(obj, type, fn) { + try { + if( obj.detachEvent ) { + obj.detachEvent( "on"+type, obj[type+fn] ); + obj[type+fn] = null; + } else { + obj.removeEventListener( type, fn, true ); + }; + } catch(err) {}; + }; + + function stopEvent(e) { + e = e || document.parentWindow.event; + if(e.stopPropagation) { + e.stopPropagation(); + e.preventDefault(); + }; + /*@cc_on + @if(@_win32) + e.cancelBubble = true; + e.returnValue = false; + @end + @*/ + return false; + }; + + function parseJSON(str) { + // Check we have a String + if(typeof str !== 'string' || str == "") { return {}; }; + try { + // Does a JSON (native or not) Object exist + if(typeof JSON === "object" && JSON.parse) { + return window.JSON.parse(str); + // Genious code taken from: http://kentbrewster.com/badges/ + } else if(/lang|buttontabindex|mousewheel|cellformat|titleformat|nodrag|describedby/.test(str.toLowerCase())) { + var f = Function(['var document,top,self,window,parent,Number,Date,Object,Function,', + 'Array,String,Math,RegExp,Image,ActiveXObject;', + 'return (' , str.replace(/<\!--.+-->/gim,'').replace(/\bfunction\b/g,'function') , ');'].join('')); + return f(); + }; + } catch (e) { }; + + if(debug) { + throw "Could not parse the JSON object"; + }; + + return {"err":"Could not parse the JSON object"}; + }; + + function setARIARole(element, role) { + if(element && element.tagName) { + element.setAttribute("role", role); + }; + }; + + function setARIAProperty(element, property, value) { + if(element && element.tagName) { + element.setAttribute("aria-" + property, value); + }; + }; + + // The datePicker object itself + function datePicker(options) { + this.dateSet = null; + this.timerSet = false; + this.visible = false; + this.fadeTimer = null; + this.timer = null; + this.yearInc = 0; + this.monthInc = 0; + this.dayInc = 0; + this.mx = 0; + this.my = 0; + this.x = 0; + this.y = 0; + this.created = false; + this.disabled = false; + this.opacity = 0; + this.opacityTo = 99; + this.inUpdate = false; + this.kbEventsAdded = false; + this.fullCreate = false; + this.selectedTD = null; + this.cursorTD = null; + this.cursorDate = options.cursorDate ? options.cursorDate : "", + this.date = options.cursorDate ? new Date(+options.cursorDate.substr(0,4), +options.cursorDate.substr(4,2) - 1, +options.cursorDate.substr(6,2)) : new Date(); + this.defaults = {}; + this.dynDisabledDates = {}; + this.firstDayOfWeek = localeImport.firstDayOfWeek; + this.interval = new Date(); + this.clickActivated = false; + this.noFocus = true; + this.kbEvent = false; + this.disabledDates = false; + this.enabledDates = false; + this.delayedUpdate = false; + this.bespokeTitles = {}; + + for(var thing in options) { + if(thing.search(/callbacks|formElements|formatMasks/) != -1) continue; + this[thing] = options[thing]; + }; + + /*@cc_on + @if(@_win32) + this.iePopUp = null; + this.isIE7 = false; + @end + @*/ + + /*@cc_on + @if(@_jscript_version <= 5.7) + this.isIE7 = document.documentElement && typeof document.documentElement.style.maxHeight != "undefined"; + @end + @*/ + + for(var i = 0, prop; prop = ["callbacks", "formElements", "formatMasks"][i]; i++) { + this[prop] = {}; + for(var thing in options[prop]) { + this[prop][thing] = options[prop][thing]; + }; + }; + + // Adjust time to stop daylight savings madness on windows + this.date.setHours(5); + + this.changeHandler = function() { + o.setDateFromInput(); + o.callback("dateset", o.createCbArgObj()); + }; + this.createCbArgObj = function() { + return this.dateSet ? {"id":this.id,"date":this.dateSet,"dd":pad(this.date.getDate()),"mm":pad(this.date.getMonth() + 1),"yyyy":this.date.getFullYear()} : {"id":this.id,"date":null,"dd":null,"mm":null,"yyyy":null}; + }; + this.getScrollOffsets = function() { + if(typeof(window.pageYOffset) == 'number') { + //Netscape compliant + return [window.pageXOffset, window.pageYOffset]; + } else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) { + //DOM compliant + return [document.body.scrollLeft, document.body.scrollTop]; + } else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) { + //IE6 standards compliant mode + return [document.documentElement.scrollLeft, document.documentElement.scrollTop]; + }; + return [0,0]; + }; + this.reposition = function() { + if(!o.created || o.staticPos) { return; }; + + o.div.style.visibility = "hidden"; + o.div.style.left = o.div.style.top = "0px"; + o.div.style.display = "block"; + + var osh = o.div.offsetHeight, + osw = o.div.offsetWidth, + elem = document.getElementById('fd-but-' + o.id), + pos = o.truePosition(elem), + trueBody = (document.compatMode && document.compatMode!="BackCompat") ? document.documentElement : document.body, + sOffsets = o.getScrollOffsets(), + scrollTop = sOffsets[1], + scrollLeft = sOffsets[0], + fitsBottom = parseInt(trueBody.clientHeight+scrollTop) > parseInt(osh+pos[1]+elem.offsetHeight+2), + fitsTop = parseInt(pos[1]-(osh+elem.offsetHeight+2)) > parseInt(scrollTop); + + o.div.style.visibility = "visible"; + + o.div.style.left = Number(parseInt(trueBody.clientWidth+scrollLeft) < parseInt(osw+pos[0]) ? Math.abs(parseInt((trueBody.clientWidth+scrollLeft) - osw)) : pos[0]) + "px"; + o.div.style.top = (fitsBottom || !fitsTop) ? Math.abs(parseInt(pos[1] + elem.offsetHeight + 2)) + "px" : Math.abs(parseInt(pos[1] - (osh + 2))) + "px"; + /*@cc_on + @if(@_jscript_version <= 5.7) + if(o.isIE7) return; + o.iePopUp.style.top = o.div.style.top; + o.iePopUp.style.left = o.div.style.left; + o.iePopUp.style.width = osw + "px"; + o.iePopUp.style.height = (osh - 2) + "px"; + @end + @*/ + }; + this.removeOldFocus = function() { + var td = document.getElementById(o.id + "-date-picker-hover"); + if(td) { + try { + td.setAttribute(!/*@cc_on!@*/false ? "tabIndex" : "tabindex", "-1"); + td.tabIndex = -1; + td.className = td.className.replace(/date-picker-hover/, ""); + td.id = ""; + td.onblur = null; + td.onfocus = null; + } catch(err) {}; + }; + }; + this.addAccessibleDate = function() { + var td = document.getElementById(o.id + "-date-picker-hover"); + + if(td && !(td.getElementsByTagName("span").length)) { + var ymd = td.className.match(/cd-([\d]{4})([\d]{2})([\d]{2})/), + noS = (td.className.search(/date-picker-unused|out-of-range|day-disabled|no-selection|not-selectable/) != -1), + spn = document.createElement('span'), + spnC; + + spn.className = "fd-screen-reader";; + + while(td.firstChild) td.removeChild(td.firstChild); + + if(noS) { + spnC = spn.cloneNode(false); + spnC.appendChild(document.createTextNode(getTitleTranslation(13))); + td.appendChild(spnC); + }; + + for(var pt = 0, part; part = formatParts[pt]; pt++) { + if(part == "placeholder") { + td.appendChild(document.createTextNode(+ymd[3])); + } else { + spnC = spn.cloneNode(false); + spnC.appendChild(document.createTextNode(printFormattedDate(new Date(ymd[1], +ymd[2]-1, ymd[3]), part, true))); + td.appendChild(spnC); + }; + }; + }; + }; + this.setNewFocus = function() { + var td = document.getElementById(o.id + "-date-picker-hover"); + if(td) { + try { + td.setAttribute(!/*@cc_on!@*/false ? "tabIndex" : "tabindex", "0"); + td.tabIndex = 0; + + td.className = td.className.replace(/date-picker-hover/, "") + " date-picker-hover"; + if(!this.clickActivated) { + td.onblur = o.onblur; + td.onfocus = o.onfocus; + }; + + if(!isOpera && !this.clickActivated) o.addAccessibleDate(); + + if(!this.noFocus && !this.clickActivated) { + setTimeout(function() { try { td.focus(); } catch(err) {}; }, 0); + }; + } catch(err) { }; + }; + }; + this.setCursorDate = function(yyyymmdd) { + if(String(yyyymmdd).search(/^([0-9]{8})$/) != -1) { + this.date = new Date(+yyyymmdd.substr(0,4), +yyyymmdd.substr(4,2) - 1, +yyyymmdd.substr(6,2)); + this.cursorDate = yyyymmdd; + + if(this.staticPos) { + this.updateTable(); + }; + }; + }; + this.updateTable = function(noCallback) { + if(!o || o.inUpdate || !o.created) return; + + o.inUpdate = true; + o.removeOldFocus(); + + if(o.timerSet && !o.delayedUpdate) { + if(o.monthInc) { + var n = o.date.getDate(), + d = new Date(o.date); + + d.setDate(2); + d.setMonth(d.getMonth() + o.monthInc * 1); + d.setDate(Math.min(n, daysInMonth(d.getMonth(),d.getFullYear()))); + + o.date = new Date(d); + } else { + o.date.setDate(Math.min(o.date.getDate()+o.dayInc, daysInMonth(o.date.getMonth()+o.monthInc,o.date.getFullYear()+o.yearInc))); + o.date.setMonth(o.date.getMonth() + o.monthInc); + o.date.setFullYear(o.date.getFullYear() + o.yearInc); + }; + }; + + o.outOfRange(); + if(!o.noToday) { o.disableTodayButton(); }; + o.showHideButtons(o.date); + + var cd = o.date.getDate(), + cm = o.date.getMonth(), + cy = o.date.getFullYear(), + cursorDate = (String(cy) + pad(cm+1) + pad(cd)), + tmpDate = new Date(cy, cm, 1); + + tmpDate.setHours(5); + + var dt, cName, td, i, currentDate, cellAdded, col, currentStub, abbr, bespokeRenderClass, spnC, dateSetD, + weekDayC = ( tmpDate.getDay() + 6 ) % 7, + firstColIndex = (((weekDayC - o.firstDayOfWeek) + 7 ) % 7) - 1, + dpm = daysInMonth(cm, cy), + today = new Date(), + stub = String(tmpDate.getFullYear()) + pad(tmpDate.getMonth()+1), + cellAdded = [4,4,4,4,4,4], + lm = new Date(cy, cm-1, 1), + nm = new Date(cy, cm+1, 1), + daySub = daysInMonth(lm.getMonth(), lm.getFullYear()), + stubN = String(nm.getFullYear()) + pad(nm.getMonth()+1), + stubP = String(lm.getFullYear()) + pad(lm.getMonth()+1), + weekDayN = (nm.getDay() + 6) % 7, + weekDayP = (lm.getDay() + 6) % 7, + today = today.getFullYear() + pad(today.getMonth()+1) + pad(today.getDate()), + spn = document.createElement('span'); + + o.firstDateShown = !o.constrainSelection && o.fillGrid && (0 - firstColIndex < 1) ? String(stubP) + (daySub + (0 - firstColIndex)) : stub + "01"; + o.lastDateShown = !o.constrainSelection && o.fillGrid ? stubN + pad(41 - firstColIndex - dpm) : stub + String(dpm); + o.currentYYYYMM = stub; + + bespokeRenderClass = o.callback("redraw", {id:o.id, dd:pad(cd), mm:pad(cm+1), yyyy:cy, firstDateDisplayed:o.firstDateShown, lastDateDisplayed:o.lastDateShown}) || {}; + dts = o.getDates(cy, cm+1); + + o.checkSelectedDate(); + + dateSetD = (o.dateSet != null) ? o.dateSet.getFullYear() + pad(o.dateSet.getMonth()+1) + pad(o.dateSet.getDate()) : false; + spn.className = "fd-screen-reader"; + + if(this.selectedTD != null) { + setARIAProperty(this.selectedTD, "selected", false); + this.selectedTD = null; + }; + + for(var curr = 0; curr < 42; curr++) { + row = Math.floor(curr / 7); + td = o.tds[curr]; + spnC = spn.cloneNode(false); + + while(td.firstChild) td.removeChild(td.firstChild); + + if((curr > firstColIndex && curr <= (firstColIndex + dpm)) || o.fillGrid) { + currentStub = stub; + weekDay = weekDayC; + dt = curr - firstColIndex; + cName = []; + selectable = true; + + if(dt < 1) { + dt = daySub + dt; + currentStub = stubP; + weekDay = weekDayP; + selectable = !o.constrainSelection; + cName.push("month-out"); + } else if(dt > dpm) { + dt -= dpm; + currentStub = stubN; + weekDay = weekDayN; + selectable = !o.constrainSelection; + cName.push("month-out"); + }; + + weekDay = ( weekDay + dt + 6 ) % 7; + + cName.push("day-" + localeDefaults.dayAbbrs[weekDay].toLowerCase()); + + currentDate = currentStub + String(dt < 10 ? "0" : "") + dt; + + if(o.rangeLow && +currentDate < +o.rangeLow || o.rangeHigh && +currentDate > +o.rangeHigh) { + td.className = "out-of-range"; + td.title = ""; + td.appendChild(document.createTextNode(dt)); + if(o.showWeeks) { cellAdded[row] = Math.min(cellAdded[row], 2); }; + } else { + if(selectable) { + td.title = titleFormat ? printFormattedDate(new Date(+String(currentStub).substr(0,4), +String(currentStub).substr(4, 2) - 1, +dt), titleFormat, true) : ""; + cName.push("cd-" + currentDate + " yyyymm-" + currentStub + " mmdd-" + currentStub.substr(4,2) + pad(dt)); + } else { + td.title = titleFormat ? getTitleTranslation(13) + " " + printFormattedDate(new Date(+String(currentStub).substr(0,4), +String(currentStub).substr(4, 2) - 1, +dt), titleFormat, true) : ""; + cName.push("yyyymm-" + currentStub + " mmdd-" + currentStub.substr(4,2) + pad(dt) + " not-selectable"); + }; + + if(currentDate == today) { cName.push("date-picker-today"); }; + + if(dateSetD == currentDate) { + cName.push("date-picker-selected-date"); + setARIAProperty(td, "selected", "true"); + this.selectedTD = td; + }; + + if(o.disabledDays[weekDay] || dts[currentDate] == 0) { cName.push("day-disabled"); if(titleFormat && selectable) { td.title = getTitleTranslation(13) + " " + td.title; }; } + + if(currentDate in bespokeRenderClass) { cName.push(bespokeRenderClass[currentDate]); } + + if(o.highlightDays[weekDay]) { cName.push("date-picker-highlight"); }; + + if(cursorDate == currentDate) { + td.id = o.id + "-date-picker-hover"; + }; + + td.appendChild(document.createTextNode(dt)); + td.className = cName.join(" "); + + if(o.showWeeks) { + cellAdded[row] = Math.min(cName[0] == "month-out" ? 3 : 1, cellAdded[row]); + }; + }; + } else { + td.className = "date-picker-unused"; + td.appendChild(document.createTextNode(nbsp)); + td.title = ""; + }; + + if(o.showWeeks && curr - (row * 7) == 6) { + while(o.wkThs[row].firstChild) o.wkThs[row].removeChild(o.wkThs[row].firstChild); + o.wkThs[row].appendChild(document.createTextNode(cellAdded[row] == 4 && !o.fillGrid ? nbsp : getWeekNumber(cy, cm, curr - firstColIndex - 6))); + o.wkThs[row].className = "date-picker-week-header" + (["",""," out-of-range"," month-out",""][cellAdded[row]]); + }; + }; + + var span = o.titleBar.getElementsByTagName("span"); + while(span[0].firstChild) span[0].removeChild(span[0].firstChild); + while(span[1].firstChild) span[1].removeChild(span[1].firstChild); + span[0].appendChild(document.createTextNode(getMonthTranslation(cm, false) + nbsp)); + span[1].appendChild(document.createTextNode(cy)); + + if(o.timerSet) { + o.timerInc = 50 + Math.round(((o.timerInc - 50) / 1.8)); + o.timer = window.setTimeout(o.updateTable, o.timerInc); + }; + + o.inUpdate = o.delayedUpdate = false; + o.setNewFocus(); + }; + + this.destroy = function() { + + if(document.getElementById("fd-but-" + this.id)) { + document.getElementById("fd-but-" + this.id).parentNode.removeChild(document.getElementById("fd-but-" + this.id)); + }; + + if(!this.created) { return; }; + + // Cleanup for Internet Explorer + removeEvent(this.table, "mousedown", o.onmousedown); + removeEvent(this.table, "mouseover", o.onmouseover); + removeEvent(this.table, "mouseout", o.onmouseout); + removeEvent(document, "mousedown", o.onmousedown); + removeEvent(document, "mouseup", o.clearTimer); + + if (window.addEventListener && !window.devicePixelRatio) { + try { + window.removeEventListener('DOMMouseScroll', this.onmousewheel, false); + } catch(err) {}; + } else { + removeEvent(document, "mousewheel", this.onmousewheel); + removeEvent(window, "mousewheel", this.onmousewheel); + }; + o.removeOnFocusEvents(); + clearTimeout(o.fadeTimer); + clearTimeout(o.timer); + + /*@cc_on + @if(@_jscript_version <= 5.7) + if(!o.staticPos && !o.isIE7) { + try { + o.iePopUp.parentNode.removeChild(o.iePopUp); + o.iePopUp = null; + } catch(err) {}; + }; + @end + @*/ + + if(this.div && this.div.parentNode) { + this.div.parentNode.removeChild(this.div); + }; + + o = null; + }; + this.resizeInlineDiv = function() { + o.div.style.width = o.table.offsetWidth + "px"; + o.div.style.height = o.table.offsetHeight + "px"; + }; + this.create = function() { + + if(document.getElementById("fd-" + this.id)) return; + + this.noFocus = true; + + function createTH(details) { + var th = document.createElement('th'); + if(details.thClassName) th.className = details.thClassName; + if(details.colspan) { + /*@cc_on + /*@if (@_win32) + th.setAttribute('colSpan',details.colspan); + @else @*/ + th.setAttribute('colspan',details.colspan); + /*@end + @*/ + }; + /*@cc_on + /*@if (@_win32) + th.unselectable = "on"; + /*@end@*/ + return th; + }; + function createThAndButton(tr, obj) { + for(var i = 0, details; details = obj[i]; i++) { + var th = createTH(details); + tr.appendChild(th); + var but = document.createElement('span'); + but.className = details.className; + but.id = o.id + details.id; + but.appendChild(document.createTextNode(details.text || o.nbsp)); + but.title = details.title || ""; + /*@cc_on + /*@if(@_win32) + th.unselectable = but.unselectable = "on"; + /*@end@*/ + th.appendChild(but); + }; + }; + + this.div = document.createElement('div'); + this.div.id = "fd-" + this.id; + this.div.className = "datePicker"; + + // Attempt to hide the div from screen readers during content creation + this.div.style.visibility = "hidden"; + this.div.style.display = "none"; + + // Set the ARIA describedby property if the required block available + if(this.describedBy && document.getElementById(this.describedBy)) { + setARIAProperty(this.div, "describedby", this.describedBy); + }; + + // Set the ARIA labelled property if the required label available + if(this.labelledBy) { + setARIAProperty(this.div, "labelledby", this.labelledBy.id); + }; + + var tr, row, col, tableHead, tableBody, tableFoot; + + this.table = document.createElement('table'); + this.table.className = "datePickerTable"; + this.table.onmouseover = this.onmouseover; + this.table.onmouseout = this.onmouseout; + this.table.onclick = this.onclick; + + if(this.staticPos) { + this.table.onmousedown = this.onmousedown; + }; + + this.div.appendChild(this.table); + + var dragEnabledCN = !this.dragDisabled ? " drag-enabled" : ""; + + if(!this.staticPos) { + this.div.style.visibility = "hidden"; + this.div.className += dragEnabledCN; + document.getElementsByTagName('body')[0].appendChild(this.div); + + /*@cc_on + @if(@_jscript_version <= 5.7) + + if(!this.isIE7) { + this.iePopUp = document.createElement('iframe'); + this.iePopUp.src = "javascript:'';"; + this.iePopUp.setAttribute('className','iehack'); + // Remove iFrame from tabIndex + this.iePopUp.setAttribute("tabIndex", -1); + // Hide it from ARIA aware technologies + setARIARole(this.iePopUp, "presentation"); + setARIAProperty(this.iePopUp, "hidden", "true"); + this.iePopUp.scrolling = "no"; + this.iePopUp.frameBorder = "0"; + this.iePopUp.name = this.iePopUp.id = this.id + "-iePopUpHack"; + document.body.appendChild(this.iePopUp); + }; + + @end + @*/ + + // Aria "hidden" property for non active popup datepickers + setARIAProperty(this.div, "hidden", "true"); + } else { + elem = document.getElementById(this.positioned ? this.positioned : this.id); + if(!elem) { + this.div = null; + if(debug) throw this.positioned ? "Could not locate a datePickers associated parent element with an id:" + this.positioned : "Could not locate a datePickers associated input with an id:" + this.id; + return; + }; + + this.div.className += " static-datepicker"; + + if(this.positioned) { + elem.appendChild(this.div); + } else { + elem.parentNode.insertBefore(this.div, elem.nextSibling); + }; + + if(this.hideInput) { + for(var elemID in this.formElements) { + elem = document.getElementById(elemID); + if(elem) { + elem.className += " fd-hidden-input"; + }; + }; + }; + + setTimeout(this.resizeInlineDiv, 300); + }; + + // ARIA Grid role + setARIARole(this.div, "grid"); + + if(this.statusFormat) { + tableFoot = document.createElement('tfoot'); + this.table.appendChild(tableFoot); + tr = document.createElement('tr'); + tr.className = "date-picker-tfoot"; + tableFoot.appendChild(tr); + this.statusBar = createTH({thClassName:"date-picker-statusbar" + dragEnabledCN, colspan:this.showWeeks ? 8 : 7}); + tr.appendChild(this.statusBar); + this.updateStatus(); + }; + + tableHead = document.createElement('thead'); + this.table.appendChild(tableHead); + + tr = document.createElement('tr'); + setARIARole(tr, "presentation"); + + tableHead.appendChild(tr); + + // Title Bar + this.titleBar = createTH({thClassName:"date-picker-title" + dragEnabledCN, colspan:this.showWeeks ? 8 : 7}); + + tr.appendChild(this.titleBar); + tr = null; + + var span = document.createElement('span'); + span.appendChild(document.createTextNode(nbsp)); + span.className = "month-display" + dragEnabledCN; + this.titleBar.appendChild(span); + + span = document.createElement('span'); + span.appendChild(document.createTextNode(nbsp)); + span.className = "year-display" + dragEnabledCN; + this.titleBar.appendChild(span); + + span = null; + + tr = document.createElement('tr'); + setARIARole(tr, "presentation"); + tableHead.appendChild(tr); + + createThAndButton(tr, [ + {className:"prev-but prev-year", id:"-prev-year-but", text:"\u00AB", title:getTitleTranslation(2) }, + {className:"prev-but prev-month", id:"-prev-month-but", text:"\u2039", title:getTitleTranslation(0) }, + {colspan:this.showWeeks ? 4 : 3, className:"today-but", id:"-today-but", text:getTitleTranslation(4)}, + {className:"next-but next-month", id:"-next-month-but", text:"\u203A", title:getTitleTranslation(1)}, + {className:"next-but next-year", id:"-next-year-but", text:"\u00BB", title:getTitleTranslation(3) } + ]); + + tableBody = document.createElement('tbody'); + this.table.appendChild(tableBody); + + var colspanTotal = this.showWeeks ? 8 : 7, + colOffset = this.showWeeks ? 0 : -1, + but, abbr; + + for(var rows = 0; rows < 7; rows++) { + row = document.createElement('tr'); + + if(rows != 0) { + // ARIA Grid role + setARIARole(row, "row"); + tableBody.appendChild(row); + } else { + tableHead.appendChild(row); + }; + + for(var cols = 0; cols < colspanTotal; cols++) { + if(rows === 0 || (this.showWeeks && cols === 0)) { + col = document.createElement('th'); + } else { + col = document.createElement('td'); + setARIAProperty(col, "describedby", this.id + "-col-" + cols + (this.showWeeks ? " " + this.id + "-row-" + rows : "")); + setARIAProperty(col, "selected", "false"); + }; + + /*@cc_on@*/ + /*@if(@_win32) + col.unselectable = "on"; + /*@end@*/ + + row.appendChild(col); + if((this.showWeeks && cols > 0 && rows > 0) || (!this.showWeeks && rows > 0)) { + setARIARole(col, "gridcell"); + } else { + if(rows === 0 && cols > colOffset) { + col.className = "date-picker-day-header"; + col.scope = "col"; + setARIARole(col, "columnheader"); + col.id = this.id + "-col-" + cols; + } else { + col.className = "date-picker-week-header"; + col.scope = "row"; + setARIARole(col, "rowheader"); + col.id = this.id + "-row-" + rows; + }; + }; + }; + }; + + col = row = null; + + this.ths = this.table.getElementsByTagName('thead')[0].getElementsByTagName('tr')[2].getElementsByTagName('th'); + for (var y = 0; y < colspanTotal; y++) { + if(y == 0 && this.showWeeks) { + this.ths[y].appendChild(document.createTextNode(getTitleTranslation(6))); + this.ths[y].title = getTitleTranslation(8); + continue; + }; + + if(y > (this.showWeeks ? 0 : -1)) { + but = document.createElement("span"); + but.className = "fd-day-header"; + /*@cc_on@*/ + /*@if(@_win32) + but.unselectable = "on"; + /*@end@*/ + this.ths[y].appendChild(but); + }; + }; + + but = null; + + this.trs = this.table.getElementsByTagName('tbody')[0].getElementsByTagName('tr'); + this.tds = this.table.getElementsByTagName('tbody')[0].getElementsByTagName('td'); + this.butPrevYear = document.getElementById(this.id + "-prev-year-but"); + this.butPrevMonth = document.getElementById(this.id + "-prev-month-but"); + this.butToday = document.getElementById(this.id + "-today-but"); + this.butNextYear = document.getElementById(this.id + "-next-year-but"); + this.butNextMonth = document.getElementById(this.id + "-next-month-but"); + + if(this.noToday) { + this.butToday.style.display = "none"; + }; + + if(this.showWeeks) { + this.wkThs = this.table.getElementsByTagName('tbody')[0].getElementsByTagName('th'); + this.div.className += " weeks-displayed"; + }; + + tableBody = tableHead = tr = createThAndButton = createTH = null; + + if(this.rangeLow && this.rangeHigh && (this.rangeHigh - this.rangeLow < 7)) { this.equaliseDates(); }; + + this.updateTableHeaders(); + this.created = true; + this.updateTable(); + + if(this.staticPos) { + this.visible = true; + this.opacity = this.opacityTo = this.finalOpacity; + this.div.style.visibility = "visible"; + this.div.style.display = "block"; + this.noFocus = true; + this.fade(); + } else { + this.reposition(); + this.div.style.visibility = "visible"; + this.fade(); + this.noFocus = true; + }; + + this.callback("domcreate", { "id":this.id }); + }; + this.fade = function() { + window.clearTimeout(o.fadeTimer); + o.fadeTimer = null; + var diff = Math.round(o.opacity + ((o.opacityTo - o.opacity) / 4)); + o.setOpacity(diff); + if(Math.abs(o.opacityTo - diff) > 3 && !o.noFadeEffect) { + o.fadeTimer = window.setTimeout(o.fade, 50); + } else { + o.setOpacity(o.opacityTo); + if(o.opacityTo == 0) { + o.div.style.display = "none"; + o.div.style.visibility = "hidden"; + setARIAProperty(o.div, "hidden", "true"); + o.visible = false; + } else { + setARIAProperty(o.div, "hidden", "false"); + o.visible = true; + }; + }; + }; + this.trackDrag = function(e) { + e = e || window.event; + var diffx = (e.pageX?e.pageX:e.clientX?e.clientX:e.x) - o.mx; + var diffy = (e.pageY?e.pageY:e.clientY?e.clientY:e.Y) - o.my; + o.div.style.left = Math.round(o.x + diffx) > 0 ? Math.round(o.x + diffx) + 'px' : "0px"; + o.div.style.top = Math.round(o.y + diffy) > 0 ? Math.round(o.y + diffy) + 'px' : "0px"; + /*@cc_on + @if(@_jscript_version <= 5.7) + if(o.staticPos || o.isIE7) return; + o.iePopUp.style.top = o.div.style.top; + o.iePopUp.style.left = o.div.style.left; + @end + @*/ + }; + this.stopDrag = function(e) { + var b = document.getElementsByTagName("body")[0]; + b.className = b.className.replace(/fd-drag-active/g, ""); + removeEvent(document,'mousemove',o.trackDrag, false); + removeEvent(document,'mouseup',o.stopDrag, false); + o.div.style.zIndex = 9999; + }; + this.onmousedown = function(e) { + e = e || document.parentWindow.event; + var el = e.target != null ? e.target : e.srcElement, + origEl = el, + hideDP = true, + reg = new RegExp("^fd-(but-)?" + o.id + "$"); + + o.mouseDownElem = null; + + // Are we within the wrapper div or the button + while(el) { + if(el.id && el.id.length && el.id.search(reg) != -1) { + hideDP = false; + break; + }; + try { el = el.parentNode; } catch(err) { break; }; + }; + + // If not, then ... + if(hideDP) { + hideAll(); + return true; + }; + + if((o.div.className + origEl.className).search('fd-disabled') != -1) { return true; }; + + // We check the mousedown events on the buttons + if(origEl.id.search(new RegExp("^" + o.id + "(-prev-year-but|-prev-month-but|-next-month-but|-next-year-but)$")) != -1) { + + o.mouseDownElem = origEl; + + addEvent(document, "mouseup", o.clearTimer); + addEvent(origEl, "mouseout", o.clearTimer); + + var incs = { + "-prev-year-but":[0,-1,0], + "-prev-month-but":[0,0,-1], + "-next-year-but":[0,1,0], + "-next-month-but":[0,0,1] + }, + check = origEl.id.replace(o.id, ""), + dateYYYYMM = Number(o.date.getFullYear() + pad(o.date.getMonth()+1)); + + o.timerInc = 800; + o.timerSet = true; + o.dayInc = incs[check][0]; + o.yearInc = incs[check][1]; + o.monthInc = incs[check][2]; + o.accellerator = 1; + + if(!(o.currentYYYYMM == dateYYYYMM)) { + if((o.currentYYYYMM < dateYYYYMM && (o.yearInc == -1 || o.monthInc == -1)) || (o.currentYYYYMM > dateYYYYMM && (o.yearInc == 1 || o.monthInc == 1))) { + o.delayedUpdate = false; + o.timerInc = 1200; + } else { + o.delayedUpdate = true; + o.timerInc = 800; + }; + }; + + o.updateTable(); + + return stopEvent(e); + + } else if(el.className.search("drag-enabled") != -1) { + o.mx = e.pageX ? e.pageX : e.clientX ? e.clientX : e.x; + o.my = e.pageY ? e.pageY : e.clientY ? e.clientY : e.Y; + o.x = parseInt(o.div.style.left); + o.y = parseInt(o.div.style.top); + addEvent(document,'mousemove',o.trackDrag, false); + addEvent(document,'mouseup',o.stopDrag, false); + var b = document.getElementsByTagName("body")[0]; + b.className = b.className.replace(/fd-drag-active/g, "") + " fd-drag-active"; + o.div.style.zIndex = 10000; + + return stopEvent(e); + }; + return true; + }; + this.onclick = function(e) { + if(o.opacity != o.opacityTo || o.disabled) return stopEvent(e); + + e = e || document.parentWindow.event; + var el = e.target != null ? e.target : e.srcElement; + + while(el.parentNode) { + // Are we within a valid i.e. clickable TD node + if(el.tagName && el.tagName.toLowerCase() == "td") { + + if(el.className.search(/cd-([0-9]{8})/) == -1 || el.className.search(/date-picker-unused|out-of-range|day-disabled|no-selection|not-selectable/) != -1) return stopEvent(e); + + var cellDate = el.className.match(/cd-([0-9]{8})/)[1]; + o.date = new Date(cellDate.substr(0,4),cellDate.substr(4,2)-1,cellDate.substr(6,2)); + o.dateSet = new Date(o.date); + o.noFocus = true; + o.callback("dateset", { "id":o.id, "date":o.dateSet, "dd":o.dateSet.getDate(), "mm":o.dateSet.getMonth() + 1, "yyyy":o.dateSet.getFullYear() }); + o.returnFormattedDate(); + o.hide(); + + o.stopTimer(); + + break; + // Today button pressed + } else if(el.id && el.id == o.id + "-today-but") { + o.date = new Date(); + o.updateTable(); + o.stopTimer(); + break; + // Day headers clicked, change the first day of the week + } else if(el.className.search(/date-picker-day-header/) != -1) { + var cnt = o.showWeeks ? -1 : 0, + elem = el; + + while(elem.previousSibling) { + elem = elem.previousSibling; + if(elem.tagName && elem.tagName.toLowerCase() == "th") cnt++; + }; + + o.firstDayOfWeek = (o.firstDayOfWeek + cnt) % 7; + o.updateTableHeaders(); + break; + }; + try { el = el.parentNode; } catch(err) { break; }; + }; + + return stopEvent(e); + }; + + this.show = function(autoFocus) { + if(this.staticPos) { return; }; + + var elem, elemID; + for(elemID in this.formElements) { + elem = document.getElementById(this.id); + if(!elem || (elem && elem.disabled)) { return; }; + }; + + this.noFocus = true; + + // If the datepicker doesn't exist in the dom + if(!this.created || !document.getElementById('fd-' + this.id)) { + this.created = false; + this.fullCreate = false; + this.create(); + this.fullCreate = true; + } else { + this.setDateFromInput(); + this.reposition(); + }; + + this.noFocus = !!!autoFocus; + + if(this.noFocus) { + this.clickActivated = true; + addEvent(document, "mousedown", this.onmousedown); + if(mouseWheel) { + if (window.addEventListener && !window.devicePixelRatio) window.addEventListener('DOMMouseScroll', this.onmousewheel, false); + else { + addEvent(document, "mousewheel", this.onmousewheel); + addEvent(window, "mousewheel", this.onmousewheel); + }; + }; + } else { + this.clickActivated = false; + }; + + this.opacityTo = this.finalOpacity; + this.div.style.display = "block"; + + /*@cc_on + @if(@_jscript_version <= 5.7) + if(!o.isIE7) { + this.iePopUp.style.width = this.div.offsetWidth + "px"; + this.iePopUp.style.height = this.div.offsetHeight + "px"; + this.iePopUp.style.display = "block"; + }; + @end + @*/ + + this.setNewFocus(); + this.fade(); + var butt = document.getElementById('fd-but-' + this.id); + if(butt) { butt.className = butt.className.replace("dp-button-active", "") + " dp-button-active"; }; + }; + this.hide = function() { + if(!this.visible || !this.created || !document.getElementById('fd-' + this.id)) return; + + this.kbEvent = false; + + o.div.className = o.div.className.replace("datepicker-focus", ""); + + this.stopTimer(); + this.removeOnFocusEvents(); + this.clickActivated = false; + + // Update status bar + if(this.statusBar) { this.updateStatus(getTitleTranslation(9)); }; + + this.noFocus = true; + this.setNewFocus(); + + if(this.staticPos) { + return; + }; + + var butt = document.getElementById('fd-but-' + this.id); + if(butt) butt.className = butt.className.replace("dp-button-active", ""); + + removeEvent(document, "mousedown", this.onmousedown); + + if(mouseWheel) { + if (window.addEventListener && !window.devicePixelRatio) { + try { window.removeEventListener('DOMMouseScroll', this.onmousewheel, false);} catch(err) {}; + } else { + removeEvent(document, "mousewheel", this.onmousewheel); + removeEvent(window, "mousewheel", this.onmousewheel); + }; + }; + + /*@cc_on + @if(@_jscript_version <= 5.7) + if(!this.isIE7) { this.iePopUp.style.display = "none"; }; + @end + @*/ + + this.opacityTo = 0; + this.fade(); + }; + this.onblur = function(e) { + o.hide(); + }; + this.onfocus = function(e) { + o.noFocus = false; + o.div.className = o.div.className.replace("datepicker-focus", "") + " datepicker-focus"; + o.addOnFocusEvents(); + }; + this.onmousewheel = function(e) { + e = e || document.parentWindow.event; + var delta = 0; + + if (e.wheelDelta) { + delta = e.wheelDelta/120; + if (isOpera && window.opera.version() < 9.2) delta = -delta; + } else if(e.detail) { + delta = -e.detail/3; + }; + + var n = o.date.getDate(), + d = new Date(o.date), + inc = delta > 0 ? 1 : -1; + + d.setDate(2); + d.setMonth(d.getMonth() + inc * 1); + d.setDate(Math.min(n, daysInMonth(d.getMonth(),d.getFullYear()))); + + if(o.outOfRange(d)) { return stopEvent(e); }; + + o.date = new Date(d); + + o.updateTable(); + + if(o.statusBar) { o.updateStatus(printFormattedDate(o.date, o.statusFormat, true)); }; + + return stopEvent(e); + }; + this.onkeydown = function (e) { + o.stopTimer(); + if(!o.visible) return false; + + e = e || document.parentWindow.event; + var kc = e.keyCode ? e.keyCode : e.charCode; + + if( kc == 13 ) { + // RETURN/ENTER: close & select the date + var td = document.getElementById(o.id + "-date-picker-hover"); + if(!td || td.className.search(/cd-([0-9]{8})/) == -1 || td.className.search(/no-selection|out-of-range|day-disabled/) != -1) { + return stopEvent(e); + }; + o.dateSet = new Date(o.date); + o.callback("dateset", o.createCbArgObj()); + o.returnFormattedDate(); + o.hide(); + return stopEvent(e); + } else if(kc == 27) { + // ESC: close, no date selection + if(!o.staticPos) { + o.hide(); + return stopEvent(e); + }; + return true; + } else if(kc == 32 || kc == 0) { + // SPACE: goto today's date + o.date = new Date(); + o.updateTable(); + return stopEvent(e); + } else if(kc == 9) { + // TAB: close, no date selection & focus on btton - popup only + if(!o.staticPos) { + return stopEvent(e); + }; + return true; + }; + + // Internet Explorer fires the keydown event faster than the JavaScript engine can + // update the interface. The following attempts to fix this. + + /*@cc_on + @if(@_win32) + if(new Date().getTime() - o.interval.getTime() < 50) { return stopEvent(e); }; + o.interval = new Date(); + @end + @*/ + + if(isMoz) { + if(new Date().getTime() - o.interval.getTime() < 50) { return stopEvent(e); }; + o.interval = new Date(); + }; + + if ((kc > 49 && kc < 56) || (kc > 97 && kc < 104)) { + if(kc > 96) kc -= (96-48); + kc -= 49; + o.firstDayOfWeek = (o.firstDayOfWeek + kc) % 7; + o.updateTableHeaders(); + return stopEvent(e); + }; + + if ( kc < 33 || kc > 40 ) return true; + + var d = new Date(o.date), tmp, cursorYYYYMM = o.date.getFullYear() + pad(o.date.getMonth()+1); + + // HOME: Set date to first day of current month + if(kc == 36) { + d.setDate(1); + // END: Set date to last day of current month + } else if(kc == 35) { + d.setDate(daysInMonth(d.getMonth(),d.getFullYear())); + // PAGE UP & DOWN + } else if ( kc == 33 || kc == 34) { + var inc = (kc == 34) ? 1 : -1; + + // CTRL + PAGE UP/DOWN: Moves to the same date in the previous/next year + if(e.ctrlKey) { + d.setFullYear(d.getFullYear() + inc * 1); + // PAGE UP/DOWN: Moves to the same date in the previous/next month + } else { + var n = o.date.getDate(); + + d.setDate(2); + d.setMonth(d.getMonth() + inc * 1); + d.setDate(Math.min(n, daysInMonth(d.getMonth(),d.getFullYear()))); + }; + // LEFT ARROW + } else if ( kc == 37 ) { + d = new Date(o.date.getFullYear(), o.date.getMonth(), o.date.getDate() - 1); + // RIGHT ARROW + } else if ( kc == 39 || kc == 34) { + d = new Date(o.date.getFullYear(), o.date.getMonth(), o.date.getDate() + 1 ); + // UP ARROW + } else if ( kc == 38 ) { + d = new Date(o.date.getFullYear(), o.date.getMonth(), o.date.getDate() - 7); + // DOWN ARROW + } else if ( kc == 40 ) { + d = new Date(o.date.getFullYear(), o.date.getMonth(), o.date.getDate() + 7); + }; + + if(o.outOfRange(d)) { return stopEvent(e); }; + o.date = d; + + if(o.statusBar) { + o.updateStatus(o.getBespokeTitle(o.date.getFullYear(),o.date.getMonth() + 1,o.date.getDate()) || printFormattedDate(o.date, o.statusFormat, true)); + }; + + var t = String(o.date.getFullYear()) + pad(o.date.getMonth()+1) + pad(o.date.getDate()); + + if(e.ctrlKey || (kc == 33 || kc == 34) || t < o.firstDateShown || t > o.lastDateShown) { + o.updateTable(); + /*@cc_on + @if(@_win32) + o.interval = new Date(); + @end + @*/ + } else { + if(!o.noToday) { o.disableTodayButton(); }; + o.removeOldFocus(); + + for(var i = 0, td; td = o.tds[i]; i++) { + if(td.className.search("cd-" + t) == -1) { + continue; + }; + o.showHideButtons(o.date); + td.id = o.id + "-date-picker-hover"; + o.setNewFocus(); + break; + }; + }; + + return stopEvent(e); + }; + this.onmouseout = function(e) { + e = e || document.parentWindow.event; + var p = e.toElement || e.relatedTarget; + while (p && p != this) try { p = p.parentNode } catch(e) { p = this; }; + if (p == this) return false; + if(o.currentTR) { + o.currentTR.className = ""; + o.currentTR = null; + }; + + if(o.statusBar) { + o.updateStatus(o.getBespokeTitle(o.date.getFullYear(),o.date.getMonth() + 1,o.date.getDate()) || printFormattedDate(o.date, o.statusFormat, true)); + }; + }; + this.onmouseover = function(e) { + e = e || document.parentWindow.event; + var el = e.target != null ? e.target : e.srcElement; + while(el.nodeType != 1) { el = el.parentNode; }; + + if(!el || ! el.tagName) { return; }; + + var statusText = getTitleTranslation(9); + switch (el.tagName.toLowerCase()) { + case "td": + if(el.className.search(/date-picker-unused|out-of-range/) != -1) { + statusText = getTitleTranslation(9); + } if(el.className.search(/cd-([0-9]{8})/) != -1) { + o.stopTimer(); + var cellDate = el.className.match(/cd-([0-9]{8})/)[1]; + + o.removeOldFocus(); + el.id = o.id+"-date-picker-hover"; + o.setNewFocus(); + + o.date = new Date(+cellDate.substr(0,4),+cellDate.substr(4,2)-1,+cellDate.substr(6,2)); + if(!o.noToday) { o.disableTodayButton(); }; + + statusText = o.getBespokeTitle(+cellDate.substr(0,4),+cellDate.substr(4,2),+cellDate.substr(6,2)) || printFormattedDate(o.date, o.statusFormat, true); + }; + break; + case "th": + if(!o.statusBar) { break; }; + if(el.className.search(/drag-enabled/) != -1) { + statusText = getTitleTranslation(10); + } else if(el.className.search(/date-picker-week-header/) != -1) { + var txt = el.firstChild ? el.firstChild.nodeValue : ""; + statusText = txt.search(/^(\d+)$/) != -1 ? getTitleTranslation(7, [txt, txt < 3 && o.date.getMonth() == 11 ? getWeeksInYear(o.date.getFullYear()) + 1 : getWeeksInYear(o.date.getFullYear())]) : getTitleTranslation(9); + }; + break; + case "span": + if(!o.statusBar) { break; }; + if(el.className.search(/drag-enabled/) != -1) { + statusText = getTitleTranslation(10); + } else if(el.className.search(/day-([0-6])/) != -1) { + var day = el.className.match(/day-([0-6])/)[1]; + statusText = getTitleTranslation(11, [getDayTranslation(day, false)]); + } else if(el.className.search(/prev-year/) != -1) { + statusText = getTitleTranslation(2); + } else if(el.className.search(/prev-month/) != -1) { + statusText = getTitleTranslation(0); + } else if(el.className.search(/next-year/) != -1) { + statusText = getTitleTranslation(3); + } else if(el.className.search(/next-month/) != -1) { + statusText = getTitleTranslation(1); + } else if(el.className.search(/today-but/) != -1 && el.className.search(/disabled/) == -1) { + statusText = getTitleTranslation(12); + }; + break; + default: + statusText = ""; + }; + while(el.parentNode) { + el = el.parentNode; + if(el.nodeType == 1 && el.tagName.toLowerCase() == "tr") { + if(o.currentTR) { + if(el == o.currentTR) break; + o.currentTR.className = ""; + }; + el.className = "dp-row-highlight"; + o.currentTR = el; + break; + }; + }; + if(o.statusBar && statusText) { o.updateStatus(statusText); }; + }; + this.clearTimer = function() { + o.stopTimer(); + o.timerInc = 800; + o.yearInc = 0; + o.monthInc = 0; + o.dayInc = 0; + + removeEvent(document, "mouseup", o.clearTimer); + if(o.mouseDownElem != null) { + removeEvent(o.mouseDownElem, "mouseout", o.clearTimer); + }; + o.mouseDownElem = null; + }; + + var o = this; + + this.setDateFromInput(); + + if(this.staticPos) { + this.create(); + } else { + this.createButton(); + }; + + (function() { + var elemID, elem; + + for(elemID in o.formElements) { + elem = document.getElementById(elemID); + if(elem && elem.tagName && elem.tagName.search(/select|input/i) != -1) { + addEvent(elem, "change", o.changeHandler); + }; + + if(!elem || elem.disabled == true) { + o.disableDatePicker(); + }; + }; + })(); + + + // We have fully created the datepicker... + this.fullCreate = true; + + + }; + datePicker.prototype.addButtonEvents = function(but) { + function buttonEvent (e) { + e = e || window.event; + + var inpId = this.id.replace('fd-but-',''), + dpVisible = isVisible(inpId), + autoFocus = false, + kbEvent = datePickers[inpId].kbEvent; + + if(kbEvent) { + datePickers[inpId].kbEvent = false; + return; + }; + + if(e.type == "keydown") { + datePickers[inpId].kbEvent = true; + var kc = e.keyCode != null ? e.keyCode : e.charCode; + if(kc != 13) return true; + if(dpVisible) { + this.className = this.className.replace("dp-button-active", ""); + hideAll(); + return stopEvent(e); + }; + autoFocus = true; + } else { + datePickers[inpId].kbEvent = false; + }; + + this.className = this.className.replace("dp-button-active", ""); + + if(!dpVisible) { + this.className += " dp-button-active"; + hideAll(inpId); + showDatePicker(inpId, autoFocus); + } else { + hideAll(); + }; + + return stopEvent(e); + }; + + but.onkeydown = buttonEvent; + but.onclick = buttonEvent; + + if(!buttonTabIndex || this.bespokeTabIndex === false) { + but.setAttribute(!/*@cc_on!@*/false ? "tabIndex" : "tabindex", "-1"); + but.tabIndex = -1; + but.onkeydown = null; + removeEvent(but, "keydown", buttonEvent); + } else { + but.setAttribute(!/*@cc_on!@*/false ? "tabIndex" : "tabindex", this.bespokeTabIndex); + but.tabIndex = this.bespokeTabIndex; + }; + }; + + datePicker.prototype.createButton = function() { + + if(this.staticPos || document.getElementById("fd-but-" + this.id)) { return; }; + + var inp = document.getElementById(this.id), + span = document.createElement('span'), + but = document.createElement('a'); + + but.href = "#" + this.id; + but.className = "date-picker-control"; + but.title = getTitleTranslation(5); + but.id = "fd-but-" + this.id; + + span.appendChild(document.createTextNode(nbsp)); + but.appendChild(span); + + span = document.createElement('span'); + span.className = "fd-screen-reader"; + span.appendChild(document.createTextNode(but.title)); + but.appendChild(span); + + // Set the ARIA role to be "button" + setARIARole(but, "button"); + + // Set a "haspopup" ARIA property - should this not be a list if ID's???? + setARIAProperty(but, "haspopup", true); + + if(this.positioned && document.getElementById(this.positioned)) { + document.getElementById(this.positioned).appendChild(but); + } else { + inp.parentNode.insertBefore(but, inp.nextSibling); + }; + + this.addButtonEvents(but); + + but = null; + + this.callback("dombuttoncreate", {id:this.id}); + }; + datePicker.prototype.setBespokeTitles = function(titles) { + this.bespokeTitles = titles; + }; + datePicker.prototype.addBespokeTitles = function(titles) { + for(var dt in titles) { + this.bespokeTitles[dt] = titles[dt]; + }; + }; + datePicker.prototype.getBespokeTitle = function(y,m,d) { + var dt, dtFull, yyyymmdd = y + String(pad(m)) + pad(d); + + // Try this datepickers bespoke titles + for(dt in this.bespokeTitles) { + dtFull = dt.replace(/^(\*\*\*\*)/, y).replace(/^(\d\d\d\d)(\*\*)/, "$1"+ pad(m)); + if(dtFull == yyyymmdd) return this.bespokeTitles[dt]; + }; + + // Try the generic bespoke titles + for(dt in bespokeTitles) { + dtFull = dt.replace(/^(\*\*\*\*)/, y).replace(/^(\d\d\d\d)(\*\*)/, "$1"+ pad(m)); + if(dtFull == yyyymmdd) return bespokeTitles[dt]; + }; + + return false; + }; + datePicker.prototype.returnSelectedDate = function() { + return this.dateSet; + }; + datePicker.prototype.setRangeLow = function(range) { + this.rangeLow = (String(range).search(/^(\d\d\d\d)(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$/) == -1) ? false : range; + if(!this.inUpdate) this.setDateFromInput(); + }; + datePicker.prototype.setRangeHigh = function(range) { + this.rangeHigh = (String(range).search(/^(\d\d\d\d)(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$/) == -1) ? false : range; + if(!this.inUpdate) this.setDateFromInput(); + }; + datePicker.prototype.setDisabledDays = function(dayArray) { + if(!dayArray.length || dayArray.length != 7 || dayArray.join("").search(/^([0|1]{7})$/) == -1) { + if(debug) { + throw "Invalid values located when attempting to call setDisabledDays"; + }; + return false; + }; + this.disabledDays = dayArray; + if(!this.inUpdate) this.setDateFromInput(); + }; + datePicker.prototype.setDisabledDates = function(dateObj) { + this.disabledDates = {}; + this.addDisabledDates(dateObj); + }; + datePicker.prototype.setEnabledDates = function(dateObj) { + this.enabledDates = {}; + this.addEnabledDates(dateObj); + }; + datePicker.prototype.addDisabledDates = function(dateObj) { + this.enabledDates = false; + this.disabledDates = this.disabledDates || {}; + + var startD; + for(startD in dateObj) { + if((String(startD).search(wcDateRegExp) != -1 && dateObj[startD] == 1) || (String(startD).search(rangeRegExp) != -1 && String(dateObj[startD]).search(rangeRegExp) != -1)) { + this.disabledDates[startD] = dateObj[startD]; + }; + }; + + if(!this.inUpdate) this.setDateFromInput(); + }; + datePicker.prototype.addEnabledDates = function(dateObj) { + this.disabledDates = false; + this.enabledDates = this.enabledDates || {}; + + var startD; + for(startD in dateObj) { + if((String(startD).search(wcDateRegExp) != -1 && dateObj[startD] == 1) || (String(startD).search(rangeRegExp) != -1 && String(dateObj[startD]).search(rangeRegExp) != -1)) { + this.enabledDates[startD] = dateObj[startD]; + }; + }; + + if(!this.inUpdate) this.setDateFromInput(); + }; + datePicker.prototype.setSelectedDate = function(yyyymmdd) { + if(String(yyyymmdd).search(wcDateRegExp) == -1) { + return false; + }; + + var match = yyyymmdd.match(rangeRegExp), + dt = new Date(+match[2],+match[3]-1,+match[4]); + + if(!dt || isNaN(dt) || !this.canDateBeSelected(dt)) { + return false; + }; + + this.dateSet = new Date(dt); + + if(!this.inUpdate) this.updateTable(); + + this.callback("dateset", this.createCbArgObj()); + this.returnFormattedDate(); + }; + datePicker.prototype.checkSelectedDate = function() { + if(this.dateSet && !this.canDateBeSelected(this.dateSet)) { + this.dateSet = null; + }; + if(!this.inUpdate) this.updateTable(); + }; + datePicker.prototype.addOnFocusEvents = function() { + if(this.kbEventsAdded || this.noFocus) { + return; + }; + + addEvent(document, "keypress", this.onkeydown); + addEvent(document, "mousedown", this.onmousedown); + + /*@cc_on + @if(@_win32) + removeEvent(document, "keypress", this.onkeydown); + addEvent(document, "keydown", this.onkeydown); + @end + @*/ + if(window.devicePixelRatio) { + removeEvent(document, "keypress", this.onkeydown); + addEvent(document, "keydown", this.onkeydown); + }; + this.noFocus = false; + this.kbEventsAdded = true; + }; + datePicker.prototype.removeOnFocusEvents = function() { + + if(!this.kbEventsAdded) { return; }; + + removeEvent(document, "keypress", this.onkeydown); + removeEvent(document, "keydown", this.onkeydown); + removeEvent(document, "mousedown", this.onmousedown); + + this.kbEventsAdded = false; + }; + datePicker.prototype.stopTimer = function() { + this.timerSet = false; + window.clearTimeout(this.timer); + }; + datePicker.prototype.setOpacity = function(op) { + this.div.style.opacity = op/100; + this.div.style.filter = 'alpha(opacity=' + op + ')'; + this.opacity = op; + }; + datePicker.prototype.getDates = function(y, m) { + var dpm = daysInMonth(m - 1, y), + obj = {}, + dds = this.getGenericDates(y, m, false), + eds = this.getGenericDates(y, m, true), + dts = y + pad(m); + + for(var i = 1; i <= dpm; i++) { + dt = dts + "" + pad(i); + + if(dds) { + obj[dt] = (dt in dds) ? 0 : 1; + } else if(eds) { + obj[dt] = (dt in eds) ? 1 : 0; + } else { + obj[dt] = 1; + }; + }; + + return obj; + }; + datePicker.prototype.getGenericDates = function(y, m, enabled) { + var deDates = enabled ? this.enabledDates : this.disabledDates; + + if(!deDates) { + return false; + }; + + m = pad(m); + + var obj = {}, + lower = this.firstDateShown, + upper = this.lastDateShown, + dt1, dt2, rngLower, rngUpper; + + if(!upper || !lower) { + lower = this.firstDateShown = y + pad(m) + "01"; + upper = this.lastDateShown = y + pad(m) + pad(daysInMonth(m, y)); + }; + + for(dt in deDates) { + dt1 = dt.replace(/^(\*\*\*\*)/, y).replace(/^(\d\d\d\d)(\*\*)/, "$1"+m); + dt2 = deDates[dt]; + + if(dt2 == 1) { + if(Number(dt1.substr(0,6)) >= +String(this.firstDateShown).substr(0,6) + && + Number(dt1.substr(0,6)) <= +String(this.lastDateShown).substr(0,6)) { + obj[dt1] = 1; + }; + continue; + }; + + // Range + if(+String(this.firstDateShown).substr(0,6) >= Number(dt1.substr(0,6)) + && + +String(this.lastDateShown).substr(0,6) <= Number(dt2.substr(0,6))) { + // Same month + if(Number(dt1.substr(0,6)) == Number(dt2.substr(0,6))) { + for(var i = dt1; i <= dt2; i++) { + obj[i] = 1; + }; + continue; + }; + + // Different months but we only want this month + rngLower = Number(dt1.substr(0,6)) == +String(this.firstDateShown).substr(0,6) ? dt1 : lower; + rngUpper = Number(dt2.substr(0,6)) == +String(this.lastDateShown).substr(0,6) ? dt2 : upper; + for(var i = +rngLower; i <= +rngUpper; i++) { + obj[i] = 1; + }; + }; + }; + return obj; + }; + datePicker.prototype.truePosition = function(element) { + var pos = this.cumulativeOffset(element); + if(isOpera) { return pos; }; + var iebody = (document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body, + dsocleft = document.all ? iebody.scrollLeft : window.pageXOffset, + dsoctop = document.all ? iebody.scrollTop : window.pageYOffset, + posReal = this.realOffset(element); + return [pos[0] - posReal[0] + dsocleft, pos[1] - posReal[1] + dsoctop]; + }; + datePicker.prototype.realOffset = function(element) { + var t = 0, l = 0; + do { + t += element.scrollTop || 0; + l += element.scrollLeft || 0; + element = element.parentNode; + } while(element); + return [l, t]; + }; + datePicker.prototype.cumulativeOffset = function(element) { + var t = 0, l = 0; + do { + t += element.offsetTop || 0; + l += element.offsetLeft || 0; + element = element.offsetParent; + } while(element); + return [l, t]; + }; + datePicker.prototype.equaliseDates = function() { + var clearDayFound = false, tmpDate; + for(var i = this.rangeLow; i <= this.rangeHigh; i++) { + tmpDate = String(i); + if(!this.disabledDays[new Date(tmpDate.substr(0,4), tmpDate.substr(6,2), tmpDate.substr(4,2)).getDay() - 1]) { + clearDayFound = true; + break; + }; + }; + if(!clearDayFound) { this.disabledDays = [0,0,0,0,0,0,0] }; + }; + datePicker.prototype.outOfRange = function(tmpDate) { + + if(!this.rangeLow && !this.rangeHigh) { return false; }; + var level = false; + if(!tmpDate) { + level = true; + tmpDate = this.date; + }; + + var d = pad(tmpDate.getDate()), + m = pad(tmpDate.getMonth() + 1), + y = tmpDate.getFullYear(), + dt = String(y)+String(m)+String(d); + + if(this.rangeLow && +dt < +this.rangeLow) { + if(!level) { return true; }; + this.date = new Date(this.rangeLow.substr(0,4), this.rangeLow.substr(4,2)-1, this.rangeLow.substr(6,2), 5, 0, 0); + return false; + }; + if(this.rangeHigh && +dt > +this.rangeHigh) { + if(!level) { return true; }; + this.date = new Date(this.rangeHigh.substr(0,4), this.rangeHigh.substr(4,2)-1, this.rangeHigh.substr(6,2), 5, 0, 0); + }; + return false; + }; + datePicker.prototype.canDateBeSelected = function(tmpDate) { + if(!tmpDate) return false; + + var d = pad(tmpDate.getDate()), + m = pad(tmpDate.getMonth() + 1), + y = tmpDate.getFullYear(), + dt = String(y)+String(m)+String(d), + dd = this.getDates(y, m), + wd = tmpDate.getDay() == 0 ? 7 : tmpDate.getDay(); + + if((this.rangeLow && +dt < +this.rangeLow) || (this.rangeHigh && +dt > +this.rangeHigh) || (dd[dt] == 0) || this.disabledDays[wd-1]) { + return false; + }; + + return true; + }; + datePicker.prototype.updateStatus = function(msg) { + while(this.statusBar.firstChild) { this.statusBar.removeChild(this.statusBar.firstChild); }; + + if(msg && this.statusFormat.search(/-S|S-/) != -1 && msg.search(/([0-9]{1,2})(st|nd|rd|th)/) != -1) { + msg = msg.replace(/([0-9]{1,2})(st|nd|rd|th)/, "$1$2").split(/|<\/sup>/); + var dc = document.createDocumentFragment(); + for(var i = 0, nd; nd = msg[i]; i++) { + if(/^(st|nd|rd|th)$/.test(nd)) { + var sup = document.createElement("sup"); + sup.appendChild(document.createTextNode(nd)); + dc.appendChild(sup); + } else { + dc.appendChild(document.createTextNode(nd)); + }; + }; + this.statusBar.appendChild(dc); + } else { + this.statusBar.appendChild(document.createTextNode(msg ? msg : getTitleTranslation(9))); + }; + }; + datePicker.prototype.setDateFromInput = function() { + var origDateSet = this.dateSet, + m = false, + dt, elemID, elem, elemFmt, d, y, elemVal; + + this.dateSet = null; + + for(elemID in this.formElements) { + elem = document.getElementById(elemID); + + if(!elem) { + return; + }; + + elemVal = String(elem.value); + elemFmt = this.formElements[elemID]; + dt = false; + + if(!(elemVal == "")) { + for(var i = 0, fmt; fmt = this.formatMasks[elemID][i]; i++) { + dt = parseDateString(elemVal, fmt); + if(dt) { + break; + }; + }; + }; + + if(dt) { + if(elemFmt.search(new RegExp('[' + dParts + ']')) != -1) { + //console.log("located d part " + elemFmt + " : " + dt.getDate()); + d = dt.getDate(); + }; + if(elemFmt.search(new RegExp('[' + mParts + ']')) != -1) { + //console.log("located m part " + elemFmt + " : " + dt.getMonth()); + m = dt.getMonth(); + }; + if(elemFmt.search(new RegExp('[' + yParts + ']')) != -1) { + //console.log("located y part " + elemFmt + " : " + dt.getFullYear()); + y = dt.getFullYear() + }; + }; + }; + + dt = false; + + if(d && !(m === false) && y) { + if(+d > daysInMonth(+m, +y)) { + d = daysInMonth(+m, +y); + dt = false; + } else { + dt = new Date(+y, +m, +d); + }; + }; + + if(!dt || isNaN(dt)) { + var newDate = new Date(y || new Date().getFullYear(), !(m === false) ? m : new Date().getMonth(), 1); + this.date = this.cursorDate ? new Date(+this.cursorDate.substr(0,4), +this.cursorDate.substr(4,2) - 1, +this.cursorDate.substr(6,2)) : new Date(newDate.getFullYear(), newDate.getMonth(), Math.min(+d || new Date().getDate(), daysInMonth(newDate.getMonth(), newDate.getFullYear()))); + + this.date.setHours(5); + this.outOfRange(); + //this.callback("dateset", this.createCbArgObj()); + this.updateTable(); + return; + }; + + + dt.setHours(5); + this.date = new Date(dt); + this.outOfRange(); + + if(dt.getTime() == this.date.getTime() && this.canDateBeSelected(this.date)) { + this.dateSet = new Date(this.date); + }; + + //this.callback("dateset", this.createCbArgObj()); + if(this.fullCreate) this.updateTable(); + this.returnFormattedDate(true); + }; + datePicker.prototype.setSelectIndex = function(elem, indx) { + for(var opt = elem.options.length-1; opt >= 0; opt--) { + if(elem.options[opt].value == indx) { + elem.selectedIndex = opt; + return; + }; + }; + }; + datePicker.prototype.returnFormattedDate = function(noFocus) { + if(!this.dateSet) { + return; + }; + + var d = pad(this.dateSet.getDate()), + m = pad(this.dateSet.getMonth() + 1), + y = this.dateSet.getFullYear(), + el = false, + elemID, elem, elemFmt, fmtDate; + + noFocus = !!noFocus; + + for(elemID in this.formElements) { + elem = document.getElementById(elemID); + + if(!elem) return; + + if(!el) el = elem; + + elemFmt = this.formElements[elemID]; + + fmtDate = printFormattedDate(this.dateSet, elemFmt, returnLocaleDate); + if(elem.tagName.toLowerCase() == "input") { + elem.value = fmtDate; + } else { + this.setSelectIndex(elem, fmtDate); + }; + }; + + if(this.staticPos) { + this.noFocus = true; + this.updateTable(); + this.noFocus = false; + }; + + if(this.fullCreate) { + if(el.type && el.type != "hidden" && !noFocus) { el.focus(); }; + }; + }; + datePicker.prototype.disableDatePicker = function() { + if(this.disabled) return; + + if(this.staticPos) { + this.removeOnFocusEvents(); + this.removeOldFocus(); + this.noFocus = true; + this.div.className = this.div.className.replace(/dp-disabled/, "") + " dp-disabled"; + this.table.onmouseover = this.table.onclick = this.table.onmouseout = this.table.onmousedown = null; + removeEvent(document, "mousedown", this.onmousedown); + removeEvent(document, "mouseup", this.clearTimer); + } else { + if(this.visible) this.hide(); + var but = document.getElementById("fd-but-" + this.id); + if(but) { + but.className = but.className.replace(/dp-disabled/, "") + " dp-disabled"; + // Set a "disabled" ARIA state + setARIAProperty(but, "disabled", true); + but.onkeydown = but.onclick = function() { return false; }; + but.setAttribute(!/*@cc_on!@*/false ? "tabIndex" : "tabindex", "-1"); + but.tabIndex = -1; + }; + }; + + clearTimeout(this.timer); + this.disabled = true; + }; + datePicker.prototype.enableDatePicker = function() { + if(!this.disabled) return; + + if(this.staticPos) { + this.removeOldFocus(); + this.noFocus = true; + this.updateTable(); + this.div.className = this.div.className.replace(/dp-disabled/, ""); + this.disabled = false; + this.table.onmouseover = this.onmouseover; + this.table.onmouseout = this.onmouseout; + this.table.onclick = this.onclick; + this.table.onmousedown = this.onmousedown; + } else { + var but = document.getElementById("fd-but-" + this.id); + if(but) { + but.className = but.className.replace(/dp-disabled/, ""); + // Reset the "disabled" ARIA state + setARIAProperty(but, "disabled", false); + this.addButtonEvents(but); + }; + }; + + this.disabled = false; + }; + datePicker.prototype.disableTodayButton = function() { + var today = new Date(); + this.butToday.className = this.butToday.className.replace("fd-disabled", ""); + if(this.outOfRange(today) || (this.date.getDate() == today.getDate() && this.date.getMonth() == today.getMonth() && this.date.getFullYear() == today.getFullYear())) { + this.butToday.className += " fd-disabled"; + }; + }; + datePicker.prototype.updateTableHeaders = function() { + var colspanTotal = this.showWeeks ? 8 : 7, + colOffset = this.showWeeks ? 1 : 0, + d, but; + + for(var col = colOffset; col < colspanTotal; col++ ) { + d = (this.firstDayOfWeek + (col - colOffset)) % 7; + this.ths[col].title = getDayTranslation(d, false); + + if(col > colOffset) { + but = this.ths[col].getElementsByTagName("span")[0]; + while(but.firstChild) { but.removeChild(but.firstChild); }; + but.appendChild(document.createTextNode(getDayTranslation(d, true))); + but.title = this.ths[col].title; + but.className = but.className.replace(/day-([0-6])/, "") + " day-" + d; + but = null; + } else { + while(this.ths[col].firstChild) { this.ths[col].removeChild(this.ths[col].firstChild); }; + this.ths[col].appendChild(document.createTextNode(getDayTranslation(d, true))); + }; + + this.ths[col].className = this.ths[col].className.replace(/date-picker-highlight/g, ""); + if(this.highlightDays[d]) { + this.ths[col].className += " date-picker-highlight"; + }; + }; + + if(this.created) { this.updateTable(); } + }; + datePicker.prototype.callback = function(type, args) { + if(!type || !(type in this.callbacks)) { + return false; + }; + + var ret = false; + for(var func = 0; func < this.callbacks[type].length; func++) { + ret = this.callbacks[type][func](args || this.id); + }; + return ret; + }; + datePicker.prototype.showHideButtons = function(tmpDate) { + if(!this.butPrevYear) { return; }; + + var tdm = tmpDate.getMonth(), + tdy = tmpDate.getFullYear(); + + if(this.outOfRange(new Date((tdy - 1), tdm, daysInMonth(+tdm, tdy-1)))) { + if(this.butPrevYear.className.search(/fd-disabled/) == -1) { + this.butPrevYear.className += " fd-disabled"; + }; + if(this.yearInc == -1) this.stopTimer(); + } else { + this.butPrevYear.className = this.butPrevYear.className.replace(/fd-disabled/g, ""); + }; + + if(this.outOfRange(new Date(tdy, (+tdm - 1), daysInMonth(+tdm-1, tdy)))) { + if(this.butPrevMonth.className.search(/fd-disabled/) == -1) { + this.butPrevMonth.className += " fd-disabled"; + }; + if(this.monthInc == -1) this.stopTimer(); + } else { + this.butPrevMonth.className = this.butPrevMonth.className.replace(/fd-disabled/g, ""); + }; + + if(this.outOfRange(new Date((tdy + 1), +tdm, 1))) { + if(this.butNextYear.className.search(/fd-disabled/) == -1) { + this.butNextYear.className += " fd-disabled"; + }; + if(this.yearInc == 1) this.stopTimer(); + } else { + this.butNextYear.className = this.butNextYear.className.replace(/fd-disabled/g, ""); + }; + + if(this.outOfRange(new Date(tdy, +tdm + 1, 1))) { + if(this.butNextMonth.className.search(/fd-disabled/) == -1) { + this.butNextMonth.className += " fd-disabled"; + }; + if(this.monthInc == 1) this.stopTimer(); + } else { + this.butNextMonth.className = this.butNextMonth.className.replace(/fd-disabled/g, ""); + }; + }; + var localeDefaults = { + fullMonths:["January","February","March","April","May","June","July","August","September","October","November","December"], + monthAbbrs:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"], + fullDays: ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"], + dayAbbrs: ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"], + titles: ["Previous month","Next month","Previous year","Next year", "Today", "Show Calendar", "wk", "Week [[%0%]] of [[%1%]]", "Week", "Select a date", "Click \u0026 Drag to move", "Display \u201C[[%0%]]\u201D first", "Go to Today\u2019s date", "Disabled date :"], + firstDayOfWeek:0, + imported: false + }; + var joinNodeLists = function() { + if(!arguments.length) { return []; } + var nodeList = []; + for (var i = 0; i < arguments.length; i++) { + for (var j = 0, item; item = arguments[i][j]; j++) { + nodeList[nodeList.length] = item; + }; + }; + return nodeList; + }; + var cleanUp = function() { + var dp, fe; + for(dp in datePickers) { + for(fe in datePickers[dp].formElements) { + if(!document.getElementById(fe)) { + datePickers[dp].destroy(); + datePickers[dp] = null; + delete datePickers[dp]; + break; + } + }; + }; + }; + var hideAll = function(exception) { + var dp; + for(dp in datePickers) { + if(!datePickers[dp].created || (exception && exception == datePickers[dp].id)) continue; + datePickers[dp].hide(); + }; + }; + var hideDatePicker = function(inpID) { + if(inpID in datePickers) { + if(!datePickers[inpID].created || datePickers[inpID].staticPos) return; + datePickers[inpID].hide(); + }; + }; + var showDatePicker = function(inpID, autoFocus) { + if(!(inpID in datePickers)) return false; + + datePickers[inpID].clickActivated = !!!autoFocus; + datePickers[inpID].show(autoFocus); + return true; + }; + var destroy = function(e) { + e = e || window.event; + + // Don't remove datepickers if it's a pagehide/pagecache event (webkit et al) + if(e.persisted) { + return; + }; + + for(dp in datePickers) { + datePickers[dp].destroy(); + datePickers[dp] = null; + delete datePickers[dp]; + }; + datePickers = null; + + removeEvent(window, 'unload', datePickerController.destroy); + }; + var destroySingleDatePicker = function(id) { + if(id && (id in datePickers)) { + datePickers[id].destroy(); + datePickers[id] = null; + delete datePickers[id]; + }; + }; + var getTitleTranslation = function(num, replacements) { + replacements = replacements || []; + if(localeImport.titles.length > num) { + var txt = localeImport.titles[num]; + if(replacements && replacements.length) { + for(var i = 0; i < replacements.length; i++) { + txt = txt.replace("[[%" + i + "%]]", replacements[i]); + }; + }; + return txt.replace(/[[%(\d)%]]/g,""); + }; + return ""; + }; + var getDayTranslation = function(day, abbreviation) { + var titles = localeImport[abbreviation ? "dayAbbrs" : "fullDays"]; + return titles.length && titles.length > day ? titles[day] : ""; + }; + var getMonthTranslation = function(month, abbreviation) { + var titles = localeImport[abbreviation ? "monthAbbrs" : "fullMonths"]; + return titles.length && titles.length > month ? titles[month] : ""; + }; + var daysInMonth = function(nMonth, nYear) { + nMonth = (nMonth + 12) % 12; + return (((0 == (nYear%4)) && ((0 != (nYear%100)) || (0 == (nYear%400)))) && nMonth == 1) ? 29: [31,28,31,30,31,30,31,31,30,31,30,31][nMonth]; + }; + + var getWeeksInYear = function(Y) { + if(Y in weeksInYearCache) { + return weeksInYearCache[Y]; + }; + var X1, X2, NW; + with (X1 = new Date(Y, 0, 4)) { + setDate(getDate() - (6 + getDay()) % 7); + }; + with (X2 = new Date(Y, 11, 28)) { + setDate(getDate() + (7 - getDay()) % 7); + }; + weeksInYearCache[Y] = Math.round((X2 - X1) / 604800000); + return weeksInYearCache[Y]; + }; + + var getWeekNumber = function(y,m,d) { + var d = new Date(y, m, d, 0, 0, 0); + var DoW = d.getDay(); + d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu + var ms = d.valueOf(); // GMT + d.setMonth(0); + d.setDate(4); // Thu in Week 1 + return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1; + }; + + var printFormattedDate = function(date, fmt, useImportedLocale) { + if(!date || isNaN(date)) { return ""; }; + + var parts = fmt.split("-"), + str = [], + d = date.getDate(), + D = date.getDay(), + m = date.getMonth(), + y = date.getFullYear(), + flags = { + "sp":" ", + "dt":".", + "sl":"/", + "ds":"-", + "cc":",", + "d":pad(d), + "D":useImportedLocale ? localeImport.dayAbbrs[D == 0 ? 6 : D - 1] : localeDefaults.dayAbbrs[D == 0 ? 6 : D - 1], + "l":useImportedLocale ? localeImport.fullDays[D == 0 ? 6 : D - 1] : localeDefaults.fullDays[D == 0 ? 6 : D - 1], + "j":d, + "N":D == 0 ? 7 : D, + "w":D, + "W":getWeekNumber(y,m,d), + "M":useImportedLocale ? localeImport.monthAbbrs[m] : localeDefaults.monthAbbrs[m], + "F":useImportedLocale ? localeImport.fullMonths[m] : localeDefaults.fullMonths[m], + "m":pad(m + 1), + "n":m + 1, + "t":daysInMonth(m, y), + "y":String(y).substr(2,2), + "Y":y, + "S":["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10] + }; + + for(var pt = 0, part; part = parts[pt]; pt++) { + str.push(!(part in flags) ? "" : flags[part]); + }; + + return str.join(""); + }; + var parseDateString = function(str, fmt) { + var d = false, + m = false, + y = false, + now = new Date(), + parts = fmt.replace(/-sp(-sp)+/g, "-sp").split("-"), + divds = { "dt":".","sl":"/","ds":"-","cc":"," }, + str = "" + str; + + loopLabel: + for(var pt = 0, part; part = parts[pt]; pt++) { + if(str.length == 0) { return false; }; + + switch(part) { + // Dividers - be easy on them all i.e. accept them all when parsing... + case "sp": + case "dt": + case "sl": + case "ds": + case "cc": + str = str.replace(/^(\s|\.|\/|,|-){1,}/, ""); + break; + // DAY + case "d": // Day of the month, 2 digits with leading zeros (01 - 31) + case "j": // Day of the month without leading zeros (1 - 31) + // Accept both when parsing + if(str.search(/^(3[01]|[12][0-9]|0?[1-9])/) != -1) { + d = +str.match(/^(3[01]|[12][0-9]|0?[1-9])/)[0]; + str = str.substr(str.match(/^(3[01]|[12][0-9]|0?[1-9])/)[0].length); + break; + } else { + return ""; + }; + case "D": // A textual representation of a day, three letters (Mon - Sun) + case "l": // A full textual representation of the day of the week (Monday - Sunday) + // Accept English & imported locales and both modifiers + l = localeDefaults.fullDays.concat(localeDefaults.dayAbbrs); + if(localeImport.imported) { + l = l.concat(localeImport.fullDays).concat(localeImport.dayAbbrs); + }; + + for(var i = 0; i < l.length; i++) { + if(new RegExp("^" + l[i], "i").test(str)) { + str = str.substr(l[i].length); + continue loopLabel; + }; + }; + + break; + case "N": // ISO-8601 numeric representation of the day of the week (added in PHP 5.1.0) 1 (for Monday) through 7 (for Sunday) + case "w": // Numeric representation of the day of the week 0 (for Sunday) through 6 (for Saturday) + if(str.search(part == "N" ? /^([1-7])/ : /^([0-6])/) != -1) { + str = str.substr(1); + + }; + break; + case "S": // English ordinal suffix for the day of the month, 2 characters: st, nd, rd or th + if(str.search(/^(st|nd|rd|th)/i) != -1) { + str = str.substr(2); + }; + break; + // WEEK + case "W": // ISO-8601 week number of year, weeks starting on Monday (added in PHP 4.1.0): 1 - 53 + if(str.search(/^([1-9]|[1234[0-9]|5[0-3])/) != -1) { + str = str.substr(str.match(/^([1-9]|[1234[0-9]|5[0-3])/)[0].length); + }; + break; + // MONTH + case "M": // A short textual representation of a month, three letters + case "F": // A full textual representation of a month, such as January or March + // Accept English & imported locales and both modifiers + l = localeDefaults.fullMonths.concat(localeDefaults.monthAbbrs); + if(localeImport.imported) { + l = l.concat(localeImport.fullMonths).concat(localeImport.monthAbbrs); + }; + for(var i = 0; i < l.length; i++) { + if(str.search(new RegExp("^" + l[i],"i")) != -1) { + str = str.substr(l[i].length); + m = ((i + 12) % 12); + continue loopLabel; + }; + }; + return ""; + case "m": // Numeric representation of a month, with leading zeros + case "n": // Numeric representation of a month, without leading zeros + // Accept either when parsing + l = /^(1[012]|0?[1-9])/; + if(str.search(l) != -1) { + m = +str.match(l)[0] - 1; + str = str.substr(str.match(l)[0].length); + break; + } else { + return ""; + }; + case "t": // Number of days in the given month: 28 through 31 + if(str.search(/2[89]|3[01]/) != -1) { + str = str.substr(2); + break; + }; + break; + // YEAR + case "Y": // A full numeric representation of a year, 4 digits + if(str.search(/^(\d{4})/) != -1) { + y = str.substr(0,4); + str = str.substr(4); + break; + } else { + return ""; + }; + case "y": // A two digit representation of a year - be easy on four figure dates though + if(str.search(/^(\d{4})/) != -1) { + y = str.substr(0,4); + str = str.substr(4); + break; + } else if(str.search(/^(0[0-9]|[1-9][0-9])/) != -1) { + y = str.substr(0,2); + y = +y < 50 ? '20' + "" + String(y) : '19' + "" + String(y); + str = str.substr(2); + break; + } else return ""; + + default: + return ""; + }; + }; + + if(!(str == "") || (d === false && m === false && y === false)) { + return false; + }; + + m = m === false ? 11 : m; + y = y === false ? now.getFullYear() : y; + d = d === false ? daysInMonth(+m, +y) : d; + + if(d > daysInMonth(+m, +y)) { + return false; + }; + + var tmpDate = new Date(y,m,d); + + return !tmpDate || isNaN(tmpDate) ? false : tmpDate; + }; + var findLabelForElement = function(element) { + var label; + if(element.parentNode && element.parentNode.tagName.toLowerCase() == "label") lebel = element.parentNode; + else { + var labelList = document.getElementsByTagName('label'); + // loop through label array attempting to match each 'for' attribute to the id of the current element + for(var lbl = 0; lbl < labelList.length; lbl++) { + // Internet Explorer requires the htmlFor test + if((labelList[lbl]['htmlFor'] && labelList[lbl]['htmlFor'] == element.id) || (labelList[lbl].getAttribute('for') == element.id)) { + label = labelList[lbl]; + break; + }; + }; + }; + + if(label && !label.id) { label.id = element.id + "_label"; }; + return label; + }; + var updateLanguage = function() { + if(typeof(window.fdLocale) == "object" ) { + localeImport = { + titles : fdLocale.titles, + fullMonths : fdLocale.fullMonths, + monthAbbrs : fdLocale.monthAbbrs, + fullDays : fdLocale.fullDays, + dayAbbrs : fdLocale.dayAbbrs, + firstDayOfWeek : ("firstDayOfWeek" in fdLocale) ? fdLocale.firstDayOfWeek : 0, + imported : true + }; + } else if(!localeImport) { + localeImport = localeDefaults; + }; + }; + var loadLanguage = function() { + updateLanguage(); + for(dp in datePickers) { + if(!datePickers[dp].created) continue; + datePickers[dp].updateTable(); + }; + }; + var checkElem = function(elem) { + return !(!elem || !elem.tagName || !((elem.tagName.toLowerCase() == "input" && (elem.type == "text" || elem.type == "hidden")) || elem.tagName.toLowerCase() == "select")); + }; + var addDatePicker = function(options) { + + updateLanguage(); + + if(!options.formElements) { + if(debug) throw "No form elements stipulated within initialisation parameters"; + return; + }; + + options.id = (options.id && (options.id in options.formElements)) ? options.id : ""; + options.formatMasks = {}; + + var testParts = [dParts,mParts,yParts], + partsFound = [0,0,0], + tmpPartsFound, + matchedPart, + newParts, + indParts, + fmt, + fmtBag, + fmtParts, + newFormats, + myMin, + myMax; + + for(var elemID in options.formElements) { + elem = document.getElementById(elemID); + + if(!checkElem(elem)) { + if(debug) throw "The element with and id of '" + elemID + "' is of the wrong type or does not exist within the DOM"; + return false; + }; + + if(!options.id) options.id = elemID; + + fmt = options.formElements[elemID]; + + if(!(fmt.match(validFmtRegExp))) { + if(debug) throw "The element with and id of '" + elemID + "' has the following incorrect date format assigned to it: " + fmt; + return false; + }; + + fmtBag = [fmt]; + + if(options.dateFormats && (elemID in options.dateFormats) && options.dateFormats[elemID].length) { + newFormats = []; + + for(var f = 0, bDft; bDft = options.dateFormats[elemID][f]; f++) { + if(!(bDft.match(validFmtRegExp))) { + if(debug) throw "The element with and id of '" + elemID + "' has the following incorrect date format assigned to it within the dateFormats parameter: " + bDft; + return false; + }; + + newFormats.push(bDft); + }; + + fmtBag = fmtBag.concat(newFormats); + }; + + tmpPartsFound = [0,0,0]; + + for(var i = 0, testPart; testPart = testParts[i]; i++) { + if(fmt.search(new RegExp('('+testPart+')')) != -1) { + partsFound[i] = tmpPartsFound[i] = 1; + + // Create the date format strings to check against later for text input elements + if(elem.tagName.toLowerCase() == "input") { + matchedPart = fmt.match(new RegExp('('+testPart+')'))[0]; + newParts = String(matchedPart + "|" + testPart.replace(new RegExp("(" + matchedPart + ")"), "")).replace("||", "|"); + indParts = newParts.split("|"); + newFormats = []; + + for(var z = 0, bFmt; bFmt = fmtBag[z]; z++) { + for(var x = 0, indPart; indPart = indParts[x]; x++) { + if(indPart == matchedPart) continue; + newFormats.push(bFmt.replace(new RegExp('(' + testPart + ')(-|$)', 'g'), indPart + "-").replace(/-$/, "")); + }; + }; + + fmtBag = fmtBag.concat(newFormats); + }; + }; + }; + + options.formatMasks[elemID] = fmtBag.concat(); + + if(elem.tagName.toLowerCase() == "select") { + myMin = myMax = 0; + + // If we have a selectList, then try to parse the higher and lower limits + var selOptions = elem.options; + + // Check the yyyymmdd + if(tmpPartsFound[0] && tmpPartsFound[1] && tmpPartsFound[2]) { + var yyyymmdd, + cursorDate = false; + + // Remove the disabledDates parameter + if("disabledDates" in options) { + delete(options.disabledDates); + }; + + // Dynamically calculate the available "enabled" dates + options.enabledDates = {}; + + for(i = 0; i < selOptions.length; i++) { + for(var f = 0, fmt; fmt = fmtBag[f]; f++) { + dt = parseDateString(selOptions[i].value, fmt /*options.formElements[elemID]*/); + if(dt) { + yyyymmdd = dt.getFullYear() + "" + pad(dt.getMonth()+1) + "" + pad(dt.getDate()); + + if(!cursorDate) cursorDate = yyyymmdd; + + options.enabledDates[yyyymmdd] = 1; + + if(!myMin || Number(yyyymmdd) < myMin) { + myMin = yyyymmdd; + }; + + if(!myMax || Number(yyyymmdd) > myMax) { + myMax = yyyymmdd; + }; + + break; + }; + }; + }; + + // Automatically set cursor to first available date (if no bespoke cursorDate was set); + if(!options.cursorDate && cursorDate) options.cursorDate = cursorDate; + + } else if(tmpPartsFound[1] && tmpPartsFound[2]) { + var yyyymm; + + for(i = 0; i < selOptions.length; i++) { + for(var f = 0, fmt; fmt = fmtBag[f]; f++) { + dt = parseDateString(selOptions[i].value, fmt /*options.formElements[elemID]*/); + if(dt) { + yyyymm = dt.getFullYear() + "" + pad(dt.getMonth()+1); + + if(!myMin || Number(yyyymm) < myMin) { + myMin = yyyymm; + }; + + if(!myMax || Number(yyyymm) > myMax) { + myMax = yyyymm; + }; + + break; + }; + }; + }; + + // Round the min & max values to be used as rangeLow & rangeHigh + myMin += "" + "01"; + myMax += "" + daysInMonth(+myMax.substr(4,2) - 1, +myMax.substr(0,4)); + + } else if(tmpPartsFound[2]) { + var yyyy; + + for(i = 0; i < selOptions.length; i++) { + for(var f = 0, fmt; fmt = fmtBag[f]; f++) { + dt = parseDateString(selOptions[i].value, fmt /*options.formElements[elemID]*/); + if(dt) { + yyyy = dt.getFullYear(); + if(!myMin || Number(yyyy) < myMin) { + myMin = yyyy; + }; + + if(!myMax || Number(yyyy) > myMax) { + myMax = yyyy; + }; + + break; + }; + }; + }; + + // Round the min & max values to be used as rangeLow & rangeHigh + myMin += "0101"; + myMax += "1231"; + }; + + if(myMin && (!options.rangeLow || (+options.rangeLow < +myMin))) options.rangeLow = myMin; + if(myMax && (!options.rangeHigh || (+options.rangeHigh > +myMin))) options.rangeHigh = myMax; + }; + }; + + if(!(partsFound[0] && partsFound[1] && partsFound[2])) { + if(debug) throw "Could not find all of the required date parts for element: " + elem.id; + return false; + }; + + var opts = { + formElements:options.formElements, + // Form element id + id:options.id, + // Format masks + formatMasks:options.formatMasks, + // Non popup datepicker required + staticPos:!!(options.staticPos), + // Position static datepicker or popup datepicker's button + positioned:options.positioned && document.getElementById(options.positioned) ? options.positioned : "", + // Ranges stipulated in YYYYMMDD format + rangeLow:options.rangeLow && String(options.rangeLow).search(rangeRegExp) != -1 ? options.rangeLow : "", + rangeHigh:options.rangeHigh && String(options.rangeHigh).search(rangeRegExp) != -1 ? options.rangeHigh : "", + // Status bar format + statusFormat:options.statusFormat && String(options.statusFormat).search(validFmtRegExp) != -1 ? options.statusFormat : "", + // No fade in/out effect + noFadeEffect:!!(options.staticPos) ? true : !!(options.noFadeEffect), + // No drag functionality + dragDisabled:nodrag || !!(options.staticPos) ? true : !!(options.dragDisabled), + // Bespoke tabindex for this datePicker (or it's activation button) + bespokeTabIndex:options.bespokeTabindex && typeof options.bespokeTabindex == 'number' ? parseInt(options.bespokeTabindex, 10) : 0, + // Bespoke titles + bespokeTitles:options.bespokeTitles || {}, + // Final opacity + finalOpacity:options.finalOpacity && typeof options.finalOpacity == 'number' && (options.finalOpacity > 20 && options.finalOpacity <= 100) ? parseInt(+options.finalOpacity, 10) : (!!(options.staticPos) ? 100 : finalOpacity), + // Do we hide the form elements on datepicker creation + hideInput:!!(options.hideInput), + // Do we hide the "today" button + noToday:!!(options.noTodayButton), + // Do we show week numbers + showWeeks:!!(options.showWeeks), + // Do we fill the entire grid with dates + fillGrid:!!(options.fillGrid), + // Do we constrain selection of dates outside the current month + constrainSelection:"constrainSelection" in options ? !!(options.constrainSelection) : true, + // The date to set the initial cursor to + cursorDate:options.cursorDate && String(options.cursorDate).search(rangeRegExp) != -1 ? options.cursorDate : "", + // Locate label to set the ARIA labelled-by property + labelledBy:findLabelForElement(elem), + // Have we been passed a describedBy to set the ARIA decribed-by property... + describedBy:(options.describedBy && document.getElementById(options.describedBy)) ? options.describedBy : describedBy && document.getElementById(describedBy) ? describedBy : "", + // Callback functions + callbacks:options.callbackFunctions ? options.callbackFunctions : {}, + // Days of the week to highlight (normally the weekend) + highlightDays:options.highlightDays && options.highlightDays.length && options.highlightDays.length == 7 ? options.highlightDays : [0,0,0,0,0,1,1], + // Days of the week to disable + disabledDays:options.disabledDays && options.disabledDays.length && options.disabledDays.length == 7 ? options.disabledDays : [0,0,0,0,0,0,0] + }; + + if(options.disabledDates) { + if(options.enabledDates) delete(options.enabledDates); + opts.disabledDates = {}; + var startD; + for(startD in options.disabledDates) { + if((String(startD).search(wcDateRegExp) != -1 && options.disabledDates[startD] == 1) || (String(startD).search(rangeRegExp) != -1 && String(options.disabledDates[startD]).search(rangeRegExp) != -1)) { + opts.disabledDates[startD] = options.disabledDates[startD]; + }; + }; + } else if(options.enabledDates) { + var startD; + opts.enabledDates = {}; + for(startD in options.enabledDates) { + if((String(startD).search(wcDateRegExp) != -1 && options.enabledDates[startD] == 1) || (String(startD).search(rangeRegExp) != -1 && String(options.enabledDates[startD]).search(rangeRegExp) != -1)) { + opts.enabledDates[startD] = options.enabledDates[startD]; + }; + }; + }; + + datePickers[options.id] = new datePicker(opts); + datePickers[options.id].callback("create", datePickers[options.id].createCbArgObj()); + }; + + // Used by the button to dictate whether to open or close the datePicker + var isVisible = function(id) { + return (!id || !(id in datePickers)) ? false : datePickers[id].visible; + }; + + addEvent(window, 'unload', destroy); + + return { + // General event functions... + addEvent: function(obj, type, fn) { return addEvent(obj, type, fn); }, + removeEvent: function(obj, type, fn) { return removeEvent(obj, type, fn); }, + stopEvent: function(e) { return stopEvent(e); }, + // Show a single popup datepicker + show: function(inpID) { return showDatePicker(inpID, false); }, + // Hide a popup datepicker + hide: function(inpID) { return hideDatePicker(inpID); }, + // Create a new datepicker + createDatePicker: function(options) { addDatePicker(options); }, + // Destroy a datepicker (remove events and DOM nodes) + destroyDatePicker: function(inpID) { destroySingleDatePicker(inpID); }, + // Check datePicker form elements exist, if not, destroy the datepicker + cleanUp: function() { cleanUp(); }, + // Pretty print a date object according to the format passed in + printFormattedDate: function(dt, fmt, useImportedLocale) { return printFormattedDate(dt, fmt, useImportedLocale); }, + // Update the internal date using the form element value + setDateFromInput: function(inpID) { if(!inpID || !(inpID in datePickers)) return false; datePickers[inpID].setDateFromInput(); }, + // Set low and high date ranges + setRangeLow: function(inpID, yyyymmdd) { if(!inpID || !(inpID in datePickers)) { return false; }; datePickers[inpID].setRangeLow(yyyymmdd); }, + setRangeHigh: function(inpID, yyyymmdd) { if(!inpID || !(inpID in datePickers)) { return false; }; datePickers[inpID].setRangeHigh(yyyymmdd); }, + // Set bespoke titles for a datepicker instance + setBespokeTitles: function(inpID, titles) {if(!inpID || !(inpID in datePickers)) { return false; }; datePickers[inpID].setBespokeTitles(titles); }, + // Add bespoke titles for a datepicker instance + addBespokeTitles: function(inpID, titles) {if(!inpID || !(inpID in datePickers)) { return false; }; datePickers[inpID].addBespokeTitles(titles); }, + // Attempt to parse a valid date from a date string using the passed in format + parseDateString: function(str, format) { return parseDateString(str, format); }, + // Change global configuration parameters + setGlobalVars: function(json) { affectJSON(json); }, + setSelectedDate: function(inpID, yyyymmdd) { if(!inpID || !(inpID in datePickers)) { return false; }; datePickers[inpID].setSelectedDate(yyyymmdd); }, + // Is the date valid for selection i.e. not outside ranges etc + dateValidForSelection: function(inpID, dt) { if(!inpID || !(inpID in datePickers)) return false; return datePickers[inpID].canDateBeSelected(dt); }, + // Add disabled and enabled dates + addDisabledDates: function(inpID, dts) { if(!inpID || !(inpID in datePickers)) return false; datePickers[inpID].addDisabledDates(dts); }, + setDisabledDates: function(inpID, dts) { if(!inpID || !(inpID in datePickers)) return false; datePickers[inpID].setDisabledDates(dts); }, + addEnabledDates: function(inpID, dts) { if(!inpID || !(inpID in datePickers)) return false; datePickers[inpID].addEnabledDates(dts); }, + setEnabledDates: function(inpID, dts) { if(!inpID || !(inpID in datePickers)) return false; datePickers[inpID].setEnabledDates(dts); }, + // Disable and enable the datepicker + disable: function(inpID) { if(!inpID || !(inpID in datePickers)) return false; datePickers[inpID].disableDatePicker(); }, + enable: function(inpID) { if(!inpID || !(inpID in datePickers)) return false; datePickers[inpID].enableDatePicker(); }, + // Set the cursor date + setCursorDate: function(inpID, yyyymmdd) { if(!inpID || !(inpID in datePickers)) return false; datePickers[inpID].setCursorDate(yyyymmdd); }, + // Whats the currently selected date + getSelectedDate: function(inpID) { return (!inpID || !(inpID in datePickers)) ? false : datePickers[inpID].returnSelectedDate(); }, + // Attempt to update the language (causes a redraw of all datepickers on the page) + loadLanguage: function() { loadLanguage(); }, + // Set the debug level i.e. throw errors or fail silently + setDebug: function(dbg) { debug = !!(dbg); } + }; +})(); \ No newline at end of file diff --git a/dp/datepicker.packed.js b/dp/datepicker.packed.js new file mode 100644 index 0000000..9deac6c --- /dev/null +++ b/dp/datepicker.packed.js @@ -0,0 +1 @@ +eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('k 7I=(v 7I(){k 3r=A,5d=9l.1j.aU.9m(1q.9n)==="[3Y aV]",9o=/aW/.5I(9p.9q.2b())&&!/(aX|aY)/.5I(9p.9q.2b()),6B=9r(),K={},aZ=0,5J={},21=A,3Z=15.b0(b1),2H="",5K=A,7J=O,6C=A,6D=O,6E="d-1S-F-1S-Y",4C="F-1S-d-cc-1S-Y",5L=5d?["5e"]:["5e","1S-F-1S-Y"],b2=["dt","4D","ds","cc","1S"],b3="dt|4D|ds|cc|1S",7K="d|j",7L="m|n|M|F",7M="Y|y",3I=A,2I={},2T=4E,5f=/^((1S|dt|4D|ds|cc)|([d|D|l|j|N|w|S|W|M|F|m|n|t|Y|y]))(-((1S|dt|4D|ds|cc)|([d|D|l|j|N|w|S|W|M|F|m|n|t|Y|y])))*$/,2B=/^((\\d\\d\\d\\d)(0[1-9]|1[5M])(0[1-9]|[12][0-9]|3[2U]))$/,5g=/^(((\\d\\d\\d\\d)|(\\*\\*\\*\\*))((0[1-9]|1[5M])|(\\*\\*))(0[1-9]|[12][0-9]|3[2U]))$/;(v(){k 4F=u.1M(\'2V\'),9s=15(4F[4F.17-1].b4).1b(/[\\n\\r\\s\\t]+/g," ").1b(/^\\s+/,"").1b(/\\s+$/,""),3s=9t(9s);h(2s 3s==="3Y"&&!("2J"16 3s)){7N(3s)};h(2s(3J)!="3Y"){k 6F=u.1M("6F")[0]||u.3t,9u=4F[4F.17-1].6G.Q(0,4F[4F.17-1].6G.b5("/"))+"/5N/",2V;T(k i=0;i<6B.17;i++){2V=u.1J(\'2V\');2V.1w="43/9v";2V.6G=9u+6B[i]+".b6";2V.b7="b8-8";/*@1L/*@h(@2W)k 5O=u.1M(\'b9\');h(5O.17&&5O[0].ba.17){5O[0].18(2V)}I{u.1M(\'6F\')[0].18(2V)};5O=1a;@I@*/6F.18(2V);/*@24@*/};2V=1a}I{6C=O}})();v 9r(){k 3K=u.1M(\'6H\')[0].7O(\'5N\')||u.1M(\'6H\')[0].7O(\'bb:5N\');h(!3K){3K="bc"}I{3K=3K.2b()};q 3K.L(/^([a-z]{2,3})-([a-z]{2})$/)!=-1?[3K.1X(/^([a-z]{2,3})-([a-z]{2})$/)[1],3K]:[3K]};v 7N(3s){h(2s 3s!=="3Y"){q};T(7P 16 3s){1p=3s[7P];7Q(7P.2b()){1r"5N":h(1p.L(/^[a-z]{2,3}(-([a-z]{2}))?$/i)!=-1){6B=[1p.2b()];6C=O};1f;1r"5K":5K=!!1p;1f;1r"9w":7J=!!1p;1f;1r"44":6D=!!1p;1f;1r"9x":h(2s 1p=="6I"&&1p.1X(5f)){9y(1p)};1f;1r"9z":h(2s 1p=="6I"&&1p.1X(5f)){4C=1p};1f;1r"6J":h(2s 1p=="6I"){2H=1p};1f;1r"bd":h(2s 1p==\'6K\'&&(+1p>20&&+1p<=4E)){2T=2t(1p,10)};1f;1r"be":2I={};T(k dt 16 1p){2I[dt]=1p[dt]}}}};v 9y(1p){h(5d){5L=["5e"];6E="j-1S-F-1S-Y";q};k 45=1p.5P("-"),4G=[],4H=[],2c;T(k 2C=0;2C<45.17;2C++){2c=45[2C];h(2c=="j"||2c=="d"){h(4H.17){4G.2d(4H.5h("-"));4H=[]};4G.2d("5e")}I{4H.2d(2c)}};h(4H.17){4G.2d(4H.5h("-"))};h(!4G.17||4G.17>3){5L=["5e","1S-F-1S-Y"];6E="j-1S-F-1S-Y";q};5L=4G;6E=1p};v 1c(1p,17){17=17||2;q"bf".Q(0,17-1N.46(15(1p).17,17))+1p};v 2l(1t,1w,2p){2K{h(1t.9A){1t["e"+1w+2p]=2p;1t[1w+2p]=v(){1t["e"+1w+2p](1q.2X)};1t.9A("5i"+1w,1t[1w+2p])}I{1t.5Q(1w,2p,O)}}2L(2J){}};v 1C(1t,1w,2p){2K{h(1t.9B){1t.9B("5i"+1w,1t[1w+2p]);1t[1w+2p]=1a}I{1t.7R(1w,2p,O)}}2L(2J){}};v 1O(e){e=e||u.4I.2X;h(e.9C){e.9C();e.bg()};/*@1L@h(@2W)e.bh=O;e.bi=A;@24@*/q A};v 9t(Z){h(2s Z!==\'6I\'||Z==""){q{}};2K{h(2s 5R==="3Y"&&5R.6L){q 1q.5R.6L(Z)}I h(/5N|9w|44|9x|9z|5K|6J/.5I(Z.2b())){k f=9D([\'k u,3L,bj,1q,9E,2e,14,9l,9D,\',\'bk,15,1N,2M,bl,bm;\',\'q (\',Z.1b(/<\\!--.+-->/bn,\'\').1b(/\\bo\\b/g,\'v­\'),\');\'].5h(\'\'));q f()}}2L(e){};h(3r){47"5S 3M 6L 4a 5R 3Y";};q{"2J":"5S 3M 6L 4a 5R 3Y"}};v 3u(1o,7S){h(1o&&1o.25){1o.2Y("7S",7S)}};v 2u(1o,9F,1p){h(1o&&1o.25){1o.2Y("bp-"+9F,1p)}};v 1h(C){c.1D=1a;c.5T=A;c.2Z=A;c.5U=1a;c.5V=1a;c.3N=0;c.3a=0;c.6M=0;c.7T=0;c.7U=0;c.x=0;c.y=0;c.2N=A;c.1k=A;c.4b=0;c.3O=99;c.3b=A;c.5W=A;c.5j=A;c.5X=1a;c.bq=1a;c.1F=C.1F?C.1F:"",c.B=C.1F?P 14(+C.1F.Q(0,4),+C.1F.Q(4,2)-1,+C.1F.Q(6,2)):P 14();c.br={};c.bs={};c.2O=21.2O;c.5k=P 14();c.4c=A;c.1T=O;c.3I=A;c.2m=A;c.26=A;c.5Y=A;c.2I={};T(k 4J 16 C){h(4J.L(/5l|2n|4K/)!=-1)3v;c[4J]=C[4J]};/*@1L@h(@2W)c.1G=1a;c.4d=A;@24@*//*@1L@h(@4L<=5.7)c.4d=u.3t&&2s u.3t.1d.bt!="bu";@24@*/T(k i=0,5m;5m=["5l","2n","4K"][i];i++){c[5m]={};T(k 4J 16 C[5m]){c[5m][4J]=C[5m][4J]}};c.B.6N(5);c.9G=v(){o.3c();o.3P("6O",o.5Z())};c.5Z=v(){q c.1D?{"E":c.E,"B":c.1D,"dd":1c(c.B.1x()),"6P":1c(c.B.1g()+1),"3w":c.B.1e()}:{"E":c.E,"B":1a,"dd":1a,"6P":1a,"3w":1a}};c.9H=v(){h(2s(1q.7V)==\'6K\'){q[1q.9I,1q.7V]}I h(u.3d&&(u.3d.3Q||u.3d.3R)){q[u.3d.3Q,u.3d.3R]}I h(u.3t&&(u.3t.3Q||u.3t.3R)){q[u.3t.3Q,u.3t.3R]};q[0,0]};c.7W=v(){h(!o.2N||o.1P){q};o.R.1d.4M="3e";o.R.1d.4e=o.R.1d.3L="7X";o.R.1d.3x="6Q";k 60=o.R.5n,6R=o.R.7Y,U=u.1m(\'1i-H-\'+o.E),3f=o.9J(U),6S=(u.6T&&u.6T!="9K")?u.3t:u.3d,7Z=o.9H(),3R=7Z[1],3Q=7Z[0],9L=2t(6S.bv+3R)>2t(60+3f[1]+U.5n+2),9M=2t(3f[1]-(60+U.5n+2))>2t(3R);o.R.1d.4M="2Z";o.R.1d.4e=2e(2t(6S.9N+3Q)<2t(6R+3f[0])?1N.6U(2t((6S.9N+3Q)-6R)):3f[0])+"3g";o.R.1d.3L=(9L||!9M)?1N.6U(2t(3f[1]+U.5n+2))+"3g":1N.6U(2t(3f[1]-(60+2)))+"3g";/*@1L@h(@4L<=5.7)h(o.4d)q;o.1G.1d.3L=o.R.1d.3L;o.1G.1d.4e=o.R.1d.4e;o.1G.1d.80=6R+"3g";o.1G.1d.81=(60-2)+"3g";@24@*/};c.5o=v(){k V=u.1m(o.E+"-B-1y-3y");h(V){2K{V.2Y(!/*@1L!@*/A?"3h":"61","-1");V.3h=-1;V.G=V.G.1b(/B-1y-3y/,"");V.E="";V.6V=1a;V.6W=1a}2L(2J){}}};c.9O=v(){k V=u.1m(o.E+"-B-1y-3y");h(V&&!(V.1M("1l").17)){k 62=V.G.1X(/cd-([\\d]{4})([\\d]{2})([\\d]{2})/),9P=(V.G.L(/B-1y-6X|3z-2P-2Q|2f-1k|6Y-82|3M-4f/)!=-1),4N=u.1J(\'1l\'),3S;4N.G="1i-83-84";2o(V.2a)V.3i(V.2a);h(9P){3S=4N.85(A);3S.18(u.1Y(1E(13)));V.18(3S)};T(k 2C=0,2c;2c=5L[2C];2C++){h(2c=="5e"){V.18(u.1Y(+62[3]))}I{3S=4N.85(A);3S.18(u.1Y(3j(P 14(62[1],+62[2]-1,62[3]),2c,O)));V.18(3S)}}}};c.5p=v(){k V=u.1m(o.E+"-B-1y-3y");h(V){2K{V.2Y(!/*@1L!@*/A?"3h":"61","0");V.3h=0;V.G=V.G.1b(/B-1y-3y/,"")+" B-1y-3y";h(!c.4c){V.6V=o.6V;V.6W=o.6W};h(!5d&&!c.4c)o.9O();h(!c.1T&&!c.4c){6Z(v(){2K{V.63()}2L(2J){}},0)}}2L(2J){}}};c.86=v(1z){h(15(1z).L(/^([0-9]{8})$/)!=-1){c.B=P 14(+1z.Q(0,4),+1z.Q(4,2)-1,+1z.Q(6,2));c.1F=1z;h(c.1P){c.2g()}}};c.2g=v(bw){h(!o||o.3b||!o.2N)q;o.3b=O;o.5o();h(o.5T&&!o.5Y){h(o.3a){k n=o.B.1x(),d=P 14(o.B);d.2D(2);d.64(d.1g()+o.3a*1);d.2D(1N.46(n,22(d.1g(),d.1e())));o.B=P 14(d)}I{o.B.2D(1N.46(o.B.1x()+o.6M,22(o.B.1g()+o.3a,o.B.1e()+o.3N)));o.B.64(o.B.1g()+o.3a);o.B.9Q(o.B.1e()+o.3N)}};o.3k();h(!o.65){o.70()};o.87(o.B);k cd=o.B.1x(),cm=o.B.1g(),cy=o.B.1e(),1F=(15(cy)+1c(cm+1)+1c(cd)),1u=P 14(cy,cm,1);1u.6N(5);k dt,2v,V,i,3l,4g,1n,2E,9R,71,3S,88,8a=(1u.3A()+6)%7,4h=(((8a-o.2O)+7)%7)-1,4i=22(cm,cy),2h=P 14(),66=15(1u.1e())+1c(1u.1g()+1),4g=[4,4,4,4,4,4],5q=P 14(cy,cm-1,1),72=P 14(cy,cm+1,1),8b=22(5q.1g(),5q.1e()),8c=15(72.1e())+1c(72.1g()+1),8d=15(5q.1e())+1c(5q.1g()+1),9S=(72.3A()+6)%7,9T=(5q.3A()+6)%7,2h=2h.1e()+1c(2h.1g()+1)+1c(2h.1x()),4N=u.1J(\'1l\');o.4j=!o.4O&&o.5r&&(0-4h<1)?15(8d)+(8b+(0-4h)):66+"2U";o.4k=!o.4O&&o.5r?8c+1c(41-4h-4i):66+15(4i);o.73=66;71=o.3P("bx",{E:o.E,dd:1c(cd),6P:1c(cm+1),3w:cy,by:o.4j,bz:o.4k})||{};2R=o.8e(cy,cm+1);o.9U();88=(o.1D!=1a)?o.1D.1e()+1c(o.1D.1g()+1)+1c(o.1D.1x()):A;4N.G="1i-83-84";h(c.5X!=1a){2u(c.5X,"74",A);c.5X=1a};T(k 3B=0;3B<42;3B++){1H=1N.bA(3B/7);V=o.8f[3B];3S=4N.85(A);2o(V.2a)V.3i(V.2a);h((3B>4h&&3B<=(4h+4i))||o.5r){2E=66;4l=8a;dt=3B-4h;2v=[];4f=O;h(dt<1){dt=8b+dt;2E=8d;4l=9T;4f=!o.4O;2v.2d("1Q-3z")}I h(dt>4i){dt-=4i;2E=8c;4l=9S;4f=!o.4O;2v.2d("1Q-3z")};4l=(4l+dt+6)%7;2v.2d("2f-"+3m.3T[4l].2b());3l=2E+15(dt<10?"0":"")+dt;h(o.1U&&+3l<+o.1U||o.1V&&+3l>+o.1V){V.G="3z-2P-2Q";V.23="";V.18(u.1Y(dt));h(o.1Z){4g[1H]=1N.46(4g[1H],2)}}I{h(4f){V.23=4C?3j(P 14(+15(2E).Q(0,4),+15(2E).Q(4,2)-1,+dt),4C,O):"";2v.2d("cd-"+3l+" 4m-"+2E+" 9V-"+2E.Q(4,2)+1c(dt))}I{V.23=4C?1E(13)+" "+3j(P 14(+15(2E).Q(0,4),+15(2E).Q(4,2)-1,+dt),4C,O):"";2v.2d("4m-"+2E+" 9V-"+2E.Q(4,2)+1c(dt)+" 3M-4f")};h(3l==2h){2v.2d("B-1y-2h")};h(88==3l){2v.2d("B-1y-74-B");2u(V,"74","O");c.5X=V};h(o.3C[4l]||2R[3l]==0){2v.2d("2f-1k");h(4C&&4f){V.23=1E(13)+" "+V.23}}h(3l 16 71){2v.2d(71[3l])}h(o.4P[4l]){2v.2d("B-1y-75")};h(1F==3l){V.E=o.E+"-B-1y-3y"};V.18(u.1Y(dt));V.G=2v.5h(" ");h(o.1Z){4g[1H]=1N.46(2v[0]=="1Q-3z"?3:1,4g[1H])}}}I{V.G="B-1y-6X";V.18(u.1Y(3Z));V.23=""};h(o.1Z&&3B-(1H*7)==6){2o(o.5s[1H].2a)o.5s[1H].3i(o.5s[1H].2a);o.5s[1H].18(u.1Y(4g[1H]==4&&!o.5r?3Z:8g(cy,cm,3B-4h-6)));o.5s[1H].G="B-1y-8h-5t"+(["",""," 3z-2P-2Q"," 1Q-3z",""][4g[1H]])}};k 1l=o.67.1M("1l");2o(1l[0].2a)1l[0].3i(1l[0].2a);2o(1l[1].2a)1l[1].3i(1l[1].2a);1l[0].18(u.1Y(9W(cm,A)+3Z));1l[1].18(u.1Y(cy));h(o.5T){o.4Q=50+1N.4n(((o.4Q-50)/1.8));o.5V=1q.6Z(o.2g,o.4Q)};o.3b=o.5Y=A;o.5p()};c.4R=v(){h(u.1m("1i-H-"+c.E)){u.1m("1i-H-"+c.E).2i.3i(u.1m("1i-H-"+c.E))};h(!c.2N){q};1C(c.1A,"4S",o.2F);1C(c.1A,"bB",o.4T);1C(c.1A,"8i",o.4U);1C(u,"4S",o.2F);1C(u,"5u",o.4V);h(1q.5Q&&!1q.76){2K{1q.7R(\'8j\',c.3D,A)}2L(2J){}}I{1C(u,"44",c.3D);1C(1q,"44",c.3D)};o.77();68(o.5U);68(o.5V);/*@1L@h(@4L<=5.7)h(!o.1P&&!o.4d){2K{o.1G.2i.3i(o.1G);o.1G=1a}2L(2J){}};@24@*/h(c.R&&c.R.2i){c.R.2i.3i(c.R)};o=1a};c.9X=v(){o.R.1d.80=o.1A.7Y+"3g";o.R.1d.81=o.1A.5n+"3g"};c.78=v(){h(u.1m("1i-"+c.E))q;c.1T=O;v 69(2G){k 1W=u.1J(\'1W\');h(2G.79)1W.G=2G.79;h(2G.4W){/*@1L/*@h(@2W)1W.2Y(\'bC\',2G.4W);@I@*/1W.2Y(\'4W\',2G.4W);/*@24@*/};/*@1L/*@h(@2W)1W.6a="5i";/*@24@*/q 1W};v 8k(1K,1t){T(k i=0,2G;2G=1t[i];i++){k 1W=69(2G);1K.18(1W);k H=u.1J(\'1l\');H.G=2G.G;H.E=o.E+2G.E;H.18(u.1Y(2G.43||o.3Z));H.23=2G.23||"";/*@1L/*@h(@2W)1W.6a=H.6a="5i";/*@24@*/1W.18(H)}};c.R=u.1J(\'R\');c.R.E="1i-"+c.E;c.R.G="1h";c.R.1d.4M="3e";c.R.1d.3x="7a";h(c.2H&&u.1m(c.2H)){2u(c.R,"6J",c.2H)};h(c.8l){2u(c.R,"bD",c.8l.E)};k 1K,1H,1n,4X,6b,7b;c.1A=u.1J(\'1A\');c.1A.G="bE";c.1A.4T=c.4T;c.1A.4U=c.4U;c.1A.4o=c.4o;h(c.1P){c.1A.2F=c.2F};c.R.18(c.1A);k 5v=!c.8m?" 4Y-5w":"";h(!c.1P){c.R.1d.4M="3e";c.R.G+=5v;u.1M(\'3d\')[0].18(c.R);/*@1L@h(@4L<=5.7)h(!c.4d){c.1G=u.1J(\'bF\');c.1G.6G="9v:\'<6H>\';";c.1G.2Y(\'G\',\'bG\');c.1G.2Y("3h",-1);3u(c.1G,"8n");2u(c.1G,"3e","O");c.1G.bH="6Y";c.1G.bI="0";c.1G.bJ=c.1G.E=c.E+"-bK";u.3d.18(c.1G)};@24@*/2u(c.R,"3e","O")}I{U=u.1m(c.2S?c.2S:c.E);h(!U){c.R=1a;h(3r)47 c.2S?"5S 3M 9Y a K 9Z 9E 1o 4Z an E:"+c.2S:"5S 3M 9Y a K 9Z 5x 4Z an E:"+c.E;q};c.R.G+=" bL-7c";h(c.2S){U.18(c.R)}I{U.2i.a0(c.R,U.a1)};h(c.8o){T(k 1B 16 c.2n){U=u.1m(1B);h(U){U.G+=" 1i-3e-5x"}}};6Z(c.9X,bM)};3u(c.R,"bN");h(c.3E){7b=u.1J(\'a2\');c.1A.18(7b);1K=u.1J(\'1K\');1K.G="B-1y-a2";7b.18(1K);c.2w=69({79:"B-1y-bO"+5v,4W:c.1Z?8:7});1K.18(c.2w);c.51()};4X=u.1J(\'a3\');c.1A.18(4X);1K=u.1J(\'1K\');3u(1K,"8n");4X.18(1K);c.67=69({79:"B-1y-23"+5v,4W:c.1Z?8:7});1K.18(c.67);1K=1a;k 1l=u.1J(\'1l\');1l.18(u.1Y(3Z));1l.G="1Q-3x"+5v;c.67.18(1l);1l=u.1J(\'1l\');1l.18(u.1Y(3Z));1l.G="2q-3x"+5v;c.67.18(1l);1l=1a;1K=u.1J(\'1K\');3u(1K,"8n");4X.18(1K);8k(1K,[{G:"2x-H 2x-2q",E:"-2x-2q-H",43:"\\bP",23:1E(2)},{G:"2x-H 2x-1Q",E:"-2x-1Q-H",43:"\\bQ",23:1E(0)},{4W:c.1Z?4:3,G:"2h-H",E:"-2h-H",43:1E(4)},{G:"2y-H 2y-1Q",E:"-2y-1Q-H",43:"\\bR",23:1E(1)},{G:"2y-H 2y-2q",E:"-2y-2q-H",43:"\\bS",23:1E(3)}]);6b=u.1J(\'7d\');c.1A.18(6b);k 6c=c.1Z?8:7,5y=c.1Z?0:-1,H,9R;T(k 3F=0;3F<7;3F++){1H=u.1J(\'1K\');h(3F!=0){3u(1H,"1H");6b.18(1H)}I{4X.18(1H)};T(k 4p=0;4p<6c;4p++){h(3F===0||(c.1Z&&4p===0)){1n=u.1J(\'1W\')}I{1n=u.1J(\'V\');2u(1n,"6J",c.E+"-1n-"+4p+(c.1Z?" "+c.E+"-1H-"+3F:""));2u(1n,"74","A")};/*@1L@*//*@h(@2W)1n.6a="5i";/*@24@*/1H.18(1n);h((c.1Z&&4p>0&&3F>0)||(!c.1Z&&3F>0)){3u(1n,"bT")}I{h(3F===0&&4p>5y){1n.G="B-1y-2f-5t";1n.a4="1n";3u(1n,"bU");1n.E=c.E+"-1n-"+4p}I{1n.G="B-1y-8h-5t";1n.a4="1H";3u(1n,"bV");1n.E=c.E+"-1H-"+3F}}}};1n=1H=1a;c.2z=c.1A.1M(\'a3\')[0].1M(\'1K\')[2].1M(\'1W\');T(k y=0;y<6c;y++){h(y==0&&c.1Z){c.2z[y].18(u.1Y(1E(6)));c.2z[y].23=1E(8);3v};h(y>(c.1Z?0:-1)){H=u.1J("1l");H.G="1i-2f-5t";/*@1L@*//*@h(@2W)H.6a="5i";/*@24@*/c.2z[y].18(H)}};H=1a;c.bW=c.1A.1M(\'7d\')[0].1M(\'1K\');c.8f=c.1A.1M(\'7d\')[0].1M(\'V\');c.5z=u.1m(c.E+"-2x-2q-H");c.6d=u.1m(c.E+"-2x-1Q-H");c.6e=u.1m(c.E+"-2h-H");c.6f=u.1m(c.E+"-2y-2q-H");c.6g=u.1m(c.E+"-2y-1Q-H");h(c.65){c.6e.1d.3x="7a"};h(c.1Z){c.5s=c.1A.1M(\'7d\')[0].1M(\'1W\');c.R.G+=" bX-bY"};6b=4X=1K=8k=69=1a;h(c.1U&&c.1V&&(c.1V-c.1U<7)){c.a5()};c.7e();c.2N=O;c.2g();h(c.1P){c.2Z=O;c.4b=c.3O=c.2T;c.R.1d.4M="2Z";c.R.1d.3x="6Q";c.1T=O;c.5A()}I{c.7W();c.R.1d.4M="2Z";c.5A();c.1T=O};c.3P("bZ",{"E":c.E})};c.5A=v(){1q.68(o.5U);o.5U=1a;k 8p=1N.4n(o.4b+((o.3O-o.4b)/4));o.8q(8p);h(1N.6U(o.3O-8p)>3&&!o.8r){o.5U=1q.6Z(o.5A,50)}I{o.8q(o.3O);h(o.3O==0){o.R.1d.3x="7a";o.R.1d.4M="3e";2u(o.R,"3e","O");o.2Z=A}I{2u(o.R,"3e","A");o.2Z=O}}};c.8s=v(e){e=e||1q.2X;k 8t=(e.7f?e.7f:e.7g?e.7g:e.x)-o.7T;k 8u=(e.7h?e.7h:e.7i?e.7i:e.Y)-o.7U;o.R.1d.4e=1N.4n(o.x+8t)>0?1N.4n(o.x+8t)+\'3g\':"7X";o.R.1d.3L=1N.4n(o.y+8u)>0?1N.4n(o.y+8u)+\'3g\':"7X";/*@1L@h(@4L<=5.7)h(o.1P||o.4d)q;o.1G.1d.3L=o.R.1d.3L;o.1G.1d.4e=o.R.1d.4e;@24@*/};c.8v=v(e){k b=u.1M("3d")[0];b.G=b.G.1b(/1i-4Y-3U/g,"");1C(u,\'a6\',o.8s,A);1C(u,\'5u\',o.8v,A);o.R.1d.a7=c0};c.2F=v(e){e=e||u.4I.2X;k X=e.5B!=1a?e.5B:e.8w,5C=X,8x=O,a8=P 2M("^1i-(H-)?"+o.E+"$");o.6h=1a;2o(X){h(X.E&&X.E.17&&X.E.L(a8)!=-1){8x=A;1f};2K{X=X.2i}2L(2J){1f}};h(8x){6i();q O};h((o.R.G+5C.G).L(\'1i-1k\')!=-1){q O};h(5C.E.L(P 2M("^"+o.E+"(-2x-2q-H|-2x-1Q-H|-2y-1Q-H|-2y-2q-H)$"))!=-1){o.6h=5C;2l(u,"5u",o.4V);2l(5C,"8i",o.4V);k 7j={"-2x-2q-H":[0,-1,0],"-2x-1Q-H":[0,0,-1],"-2y-2q-H":[0,1,0],"-2y-1Q-H":[0,0,1]},7k=5C.E.1b(o.E,""),7l=2e(o.B.1e()+1c(o.B.1g()+1));o.4Q=8y;o.5T=O;o.6M=7j[7k][0];o.3N=7j[7k][1];o.3a=7j[7k][2];o.c1=1;h(!(o.73==7l)){h((o.73<7l&&(o.3N==-1||o.3a==-1))||(o.73>7l&&(o.3N==1||o.3a==1))){o.5Y=A;o.4Q=c2}I{o.5Y=O;o.4Q=8y}};o.2g();q 1O(e)}I h(X.G.L("4Y-5w")!=-1){o.7T=e.7f?e.7f:e.7g?e.7g:e.x;o.7U=e.7h?e.7h:e.7i?e.7i:e.Y;o.x=2t(o.R.1d.4e);o.y=2t(o.R.1d.3L);2l(u,\'a6\',o.8s,A);2l(u,\'5u\',o.8v,A);k b=u.1M("3d")[0];b.G=b.G.1b(/1i-4Y-3U/g,"")+" 1i-4Y-3U";o.R.1d.a7=c3;q 1O(e)};q O};c.4o=v(e){h(o.4b!=o.3O||o.1k)q 1O(e);e=e||u.4I.2X;k X=e.5B!=1a?e.5B:e.8w;2o(X.2i){h(X.25&&X.25.2b()=="V"){h(X.G.L(/cd-([0-9]{8})/)==-1||X.G.L(/B-1y-6X|3z-2P-2Q|2f-1k|6Y-82|3M-4f/)!=-1)q 1O(e);k 3n=X.G.1X(/cd-([0-9]{8})/)[1];o.B=P 14(3n.Q(0,4),3n.Q(4,2)-1,3n.Q(6,2));o.1D=P 14(o.B);o.1T=O;o.3P("6O",{"E":o.E,"B":o.1D,"dd":o.1D.1x(),"6P":o.1D.1g()+1,"3w":o.1D.1e()});o.6j();o.3V();o.3o();1f}I h(X.E&&X.E==o.E+"-2h-H"){o.B=P 14();o.2g();o.3o();1f}I h(X.G.L(/B-1y-2f-5t/)!=-1){k 8z=o.1Z?-1:0,U=X;2o(U.a9){U=U.a9;h(U.25&&U.25.2b()=="1W")8z++};o.2O=(o.2O+8z)%7;o.7e();1f};2K{X=X.2i}2L(2J){1f}};q 1O(e)};c.8A=v(4q){h(c.1P){q};k U,1B;T(1B 16 c.2n){U=u.1m(c.E);h(!U||(U&&U.1k)){q}};c.1T=O;h(!c.2N||!u.1m(\'1i-\'+c.E)){c.2N=A;c.5j=A;c.78();c.5j=O}I{c.3c();c.7W()};c.1T=!!!4q;h(c.1T){c.4c=O;2l(u,"4S",c.2F);h(6D){h(1q.5Q&&!1q.76)1q.5Q(\'8j\',c.3D,A);I{2l(u,"44",c.3D);2l(1q,"44",c.3D)}}}I{c.4c=A};c.3O=c.2T;c.R.1d.3x="6Q";/*@1L@h(@4L<=5.7)h(!o.4d){c.1G.1d.80=c.R.7Y+"3g";c.1G.1d.81=c.R.5n+"3g";c.1G.1d.3x="6Q"};@24@*/c.5p();c.5A();k 4r=u.1m(\'1i-H-\'+c.E);h(4r){4r.G=4r.G.1b("dp-52-3U","")+" dp-52-3U"}};c.3V=v(){h(!c.2Z||!c.2N||!u.1m(\'1i-\'+c.E))q;c.3I=A;o.R.G=o.R.G.1b("7c-63","");c.3o();c.77();c.4c=A;h(c.2w){c.51(1E(9))};c.1T=O;c.5p();h(c.1P){q};k 4r=u.1m(\'1i-H-\'+c.E);h(4r)4r.G=4r.G.1b("dp-52-3U","");1C(u,"4S",c.2F);h(6D){h(1q.5Q&&!1q.76){2K{1q.7R(\'8j\',c.3D,A)}2L(2J){}}I{1C(u,"44",c.3D);1C(1q,"44",c.3D)}};/*@1L@h(@4L<=5.7)h(!c.4d){c.1G.1d.3x="7a"};@24@*/c.3O=0;c.5A()};c.6V=v(e){o.3V()};c.6W=v(e){o.1T=A;o.R.G=o.R.G.1b("7c-63","")+" 7c-63";o.aa()};c.3D=v(e){e=e||u.4I.2X;k 5D=0;h(e.ab){5D=e.ab/c4;h(5d&&1q.9n.c5()<9.2)5D=-5D}I h(e.ac){5D=-e.ac/3};k n=o.B.1x(),d=P 14(o.B),6k=5D>0?1:-1;d.2D(2);d.64(d.1g()+6k*1);d.2D(1N.46(n,22(d.1g(),d.1e())));h(o.3k(d)){q 1O(e)};o.B=P 14(d);o.2g();h(o.2w){o.51(3j(o.B,o.3E,O))};q 1O(e)};c.3p=v(e){o.3o();h(!o.2Z)q A;e=e||u.4I.2X;k 1v=e.7m?e.7m:e.ad;h(1v==13){k V=u.1m(o.E+"-B-1y-3y");h(!V||V.G.L(/cd-([0-9]{8})/)==-1||V.G.L(/6Y-82|3z-2P-2Q|2f-1k/)!=-1){q 1O(e)};o.1D=P 14(o.B);o.3P("6O",o.5Z());o.6j();o.3V();q 1O(e)}I h(1v==27){h(!o.1P){o.3V();q 1O(e)};q O}I h(1v==32||1v==0){o.B=P 14();o.2g();q 1O(e)}I h(1v==9){h(!o.1P){q 1O(e)};q O};/*@1L@h(@2W)h(P 14().5E()-o.5k.5E()<50){q 1O(e)};o.5k=P 14();@24@*/h(9o){h(P 14().5E()-o.5k.5E()<50){q 1O(e)};o.5k=P 14()};h((1v>49&&1v<56)||(1v>97&&1v96)1v-=(96-48);1v-=49;o.2O=(o.2O+1v)%7;o.7e();q 1O(e)};h(1v<33||1v>40)q O;k d=P 14(o.B),c7,c8=o.B.1e()+1c(o.B.1g()+1);h(1v==36){d.2D(1)}I h(1v==35){d.2D(22(d.1g(),d.1e()))}I h(1v==33||1v==34){k 6k=(1v==34)?1:-1;h(e.ae){d.9Q(d.1e()+6k*1)}I{k n=o.B.1x();d.2D(2);d.64(d.1g()+6k*1);d.2D(1N.46(n,22(d.1g(),d.1e())))}}I h(1v==37){d=P 14(o.B.1e(),o.B.1g(),o.B.1x()-1)}I h(1v==39||1v==34){d=P 14(o.B.1e(),o.B.1g(),o.B.1x()+1)}I h(1v==38){d=P 14(o.B.1e(),o.B.1g(),o.B.1x()-7)}I h(1v==40){d=P 14(o.B.1e(),o.B.1g(),o.B.1x()+7)};h(o.3k(d)){q 1O(e)};o.B=d;h(o.2w){o.51(o.7n(o.B.1e(),o.B.1g()+1,o.B.1x())||3j(o.B,o.3E,O))};k t=15(o.B.1e())+1c(o.B.1g()+1)+1c(o.B.1x());h(e.ae||(1v==33||1v==34)||to.4k){o.2g();/*@1L@h(@2W)o.5k=P 14();@24@*/}I{h(!o.65){o.70()};o.5o();T(k i=0,V;V=o.8f[i];i++){h(V.G.L("cd-"+t)==-1){3v};o.87(o.B);V.E=o.E+"-B-1y-3y";o.5p();1f}};q 1O(e)};c.4U=v(e){e=e||u.4I.2X;k p=e.c9||e.ca;2o(p&&p!=c)2K{p=p.2i}2L(e){p=c};h(p==c)q A;h(o.53){o.53.G="";o.53=1a};h(o.2w){o.51(o.7n(o.B.1e(),o.B.1g()+1,o.B.1x())||3j(o.B,o.3E,O))}};c.4T=v(e){e=e||u.4I.2X;k X=e.5B!=1a?e.5B:e.8w;2o(X.af!=1){X=X.2i};h(!X||!X.25){q};k 2r=1E(9);7Q(X.25.2b()){1r"V":h(X.G.L(/B-1y-6X|3z-2P-2Q/)!=-1){2r=1E(9)}h(X.G.L(/cd-([0-9]{8})/)!=-1){o.3o();k 3n=X.G.1X(/cd-([0-9]{8})/)[1];o.5o();X.E=o.E+"-B-1y-3y";o.5p();o.B=P 14(+3n.Q(0,4),+3n.Q(4,2)-1,+3n.Q(6,2));h(!o.65){o.70()};2r=o.7n(+3n.Q(0,4),+3n.Q(4,2),+3n.Q(6,2))||3j(o.B,o.3E,O)};1f;1r"1W":h(!o.2w){1f};h(X.G.L(/4Y-5w/)!=-1){2r=1E(10)}I h(X.G.L(/B-1y-8h-5t/)!=-1){k 4s=X.2a?X.2a.cb:"";2r=4s.L(/^(\\d+)$/)!=-1?1E(7,[4s,4s<3&&o.B.1g()==11?8B(o.B.1e())+1:8B(o.B.1e())]):1E(9)};1f;1r"1l":h(!o.2w){1f};h(X.G.L(/4Y-5w/)!=-1){2r=1E(10)}I h(X.G.L(/2f-([0-6])/)!=-1){k 2f=X.G.1X(/2f-([0-6])/)[1];2r=1E(11,[6l(2f,A)])}I h(X.G.L(/2x-2q/)!=-1){2r=1E(2)}I h(X.G.L(/2x-1Q/)!=-1){2r=1E(0)}I h(X.G.L(/2y-2q/)!=-1){2r=1E(3)}I h(X.G.L(/2y-1Q/)!=-1){2r=1E(1)}I h(X.G.L(/2h-H/)!=-1&&X.G.L(/1k/)==-1){2r=1E(12)};1f;ag:2r=""};2o(X.2i){X=X.2i;h(X.af==1&&X.25.2b()=="1K"){h(o.53){h(X==o.53)1f;o.53.G=""};X.G="dp-1H-75";o.53=X;1f}};h(o.2w&&2r){o.51(2r)}};c.4V=v(){o.3o();o.4Q=8y;o.3N=0;o.3a=0;o.6M=0;1C(u,"5u",o.4V);h(o.6h!=1a){1C(o.6h,"8i",o.4V)};o.6h=1a};k o=c;c.3c();h(c.1P){c.78()}I{c.ah()};(v(){k 1B,U;T(1B 16 o.2n){U=u.1m(1B);h(U&&U.25&&U.25.L(/8C|5x/i)!=-1){2l(U,"ce",o.9G)};h(!U||U.1k==O){o.8D()}}})();c.5j=O};1h.1j.8E=v(H){v 7o(e){e=e||1q.2X;k 4t=c.E.1b(\'1i-H-\',\'\'),8F=ai(4t),4q=A,3I=K[4t].3I;h(3I){K[4t].3I=A;q};h(e.1w=="6m"){K[4t].3I=O;k 1v=e.7m!=1a?e.7m:e.ad;h(1v!=13)q O;h(8F){c.G=c.G.1b("dp-52-3U","");6i();q 1O(e)};4q=O}I{K[4t].3I=A};c.G=c.G.1b("dp-52-3U","");h(!8F){c.G+=" dp-52-3U";6i(4t);8G(4t,4q)}I{6i()};q 1O(e)};H.3p=7o;H.4o=7o;h(!7J||c.7p===A){H.2Y(!/*@1L!@*/A?"3h":"61","-1");H.3h=-1;H.3p=1a;1C(H,"6m",7o)}I{H.2Y(!/*@1L!@*/A?"3h":"61",c.7p);H.3h=c.7p}};1h.1j.ah=v(){h(c.1P||u.1m("1i-H-"+c.E)){q};k 8H=u.1m(c.E),1l=u.1J(\'1l\'),H=u.1J(\'a\');H.cf="#"+c.E;H.G="B-1y-cg";H.23=1E(5);H.E="1i-H-"+c.E;1l.18(u.1Y(3Z));H.18(1l);1l=u.1J(\'1l\');1l.G="1i-83-84";1l.18(u.1Y(H.23));H.18(1l);3u(H,"52");2u(H,"ch",O);h(c.2S&&u.1m(c.2S)){u.1m(c.2S).18(H)}I{8H.2i.a0(H,8H.a1)};c.8E(H);H=1a;c.3P("ci",{E:c.E})};1h.1j.8I=v(1R){c.2I=1R};1h.1j.8J=v(1R){T(k dt 16 1R){c.2I[dt]=1R[dt]}};1h.1j.7n=v(y,m,d){k dt,6n,1z=y+15(1c(m))+1c(d);T(dt 16 c.2I){6n=dt.1b(/^(\\*\\*\\*\\*)/,y).1b(/^(\\d\\d\\d\\d)(\\*\\*)/,"$1"+1c(m));h(6n==1z)q c.2I[dt]};T(dt 16 2I){6n=dt.1b(/^(\\*\\*\\*\\*)/,y).1b(/^(\\d\\d\\d\\d)(\\*\\*)/,"$1"+1c(m));h(6n==1z)q 2I[dt]};q A};1h.1j.aj=v(){q c.1D};1h.1j.8K=v(2Q){c.1U=(15(2Q).L(/^(\\d\\d\\d\\d)(0[1-9]|1[5M])(0[1-9]|[12][0-9]|3[2U])$/)==-1)?A:2Q;h(!c.3b)c.3c()};1h.1j.8L=v(2Q){c.1V=(15(2Q).L(/^(\\d\\d\\d\\d)(0[1-9]|1[5M])(0[1-9]|[12][0-9]|3[2U])$/)==-1)?A:2Q;h(!c.3b)c.3c()};1h.1j.ak=v(6o){h(!6o.17||6o.17!=7||6o.5h("").L(/^([0|1]{7})$/)==-1){h(3r){47"cj ck cl cn co 6p 9m ak";};q A};c.3C=6o;h(!c.3b)c.3c()};1h.1j.8M=v(2A){c.2m={};c.7q(2A)};1h.1j.8N=v(2A){c.26={};c.7r(2A)};1h.1j.7q=v(2A){c.26=A;c.2m=c.2m||{};k 1s;T(1s 16 2A){h((15(1s).L(5g)!=-1&&2A[1s]==1)||(15(1s).L(2B)!=-1&&15(2A[1s]).L(2B)!=-1)){c.2m[1s]=2A[1s]}};h(!c.3b)c.3c()};1h.1j.7r=v(2A){c.2m=A;c.26=c.26||{};k 1s;T(1s 16 2A){h((15(1s).L(5g)!=-1&&2A[1s]==1)||(15(1s).L(2B)!=-1&&15(2A[1s]).L(2B)!=-1)){c.26[1s]=2A[1s]}};h(!c.3b)c.3c()};1h.1j.8O=v(1z){h(15(1z).L(5g)==-1){q A};k 1X=1z.1X(2B),dt=P 14(+1X[2],+1X[3]-1,+1X[4]);h(!dt||7s(dt)||!c.6q(dt)){q A};c.1D=P 14(dt);h(!c.3b)c.2g();c.3P("6O",c.5Z());c.6j()};1h.1j.9U=v(){h(c.1D&&!c.6q(c.1D)){c.1D=1a};h(!c.3b)c.2g()};1h.1j.aa=v(){h(c.5W||c.1T){q};2l(u,"7t",c.3p);2l(u,"4S",c.2F);/*@1L@h(@2W)1C(u,"7t",c.3p);2l(u,"6m",c.3p);@24@*/h(1q.76){1C(u,"7t",c.3p);2l(u,"6m",c.3p)};c.1T=A;c.5W=O};1h.1j.77=v(){h(!c.5W){q};1C(u,"7t",c.3p);1C(u,"6m",c.3p);1C(u,"4S",c.2F);c.5W=A};1h.1j.3o=v(){c.5T=A;1q.68(c.5V)};1h.1j.8q=v(7u){c.R.1d.4b=7u/4E;c.R.1d.cp=\'cq(4b=\'+7u+\')\';c.4b=7u};1h.1j.8e=v(y,m){k 4i=22(m-1,y),1t={},8P=c.8Q(y,m,A),8R=c.8Q(y,m,O),2R=y+1c(m);T(k i=1;i<=4i;i++){dt=2R+""+1c(i);h(8P){1t[dt]=(dt 16 8P)?0:1}I h(8R){1t[dt]=(dt 16 8R)?1:0}I{1t[dt]=1}};q 1t};1h.1j.8Q=v(y,m,5w){k 7v=5w?c.26:c.2m;h(!7v){q A};m=1c(m);k 1t={},7w=c.4j,7x=c.4k,3G,4u,8S,8T;h(!7x||!7w){7w=c.4j=y+1c(m)+"2U";7x=c.4k=y+1c(m)+1c(22(m,y))};T(dt 16 7v){3G=dt.1b(/^(\\*\\*\\*\\*)/,y).1b(/^(\\d\\d\\d\\d)(\\*\\*)/,"$1"+m);4u=7v[dt];h(4u==1){h(2e(3G.Q(0,6))>=+15(c.4j).Q(0,6)&&2e(3G.Q(0,6))<=+15(c.4k).Q(0,6)){1t[3G]=1};3v};h(+15(c.4j).Q(0,6)>=2e(3G.Q(0,6))&&+15(c.4k).Q(0,6)<=2e(4u.Q(0,6))){h(2e(3G.Q(0,6))==2e(4u.Q(0,6))){T(k i=3G;i<=4u;i++){1t[i]=1};3v};8S=2e(3G.Q(0,6))==+15(c.4j).Q(0,6)?3G:7w;8T=2e(4u.Q(0,6))==+15(c.4k).Q(0,6)?4u:7x;T(k i=+8S;i<=+8T;i++){1t[i]=1}}};q 1t};1h.1j.9J=v(1o){k 3f=c.al(1o);h(5d){q 3f};k 8U=(u.6T&&u.6T!="9K")?u.3t:u.3d,am=u.8V?8U.3Q:1q.9I,ao=u.8V?8U.3R:1q.7V,8W=c.ap(1o);q[3f[0]-8W[0]+am,3f[1]-8W[1]+ao]};1h.1j.ap=v(1o){k t=0,l=0;do{t+=1o.3R||0;l+=1o.3Q||0;1o=1o.2i}2o(1o);q[l,t]};1h.1j.al=v(1o){k t=0,l=0;do{t+=1o.cr||0;l+=1o.cs||0;1o=1o.ct}2o(1o);q[l,t]};1h.1j.a5=v(){k 8X=A,1u;T(k i=c.1U;i<=c.1V;i++){1u=15(i);h(!c.3C[P 14(1u.Q(0,4),1u.Q(6,2),1u.Q(4,2)).3A()-1]){8X=O;1f}};h(!8X){c.3C=[0,0,0,0,0,0,0]}};1h.1j.3k=v(1u){h(!c.1U&&!c.1V){q A};k 7y=A;h(!1u){7y=O;1u=c.B};k d=1c(1u.1x()),m=1c(1u.1g()+1),y=1u.1e(),dt=15(y)+15(m)+15(d);h(c.1U&&+dt<+c.1U){h(!7y){q O};c.B=P 14(c.1U.Q(0,4),c.1U.Q(4,2)-1,c.1U.Q(6,2),5,0,0);q A};h(c.1V&&+dt>+c.1V){h(!7y){q O};c.B=P 14(c.1V.Q(0,4),c.1V.Q(4,2)-1,c.1V.Q(6,2),5,0,0)};q A};1h.1j.6q=v(1u){h(!1u)q A;k d=1c(1u.1x()),m=1c(1u.1g()+1),y=1u.1e(),dt=15(y)+15(m)+15(d),dd=c.8e(y,m),aq=1u.3A()==0?7:1u.3A();h((c.1U&&+dt<+c.1U)||(c.1V&&+dt>+c.1V)||(dd[dt]==0)||c.3C[aq-1]){q A};q O};1h.1j.51=v(4v){2o(c.2w.2a){c.2w.3i(c.2w.2a)};h(4v&&c.3E.L(/-S|S-/)!=-1&&4v.L(/([0-9]{1,2})(6r|3H|6s|1W)/)!=-1){4v=4v.1b(/([0-9]{1,2})(6r|3H|6s|1W)/,"$1<4w>$2").5P(/<4w>|<\\/4w>/);k dc=u.cu();T(k i=0,3H;3H=4v[i];i++){h(/^(6r|3H|6s|1W)$/.5I(3H)){k 4w=u.1J("4w");4w.18(u.1Y(3H));dc.18(4w)}I{dc.18(u.1Y(3H))}};c.2w.18(dc)}I{c.2w.18(u.1Y(4v?4v:1E(9)))}};1h.1j.3c=v(){k cv=c.1D,m=A,dt,1B,U,4x,d,y,7z;c.1D=1a;T(1B 16 c.2n){U=u.1m(1B);h(!U){q};7z=15(U.1p);4x=c.2n[1B];dt=A;h(!(7z=="")){T(k i=0,1I;1I=c.4K[1B][i];i++){dt=54(7z,1I);h(dt){1f}}};h(dt){h(4x.L(P 2M(\'[\'+7K+\']\'))!=-1){d=dt.1x()};h(4x.L(P 2M(\'[\'+7L+\']\'))!=-1){m=dt.1g()};h(4x.L(P 2M(\'[\'+7M+\']\'))!=-1){y=dt.1e()}}};dt=A;h(d&&!(m===A)&&y){h(+d>22(+m,+y)){d=22(+m,+y);dt=A}I{dt=P 14(+y,+m,+d)}};h(!dt||7s(dt)){k 6t=P 14(y||P 14().1e(),!(m===A)?m:P 14().1g(),1);c.B=c.1F?P 14(+c.1F.Q(0,4),+c.1F.Q(4,2)-1,+c.1F.Q(6,2)):P 14(6t.1e(),6t.1g(),1N.46(+d||P 14().1x(),22(6t.1g(),6t.1e())));c.B.6N(5);c.3k();c.2g();q};dt.6N(5);c.B=P 14(dt);c.3k();h(dt.5E()==c.B.5E()&&c.6q(c.B)){c.1D=P 14(c.B)};h(c.5j)c.2g();c.6j(O)};1h.1j.ar=v(U,as){T(k 6u=U.C.17-1;6u>=0;6u--){h(U.C[6u].1p==as){U.cw=6u;q}}};1h.1j.6j=v(1T){h(!c.1D){q};k d=1c(c.1D.1x()),m=1c(c.1D.1g()+1),y=c.1D.1e(),X=A,1B,U,4x,7A;1T=!!1T;T(1B 16 c.2n){U=u.1m(1B);h(!U)q;h(!X)X=U;4x=c.2n[1B];7A=3j(c.1D,4x,6C);h(U.25.2b()=="5x"){U.1p=7A}I{c.ar(U,7A)}};h(c.1P){c.1T=O;c.2g();c.1T=A};h(c.5j){h(X.1w&&X.1w!="3e"&&!1T){X.63()}}};1h.1j.8D=v(){h(c.1k)q;h(c.1P){c.77();c.5o();c.1T=O;c.R.G=c.R.G.1b(/dp-1k/,"")+" dp-1k";c.1A.4T=c.1A.4o=c.1A.4U=c.1A.2F=1a;1C(u,"4S",c.2F);1C(u,"5u",c.4V)}I{h(c.2Z)c.3V();k H=u.1m("1i-H-"+c.E);h(H){H.G=H.G.1b(/dp-1k/,"")+" dp-1k";2u(H,"1k",O);H.3p=H.4o=v(){q A};H.2Y(!/*@1L!@*/A?"3h":"61","-1");H.3h=-1}};68(c.5V);c.1k=O};1h.1j.at=v(){h(!c.1k)q;h(c.1P){c.5o();c.1T=O;c.2g();c.R.G=c.R.G.1b(/dp-1k/,"");c.1k=A;c.1A.4T=c.4T;c.1A.4U=c.4U;c.1A.4o=c.4o;c.1A.2F=c.2F}I{k H=u.1m("1i-H-"+c.E);h(H){H.G=H.G.1b(/dp-1k/,"");2u(H,"1k",A);c.8E(H)}};c.1k=A};1h.1j.70=v(){k 2h=P 14();c.6e.G=c.6e.G.1b("1i-1k","");h(c.3k(2h)||(c.B.1x()==2h.1x()&&c.B.1g()==2h.1g()&&c.B.1e()==2h.1e())){c.6e.G+=" 1i-1k"}};1h.1j.7e=v(){k 6c=c.1Z?8:7,5y=c.1Z?1:0,d,H;T(k 1n=5y;1n<6c;1n++){d=(c.2O+(1n-5y))%7;c.2z[1n].23=6l(d,A);h(1n>5y){H=c.2z[1n].1M("1l")[0];2o(H.2a){H.3i(H.2a)};H.18(u.1Y(6l(d,O)));H.23=c.2z[1n].23;H.G=H.G.1b(/2f-([0-6])/,"")+" 2f-"+d;H=1a}I{2o(c.2z[1n].2a){c.2z[1n].3i(c.2z[1n].2a)};c.2z[1n].18(u.1Y(6l(d,O)))};c.2z[1n].G=c.2z[1n].G.1b(/B-1y-75/g,"");h(c.4P[d]){c.2z[1n].G+=" B-1y-75"}};h(c.2N){c.2g()}};1h.1j.3P=v(1w,au){h(!1w||!(1w 16 c.5l)){q A};k 8Y=A;T(k 7B=0;7B94){k 4s=21.1R[94];h(58&&58.17){T(k i=0;i<58.17;i++){4s=4s.1b("[[%"+i+"%]]",58[i])}};q 4s.1b(/[[%(\\d)%]]/g,"")};q""};k 6l=v(2f,7E){k 1R=21[7E?"3T":"4A"];q 1R.17&&1R.17>2f?1R[2f]:""};k 9W=v(1Q,7E){k 1R=21[7E?"4z":"4y"];q 1R.17&&1R.17>1Q?1R[1Q]:""};k 22=v(6w,7F){6w=(6w+12)%12;q(((0==(7F%4))&&((0!=(7F%4E))||(0==(7F%dv))))&&6w==1)?29:[31,28,31,30,31,30,31,31,30,31,30,31][6w]};k 8B=v(Y){h(Y 16 5J){q 5J[Y]};k 95,98,dw;4Z(95=P 14(Y,0,4)){2D(1x()-(6+3A())%7)};4Z(98=P 14(Y,11,28)){2D(1x()+(7-3A())%7)};5J[Y]=1N.4n((98-95)/dx);q 5J[Y]};k 8g=v(y,m,d){k d=P 14(y,m,d,0,0,0);k aD=d.3A();d.2D(d.1x()-(aD+6)%7+3);k aE=d.aF();d.64(0);d.2D(4);q 1N.4n((aE-d.aF())/(7*dy))+1};k 3j=v(B,1I,59){h(!B||7s(B)){q""};k 45=1I.5P("-"),Z=[],d=B.1x(),D=B.3A(),m=B.1g(),y=B.1e(),9a={"1S":" ","dt":".","4D":"/","ds":"-","cc":",","d":1c(d),"D":59?21.3T[D==0?6:D-1]:3m.3T[D==0?6:D-1],"l":59?21.4A[D==0?6:D-1]:3m.4A[D==0?6:D-1],"j":d,"N":D==0?7:D,"w":D,"W":8g(y,m,d),"M":59?21.4z[m]:3m.4z[m],"F":59?21.4y[m]:3m.4y[m],"m":1c(m+1),"n":m+1,"t":22(m,y),"y":15(y).Q(2,2),"Y":y,"S":["1W","6r","3H","6s"][d%10>3?0:(d%4E-d%10!=10)*d%10]};T(k 2C=0,2c;2c=45[2C];2C++){Z.2d(!(2c 16 9a)?"":9a[2c])};q Z.5h("")};k 54=v(Z,1I){k d=A,m=A,y=A,aG=P 14(),45=1I.1b(/-1S(-1S)+/g,"-1S").5P("-"),dz={"dt":".","4D":"/","ds":"-","cc":","},Z=""+Z;9b:T(k 2C=0,2c;2c=45[2C];2C++){h(Z.17==0){q A};7Q(2c){1r"1S":1r"dt":1r"4D":1r"ds":1r"cc":Z=Z.1b(/^(\\s|\\.|\\/|,|-){1,}/,"");1f;1r"d":1r"j":h(Z.L(/^(3[2U]|[12][0-9]|0?[1-9])/)!=-1){d=+Z.1X(/^(3[2U]|[12][0-9]|0?[1-9])/)[0];Z=Z.Q(Z.1X(/^(3[2U]|[12][0-9]|0?[1-9])/)[0].17);1f}I{q""};1r"D":1r"l":l=3m.4A.3W(3m.3T);h(21.7C){l=l.3W(21.4A).3W(21.3T)};T(k i=0;i22(+m,+y)){q A};k 1u=P 14(y,m,d);q!1u||7s(1u)?A:1u};k aI=v(1o){k 4B;h(1o.2i&&1o.2i.25.2b()=="4B")dA=1o.2i;I{k 5F=u.1M(\'4B\');T(k 5a=0;5a<5F.17;5a++){h((5F[5a][\'aJ\']&&5F[5a][\'aJ\']==1o.E)||(5F[5a].7O(\'T\')==1o.E)){4B=5F[5a];1f}}};h(4B&&!4B.E){4B.E=1o.E+"dB"};q 4B};k 9c=v(){h(2s(1q.3J)=="3Y"){21={1R:3J.1R,4y:3J.4y,4z:3J.4z,4A:3J.4A,3T:3J.3T,2O:("2O"16 3J)?3J.2O:0,7C:O}}I h(!21){21=3m}};k 9d=v(){9c();T(dp 16 K){h(!K[dp].2N)3v;K[dp].2g()}};k aK=v(U){q!(!U||!U.25||!((U.25.2b()=="5x"&&(U.1w=="43"||U.1w=="3e"))||U.25.2b()=="8C"))};k aL=v(C){9c();h(!C.2n){h(3r)47"dC dD dE dF 9e dG dH";q};C.E=(C.E&&(C.E 16 C.2n))?C.E:"";C.4K={};k aM=[7K,7L,7M],6x=[0,0,0],3X,6y,9f,9g,1I,3q,dI,5b,2j,2k;T(k 1B 16 C.2n){U=u.1m(1B);h(!aK(U)){h(3r)47"9h 1o 4Z 9i E 2P \'"+1B+"\' dJ 2P 4a dK 1w dL dM 3M dN 9e 4a dO";q A};h(!C.E)C.E=1B;1I=C.2n[1B];h(!(1I.1X(5f))){h(3r)47"9h 1o 4Z 9i E 2P \'"+1B+"\' aN 4a aO aP B 7G aQ 6p aR: "+1I;q A};3q=[1I];h(C.6z&&(1B 16 C.6z)&&C.6z[1B].17){5b=[];T(k f=0,6A;6A=C.6z[1B][f];f++){h(!(6A.1X(5f))){h(3r)47"9h 1o 4Z 9i E 2P \'"+1B+"\' aN 4a aO aP B 7G aQ 6p aR 9e 4a 6z dP: "+6A;q A};5b.2d(6A)};3q=3q.3W(5b)};3X=[0,0,0];T(k i=0,5G;5G=aM[i];i++){h(1I.L(P 2M(\'(\'+5G+\')\'))!=-1){6x[i]=3X[i]=1;h(U.25.2b()=="5x"){6y=1I.1X(P 2M(\'(\'+5G+\')\'))[0];9f=15(6y+"|"+5G.1b(P 2M("("+6y+")"),"")).1b("||","|");9g=9f.5P("|");5b=[];T(k z=0,9j;9j=3q[z];z++){T(k x=0,7H;7H=9g[x];x++){h(7H==6y)3v;5b.2d(9j.1b(P 2M(\'(\'+5G+\')(-|$)\',\'g\'),7H+"-").1b(/-$/,""))}};3q=3q.3W(5b)}}};C.4K[1B]=3q.3W();h(U.25.2b()=="8C"){2j=2k=0;k 5c=U.C;h(3X[0]&&3X[1]&&3X[2]){k 1z,1F=A;h("2m"16 C){6v(C.2m)};C.26={};T(i=0;i<5c.17;i++){T(k f=0,1I;1I=3q[f];f++){dt=54(5c[i].1p,1I);h(dt){1z=dt.1e()+""+1c(dt.1g()+1)+""+1c(dt.1x());h(!1F)1F=1z;C.26[1z]=1;h(!2j||2e(1z)<2j){2j=1z};h(!2k||2e(1z)>2k){2k=1z};1f}}};h(!C.1F&&1F)C.1F=1F}I h(3X[1]&&3X[2]){k 4m;T(i=0;i<5c.17;i++){T(k f=0,1I;1I=3q[f];f++){dt=54(5c[i].1p,1I);h(dt){4m=dt.1e()+""+1c(dt.1g()+1);h(!2j||2e(4m)<2j){2j=4m};h(!2k||2e(4m)>2k){2k=4m};1f}}};2j+=""+"2U";2k+=""+22(+2k.Q(4,2)-1,+2k.Q(0,4))}I h(3X[2]){k 3w;T(i=0;i<5c.17;i++){T(k f=0,1I;1I=3q[f];f++){dt=54(5c[i].1p,1I);h(dt){3w=dt.1e();h(!2j||2e(3w)<2j){2j=3w};h(!2k||2e(3w)>2k){2k=3w};1f}}};2j+="dQ";2k+="dR"};h(2j&&(!C.1U||(+C.1U<+2j)))C.1U=2j;h(2k&&(!C.1V||(+C.1V>+2j)))C.1V=2k}};h(!(6x[0]&&6x[1]&&6x[2])){h(3r)47"5S 3M dS 8V 2P 4a dT B 45 T 1o: "+U.E;q A};k 5H={2n:C.2n,E:C.E,4K:C.4K,1P:!!(C.1P),2S:C.2S&&u.1m(C.2S)?C.2S:"",1U:C.1U&&15(C.1U).L(2B)!=-1?C.1U:"",1V:C.1V&&15(C.1V).L(2B)!=-1?C.1V:"",3E:C.3E&&15(C.3E).L(5f)!=-1?C.3E:"",8r:!!(C.1P)?O:!!(C.8r),8m:5K||!!(C.1P)?O:!!(C.8m),7p:C.9k&&2s C.9k==\'6K\'?2t(C.9k,10):0,2I:C.2I||{},2T:C.2T&&2s C.2T==\'6K\'&&(C.2T>20&&C.2T<=4E)?2t(+C.2T,10):(!!(C.1P)?4E:2T),8o:!!(C.8o),65:!!(C.dU),1Z:!!(C.1Z),5r:!!(C.5r),4O:"4O"16 C?!!(C.4O):O,1F:C.1F&&15(C.1F).L(2B)!=-1?C.1F:"",8l:aI(U),2H:(C.2H&&u.1m(C.2H))?C.2H:2H&&u.1m(2H)?2H:"",5l:C.aS?C.aS:{},4P:C.4P&&C.4P.17&&C.4P.17==7?C.4P:[0,0,0,0,0,1,1],3C:C.3C&&C.3C.17&&C.3C.17==7?C.3C:[0,0,0,0,0,0,0]};h(C.2m){h(C.26)6v(C.26);5H.2m={};k 1s;T(1s 16 C.2m){h((15(1s).L(5g)!=-1&&C.2m[1s]==1)||(15(1s).L(2B)!=-1&&15(C.2m[1s]).L(2B)!=-1)){5H.2m[1s]=C.2m[1s]}}}I h(C.26){k 1s;5H.26={};T(1s 16 C.26){h((15(1s).L(5g)!=-1&&C.26[1s]==1)||(15(1s).L(2B)!=-1&&15(C.26[1s]).L(2B)!=-1)){5H.26[1s]=C.26[1s]}}};K[C.E]=P 1h(5H);K[C.E].3P("78",K[C.E].5Z())};k ai=v(E){q(!E||!(E 16 K))?A:K[E].2Z};2l(1q,\'aB\',4R);q{2l:v(1t,1w,2p){q 2l(1t,1w,2p)},1C:v(1t,1w,2p){q 1C(1t,1w,2p)},1O:v(e){q 1O(e)},8A:v(J){q 8G(J,A)},3V:v(J){q aA(J)},dV:v(C){aL(C)},dW:v(J){aC(J)},91:v(){91()},3j:v(dt,1I,59){q 3j(dt,1I,59)},3c:v(J){h(!J||!(J 16 K))q A;K[J].3c()},8K:v(J,1z){h(!J||!(J 16 K)){q A};K[J].8K(1z)},8L:v(J,1z){h(!J||!(J 16 K)){q A};K[J].8L(1z)},8I:v(J,1R){h(!J||!(J 16 K)){q A};K[J].8I(1R)},8J:v(J,1R){h(!J||!(J 16 K)){q A};K[J].8J(1R)},54:v(Z,7G){q 54(Z,7G)},dX:v(3s){7N(3s)},8O:v(J,1z){h(!J||!(J 16 K)){q A};K[J].8O(1z)},dY:v(J,dt){h(!J||!(J 16 K))q A;q K[J].6q(dt)},7q:v(J,2R){h(!J||!(J 16 K))q A;K[J].7q(2R)},8M:v(J,2R){h(!J||!(J 16 K))q A;K[J].8M(2R)},7r:v(J,2R){h(!J||!(J 16 K))q A;K[J].7r(2R)},8N:v(J,2R){h(!J||!(J 16 K))q A;K[J].8N(2R)},dZ:v(J){h(!J||!(J 16 K))q A;K[J].8D()},e0:v(J){h(!J||!(J 16 K))q A;K[J].at()},86:v(J,1z){h(!J||!(J 16 K))q A;K[J].86(1z)},e1:v(J){q(!J||!(J 16 K))?A:K[J].aj()},9d:v(){9d()},e2:v(aT){3r=!!(aT)}}})();',62,871,'||||||||||||this|||||if|||var||||||return||||document|function|||||false|date|options||id||className|but|else|inpID|datePickers|search|||true|new|substr|div||for|elem|td||el||str|||||Date|String|in|length|appendChild||null|replace|pad|style|getFullYear|break|getMonth|datePicker|fd|prototype|disabled|span|getElementById|col|element|value|window|case|startD|obj|tmpDate|kc|type|getDate|picker|yyyymmdd|table|elemID|removeEvent|dateSet|getTitleTranslation|cursorDate|iePopUp|row|fmt|createElement|tr|cc_on|getElementsByTagName|Math|stopEvent|staticPos|month|titles|sp|noFocus|rangeLow|rangeHigh|th|match|createTextNode|showWeeks||localeImport|daysInMonth|title|end|tagName|enabledDates||||firstChild|toLowerCase|part|push|Number|day|updateTable|today|parentNode|myMin|myMax|addEvent|disabledDates|formElements|while|fn|year|statusText|typeof|parseInt|setARIAProperty|cName|statusBar|prev|next|ths|dateObj|rangeRegExp|pt|setDate|currentStub|onmousedown|details|describedBy|bespokeTitles|err|try|catch|RegExp|created|firstDayOfWeek|of|range|dts|positioned|finalOpacity|01|script|_win32|event|setAttribute|visible|||||||||||monthInc|inUpdate|setDateFromInput|body|hidden|pos|px|tabIndex|removeChild|printFormattedDate|outOfRange|currentDate|localeDefaults|cellDate|stopTimer|onkeydown|fmtBag|debug|json|documentElement|setARIARole|continue|yyyy|display|hover|out|getDay|curr|disabledDays|onmousewheel|statusFormat|rows|dt1|nd|kbEvent|fdLocale|languageTag|top|not|yearInc|opacityTo|callback|scrollLeft|scrollTop|spnC|dayAbbrs|active|hide|concat|tmpPartsFound|object|nbsp||||text|mousewheel|parts|min|throw|||the|opacity|clickActivated|isIE7|left|selectable|cellAdded|firstColIndex|dpm|firstDateShown|lastDateShown|weekDay|yyyymm|round|onclick|cols|autoFocus|butt|txt|inpId|dt2|msg|sup|elemFmt|fullMonths|monthAbbrs|fullDays|label|titleFormat|sl|100|scriptFiles|fullParts|tmpParts|parentWindow|thing|formatMasks|_jscript_version|visibility|spn|constrainSelection|highlightDays|timerInc|destroy|mousedown|onmouseover|onmouseout|clearTimer|colspan|tableHead|drag|with||updateStatus|button|currentTR|parseDateString|tdm||tdy|replacements|useImportedLocale|lbl|newFormats|selOptions|isOpera|placeholder|validFmtRegExp|wcDateRegExp|join|on|fullCreate|interval|callbacks|prop|offsetHeight|removeOldFocus|setNewFocus|lm|fillGrid|wkThs|header|mouseup|dragEnabledCN|enabled|input|colOffset|butPrevYear|fade|target|origEl|delta|getTime|labelList|testPart|opts|test|weeksInYearCache|nodrag|formatParts|012|lang|bases|split|addEventListener|JSON|Could|timerSet|fadeTimer|timer|kbEventsAdded|selectedTD|delayedUpdate|createCbArgObj|osh|tabindex|ymd|focus|setMonth|noToday|stub|titleBar|clearTimeout|createTH|unselectable|tableBody|colspanTotal|butPrevMonth|butToday|butNextYear|butNextMonth|mouseDownElem|hideAll|returnFormattedDate|inc|getDayTranslation|keydown|dtFull|dayArray|to|canDateBeSelected|st|rd|newDate|opt|delete|nMonth|partsFound|matchedPart|dateFormats|bDft|languageInfo|returnLocaleDate|mouseWheel|cellFormat|head|src|html|string|describedby|number|parse|dayInc|setHours|dateset|mm|block|osw|trueBody|compatMode|abs|onblur|onfocus|unused|no|setTimeout|disableTodayButton|bespokeRenderClass|nm|currentYYYYMM|selected|highlight|devicePixelRatio|removeOnFocusEvents|create|thClassName|none|tableFoot|datepicker|tbody|updateTableHeaders|pageX|clientX|pageY|clientY|incs|check|dateYYYYMM|keyCode|getBespokeTitle|buttonEvent|bespokeTabIndex|addDisabledDates|addEnabledDates|isNaN|keypress|op|deDates|lower|upper|level|elemVal|fmtDate|func|imported|nodeList|abbreviation|nYear|format|indPart|datePickerController|buttonTabIndex|dParts|mParts|yParts|affectJSON|getAttribute|key|switch|removeEventListener|role|mx|my|pageYOffset|reposition|0px|offsetWidth|sOffsets|width|height|selection|screen|reader|cloneNode|setCursorDate|showHideButtons|dateSetD||weekDayC|daySub|stubN|stubP|getDates|tds|getWeekNumber|week|mouseout|DOMMouseScroll|createThAndButton|labelledBy|dragDisabled|presentation|hideInput|diff|setOpacity|noFadeEffect|trackDrag|diffx|diffy|stopDrag|srcElement|hideDP|800|cnt|show|getWeeksInYear|select|disableDatePicker|addButtonEvents|dpVisible|showDatePicker|inp|setBespokeTitles|addBespokeTitles|setRangeLow|setRangeHigh|setDisabledDates|setEnabledDates|setSelectedDate|dds|getGenericDates|eds|rngLower|rngUpper|iebody|all|posReal|clearDayFound|ret|arguments|item|cleanUp|fe|exception|num|X1|||X2||flags|loopLabel|updateLanguage|loadLanguage|within|newParts|indParts|The|and|bFmt|bespokeTabindex|Object|call|opera|isMoz|navigator|userAgent|parseUILanguage|scriptInner|parseJSON|loc|javascript|buttontabindex|cellformat|parseCellFormat|titleformat|attachEvent|detachEvent|stopPropagation|Function|parent|property|changeHandler|getScrollOffsets|pageXOffset|truePosition|BackCompat|fitsBottom|fitsTop|clientWidth|addAccessibleDate|noS|setFullYear|abbr|weekDayN|weekDayP|checkSelectedDate|mmdd|getMonthTranslation|resizeInlineDiv|locate|associated|insertBefore|nextSibling|tfoot|thead|scope|equaliseDates|mousemove|zIndex|reg|previousSibling|addOnFocusEvents|wheelDelta|detail|charCode|ctrlKey|nodeType|default|createButton|isVisible|returnSelectedDate|setDisabledDays|cumulativeOffset|dsocleft||dsoctop|realOffset|wd|setSelectIndex|indx|enableDatePicker|args|May|Previous|Next|Today|Week|hideDatePicker|unload|destroySingleDatePicker|DoW|ms|valueOf|now|1234|findLabelForElement|htmlFor|checkElem|addDatePicker|testParts|has|following|incorrect|assigned|it|callbackFunctions|dbg|toString|Opera|mozilla|compatible|webkit|uniqueId|fromCharCode|160|dividors|dvParts|innerHTML|lastIndexOf|js|charSet|utf|base|childNodes|xml|en|finalopacity|bespoketitles|0000|preventDefault|cancelBubble|returnValue|self|Array|Image|ActiveXObject|gim|bfunction|aria|cursorTD|defaults|dynDisabledDates|maxHeight|undefined|clientHeight|noCallback|redraw|firstDateDisplayed|lastDateDisplayed|floor|mouseover|colSpan|labelledby|datePickerTable|iframe|iehack|scrolling|frameBorder|name|iePopUpHack|static|300|grid|statusbar|u00AB|u2039|u203A|u00BB|gridcell|columnheader|rowheader|trs|weeks|displayed|domcreate|9999|accellerator|1200|10000|120|version|104|tmp|cursorYYYYMM|toElement|relatedTarget|nodeValue|||change|href|control|haspopup|dombuttoncreate|Invalid|values|located||when|attempting|filter|alpha|offsetTop|offsetLeft|offsetParent|createDocumentFragment|origDateSet|selectedIndex|January||February|March|April|June|July|August|September|October|November|December|Jan|Feb|Mar|Apr|Jun|Jul|Aug|Sep|Oct|Nov|Dec|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday|Mon|Tue|Wed|Thu|Fri|Sat|Sun|Show|Calendar|wk|Select|||Click|u0026|Drag|move|Display|u201C|u201D|first|Go|u2019s|||Disabled|joinNodeLists|||persisted|400|NW|604800000|864e5|divds|lebel|_label|No|form|elements|stipulated|initialisation|parameters|fmtParts|is|wrong|or|does|exist|DOM|parameter|0101|1231|find|required|noTodayButton|createDatePicker|destroyDatePicker|setGlobalVars|dateValidForSelection|disable|enable|getSelectedDate|setDebug'.split('|'),0,{})) \ No newline at end of file diff --git a/dp/gradient-e5e5e5-ffffff.gif b/dp/gradient-e5e5e5-ffffff.gif new file mode 100644 index 0000000..72a0d3e Binary files /dev/null and b/dp/gradient-e5e5e5-ffffff.gif differ diff --git a/dp/lang/ar.js b/dp/lang/ar.js new file mode 100644 index 0000000..af567cf --- /dev/null +++ b/dp/lang/ar.js @@ -0,0 +1,9 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631"], +monthAbbrs:["\u064A\u0646\u0627", "\u0641\u0628\u0631", "\u0645\u0627\u0631", "\u0627\u0628\u0631", "\u0645\u0627\u064A", "\u064A\u0648\u0646", "\u064A\u0648\u0644", "\u0627\u063A\u0633", "\u0633\u0628\u062A", "\u0627\u0643\u062A", "\u0646\u0648\u0641", "\u062F\u064A\u0633"], +fullDays:["\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A", "\u0627\u0644\u0627\u062D\u062F"], +dayAbbrs:["\u0627\u062B\u0646\u064A\u0646", "\u062A\u0644\u0627\u062A", "\u0627\u0631\u0628\u0639", "\u062E\u0645\u064A\u0633", "\u062C\u0645\u0639\u0629", "\u0633\u0628\u062A", "\u0627\u062D\u062F"], +titles:["\u0627\u0644\u0634\u0647\u0631 \u0627\u0644\u0633\u0627\u0628\u0642", "\u0627\u0644\u0634\u0647\u0631 \u0627\u0644\u0642\u0627\u062F\u0645", "\u0627\u0644\u0633\u0646\u0629 \u0627\u0644\u0633\u0627\u0628\u0642\u0629", "\u0627\u0644\u0633\u0646\u0629 \u0627\u0644\u062A\u0627\u0644\u064A\u0629", "\u0627\u0644\u064A\u0648\u0645", "\u0627\u0639\u0631\u0636 \u0627\u0644\u0646\u062A\u064A\u062C\u0629", "\u0627\u0633\u0628\u0648\u0639", "Week [[%0%]] of [[%1%]]", "\u0627\u0633\u0628\u0648\u0639", "\u0627\u062E\u062A\u0627\u0631 \u0627\u0644\u062A\u0627\u0631\u064A\u062E", "\u0627\u0636\u063A\u0637 \u002D \u0627\u0633\u062D\u0628", "Display \u201C[[%0%]]\u201D first", "\u0627\u0630\u0647\u0628 \u0644\u062A\u0627\u0631\u064A\u062E \u0627\u0644\u064A\u0648\u0645", "\u0627\u0631\u0641\u0636 \u062A\u0627\u0631\u064A\u062E"]}; +try { datePickerController.loadLanguage(); } catch(err) {} diff --git a/dp/lang/cs.js b/dp/lang/cs.js new file mode 100644 index 0000000..9ac0d36 --- /dev/null +++ b/dp/lang/cs.js @@ -0,0 +1,9 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["Leden", "\u00DAnor", "B\u0159ezen", "Duben", "Kv\u011Bten", "\u010Cerven", "\u010Cervenec", "Srpen", "Z\u00E1\u0159\u00ED", "\u0158\u00EDjen", "Listopad", "Prosinec"], +monthAbbrs:["Led", "\u00DAno", "B\u0159e", "Dub", "Kv\u011B", "\u010Crv", "\u010Cvc", "Srp", "Z\u00E1\u0159", "\u0158\u00EDj", "Lis", "Pro"], +fullDays:["Pond\u011Bl\u00ED", "\u00DAter\u00FD", "St\u0159eda", "\u010Ctvrtek", "P\u00E1tek", "Sobota", "Ned\u011Ble"], +dayAbbrs:["Po", "\u00DAt", "St", "\u010Ct", "P\u00E1", "So", "Ne"], +titles:["P\u0159edchoz\u00ED m\u011Bs\u00EDc", "N\u00E1sleduj\u00EDc\u00ED m\u011Bsic", "P\u0159edchoz\u00ED rok", "N\u00E1sleduj\u00EDc\u00ED rok", "Dnes", "Uka\u017E kalendar", "td", "T\u00FDden [[%0%]] of [[%1%]]", "T\u00FDden", "Vyber datum", "Klikni a pot\u00E1hni pro p\u0159esun", "Uka\u017E \u201C[[%0%]]\u201D prvn\u00ED", "Jdi na dne\u0161n\u00FD datum", "Nepovolen\u00FD datum"]}; +try { datePickerController.loadLanguage(); } catch(err) {} \ No newline at end of file diff --git a/dp/lang/da.js b/dp/lang/da.js new file mode 100644 index 0000000..914ab7a --- /dev/null +++ b/dp/lang/da.js @@ -0,0 +1,10 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"], +monthAbbrs:["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], +fullDays:["Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "L\u00F8rdag", "S\u00F8ndag"], +dayAbbrs:["Man", "Tir", "Ons", "Tor", "Fre", "L\u00F8r", "S\u00F8n"], +titles:["Forrige m\u00E5ned", "N\u00E6ste m\u00E5ned", "Forrig \u00E5r", "N\u00E6ste \u00E5r", "I dag", "Vis kalender", "uge", "Uge [[%0%]] af [[%1%]]", "Uge", "V\u00E6lg en dato", "Klik \u0026 Tr\u00E6k for at flytte", "Vis \u201C[[%0%]]\u201D F\u00F8rst", "G\u00E5 til dags dato", "Deaktiveret dato"] +}; +try { datePickerController.loadLanguage(); } catch(err) {} diff --git a/dp/lang/de.js b/dp/lang/de.js new file mode 100644 index 0000000..4139cb7 --- /dev/null +++ b/dp/lang/de.js @@ -0,0 +1,10 @@ +/* 2009-03-13 12:38:00 MEZ created by Nils Schreiber (n dot schreiber at gmx dot de) */ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["Januar", "Februar", "M\u00E4rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], +monthAbbrs:["Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], +fullDays:["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"], +dayAbbrs:["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"], +titles:["vorheriger Monat", "n\u00E4chster Monat", "vorheriges Jahr", "n\u00E4chstes Jahr", "Heute", "Kalender anzeigen", "KW", "Woche [[%0%]] von [[%1%]]", "Woche", "W\u00E4hlen Sie ein Datum", "Klicken \u0026 Ziehen zum Verschieben", "Zeige [[%0%]] zuerst", "Zu Heute wechseln", "Datum deaktivieren"]}; +try { datePickerController.loadLanguage(); } catch(err) {} diff --git a/dp/lang/en.js b/dp/lang/en.js new file mode 100644 index 0000000..ec8b4b9 --- /dev/null +++ b/dp/lang/en.js @@ -0,0 +1,9 @@ +var fdLocale = { + fullMonths:["January","February","March","April","May","June","July","August","September","October","November","December"], + monthAbbrs:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"], + fullDays: ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"], + dayAbbrs: ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"], + titles: ["Previous month","Next month","Previous year","Next year", "Today", "Open Calendar", "wk", "Week [[%0%]] of [[%1%]]", "Week", "Select a date", "Click \u0026 Drag to move", "Display \u201C[[%0%]]\u201D first", "Go to Today\u2019s date", "Disabled date:"], + firstDayOfWeek:0 +}; +try { datePickerController.loadLanguage(); } catch(err) {} diff --git a/dp/lang/eo.js b/dp/lang/eo.js new file mode 100644 index 0000000..0b151f5 --- /dev/null +++ b/dp/lang/eo.js @@ -0,0 +1,13 @@ +/* Please save this file using the appropriate two letter language code e.g. fr.js +and send it to frequency.decoder at gmail d0t com - thanks! */ + +var fdLocale = { + firstDayOfWeek:6, + fullMonths:["Januaro", "Februaro", "Marto", "Aprilo", "Majo", "Junio", "Julio", "A\u016Dgusto", "Septembro", "Oktobro", "Novembro", "Decembro"], + monthAbbrs:["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "A\u016Dg", "Sep", "Okt", "Nov", "Dec"], + fullDays:["Lundo", "Mardo", "Merkredo", "\u0134a\u016Ddo", "Vendredo", "Sabato", "Diman\u0109o"], + dayAbbrs:["Lun", "Mar", "Mer", "\u0134a\u016D", "Ven", "Sab", "Dim"], + titles:["Anta\u016Da Monato", "Sekva Monato", "Anta\u016Da Jaro", "Sekva Jaro", "Hodia\u016D", "Montri Kalendaron", "sem", "Semajno [[%0%]] el [[%1%]]", "Semajno", "Elekti Daton", "Tiri por movi", "Montri \u0022[[%0%]]\u0022 unue", "Iri al la hodiaua dato", "Malhavebla Dato\u003A"] +}; + +try { datePickerController.loadLanguage(); } catch(err) {}; \ No newline at end of file diff --git a/dp/lang/es.js b/dp/lang/es.js new file mode 100644 index 0000000..30e5bb8 --- /dev/null +++ b/dp/lang/es.js @@ -0,0 +1,9 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], +monthAbbrs:["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"], +fullDays:["Lunes", "Martes", "Mi\u00E9rcoles", "Jueves", "Viernes", "S\u00E1bado", "Domingo"], +dayAbbrs:["Lun", "Mar", "Mi\u00E9", "Jue", "Vie", "S\u00E1b", "Dom"], +titles:["Mes Anterior", "Mes Siguiente", "A\u00F1o Anterior", "A\u00F1o Siguiente", "Hoy", "Mostar Calendario", "sem", "Semana[[%0%]] de [[%1%]]", "Semana", "Seleccione una Fecha", "Haga clic y arrastre para mover", "Mostrar \u0022[[%0%]]\u0022 primero", "Ir al d\u00EDa de hoy", "Deshabilitar Fecha"]}; +try { datePickerController.loadLanguage(); } catch(err) {} diff --git a/dp/lang/et.js b/dp/lang/et.js new file mode 100644 index 0000000..e41ac1e --- /dev/null +++ b/dp/lang/et.js @@ -0,0 +1,23 @@ +/* Please save this file using the appropriate two letter language code e.g. fr.js + +and send it to frequency.decoder at gmail d0t com - thanks! */ + + + +var fdLocale = { + +/* Uncomment the following line if the first day of the week does not start on Monday */ + +//firstDayOfWeek:0, + +fullMonths:["Jaanuar", "Veebruar", "M\u00E4rts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember"], + +monthAbbrs:["Jan", "Veb", "M\u00E4r", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Det"], + +fullDays:["Esmasp\u00E4ev", "Teisip\u00E4ev", "Kolmap\u00E4ev", "Neljap\u00E4ev", "Reede", "Laup\u00E4ev", "P\u00FChap\u00E4ev"], + +dayAbbrs:["M", "T", "K", "N", "R", "L", "P"], + +titles:["eelmine kuu", "j\u00E4rgmine kuu", "eelmine aasta", "j\u00E4rgmine aasta", "t\u00E4na", "n\u00E4ita kalendrit", "nd", "n\u00E4dal [[%0%]] - [[%1%]]", "n\u00E4dal", "vali kuup\u00E4ev", "kliki ja lohista", "n\u00E4ita \u201C[[%0%]]\u201D esimest", "mine t\u00E4nasele", "keelatud kuup\u00E4ev\u003A"]}; + +try { datePickerController.loadLanguage(); } catch(err) {}; diff --git a/dp/lang/fi.js b/dp/lang/fi.js new file mode 100644 index 0000000..33ce750 --- /dev/null +++ b/dp/lang/fi.js @@ -0,0 +1,7 @@ +var fdLocale = { +fullMonths:["Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kes\u00E4kuu", "Hein\u00E4kuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"], +monthAbbrs:["Tam", "Hel", "Maa", "Huh", "Tou", "Kes", "Hei", "Elo", "Syy", "Lok", "Mar", "Jou"], +fullDays:["Maanantai", "Tiistai", "Keskiviikko", "Torstai", "Perjantai", "Lauantai", "Sunnuntai"], +dayAbbrs:["Ma", "Ti", "Ke", "To", "Pe", "La", "Su"], +titles:["Edellinen kuukausi", "Seuraava kuukausi", "Edellinen vuosi", "Seuraava vuosi", "T\u00E4n\u00E4\u00E4n", "N\u00E4yt\u00E4 kalenteri", "vko", "Viikko [[%0%]] \u002F [[%1%]]", "Viikko", "Valitse p\u00E4iv\u00E4ys", "Valitse ja raahaa liikuttaaksesi", "N\u00E4yt\u00E4 \u201C[[%0%]]\u201D ensin", "Siirry t\u00E4h\u00E4n p\u00E4iv\u00E4\u00E4n", "Ei valittava p\u00E4iv\u00E4ys"]}; +try { datePickerController.loadLanguage(); } catch(err) {} diff --git a/dp/lang/fr.js b/dp/lang/fr.js new file mode 100644 index 0000000..b2d7c25 --- /dev/null +++ b/dp/lang/fr.js @@ -0,0 +1,69 @@ +var fdLocale = { + fullMonths:[ + "Janvier", + "F\u00E9vrier", + "Mars", + "Avril", + "Mai", + "Juin", + "Juillet", + "Ao\u00FBt", + "Septembre", + "Octobre", + "Novembre", + "D\u00E9cembre" + ], + fullDays:[ + "Lundi", + "Mardi", + "Mercredi", + "Jeudi", + "Vendredi", + "Samedi", + "Dimanche" + ], + dayAbbrs:[ + "Lun", + "Mar", + "Mer", + "Jeu", + "Ven", + "Sam", + "Dim" + ], + monthAbbrs:[ + "Jan", + "F\u00E9v", + "Mar", + "Avr", + "Mai", + "Jui", + "Juil", + "Ao\u00FB", + "Sep", + "Oct", + "Nov", + "D\u00E9c" + ], + /* Only stipulate the firstDayOfWeek should the first day not be Monday + firstDayOfWeek:1, + */ + titles:[ + "Mois pr\u00E9cedent", + "Mois suivant", + "Ann\u00E9e pr\u00E9cedente", + "Ann\u00E9e suivante", + "Aujourd\u2019hui", + "Ouvrir Calendrier", + "sm", + "Semaine [[%0%]]/[[%1%]]", + "Semaine", + "Choissisez une date", + "Cliquez et d\u00E9placez", + "Montre \u201C[[%0%]]\u201D en premier", + "Aujourd\u2019hui", + "Date désactivé : " + ] +}; +try { datePickerController.loadLanguage(); } catch(err) {} + diff --git a/dp/lang/he.js b/dp/lang/he.js new file mode 100644 index 0000000..73cb442 --- /dev/null +++ b/dp/lang/he.js @@ -0,0 +1,9 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["\u05D9\u05E0\u05D5\u05D0\u05E8", "\u05E4\u05D1\u05E8\u05D5\u05D0\u05E8", "\u05DE\u05E8\u05E5", "\u05D0\u05E4\u05E8\u05D9\u05DC", "\u05DE\u05D0\u05D9", "\u05D9\u05D5\u05E0\u05D9", "\u05D9\u05D5\u05DC\u05D9", "\u05D0\u05D5\u05D2\u05D5\u05E1\u05D8", "\u05E1\u05E4\u05D8\u05DE\u05D1\u05E8", "\u05D0\u05D5\u05E7\u05D8\u05D5\u05D1\u05E8", "\u05E0\u05D5\u05D1\u05DE\u05D1\u05E8", "\u05D3\u05E6\u05DE\u05D1\u05E8"], +monthAbbrs:["\u05D9\u05E0\u0027", "\u05E4\u05D1\u0027", "\u05DE\u05E8\u0027", "\u05D0\u05E4\u0027", "\u05DE\u0027", "\u05D9\u05D5\u05E0\u0027", "\u05D9\u05D5\u05DC\u0027", "\u05D0\u05D5\u05D2\u0027", "\u05E1\u05E4\u05D8\u0027", "\u05D0\u05D5\u05E7\u05D8\u0027", "\u05E0\u05D5\u05D1\u0027", "\u05D3\u05E6\u0027"], +fullDays:["\u05E9\u05E0\u05D9", "\u05E9\u05DC\u05D9\u05E9\u05D9", "\u05E8\u05D1\u05D9\u05E2\u05D9", "\u05D7\u05DE\u05D9\u05E9\u05D9", "\u05E9\u05D9\u05E9\u05D9", "\u05E9\u05D1\u05EA", "\u05E8\u05D0\u05E9\u05D5\u05DF"], +dayAbbrs:["\u05E9\u05E0\u0027", "\u05E9\u05DC\u0027", "\u05E8\u05D1\u0027", "\u05D7\u05DE\u0027", "\u05E9\u05D9\u0027", "\u05E9\u0027", "\u05E8\u05D0\u05E9\u0027"], +titles:["\u05D7\u05D5\u05D3\u05E9 \u05E7\u05D5\u05D3\u05DD", "\u05D7\u05D5\u05D3\u05E9 \u05D4\u05D1\u05D0", "\u05E9\u05E0\u05D4 \u05E7\u05D5\u05D3\u05DE\u05EA", "\u05E9\u05E0\u05D4 \u05D4\u05D1\u05D0\u05D4", "\u05D4\u05D9\u05D5\u05DD", "\u05D4\u05E6\u05D2 \u05DC\u05D5\u05D7 \u05E9\u05E0\u05D4", "\u05E9\u05D1", "\u05E9\u05D1\u05D5\u05E2[[%0%]] \u05DE\u05EA\u05D5\u05DA [[%1%]]", "Week", "\u05D1\u05D7\u05E8 \u05EA\u05D0\u05E8\u05D9\u05DA", "\u05D4\u05E7\u05DC\u05E7 \u05D5\u05D2\u05E8\u05D5\u05E8 \u05DC\u05D4\u05E2\u05D1\u05E8\u05D4", "\u05D4\u05E6\u05D2 \u0022[[%0%]]\u0022 \u05E8\u05D0\u05E9\u05D9\u05EA", "\u05E2\u05D1\u05D5\u05E8 \u05DC\u05EA\u05D0\u05E8\u05D9\u05DA \u05E0\u05D5\u05DB\u05D7\u05D9", "\u05E0\u05D8\u05E8\u05DC \u05EA\u05D0\u05E8\u05D9\u05DA\u003A"]}; +try { datePickerController.loadLanguage(); } catch(err) {}; diff --git a/dp/lang/hu.js b/dp/lang/hu.js new file mode 100644 index 0000000..6d12db6 --- /dev/null +++ b/dp/lang/hu.js @@ -0,0 +1,9 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["janu\u00E1r", "febru\u00E1r", "m\u00E1rcius", "\u00E1prilis", "m\u00E1jus", "j\u00FAnius", "j\u00FAlius", "augusztus", "szeptember", "okt\u00F3ber", "november", "december"], +monthAbbrs:["jan", "feb", "m\u00E1r", "\u00E1pr", "m\u00E1j", "j\u00FAn", "j\u00FAl", "aug", "szept", "okt", "nov", "dec"], +fullDays:["h\u00E9tf\u0151", "kedd", "szerda", "cs\u00FCt\u00F6rt\u00F6k", "p\u00E9ntek", "szombat", "vas\u00E1rnap"], +dayAbbrs:["h", "k", "sze", "cs", "p", "szo", "v"], +titles:["el\u0151z\u0151 h\u00F3nap", "k\u00F6vetkez\u0151 h\u00F3nap", "el\u0151z\u0151 \u00E9v", "k\u00F6vetkez\u0151 \u00E9v", "ma", "napt\u00E1r megjelen\u00EDt\u00E9se", "h\u00E9t", "[[%1%]]\u002E [[%0%]]\u002E hete", "h\u00E9t", "v\u00E1lasszon d\u00E1tumot", "\u00E1thelyez\u00E9s kattintson \u00E9s h\u00FAzza", "el\u0151sz\u00F6r \u0022[[%0%]]\u0022 mutat\u00E1sa", "ugr\u00E1s a mai naphoz", "letiltott d\u00E1tum"]}; +try { datePickerController.loadLanguage(); } catch(err) {}; diff --git a/dp/lang/id.js b/dp/lang/id.js new file mode 100644 index 0000000..9da556f --- /dev/null +++ b/dp/lang/id.js @@ -0,0 +1,9 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["Januari", "Febuari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"], +monthAbbrs:["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"], +fullDays:["Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"], +dayAbbrs:["Sen", "Sel", "Rab", "Kam", "Jum", "Sab", "Min"], +titles:["Bulan Lalu", "Bulan Depan", "Tahun Lalu", "Tahun Depan", "Hari Ini", "Kalender", "mg", "Minggu [[%0%]] dari [[%1%]]", "Minggu", "Pilih Tanggal", "Klik \u0026 drag untuk geser", "Tampilkan \u201C[[%0%]]\u201D diawal", "Ke tanggal hari ini", "Non\u002Daktifkan Kalender"]}; +try { datePickerController.loadLanguage(); } catch(err) {} diff --git a/dp/lang/it.js b/dp/lang/it.js new file mode 100644 index 0000000..215991c --- /dev/null +++ b/dp/lang/it.js @@ -0,0 +1,11 @@ + +/* Italian language file (it - it_IT) */ + +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], +monthAbbrs:["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"], +fullDays:["Luned\u00EC", "Marted\u00EC", "Mercoled\u00EC", "Gioved\u00EC", "Venerd\u00EC", "Sabato", "Domenica"], +dayAbbrs:["Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"], +titles:["Mese precedente", "Mese successivo", "Anno precedente", "Anno successivo", "Oggi", "Mostra Calendario", "sett", "Settimana [[%0%]] di [[%1%]]", "Settimana", "Seleziona una data", "Clicca \u0026 trascina per spostare", "Mostra prima \u201C[[%0%]]\u201D", "Vai alla data Odierna", "Data disabilitata"]}; diff --git a/dp/lang/kr.js b/dp/lang/kr.js new file mode 100644 index 0000000..693765d --- /dev/null +++ b/dp/lang/kr.js @@ -0,0 +1,9 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["1\uC6D4", "2\uC6D4", "3\uC6D4", "4\uC6D4", "5\uC6D4", "6\uC6D4", "7\uC6D4", "8\uC6D4", "9\uC6D4", "10\uC6D4", "11\uC6D4", "12\uC6D4"], +monthAbbrs:["1\uC6D4", "2\uC6D4", "3\uC6D4", "4\uC6D4", "5\uC6D4", "6\uC6D4", "7\uC6D4", "8\uC6D4", "9\uC6D4", "10\uC6D4", "11\uC6D4", "12\uC6D4"], +fullDays:["\uC6D4\uC694\uC77C", "\uD654\uC694\uC77C", "\uC218\uC694\uC77C", "\uBAA9\uC694\uC77C", "\uAE08\uC694\uC77C", "\uD1A0\uC694\uC77C", "\uC77C\uC694\uC77C"], +dayAbbrs:["\uC6D4", "\uD654", "\uC218", "\uBAA9", "\uAE08", "\uD1A0", "\uC77C"], +titles:["\uC9C0\uB09C \uB2EC", "\uB2E4\uC74C \uB2EC", "\uC9C0\uB09C \uC8FC", "\uB2E4\uC74C \uC8FC", "\uC624\uB298", "\uB2EC\uB825 \uBCF4\uAE30", "\uC8FC", "[[%1%]]\uC8FC\uC911 [[%0%]]\uC8FC\uCC28", "\uC8FC", "\uB0A0\uC9DC \uC120\uD0DD", "\uB04C\uC5B4\uC11C \uC62E\uAE30\uAE30", "\u0022[[%0%]]\u0022 \uC6B0\uC120\uD45C\uC2DC", "\uC624\uB298\uB0A0\uC9DC\uB85C", "\uC120\uD0DD\uBD88\uAC00 \uB0A0\uC9DC"]};$ +try { datePickerController.loadLanguage(); } catch(err) {} diff --git a/dp/lang/lt.js b/dp/lang/lt.js new file mode 100644 index 0000000..3d61efa --- /dev/null +++ b/dp/lang/lt.js @@ -0,0 +1,8 @@ +var fdLocale = { +//firstDayOfWeek:0, +fullMonths:["Sausis", "Vasaris", "Kovas", "Balandis", "Gegu\u017E\u0117", "Bir\u017Eelis", "Liepa", "Rugpj\u016Btis", "Rugs\u0117jis", "Spalis", "Lapkritis", "Gruodis"], +monthAbbrs:["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gruod"], +fullDays:["Pirmadienis", "Antradienis", "Tre\u010Diadienis", "Ketvirtadienis", "Penktadienis", "\u0160e\u0161tadienis", "Sekmadienis"], +dayAbbrs:["P", "A", "T", "K", "Pn", "\u0160", "S"], +titles:["Buv\u0119s m\u0117nuo", "Kitas m\u0117nuo", "Buv\u0119 metai", "Kiti metai", "\u0160iandien", "Rodyti kalendori\u0173", "sav\u002E", "Savait\u0117 [[%0%]] i\u0161 [[%1%]]", "Savait\u0117", "Pasirinkite dat\u0105", "Paspauskite nor\u0117dami perkleti", "Pirmiausia rodyti \u201C[[%0%]]\u201D ", "\u0160iandienos data", "Negalima data"]}; +try { datePickerController.loadLanguage(); } catch(err) {}; \ No newline at end of file diff --git a/dp/lang/lv.js b/dp/lang/lv.js new file mode 100644 index 0000000..4fbea26 --- /dev/null +++ b/dp/lang/lv.js @@ -0,0 +1,9 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["Janv\u0101ris", "Febru\u0101ris", "Marts", "Apr\u012Blis", "Maijs", "J\u016Bnijs", "J\u016Blijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"], +monthAbbrs:["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], +fullDays:["Pirmdiena", "Otrdiena", "Tre\u0161diena", "Ceturdiena", "Piektdiena", "Sestdiena", "Sv\u0113tdiena"], +dayAbbrs:["P", "O", "T", "C", "P", "S", "Sv"], +titles:["Iepriek\u0161\u0113jais m\u0113nesis", "N\u0101kamais m\u0113nesis", "Iepriek\u0161\u0113jais gads", "N\u0101kamais gads", "\u0160odiena", "R\u0101d\u012Bt kalend\u0101ru", "ned", "Ned\u0113\u013Ca [[%0%]] no [[%1%]]", "Ned\u0113\u013Ca", "Izv\u0113laties datumu", "Spiest un vilk lai p\u0101rb\u012Bd\u012Btu", "Par\u0101d\u012Bt \u0022[[%0%]]\u0022 pirmos", "Iet uz \u0161odienas datumu", "Inval\u012Bdu diena"]}; +try { datePickerController.loadLanguage(); } catch(err) {} diff --git a/dp/lang/nl.js b/dp/lang/nl.js new file mode 100644 index 0000000..74831cd --- /dev/null +++ b/dp/lang/nl.js @@ -0,0 +1,9 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], +monthAbbrs:["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], +fullDays:["Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"], +dayAbbrs:["Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], +titles:["Vorige maand", "Volgende maand", "Vorig jaar", "Volgend jaar", "Vandaag", "Toon kalender", "wk", "Week [[%0%]] van [[%1%]]", "Week", "Kies een datum", "Klik en versleep", "Zet \u201C[[%0%]]\u201D vooraan", "Ga naar vandaag", "Geblokkeerde datum"]}; +try { datePickerController.loadLanguage(); } catch(err) {} diff --git a/dp/lang/no.js b/dp/lang/no.js new file mode 100644 index 0000000..dd04764 --- /dev/null +++ b/dp/lang/no.js @@ -0,0 +1,9 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], +monthAbbrs:["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], +fullDays:["Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "L\u00F8rdag", "S\u00F8ndag"], +dayAbbrs:["Man", "Tir", "Ons", "Tor", "Fre", "L\u00F8r", "S\u00F8n"], +titles:["Forrige m\u00E5ned", "Neste m\u00E5ned", "Forrige \u00E5r", "Neste \u00E5r", "I dag", "Vis kalender", "uk", "Uke [[%0%]] av [[%1%]]", "Uke", "Velg dato", "Klikk og dra for \u00E5 flytte", "Vis [[%0%]] f\u00F8rst", "G\u00E5 til dagens dato", "Deaktivert dato"]}; +try { datePickerController.loadLanguage(); } catch(err) {} diff --git a/dp/lang/pl.js b/dp/lang/pl.js new file mode 100644 index 0000000..6cc9347 --- /dev/null +++ b/dp/lang/pl.js @@ -0,0 +1,10 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["Stycze\u0144", "Luty", "Marzec", "Kwiecie\u0144", "Maj", "Czerwiec", "Lipiec", "Sierpie\u0144", "Wrzesie\u0144", "Pa\u017Adziernik", "Listopad", "Grudzie\u0144"], +monthAbbrs:["Sty", "Lut", "Mar", "Kwi", "Maj", "Cze", "Lip", "Sie", "Wrz", "Pa\u017A", "Lis", "Gru"], +fullDays:["Poniedzia\u0142ek", "Wtorek", "\u015Aroda", "Czwartek", "Pi\u0105tek", "Sobota", "Niedziela"], +dayAbbrs:["Pon", "Wto", "\u015Aro", "Czw", "Pi\u0105", "Sob", "Nie"], +titles:["Poprzedni miesi\u0105c", "Nast\u0119pny miesi\u0105c", "Poprzedni rok", "Nast\u0119pny rok", "Dzi\u015B", "Poka\u017C kalendarz", "Tyd", "Tydzie\u0144 [[%0%]] z [[%1%]]", "Tydzie\u0144", "Wybierz dat\u0119", "Przeci\u0105gnij i upu\u015B\u0107", "Wy\u015Bwietla \u201C[[%0%]]\u201D Jako pierwszy", "Zaznacza dzie\u0144 dzisiejszy", "Data wy\u0142\u0105czona"]}; +try { datePickerController.loadLanguage(); } catch(err) {} + diff --git a/dp/lang/pt-br.js b/dp/lang/pt-br.js new file mode 100644 index 0000000..3b988ff --- /dev/null +++ b/dp/lang/pt-br.js @@ -0,0 +1,11 @@ +/* Please save this file using the appropriate two letter language code e.g. fr.js +and send it to frequency.decoder at gmail d0t com - thanks! */ + +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["Janeiro", "Fevereiro", "Mar\u00E7o", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], +monthAbbrs:["Jan", "Fev", "Mar", "Abr", "Maio", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], +fullDays:["Segunda\u002DFeira", "Ter\u00E7a\u002DFeira", "Quarta\u002DFeira", "Quinta\u002DFeira", "Sexta\u002DFeira", "S\u00E1bado", "Domingo"], +dayAbbrs:["Seg", "Ter", "Qua", "Qui", "Sex", "Sab", "Dom"], +titles:["M\u00EAs Anterior", "Pr\u00F3ximo M\u00EAs", "Ano Anterior", "Pr\u00F3ximo Ano", "Hoje", "Exibir Calend\u00E1rio", "Sem", "Semana [[%0%]] de [[%1%]]", "Semana", "Selecione uma Data", "Clique e Arraste para Mover", "Exibir \u0022[[%0%]]\u0022 primeiro", "Ir para Data de Hoje", "Data Desabilitada"]}; \ No newline at end of file diff --git a/dp/lang/pt.js b/dp/lang/pt.js new file mode 100644 index 0000000..0d0b846 --- /dev/null +++ b/dp/lang/pt.js @@ -0,0 +1,9 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["Janeiro", "Fevereiro", "Mar\u00E7o", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], +monthAbbrs:["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], +fullDays:["Segunda", "Ter\u00E7a", "Quarta", "Quinta", "Sexta", "S\u00E1bado", "Domingo"], +dayAbbrs:["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], +titles:["M\u00EAs Anterior", "M\u00EAs Seguinte", "Ano Anterior", "Ano Seguinte", "Hoje", "Mostrar Calend\u00E1rio", "sem", "Semana [[%0%]] of [[%1%]]", "Semana", "Seleccionar data", "Arrastar", "Mostrar \u201C[[%0%]]\u201D first", "Ir para data actual", "Desabilitar data"]}; +try { datePickerController.loadLanguage(); } catch(err) {} diff --git a/dp/lang/ru.js b/dp/lang/ru.js new file mode 100644 index 0000000..40299ed --- /dev/null +++ b/dp/lang/ru.js @@ -0,0 +1,11 @@ +/* Please save this file using the appropriate two letter language code e.g. fr.js +and send it to frequency.decoder at gmail d0t com - thanks! */ + +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["\u042F\u043D\u0432\u0430\u0440\u044C", "\u0424\u0435\u0432\u0440\u0430\u043B\u044C", "\u041C\u0430\u0440\u0442", "\u0410\u043F\u0440\u0435\u043B\u044C", "\u041C\u0430\u0439", "\u0418\u044E\u043D\u044C", "\u0418\u044E\u043B\u044C", "\u0410\u0432\u0433\u0443\u0441\u0442", "\u0421\u0435\u043D\u0442\u044F\u0431\u0440\u044C", "\u041E\u043A\u0442\u044F\u0431\u0440\u044C", "\u041D\u043E\u044F\u0431\u0440\u044C", "\u0414\u0435\u043A\u0430\u0431\u0440\u044C"], +monthAbbrs:["\u042F\u043D\u0432", "\u0424\u0435\u0432", "\u041C\u0430\u0440", "\u0410\u043F\u0440", "\u041C\u0430\u0439", "\u0418\u044E\u043D", "\u0418\u044E\u043B", "\u0410\u0432\u0433", "\u0421\u0435\u043D", "\u041E\u043A\u0442", "\u041D\u043E\u044F", "\u0414\u0435\u043A"], +fullDays:["\u041F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A", "\u0412\u0442\u043E\u0440\u043D\u0438\u043A", "\u0421\u0440\u0435\u0434\u0430", "\u0427\u0435\u0442\u0432\u0435\u0440\u0433", "\u041F\u044F\u0442\u043D\u0438\u0446\u0430", "\u0421\u0443\u0431\u0431\u043E\u0442\u0430", "\u0412\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435"], +dayAbbrs:["\u041F\u043D", "\u0412\u0442", "\u0421\u0440", "\u0427\u0442", "\u041F\u0442", "\u0421\u0431", "\u0412\u0441"], +titles:["\u041F\u0440\u0435\u0434\u002E \u043C\u0435\u0441\u044F\u0446", "\u0421\u043B\u0435\u0434\u002E \u043C\u0435\u0441\u044F\u0446", "\u041F\u0440\u0435\u0434\u002E \u0433\u043E\u0434", "\u0421\u043B\u0435\u0434\u002E \u0433\u043E\u0434", "\u0421\u0435\u0433\u043E\u0434\u043D\u044F", "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C", "\u043D\u0435\u0434", "\u041D\u0435\u0434\u0435\u043B\u044F [[%0%]] \u0438\u0437 [[%1%]]", "\u041D\u0435\u0434\u0435\u043B\u044F", "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0430\u0442\u0443", "\u041F\u0440\u043E\u0442\u0430\u0449\u0438\u0442\u0435 \u0434\u043B\u044F \u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0435\u043D\u0438\u044F", "\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C [[%0%]] \u0441\u043D\u0430\u0447\u0430\u043B\u0430", "\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u0441\u0435\u0433\u043E\u0434\u043D\u044F\u0448\u043D\u0435\u0439 \u0434\u0430\u0442\u0435", "\u0414\u0430\u0442\u0430 \u043D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u0430"]}; \ No newline at end of file diff --git a/dp/lang/se.js b/dp/lang/se.js new file mode 100644 index 0000000..d332ada --- /dev/null +++ b/dp/lang/se.js @@ -0,0 +1,9 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"], +monthAbbrs:["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], +fullDays:["M\u00E5ndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "L\u00F6rdag", "S\u00F6ndag"], +dayAbbrs:["M\u00E5n", "Tis", "Ons", "Tors", "Fre", "L\u00F6r", "S\u00F6n"], +titles:["F\u00F6rra m\u00E5naden", "N\u00E4sta m\u00E5nad", "F\u00F6rra \u00E5ret", "N\u00E4sta \u00E5r", "Idag", "Visa kalender", "Vecka", "Vecka [[%0%]] av [[%1%]]", "Vecka", "V\u00E4lj ett datum", "Klicka och Drag", "Visa \u0022[[%0%]]\u0022 f\u00F6rsta", "Dagens datum", "Inaktiverat datum"]}; +try { datePickerController.loadLanguage(); } catch(err) {} diff --git a/dp/lang/si.js b/dp/lang/si.js new file mode 100644 index 0000000..58363dd --- /dev/null +++ b/dp/lang/si.js @@ -0,0 +1,9 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"], +monthAbbrs:["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], +fullDays:["Ponedeljek", "Torek", "Sreda", "\u010Cetrtek", "Petek", "Sobota", "Nedelja"], +dayAbbrs:["Pon", "Tor", "Sre", "\u010Cet", "Pet", "Sob", "Ned"], +titles:["Prej\u0161nji mesec", "Naslednji mesec", "Prej\u0161nje leto", "Naslednje leto", "Danes", "Poka\u017Ei koledar", "td", "Teden [[%0%]] od [[%1%]]", "Teden", "Izberi datum", "Vleci in spusti za premik", "Prika\u017Ei najprej \u201C[[%0%]]\u201D", "Pojdi na dana\u0161nji datum", "Neveljaven datum"]}; +try { datePickerController.loadLanguage(); } catch(err) {} diff --git a/dp/lang/sk.js b/dp/lang/sk.js new file mode 100644 index 0000000..7a90f3c --- /dev/null +++ b/dp/lang/sk.js @@ -0,0 +1,9 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Oktober","November","December"], +monthAbbrs:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Oct","Nov","Dec"], +fullDays: ["Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota","Nedeľa"], +dayAbbrs: ["Po","Ut","St","Št","Pi","So","Ne"], +titles: ["Predošlý mesiac","Budúci mesiac","Predošlý rok","Budúci rok", "Dnes", "Otvoriť kalendár", "týž", "Týždeň [[%0%]] z [[%1%]]", "Týždeň", "Vebrať dátum", "Klik \u0026 Ťahaním presunúť", "Zobraziť \u201C[[%0%]]\u201D prvý", "Prejsť na dnešný\u2019s dátum", "Zrušený dátum:"]}; +try { datePickerController.loadLanguage(); } catch(err) {} diff --git a/dp/lang/tr.js b/dp/lang/tr.js new file mode 100644 index 0000000..b6a080f --- /dev/null +++ b/dp/lang/tr.js @@ -0,0 +1,9 @@ +var fdLocale = { +/* Uncomment the following line if the first day of the week does not start on Monday */ +//firstDayOfWeek:0, +fullMonths:["Ocak", "\u015Eubat", "Mart", "Nisan", "May\u0131s", "Haziran", "Temmuz", "A\u011Fustos", "Eyl\u00FCl", "Ekim", "Kas\u0131m", "Aral\u0131k"], +monthAbbrs:["Oca", "\u015Eub", "Mar", "Nis", "May", "Haz", "Tem", "A\u011Fu", "Eyl", "Eki", "Kas", "Ara"], +fullDays:["Pazartesi", "Sal\u0131", "\u00C7ar\u015Famba", "Per\u015Fembe", "Cuma", "Cumartesi", "Pazar"], +dayAbbrs:["Pzt", "Sal", "\u00C7ar", "Per", "Cum", "Cmt", "Paz"], +titles:["\u00D6nceki Ay", "Sonraki Ay", "\u00D6nceki Y\u0131l", "Sonraki Y\u0131l", "Bug\u00FCn", "Takvimi G\u00F6ster", "hafta", "[[%1%]]\u0027de [[%0%]] \u002Ehafta", "Hafta", "G\u00FCn Se\u00E7", "T\u0131kla ve S\u00FCr\u00FCkle", "G\u00F6ster \u0022[[%0%]]\u0022 \u00F6nce", "Bug\u00FCne git", "Tarih kapal\u0131"]}; +try { datePickerController.loadLanguage(); } catch(err) {} diff --git a/editorconfigs/ckeditorconfig_for_calendar.php b/editorconfigs/ckeditorconfig_for_calendar.php new file mode 100644 index 0000000..349cbac --- /dev/null +++ b/editorconfigs/ckeditorconfig_for_calendar.php @@ -0,0 +1,93 @@ + diff --git a/editorconfigs/tinymceconfig_for_calendar.php b/editorconfigs/tinymceconfig_for_calendar.php new file mode 100644 index 0000000..0639153 --- /dev/null +++ b/editorconfigs/tinymceconfig_for_calendar.php @@ -0,0 +1,110 @@ + diff --git a/fckeditor/FCKeditor/FCKeditor_for_Calendar.txt b/fckeditor/FCKeditor/FCKeditor_for_Calendar.txt new file mode 100644 index 0000000..22ce10f --- /dev/null +++ b/fckeditor/FCKeditor/FCKeditor_for_Calendar.txt @@ -0,0 +1,11 @@ +Simplyfied FCKeditor for Calendar-Plugin based on +normal FCKeditor from CMSimple_XH v 1.4. + +The standard FCKeditor from CMSimple v1.4 works also, +except \plugins\calendar\fckeditor\FCKeditor\editor\plugins\sitelink\sitelink.php, +where some slight adjustments are required (for details see in the file). + +Copyright: +FCKeditor-Integration for CMSimple, FCKeditor4CMSimple +2007-2009 Connie Mller-Gdecke, Holger Irmler +This work is licensed under GNU General Public License Version 2 or later (GPL) diff --git a/fckeditor/FCKeditor/editor/css/behaviors/disablehandles.htc b/fckeditor/FCKeditor/editor/css/behaviors/disablehandles.htc new file mode 100644 index 0000000..8dfb661 --- /dev/null +++ b/fckeditor/FCKeditor/editor/css/behaviors/disablehandles.htc @@ -0,0 +1,15 @@ + + + + + diff --git a/fckeditor/FCKeditor/editor/css/behaviors/showtableborders.htc b/fckeditor/FCKeditor/editor/css/behaviors/showtableborders.htc new file mode 100644 index 0000000..77418b9 --- /dev/null +++ b/fckeditor/FCKeditor/editor/css/behaviors/showtableborders.htc @@ -0,0 +1,36 @@ + + + + + + + + diff --git a/fckeditor/FCKeditor/editor/css/fck_editorarea.css b/fckeditor/FCKeditor/editor/css/fck_editorarea.css new file mode 100644 index 0000000..50cfe0e --- /dev/null +++ b/fckeditor/FCKeditor/editor/css/fck_editorarea.css @@ -0,0 +1,110 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This is the default CSS file used by the editor area. It defines the + * initial font of the editor and background color. + * + * A user can configure the editor to use another CSS file. Just change + * the value of the FCKConfig.EditorAreaCSS key in the configuration + * file. + */ + +/** + * The "body" styles should match your editor web site, mainly regarding + * background color and font family and size. + */ + +body +{ + background-color: #ffffff; + padding: 5px 5px 5px 5px; + margin: 0px; +} + +body, td +{ + font-family: Arial, Verdana, sans-serif; + font-size: 12px; +} + +a[href] +{ + color: -moz-hyperlinktext !important; /* For Firefox... mark as important, otherwise it becomes black */ + text-decoration: -moz-anchor-decoration; /* For Firefox 3, otherwise no underline will be used */ +} + +/** + * Just uncomment the following block if you want to avoid spaces between + * paragraphs. Remember to apply the same style in your output front end page. + */ + +/* +p, ul, li +{ + margin-top: 0px; + margin-bottom: 0px; +} +*/ + +/** + * Uncomment the following block, or only selected lines if appropriate, + * if you have some style items that would break the styles combo box. + * You can also write other CSS overrides inside the style block below + * as needed and they will be applied to inside the style combo only. + */ + +/* +.SC_Item *, .SC_ItemSelected * +{ + margin: 0px !important; + padding: 0px !important; + text-indent: 0px !important; + clip: auto !important; + position: static !important; +} +*/ + +/** + * The following are some sample styles used in the "Styles" toolbar command. + * You should instead remove them, and include the styles used by the site + * you are using the editor in. + */ + +.Bold +{ + font-weight: bold; +} + +.Title +{ + font-weight: bold; + font-size: 18px; + color: #cc3300; +} + +.Code +{ + border: #8b4513 1px solid; + padding-right: 5px; + padding-left: 5px; + color: #000066; + font-family: 'Courier New' , Monospace; + background-color: #ff9933; +} diff --git a/fckeditor/FCKeditor/editor/css/fck_internal.css b/fckeditor/FCKeditor/editor/css/fck_internal.css new file mode 100644 index 0000000..d92c75e --- /dev/null +++ b/fckeditor/FCKeditor/editor/css/fck_internal.css @@ -0,0 +1,199 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This CSS Style Sheet defines rules used by the editor for its internal use. + */ + +/* ######### + * WARNING + * ######### + * When changing this file, the minified version of it must be updated in the + * fckeditor.html file (see FCK_InternalCSS). + */ + +/* Fix to allow putting the caret at the end of the content in Firefox if + clicking below the content. */ +html +{ + min-height: 100%; +} + +table.FCK__ShowTableBorders, table.FCK__ShowTableBorders td, table.FCK__ShowTableBorders th +{ + border: #d3d3d3 1px solid; +} + +form +{ + border: 1px dotted #FF0000; + padding: 2px; +} + +.FCK__Flash +{ + border: #a9a9a9 1px solid; + background-position: center center; + background-image: url(images/fck_flashlogo.gif); + background-repeat: no-repeat; + width: 80px; + height: 80px; +} + +.FCK__UnknownObject +{ + border: #a9a9a9 1px solid; + background-position: center center; + background-image: url(images/fck_plugin.gif); + background-repeat: no-repeat; + width: 80px; + height: 80px; +} + +/* Empty anchors images */ +.FCK__Anchor +{ + border: 1px dotted #00F; + background-position: center center; + background-image: url(images/fck_anchor.gif); + background-repeat: no-repeat; + width: 16px; + height: 15px; + vertical-align: middle; +} + +/* Anchors with content */ +.FCK__AnchorC +{ + border: 1px dotted #00F; + background-position: 1px center; + background-image: url(images/fck_anchor.gif); + background-repeat: no-repeat; + padding-left: 18px; +} + +/* Any anchor for non-IE, if we combine it with the previous rule IE ignores all. */ +a[name] +{ + border: 1px dotted #00F; + background-position: 0 center; + background-image: url(images/fck_anchor.gif); + background-repeat: no-repeat; + padding-left: 18px; +} + +.FCK__PageBreak +{ + background-position: center center; + background-image: url(images/fck_pagebreak.gif); + background-repeat: no-repeat; + clear: both; + display: block; + float: none; + width: 100%; + border-top: #999999 1px dotted; + border-bottom: #999999 1px dotted; + border-right: 0px; + border-left: 0px; + height: 5px; +} + +/* Hidden fields */ +.FCK__InputHidden +{ + width: 19px; + height: 18px; + background-image: url(images/fck_hiddenfield.gif); + background-repeat: no-repeat; + vertical-align: text-bottom; + background-position: center center; +} + +.FCK__ShowBlocks p, +.FCK__ShowBlocks div, +.FCK__ShowBlocks pre, +.FCK__ShowBlocks address, +.FCK__ShowBlocks blockquote, +.FCK__ShowBlocks h1, +.FCK__ShowBlocks h2, +.FCK__ShowBlocks h3, +.FCK__ShowBlocks h4, +.FCK__ShowBlocks h5, +.FCK__ShowBlocks h6 +{ + background-repeat: no-repeat; + border: 1px dotted gray; + padding-top: 8px; + padding-left: 8px; +} + +.FCK__ShowBlocks p +{ + background-image: url(images/block_p.png); +} + +.FCK__ShowBlocks div +{ + background-image: url(images/block_div.png); +} + +.FCK__ShowBlocks pre +{ + background-image: url(images/block_pre.png); +} + +.FCK__ShowBlocks address +{ + background-image: url(images/block_address.png); +} + +.FCK__ShowBlocks blockquote +{ + background-image: url(images/block_blockquote.png); +} + +.FCK__ShowBlocks h1 +{ + background-image: url(images/block_h1.png); +} + +.FCK__ShowBlocks h2 +{ + background-image: url(images/block_h2.png); +} + +.FCK__ShowBlocks h3 +{ + background-image: url(images/block_h3.png); +} + +.FCK__ShowBlocks h4 +{ + background-image: url(images/block_h4.png); +} + +.FCK__ShowBlocks h5 +{ + background-image: url(images/block_h5.png); +} + +.FCK__ShowBlocks h6 +{ + background-image: url(images/block_h6.png); +} diff --git a/fckeditor/FCKeditor/editor/css/fck_showtableborders_gecko.css b/fckeditor/FCKeditor/editor/css/fck_showtableborders_gecko.css new file mode 100644 index 0000000..333161f --- /dev/null +++ b/fckeditor/FCKeditor/editor/css/fck_showtableborders_gecko.css @@ -0,0 +1,49 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This CSS Style Sheet defines the rules to show table borders on Gecko. + */ + +/* ######### + * WARNING + * ######### + * When changing this file, the minified version of it must be updated in the + * fckeditor.html file (see FCK_ShowTableBordersCSS). + */ + +/* For tables with the "border" attribute set to "0" */ +table[border="0"], +table[border="0"] > tr > td, table[border="0"] > tr > th, +table[border="0"] > tbody > tr > td, table[border="0"] > tbody > tr > th, +table[border="0"] > thead > tr > td, table[border="0"] > thead > tr > th, +table[border="0"] > tfoot > tr > td, table[border="0"] > tfoot > tr > th +{ + border: #d3d3d3 1px dotted ; +} + +/* For tables with no "border" attribute set */ +table:not([border]), +table:not([border]) > tr > td, table:not([border]) > tr > th, +table:not([border]) > tbody > tr > td, table:not([border]) > tbody > tr > th, +table:not([border]) > thead > tr > td, table:not([border]) > thead > tr > th, +table:not([border]) > tfoot > tr > td, table:not([border]) > tfoot > tr > th +{ + border: #d3d3d3 1px dotted ; +} diff --git a/fckeditor/FCKeditor/editor/css/images/block_address.png b/fckeditor/FCKeditor/editor/css/images/block_address.png new file mode 100644 index 0000000..8bbae6e Binary files /dev/null and b/fckeditor/FCKeditor/editor/css/images/block_address.png differ diff --git a/fckeditor/FCKeditor/editor/css/images/block_blockquote.png b/fckeditor/FCKeditor/editor/css/images/block_blockquote.png new file mode 100644 index 0000000..cf065ba Binary files /dev/null and b/fckeditor/FCKeditor/editor/css/images/block_blockquote.png differ diff --git a/fckeditor/FCKeditor/editor/css/images/block_div.png b/fckeditor/FCKeditor/editor/css/images/block_div.png new file mode 100644 index 0000000..a2806b1 Binary files /dev/null and b/fckeditor/FCKeditor/editor/css/images/block_div.png differ diff --git a/fckeditor/FCKeditor/editor/css/images/block_h1.png b/fckeditor/FCKeditor/editor/css/images/block_h1.png new file mode 100644 index 0000000..d43fbdb Binary files /dev/null and b/fckeditor/FCKeditor/editor/css/images/block_h1.png differ diff --git a/fckeditor/FCKeditor/editor/css/images/block_h2.png b/fckeditor/FCKeditor/editor/css/images/block_h2.png new file mode 100644 index 0000000..27b5475 Binary files /dev/null and b/fckeditor/FCKeditor/editor/css/images/block_h2.png differ diff --git a/fckeditor/FCKeditor/editor/css/images/block_h3.png b/fckeditor/FCKeditor/editor/css/images/block_h3.png new file mode 100644 index 0000000..3c3034f Binary files /dev/null and b/fckeditor/FCKeditor/editor/css/images/block_h3.png differ diff --git a/fckeditor/FCKeditor/editor/css/images/block_h4.png b/fckeditor/FCKeditor/editor/css/images/block_h4.png new file mode 100644 index 0000000..ab3f64d Binary files /dev/null and b/fckeditor/FCKeditor/editor/css/images/block_h4.png differ diff --git a/fckeditor/FCKeditor/editor/css/images/block_h5.png b/fckeditor/FCKeditor/editor/css/images/block_h5.png new file mode 100644 index 0000000..93477d0 Binary files /dev/null and b/fckeditor/FCKeditor/editor/css/images/block_h5.png differ diff --git a/fckeditor/FCKeditor/editor/css/images/block_h6.png b/fckeditor/FCKeditor/editor/css/images/block_h6.png new file mode 100644 index 0000000..11ea1c2 Binary files /dev/null and b/fckeditor/FCKeditor/editor/css/images/block_h6.png differ diff --git a/fckeditor/FCKeditor/editor/css/images/block_p.png b/fckeditor/FCKeditor/editor/css/images/block_p.png new file mode 100644 index 0000000..d055c51 Binary files /dev/null and b/fckeditor/FCKeditor/editor/css/images/block_p.png differ diff --git a/fckeditor/FCKeditor/editor/css/images/block_pre.png b/fckeditor/FCKeditor/editor/css/images/block_pre.png new file mode 100644 index 0000000..be8ad26 Binary files /dev/null and b/fckeditor/FCKeditor/editor/css/images/block_pre.png differ diff --git a/fckeditor/FCKeditor/editor/css/images/fck_anchor.gif b/fckeditor/FCKeditor/editor/css/images/fck_anchor.gif new file mode 100644 index 0000000..5aa797b Binary files /dev/null and b/fckeditor/FCKeditor/editor/css/images/fck_anchor.gif differ diff --git a/fckeditor/FCKeditor/editor/css/images/fck_flashlogo.gif b/fckeditor/FCKeditor/editor/css/images/fck_flashlogo.gif new file mode 100644 index 0000000..141aac4 Binary files /dev/null and b/fckeditor/FCKeditor/editor/css/images/fck_flashlogo.gif differ diff --git a/fckeditor/FCKeditor/editor/css/images/fck_hiddenfield.gif b/fckeditor/FCKeditor/editor/css/images/fck_hiddenfield.gif new file mode 100644 index 0000000..953f643 Binary files /dev/null and b/fckeditor/FCKeditor/editor/css/images/fck_hiddenfield.gif differ diff --git a/fckeditor/FCKeditor/editor/css/images/fck_pagebreak.gif b/fckeditor/FCKeditor/editor/css/images/fck_pagebreak.gif new file mode 100644 index 0000000..8d1cffd Binary files /dev/null and b/fckeditor/FCKeditor/editor/css/images/fck_pagebreak.gif differ diff --git a/fckeditor/FCKeditor/editor/css/images/fck_plugin.gif b/fckeditor/FCKeditor/editor/css/images/fck_plugin.gif new file mode 100644 index 0000000..7d58463 Binary files /dev/null and b/fckeditor/FCKeditor/editor/css/images/fck_plugin.gif differ diff --git a/fckeditor/FCKeditor/editor/dialog/common/fck_dialog_common.css b/fckeditor/FCKeditor/editor/dialog/common/fck_dialog_common.css new file mode 100644 index 0000000..1119e44 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/common/fck_dialog_common.css @@ -0,0 +1,85 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This is the CSS file used for interface details in some dialog + * windows. + */ + +/* ######### + * WARNING + * ######### + * When changing this file, the minified version of it must be updated in the + * fck_dialog_common.js file (see GetCommonDialogCss). + */ + +.ImagePreviewArea +{ + border: #000000 1px solid; + overflow: auto; + width: 100%; + height: 170px; + background-color: #ffffff; +} + +.FlashPreviewArea +{ + border: #000000 1px solid; + padding: 5px; + overflow: auto; + width: 100%; + height: 170px; + background-color: #ffffff; +} + +.BtnReset +{ + float: left; + background-position: center center; + background-image: url(images/reset.gif); + width: 16px; + height: 16px; + background-repeat: no-repeat; + border: 1px none; + font-size: 1px ; +} + +.BtnLocked, .BtnUnlocked +{ + float: left; + background-position: center center; + background-image: url(images/locked.gif); + width: 16px; + height: 16px; + background-repeat: no-repeat; + border: none 1px; + font-size: 1px ; +} + +.BtnUnlocked +{ + background-image: url(images/unlocked.gif); +} + +.BtnOver +{ + border: outset 1px; + cursor: pointer; + cursor: hand; +} diff --git a/fckeditor/FCKeditor/editor/dialog/common/fck_dialog_common.js b/fckeditor/FCKeditor/editor/dialog/common/fck_dialog_common.js new file mode 100644 index 0000000..478d3d5 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/common/fck_dialog_common.js @@ -0,0 +1,347 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Useful functions used by almost all dialog window pages. + * Dialogs should link to this file as the very first script on the page. + */ + +// Automatically detect the correct document.domain (#123). +(function() +{ + var d = document.domain ; + + while ( true ) + { + // Test if we can access a parent property. + try + { + var test = window.parent.document.domain ; + break ; + } + catch( e ) {} + + // Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ... + d = d.replace( /.*?(?:\.|$)/, '' ) ; + + if ( d.length == 0 ) + break ; // It was not able to detect the domain. + + try + { + document.domain = d ; + } + catch (e) + { + break ; + } + } +})() ; + +// Attention: FCKConfig must be available in the page. +function GetCommonDialogCss( prefix ) +{ + // CSS minified by http://iceyboard.no-ip.org/projects/css_compressor (see _dev/css_compression.txt). + return FCKConfig.BasePath + 'dialog/common/' + '|.ImagePreviewArea{border:#000 1px solid;overflow:auto;width:100%;height:170px;background-color:#fff}.FlashPreviewArea{border:#000 1px solid;padding:5px;overflow:auto;width:100%;height:170px;background-color:#fff}.BtnReset{float:left;background-position:center center;background-image:url(images/reset.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.BtnLocked,.BtnUnlocked{float:left;background-position:center center;background-image:url(images/locked.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.BtnUnlocked{background-image:url(images/unlocked.gif)}.BtnOver{border:outset 1px;cursor:pointer;cursor:hand}' ; +} + +// Gets a element by its Id. Used for shorter coding. +function GetE( elementId ) +{ + return document.getElementById( elementId ) ; +} + +function ShowE( element, isVisible ) +{ + if ( typeof( element ) == 'string' ) + element = GetE( element ) ; + element.style.display = isVisible ? '' : 'none' ; +} + +function SetAttribute( element, attName, attValue ) +{ + if ( attValue == null || attValue.length == 0 ) + element.removeAttribute( attName, 0 ) ; // 0 : Case Insensitive + else + element.setAttribute( attName, attValue, 0 ) ; // 0 : Case Insensitive +} + +function GetAttribute( element, attName, valueIfNull ) +{ + var oAtt = element.attributes[attName] ; + + if ( oAtt == null || !oAtt.specified ) + return valueIfNull ? valueIfNull : '' ; + + var oValue = element.getAttribute( attName, 2 ) ; + + if ( oValue == null ) + oValue = oAtt.nodeValue ; + + return ( oValue == null ? valueIfNull : oValue ) ; +} + +function SelectField( elementId ) +{ + var element = GetE( elementId ) ; + element.focus() ; + + // element.select may not be available for some fields (like + + + + + + + + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_button.html b/fckeditor/FCKeditor/editor/dialog/fck_button.html new file mode 100644 index 0000000..9351013 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_button.html @@ -0,0 +1,104 @@ + + + + + Button Properties + + + + + + + + + + +
+ + + + + + + + + + +
+ Name
+ +
+ Text (Value)
+ +
+ Type
+ +
+
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_checkbox.html b/fckeditor/FCKeditor/editor/dialog/fck_checkbox.html new file mode 100644 index 0000000..624c7df --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_checkbox.html @@ -0,0 +1,104 @@ + + + + + Checkbox Properties + + + + + + + + + + +
+ + + + + + + + + + +
+ Name
+ +
+ Value
+ +
+
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_colorselector.html b/fckeditor/FCKeditor/editor/dialog/fck_colorselector.html new file mode 100644 index 0000000..0f2aaac --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_colorselector.html @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ Highlight +
+
 
+ Selected +
+ +
+ +
+
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_div.html b/fckeditor/FCKeditor/editor/dialog/fck_div.html new file mode 100644 index 0000000..524c66a --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_div.html @@ -0,0 +1,396 @@ + + + + + + + + + + + +
+ + + + + + + + + + + +
+ Style
+ +
  + Stylesheet Classes
+ +
+
+ + + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_docprops.html b/fckeditor/FCKeditor/editor/dialog/fck_docprops.html new file mode 100644 index 0000000..935580d --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_docprops.html @@ -0,0 +1,600 @@ + + + + + + + + + + + + + + + + + + +
+
+ Page Title
+ +
+ + + + + + +
+ Language Direction
+ +
+     + Language Code
+ +
+
+ + + + + + + + + + + + + + +
+ Character Set Encoding
+ +
+     + Other Character Set Encoding
+ +
+  
+ Document Type Heading
+ +
+ + Other Document Type Heading
+ +
+
+ + +
+ + + +
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_form.html b/fckeditor/FCKeditor/editor/dialog/fck_form.html new file mode 100644 index 0000000..0284527 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_form.html @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ Name
+ +
+ Action
+ +
+ Method
+ +
+
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_hiddenfield.html b/fckeditor/FCKeditor/editor/dialog/fck_hiddenfield.html new file mode 100644 index 0000000..f9bfb74 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_hiddenfield.html @@ -0,0 +1,115 @@ + + + + + Hidden Field Properties + + + + + + + + + + +
+ + + + + + + +
+ Name
+ +
+ Value
+ +
+
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_image.html b/fckeditor/FCKeditor/editor/dialog/fck_image.html new file mode 100644 index 0000000..fefe7a4 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_image.html @@ -0,0 +1,276 @@ + + + + + Image Properties + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + +
+ URL +
+ +
+
+ Short Description
+
+
+ + + + + + +
+
+ + + + + + + + + + + + +
+ Width  + +
+
+
+
+
+
+ Height  +
+
+ + + + +
+ Stylesheet Classes
+ +
+
+     + + + + + + + +
+ Preview
+ +
+
+
+
+ + + + + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_image/fck_image.js b/fckeditor/FCKeditor/editor/dialog/fck_image/fck_image.js new file mode 100644 index 0000000..c341faa --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_image/fck_image.js @@ -0,0 +1,512 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Scripts related to the Image dialog window (see fck_image.html). + */ + +var dialog = window.parent ; +var oEditor = dialog.InnerDialogLoaded() ; +var FCK = oEditor.FCK ; +var FCKLang = oEditor.FCKLang ; +var FCKConfig = oEditor.FCKConfig ; +var FCKDebug = oEditor.FCKDebug ; +var FCKTools = oEditor.FCKTools ; + +var bImageButton = ( document.location.search.length > 0 && document.location.search.substr(1) == 'ImageButton' ) ; + +//#### Dialog Tabs + +// Set the dialog tabs. +dialog.AddTab( 'Info', FCKLang.DlgImgInfoTab ) ; + +if ( !bImageButton && !FCKConfig.ImageDlgHideLink ) + dialog.AddTab( 'Link', FCKLang.DlgImgLinkTab ) ; + +if ( FCKConfig.ImageUpload ) + dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ; + +if ( !FCKConfig.ImageDlgHideAdvanced ) + dialog.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ; + +// Function called when a dialog tag is selected. +function OnDialogTabChange( tabCode ) +{ + ShowE('divInfo' , ( tabCode == 'Info' ) ) ; + ShowE('divLink' , ( tabCode == 'Link' ) ) ; + ShowE('divUpload' , ( tabCode == 'Upload' ) ) ; + ShowE('divAdvanced' , ( tabCode == 'Advanced' ) ) ; +} + +// Get the selected image (if available). +var oImage = dialog.Selection.GetSelectedElement() ; + +if ( oImage && oImage.tagName != 'IMG' && !( oImage.tagName == 'INPUT' && oImage.type == 'image' ) ) + oImage = null ; + +// Get the active link. +var oLink = dialog.Selection.GetSelection().MoveToAncestorNode( 'A' ) ; + +var oImageOriginal ; + +function UpdateOriginal( resetSize ) +{ + if ( !eImgPreview ) + return ; + + if ( GetE('txtUrl').value.length == 0 ) + { + oImageOriginal = null ; + return ; + } + + oImageOriginal = document.createElement( 'IMG' ) ; // new Image() ; + + if ( resetSize ) + { + oImageOriginal.onload = function() + { + this.onload = null ; + ResetSizes() ; + } + } + + oImageOriginal.src = eImgPreview.src ; +} + +var bPreviewInitialized ; + +window.onload = function() +{ + // Translate the dialog box texts. + oEditor.FCKLanguageManager.TranslatePage(document) ; + + GetE('btnLockSizes').title = FCKLang.DlgImgLockRatio ; + GetE('btnResetSize').title = FCKLang.DlgBtnResetSize ; + + // Load the selected element information (if any). + LoadSelection() ; + + // Show/Hide the "Browse Server" button. + GetE('tdBrowse').style.display = FCKConfig.ImageBrowser ? '' : 'none' ; + GetE('divLnkBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ; + + UpdateOriginal() ; + + // Set the actual uploader URL. + if ( FCKConfig.ImageUpload ) + GetE('frmUpload').action = FCKConfig.ImageUploadURL ; + + dialog.SetAutoSize( true ) ; + + // Activate the "OK" button. + dialog.SetOkButton( true ) ; + + SelectField( 'txtUrl' ) ; +} + +function LoadSelection() +{ + if ( ! oImage ) return ; + + var sUrl = oImage.getAttribute( '_fcksavedurl' ) ; + if ( sUrl == null ) + sUrl = GetAttribute( oImage, 'src', '' ) ; + + GetE('txtUrl').value = sUrl ; + GetE('txtAlt').value = GetAttribute( oImage, 'alt', '' ) ; + GetE('txtVSpace').value = GetAttribute( oImage, 'vspace', '' ) ; + GetE('txtHSpace').value = GetAttribute( oImage, 'hspace', '' ) ; + GetE('txtBorder').value = GetAttribute( oImage, 'border', '' ) ; + GetE('cmbAlign').value = GetAttribute( oImage, 'align', '' ) ; + + var iWidth, iHeight ; + + var regexSize = /^\s*(\d+)px\s*$/i ; + + if ( oImage.style.width ) + { + var aMatchW = oImage.style.width.match( regexSize ) ; + if ( aMatchW ) + { + iWidth = aMatchW[1] ; + oImage.style.width = '' ; + SetAttribute( oImage, 'width' , iWidth ) ; + } + } + + if ( oImage.style.height ) + { + var aMatchH = oImage.style.height.match( regexSize ) ; + if ( aMatchH ) + { + iHeight = aMatchH[1] ; + oImage.style.height = '' ; + SetAttribute( oImage, 'height', iHeight ) ; + } + } + + GetE('txtWidth').value = iWidth ? iWidth : GetAttribute( oImage, "width", '' ) ; + GetE('txtHeight').value = iHeight ? iHeight : GetAttribute( oImage, "height", '' ) ; + + // Get Advances Attributes + GetE('txtAttId').value = oImage.id ; + GetE('cmbAttLangDir').value = oImage.dir ; + GetE('txtAttLangCode').value = oImage.lang ; + GetE('txtAttTitle').value = oImage.title ; + GetE('txtLongDesc').value = oImage.longDesc ; + + if ( oEditor.FCKBrowserInfo.IsIE ) + { + GetE('txtAttClasses').value = oImage.className || '' ; + GetE('txtAttStyle').value = oImage.style.cssText ; + } + else + { + GetE('txtAttClasses').value = oImage.getAttribute('class',2) || '' ; + GetE('txtAttStyle').value = oImage.getAttribute('style',2) ; + } + + if ( oLink ) + { + var sLinkUrl = oLink.getAttribute( '_fcksavedurl' ) ; + if ( sLinkUrl == null ) + sLinkUrl = oLink.getAttribute('href',2) ; + + GetE('txtLnkUrl').value = sLinkUrl ; + GetE('cmbLnkTarget').value = oLink.target ; + } + + UpdatePreview() ; +} + +//#### The OK button was hit. +function Ok() +{ + if ( GetE('txtUrl').value.length == 0 ) + { + dialog.SetSelectedTab( 'Info' ) ; + GetE('txtUrl').focus() ; + + alert( FCKLang.DlgImgAlertUrl ) ; + + return false ; + } + + var bHasImage = ( oImage != null ) ; + + if ( bHasImage && bImageButton && oImage.tagName == 'IMG' ) + { + if ( confirm( 'Do you want to transform the selected image on a image button?' ) ) + oImage = null ; + } + else if ( bHasImage && !bImageButton && oImage.tagName == 'INPUT' ) + { + if ( confirm( 'Do you want to transform the selected image button on a simple image?' ) ) + oImage = null ; + } + + oEditor.FCKUndo.SaveUndoStep() ; + if ( !bHasImage ) + { + if ( bImageButton ) + { + oImage = FCK.EditorDocument.createElement( 'input' ) ; + oImage.type = 'image' ; + oImage = FCK.InsertElement( oImage ) ; + } + else + oImage = FCK.InsertElement( 'img' ) ; + } + + UpdateImage( oImage ) ; + + var sLnkUrl = GetE('txtLnkUrl').value.Trim() ; + + if ( sLnkUrl.length == 0 ) + { + if ( oLink ) + FCK.ExecuteNamedCommand( 'Unlink' ) ; + } + else + { + if ( oLink ) // Modifying an existent link. + oLink.href = sLnkUrl ; + else // Creating a new link. + { + if ( !bHasImage ) + oEditor.FCKSelection.SelectNode( oImage ) ; + + oLink = oEditor.FCK.CreateLink( sLnkUrl )[0] ; + + if ( !bHasImage ) + { + oEditor.FCKSelection.SelectNode( oLink ) ; + oEditor.FCKSelection.Collapse( false ) ; + } + } + + SetAttribute( oLink, '_fcksavedurl', sLnkUrl ) ; + SetAttribute( oLink, 'target', GetE('cmbLnkTarget').value ) ; + } + + return true ; +} + +function UpdateImage( e, skipId ) +{ + e.src = GetE('txtUrl').value ; + SetAttribute( e, "_fcksavedurl", GetE('txtUrl').value ) ; + SetAttribute( e, "alt" , GetE('txtAlt').value ) ; + SetAttribute( e, "width" , GetE('txtWidth').value ) ; + SetAttribute( e, "height", GetE('txtHeight').value ) ; + SetAttribute( e, "vspace", GetE('txtVSpace').value ) ; + SetAttribute( e, "hspace", GetE('txtHSpace').value ) ; + SetAttribute( e, "border", GetE('txtBorder').value ) ; + SetAttribute( e, "align" , GetE('cmbAlign').value ) ; + + // Advances Attributes + + if ( ! skipId ) + SetAttribute( e, 'id', GetE('txtAttId').value ) ; + + SetAttribute( e, 'dir' , GetE('cmbAttLangDir').value ) ; + SetAttribute( e, 'lang' , GetE('txtAttLangCode').value ) ; + SetAttribute( e, 'title' , GetE('txtAttTitle').value ) ; + SetAttribute( e, 'longDesc' , GetE('txtLongDesc').value ) ; + + if ( oEditor.FCKBrowserInfo.IsIE ) + { + e.className = GetE('txtAttClasses').value ; + e.style.cssText = GetE('txtAttStyle').value ; + } + else + { + SetAttribute( e, 'class' , GetE('txtAttClasses').value ) ; + SetAttribute( e, 'style', GetE('txtAttStyle').value ) ; + } +} + +var eImgPreview ; +var eImgPreviewLink ; + +function SetPreviewElements( imageElement, linkElement ) +{ + eImgPreview = imageElement ; + eImgPreviewLink = linkElement ; + + UpdatePreview() ; + UpdateOriginal() ; + + bPreviewInitialized = true ; +} + +function UpdatePreview() +{ + if ( !eImgPreview || !eImgPreviewLink ) + return ; + + if ( GetE('txtUrl').value.length == 0 ) + eImgPreviewLink.style.display = 'none' ; + else + { + UpdateImage( eImgPreview, true ) ; + + if ( GetE('txtLnkUrl').value.Trim().length > 0 ) + eImgPreviewLink.href = 'javascript:void(null);' ; + else + SetAttribute( eImgPreviewLink, 'href', '' ) ; + + eImgPreviewLink.style.display = '' ; + } +} + +var bLockRatio = true ; + +function SwitchLock( lockButton ) +{ + bLockRatio = !bLockRatio ; + lockButton.className = bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ; + lockButton.title = bLockRatio ? 'Lock sizes' : 'Unlock sizes' ; + + if ( bLockRatio ) + { + if ( GetE('txtWidth').value.length > 0 ) + OnSizeChanged( 'Width', GetE('txtWidth').value ) ; + else + OnSizeChanged( 'Height', GetE('txtHeight').value ) ; + } +} + +// Fired when the width or height input texts change +function OnSizeChanged( dimension, value ) +{ + // Verifies if the aspect ration has to be maintained + if ( oImageOriginal && bLockRatio ) + { + var e = dimension == 'Width' ? GetE('txtHeight') : GetE('txtWidth') ; + + if ( value.length == 0 || isNaN( value ) ) + { + e.value = '' ; + return ; + } + + if ( dimension == 'Width' ) + value = value == 0 ? 0 : Math.round( oImageOriginal.height * ( value / oImageOriginal.width ) ) ; + else + value = value == 0 ? 0 : Math.round( oImageOriginal.width * ( value / oImageOriginal.height ) ) ; + + if ( !isNaN( value ) ) + e.value = value ; + } + + UpdatePreview() ; +} + +// Fired when the Reset Size button is clicked +function ResetSizes() +{ + if ( ! oImageOriginal ) return ; + if ( oEditor.FCKBrowserInfo.IsGecko && !oImageOriginal.complete ) + { + setTimeout( ResetSizes, 50 ) ; + return ; + } + + GetE('txtWidth').value = oImageOriginal.width ; + GetE('txtHeight').value = oImageOriginal.height ; + + UpdatePreview() ; +} + +function BrowseServer() +{ + OpenServerBrowser( + 'Image', + FCKConfig.ImageBrowserURL, + FCKConfig.ImageBrowserWindowWidth, + FCKConfig.ImageBrowserWindowHeight ) ; +} + +function LnkBrowseServer() +{ + OpenServerBrowser( + 'Link', + FCKConfig.LinkBrowserURL, + FCKConfig.LinkBrowserWindowWidth, + FCKConfig.LinkBrowserWindowHeight ) ; +} + +function OpenServerBrowser( type, url, width, height ) +{ + sActualBrowser = type ; + OpenFileBrowser( url, width, height ) ; +} + +var sActualBrowser ; + +function SetUrl( url, width, height, alt ) +{ + if ( sActualBrowser == 'Link' ) + { + GetE('txtLnkUrl').value = url ; + UpdatePreview() ; + } + else + { + GetE('txtUrl').value = url ; + GetE('txtWidth').value = width ? width : '' ; + GetE('txtHeight').value = height ? height : '' ; + + if ( alt ) + GetE('txtAlt').value = alt; + + UpdatePreview() ; + UpdateOriginal( true ) ; + } + + dialog.SetSelectedTab( 'Info' ) ; +} + +function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg ) +{ + // Remove animation + window.parent.Throbber.Hide() ; + GetE( 'divUpload' ).style.display = '' ; + + switch ( errorNumber ) + { + case 0 : // No errors + alert( 'Your file has been successfully uploaded' ) ; + break ; + case 1 : // Custom error + alert( customMsg ) ; + return ; + case 101 : // Custom warning + alert( customMsg ) ; + break ; + case 201 : + alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ; + break ; + case 202 : + alert( 'Invalid file type' ) ; + return ; + case 203 : + alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ; + return ; + case 500 : + alert( 'The connector is disabled' ) ; + break ; + default : + alert( 'Error on file upload. Error number: ' + errorNumber ) ; + return ; + } + + sActualBrowser = '' ; + SetUrl( fileUrl ) ; + GetE('frmUpload').reset() ; +} + +var oUploadAllowedExtRegex = new RegExp( FCKConfig.ImageUploadAllowedExtensions, 'i' ) ; +var oUploadDeniedExtRegex = new RegExp( FCKConfig.ImageUploadDeniedExtensions, 'i' ) ; + +function CheckUpload() +{ + var sFile = GetE('txtUploadFile').value ; + + if ( sFile.length == 0 ) + { + alert( 'Please select a file to upload' ) ; + return false ; + } + + if ( ( FCKConfig.ImageUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) || + ( FCKConfig.ImageUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) ) + { + OnUploadCompleted( 202 ) ; + return false ; + } + + // Show animation + window.parent.Throbber.Show( 100 ) ; + GetE( 'divUpload' ).style.display = 'none' ; + + return true ; +} diff --git a/fckeditor/FCKeditor/editor/dialog/fck_image/fck_image_preview.html b/fckeditor/FCKeditor/editor/dialog/fck_image/fck_image_preview.html new file mode 100644 index 0000000..db0d2e0 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_image/fck_image_preview.html @@ -0,0 +1,72 @@ + + + + + + + + + + + +
+ + Lorem ipsum dolor sit amet, consectetuer adipiscing + elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus + a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis, + nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed + velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper + nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices + a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus + faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget + tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, + tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis + id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, + eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur + ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris. +
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_link.html b/fckeditor/FCKeditor/editor/dialog/fck_link.html new file mode 100644 index 0000000..ddc930c --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_link.html @@ -0,0 +1,295 @@ + + + + + Link Properties + + + + + + + + + + + + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_link/fck_link.js b/fckeditor/FCKeditor/editor/dialog/fck_link/fck_link.js new file mode 100644 index 0000000..c31c0c4 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_link/fck_link.js @@ -0,0 +1,893 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Scripts related to the Link dialog window (see fck_link.html). + */ + +var dialog = window.parent ; +var oEditor = dialog.InnerDialogLoaded() ; + +var FCK = oEditor.FCK ; +var FCKLang = oEditor.FCKLang ; +var FCKConfig = oEditor.FCKConfig ; +var FCKRegexLib = oEditor.FCKRegexLib ; +var FCKTools = oEditor.FCKTools ; + +//#### Dialog Tabs + +// Set the dialog tabs. +dialog.AddTab( 'Info', FCKLang.DlgLnkInfoTab ) ; + +if ( !FCKConfig.LinkDlgHideTarget ) + dialog.AddTab( 'Target', FCKLang.DlgLnkTargetTab, true ) ; + +if ( FCKConfig.LinkUpload ) + dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload, true ) ; + +if ( !FCKConfig.LinkDlgHideAdvanced ) + dialog.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ; + +// Function called when a dialog tag is selected. +function OnDialogTabChange( tabCode ) +{ + ShowE('divInfo' , ( tabCode == 'Info' ) ) ; + ShowE('divTarget' , ( tabCode == 'Target' ) ) ; + ShowE('divUpload' , ( tabCode == 'Upload' ) ) ; + ShowE('divAttribs' , ( tabCode == 'Advanced' ) ) ; + + dialog.SetAutoSize( true ) ; +} + +//#### Regular Expressions library. +var oRegex = new Object() ; + +oRegex.UriProtocol = /^(((http|https|ftp|news):\/\/)|mailto:)/gi ; + +oRegex.UrlOnChangeProtocol = /^(http|https|ftp|news):\/\/(?=.)/gi ; + +oRegex.UrlOnChangeTestOther = /^((javascript:)|[#\/\.])/gi ; + +oRegex.ReserveTarget = /^_(blank|self|top|parent)$/i ; + +oRegex.PopupUri = /^javascript:void\(\s*window.open\(\s*'([^']+)'\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*\)\s*$/ ; + +// Accessible popups +oRegex.OnClickPopup = /^\s*on[cC]lick="\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*"$/ ; + +oRegex.PopupFeatures = /(?:^|,)([^=]+)=(\d+|yes|no)/gi ; + +//#### Parser Functions + +var oParser = new Object() ; + +// This method simply returns the two inputs in numerical order. You can even +// provide strings, as the method would parseInt() the values. +oParser.SortNumerical = function(a, b) +{ + return parseInt( a, 10 ) - parseInt( b, 10 ) ; +} + +oParser.ParseEMailParams = function(sParams) +{ + // Initialize the oEMailParams object. + var oEMailParams = new Object() ; + oEMailParams.Subject = '' ; + oEMailParams.Body = '' ; + + var aMatch = sParams.match( /(^|^\?|&)subject=([^&]+)/i ) ; + if ( aMatch ) oEMailParams.Subject = decodeURIComponent( aMatch[2] ) ; + + aMatch = sParams.match( /(^|^\?|&)body=([^&]+)/i ) ; + if ( aMatch ) oEMailParams.Body = decodeURIComponent( aMatch[2] ) ; + + return oEMailParams ; +} + +// This method returns either an object containing the email info, or FALSE +// if the parameter is not an email link. +oParser.ParseEMailUri = function( sUrl ) +{ + // Initializes the EMailInfo object. + var oEMailInfo = new Object() ; + oEMailInfo.Address = '' ; + oEMailInfo.Subject = '' ; + oEMailInfo.Body = '' ; + + var aLinkInfo = sUrl.match( /^(\w+):(.*)$/ ) ; + if ( aLinkInfo && aLinkInfo[1] == 'mailto' ) + { + // This seems to be an unprotected email link. + var aParts = aLinkInfo[2].match( /^([^\?]+)\??(.+)?/ ) ; + if ( aParts ) + { + // Set the e-mail address. + oEMailInfo.Address = aParts[1] ; + + // Look for the optional e-mail parameters. + if ( aParts[2] ) + { + var oEMailParams = oParser.ParseEMailParams( aParts[2] ) ; + oEMailInfo.Subject = oEMailParams.Subject ; + oEMailInfo.Body = oEMailParams.Body ; + } + } + return oEMailInfo ; + } + else if ( aLinkInfo && aLinkInfo[1] == 'javascript' ) + { + // This may be a protected email. + + // Try to match the url against the EMailProtectionFunction. + var func = FCKConfig.EMailProtectionFunction ; + if ( func != null ) + { + try + { + // Escape special chars. + func = func.replace( /([\/^$*+.?()\[\]])/g, '\\$1' ) ; + + // Define the possible keys. + var keys = new Array('NAME', 'DOMAIN', 'SUBJECT', 'BODY') ; + + // Get the order of the keys (hold them in the array ) and + // the function replaced by regular expression patterns. + var sFunc = func ; + var pos = new Array() ; + for ( var i = 0 ; i < keys.length ; i ++ ) + { + var rexp = new RegExp( keys[i] ) ; + var p = func.search( rexp ) ; + if ( p >= 0 ) + { + sFunc = sFunc.replace( rexp, '\'([^\']*)\'' ) ; + pos[pos.length] = p + ':' + keys[i] ; + } + } + + // Sort the available keys. + pos.sort( oParser.SortNumerical ) ; + + // Replace the excaped single quotes in the url, such they do + // not affect the regexp afterwards. + aLinkInfo[2] = aLinkInfo[2].replace( /\\'/g, '###SINGLE_QUOTE###' ) ; + + // Create the regexp and execute it. + var rFunc = new RegExp( '^' + sFunc + '$' ) ; + var aMatch = rFunc.exec( aLinkInfo[2] ) ; + if ( aMatch ) + { + var aInfo = new Array(); + for ( var i = 1 ; i < aMatch.length ; i ++ ) + { + var k = pos[i-1].match(/^\d+:(.+)$/) ; + aInfo[k[1]] = aMatch[i].replace(/###SINGLE_QUOTE###/g, '\'') ; + } + + // Fill the EMailInfo object that will be returned + oEMailInfo.Address = aInfo['NAME'] + '@' + aInfo['DOMAIN'] ; + oEMailInfo.Subject = decodeURIComponent( aInfo['SUBJECT'] ) ; + oEMailInfo.Body = decodeURIComponent( aInfo['BODY'] ) ; + + return oEMailInfo ; + } + } + catch (e) + { + } + } + + // Try to match the email against the encode protection. + var aMatch = aLinkInfo[2].match( /^(?:void\()?location\.href='mailto:'\+(String\.fromCharCode\([\d,]+\))\+'(.*)'\)?$/ ) ; + if ( aMatch ) + { + // The link is encoded + oEMailInfo.Address = eval( aMatch[1] ) ; + if ( aMatch[2] ) + { + var oEMailParams = oParser.ParseEMailParams( aMatch[2] ) ; + oEMailInfo.Subject = oEMailParams.Subject ; + oEMailInfo.Body = oEMailParams.Body ; + } + return oEMailInfo ; + } + } + return false; +} + +oParser.CreateEMailUri = function( address, subject, body ) +{ + // Switch for the EMailProtection setting. + switch ( FCKConfig.EMailProtection ) + { + case 'function' : + var func = FCKConfig.EMailProtectionFunction ; + if ( func == null ) + { + if ( FCKConfig.Debug ) + { + alert('EMailProtection alert!\nNo function defined. Please set "FCKConfig.EMailProtectionFunction"') ; + } + return ''; + } + + // Split the email address into name and domain parts. + var aAddressParts = address.split( '@', 2 ) ; + if ( aAddressParts[1] == undefined ) + { + aAddressParts[1] = '' ; + } + + // Replace the keys by their values (embedded in single quotes). + func = func.replace(/NAME/g, "'" + aAddressParts[0].replace(/'/g, '\\\'') + "'") ; + func = func.replace(/DOMAIN/g, "'" + aAddressParts[1].replace(/'/g, '\\\'') + "'") ; + func = func.replace(/SUBJECT/g, "'" + encodeURIComponent( subject ).replace(/'/g, '\\\'') + "'") ; + func = func.replace(/BODY/g, "'" + encodeURIComponent( body ).replace(/'/g, '\\\'') + "'") ; + + return 'javascript:' + func ; + + case 'encode' : + var aParams = [] ; + var aAddressCode = [] ; + + if ( subject.length > 0 ) + aParams.push( 'subject='+ encodeURIComponent( subject ) ) ; + if ( body.length > 0 ) + aParams.push( 'body=' + encodeURIComponent( body ) ) ; + for ( var i = 0 ; i < address.length ; i++ ) + aAddressCode.push( address.charCodeAt( i ) ) ; + + return 'javascript:void(location.href=\'mailto:\'+String.fromCharCode(' + aAddressCode.join( ',' ) + ')+\'?' + aParams.join( '&' ) + '\')' ; + } + + // EMailProtection 'none' + + var sBaseUri = 'mailto:' + address ; + + var sParams = '' ; + + if ( subject.length > 0 ) + sParams = '?subject=' + encodeURIComponent( subject ) ; + + if ( body.length > 0 ) + { + sParams += ( sParams.length == 0 ? '?' : '&' ) ; + sParams += 'body=' + encodeURIComponent( body ) ; + } + + return sBaseUri + sParams ; +} + +//#### Initialization Code + +// oLink: The actual selected link in the editor. +var oLink = dialog.Selection.GetSelection().MoveToAncestorNode( 'A' ) ; +if ( oLink ) + FCK.Selection.SelectNode( oLink ) ; + +window.onload = function() +{ + // Translate the dialog box texts. + oEditor.FCKLanguageManager.TranslatePage(document) ; + + // Fill the Anchor Names and Ids combos. + LoadAnchorNamesAndIds() ; + + // Load the selected link information (if any). + LoadSelection() ; + + // Update the dialog box. + SetfindLinkType( GetE('cmbfindLinkType').value ) ; + + // Show/Hide the "Browse Server" button. + GetE('divBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ; + + // Show the initial dialog content. + GetE('divInfo').style.display = '' ; + + // Set the actual uploader URL. + if ( FCKConfig.LinkUpload ) + GetE('frmUpload').action = FCKConfig.LinkUploadURL ; + + // Set the default target (from configuration). + SetDefaultTarget() ; + + // Activate the "OK" button. + dialog.SetOkButton( true ) ; + + // Select the first field. + switch( GetE('cmbfindLinkType').value ) + { + case 'url' : + SelectField( 'txtUrl' ) ; + break ; + case 'email' : + SelectField( 'txtEMailAddress' ) ; + break ; + case 'anchor' : + if ( GetE('divSelAnchor').style.display != 'none' ) + SelectField( 'cmbAnchorName' ) ; + else + SelectField( 'cmbfindLinkType' ) ; + } +} + +var bHasAnchors ; + +function LoadAnchorNamesAndIds() +{ + // Since version 2.0, the anchors are replaced in the DOM by IMGs so the user see the icon + // to edit them. So, we must look for that images now. + var aAnchors = new Array() ; + var i ; + var oImages = oEditor.FCK.EditorDocument.getElementsByTagName( 'IMG' ) ; + for( i = 0 ; i < oImages.length ; i++ ) + { + if ( oImages[i].getAttribute('_fckanchor') ) + aAnchors[ aAnchors.length ] = oEditor.FCK.GetRealElement( oImages[i] ) ; + } + + // Add also real anchors + var oLinks = oEditor.FCK.EditorDocument.getElementsByTagName( 'A' ) ; + for( i = 0 ; i < oLinks.length ; i++ ) + { + if ( oLinks[i].name && ( oLinks[i].name.length > 0 ) ) + aAnchors[ aAnchors.length ] = oLinks[i] ; + } + + var aIds = FCKTools.GetAllChildrenIds( oEditor.FCK.EditorDocument.body ) ; + + bHasAnchors = ( aAnchors.length > 0 || aIds.length > 0 ) ; + + for ( i = 0 ; i < aAnchors.length ; i++ ) + { + var sName = aAnchors[i].name ; + if ( sName && sName.length > 0 ) + FCKTools.AddSelectOption( GetE('cmbAnchorName'), sName, sName ) ; + } + + for ( i = 0 ; i < aIds.length ; i++ ) + { + FCKTools.AddSelectOption( GetE('cmbAnchorId'), aIds[i], aIds[i] ) ; + } + + ShowE( 'divSelAnchor' , bHasAnchors ) ; + ShowE( 'divNoAnchor' , !bHasAnchors ) ; +} + +function LoadSelection() +{ + if ( !oLink ) return ; + + var sType = 'url' ; + + // Get the actual Link href. + var sHRef = oLink.getAttribute( '_fcksavedurl' ) ; + if ( sHRef == null ) + sHRef = oLink.getAttribute( 'href' , 2 ) || '' ; + + // Look for a popup javascript link. + var oPopupMatch = oRegex.PopupUri.exec( sHRef ) ; + if( oPopupMatch ) + { + GetE('cmbTarget').value = 'popup' ; + sHRef = oPopupMatch[1] ; + FillPopupFields( oPopupMatch[2], oPopupMatch[3] ) ; + SetTarget( 'popup' ) ; + } + + // Accessible popups, the popup data is in the onclick attribute + if ( !oPopupMatch ) + { + var onclick = oLink.getAttribute( 'onclick_fckprotectedatt' ) ; + if ( onclick ) + { + // Decode the protected string + onclick = decodeURIComponent( onclick ) ; + + oPopupMatch = oRegex.OnClickPopup.exec( onclick ) ; + if( oPopupMatch ) + { + GetE( 'cmbTarget' ).value = 'popup' ; + FillPopupFields( oPopupMatch[1], oPopupMatch[2] ) ; + SetTarget( 'popup' ) ; + } + } + } + + // Search for the protocol. + var sProtocol = oRegex.UriProtocol.exec( sHRef ) ; + + // Search for a protected email link. + var oEMailInfo = oParser.ParseEMailUri( sHRef ); + + if ( oEMailInfo ) + { + sType = 'email' ; + + GetE('txtEMailAddress').value = oEMailInfo.Address ; + GetE('txtEMailSubject').value = oEMailInfo.Subject ; + GetE('txtEMailBody').value = oEMailInfo.Body ; + } + else if ( sProtocol ) + { + sProtocol = sProtocol[0].toLowerCase() ; + GetE('cmbLinkProtocol').value = sProtocol ; + + // Remove the protocol and get the remaining URL. + var sUrl = sHRef.replace( oRegex.UriProtocol, '' ) ; + sType = 'url' ; + GetE('txtUrl').value = sUrl ; + } + else if ( sHRef.substr(0,1) == '#' && sHRef.length > 1 ) // It is an anchor link. + { + sType = 'anchor' ; + GetE('cmbAnchorName').value = GetE('cmbAnchorId').value = sHRef.substr(1) ; + } + else // It is another type of link. + { + sType = 'url' ; + + GetE('cmbLinkProtocol').value = '' ; + GetE('txtUrl').value = sHRef ; + } + + if ( !oPopupMatch ) + { + // Get the target. + var sTarget = oLink.target ; + + if ( sTarget && sTarget.length > 0 ) + { + if ( oRegex.ReserveTarget.test( sTarget ) ) + { + sTarget = sTarget.toLowerCase() ; + GetE('cmbTarget').value = sTarget ; + } + else + GetE('cmbTarget').value = 'frame' ; + GetE('txtTargetFrame').value = sTarget ; + } + } + + // Get Advances Attributes + GetE('txtAttId').value = oLink.id ; + GetE('txtAttName').value = oLink.name ; + GetE('cmbAttLangDir').value = oLink.dir ; + GetE('txtAttLangCode').value = oLink.lang ; + GetE('txtAttAccessKey').value = oLink.accessKey ; + GetE('txtAttTabIndex').value = oLink.tabIndex <= 0 ? '' : oLink.tabIndex ; + GetE('txtAttTitle').value = oLink.title ; + GetE('txtAttContentType').value = oLink.type ; + GetE('txtAttCharSet').value = oLink.charset ; + + var sClass ; + if ( oEditor.FCKBrowserInfo.IsIE ) + { + sClass = oLink.getAttribute('className',2) || '' ; + // Clean up temporary classes for internal use: + sClass = sClass.replace( FCKRegexLib.FCK_Class, '' ) ; + + GetE('txtAttStyle').value = oLink.style.cssText ; + } + else + { + sClass = oLink.getAttribute('class',2) || '' ; + GetE('txtAttStyle').value = oLink.getAttribute('style',2) || '' ; + } + GetE('txtAttClasses').value = sClass ; + + // Update the Link type combo. + GetE('cmbfindLinkType').value = sType ; +} + +//#### Link type selection. +function SetfindLinkType( linkType ) +{ + ShowE('divfindLinkTypeUrl' , (linkType == 'url') ) ; + ShowE('divfindLinkTypeAnchor' , (linkType == 'anchor') ) ; + ShowE('divfindLinkTypeEMail' , (linkType == 'email') ) ; + + if ( !FCKConfig.LinkDlgHideTarget ) + dialog.SetTabVisibility( 'Target' , (linkType == 'url') ) ; + + if ( FCKConfig.LinkUpload ) + dialog.SetTabVisibility( 'Upload' , (linkType == 'url') ) ; + + if ( !FCKConfig.LinkDlgHideAdvanced ) + dialog.SetTabVisibility( 'Advanced' , (linkType != 'anchor' || bHasAnchors) ) ; + + if ( linkType == 'email' ) + dialog.SetAutoSize( true ) ; +} + +//#### Target type selection. +function SetTarget( targetType ) +{ + GetE('tdTargetFrame').style.display = ( targetType == 'popup' ? 'none' : '' ) ; + GetE('tdPopupName').style.display = + GetE('tablePopupFeatures').style.display = ( targetType == 'popup' ? '' : 'none' ) ; + + switch ( targetType ) + { + case "_blank" : + case "_self" : + case "_parent" : + case "_top" : + GetE('txtTargetFrame').value = targetType ; + break ; + case "" : + GetE('txtTargetFrame').value = '' ; + break ; + } + + if ( targetType == 'popup' ) + dialog.SetAutoSize( true ) ; +} + +//#### Called while the user types the URL. +function OnUrlChange() +{ + var sUrl = GetE('txtUrl').value ; + var sProtocol = oRegex.UrlOnChangeProtocol.exec( sUrl ) ; + + if ( sProtocol ) + { + sUrl = sUrl.substr( sProtocol[0].length ) ; + GetE('txtUrl').value = sUrl ; + GetE('cmbLinkProtocol').value = sProtocol[0].toLowerCase() ; + } + else if ( oRegex.UrlOnChangeTestOther.test( sUrl ) ) + { + GetE('cmbLinkProtocol').value = '' ; + } +} + +//#### Called while the user types the target name. +function OnTargetNameChange() +{ + var sFrame = GetE('txtTargetFrame').value ; + + if ( sFrame.length == 0 ) + GetE('cmbTarget').value = '' ; + else if ( oRegex.ReserveTarget.test( sFrame ) ) + GetE('cmbTarget').value = sFrame.toLowerCase() ; + else + GetE('cmbTarget').value = 'frame' ; +} + +// Accessible popups +function BuildOnClickPopup() +{ + var sWindowName = "'" + GetE('txtPopupName').value.replace(/\W/gi, "") + "'" ; + + var sFeatures = '' ; + var aChkFeatures = document.getElementsByName( 'chkFeature' ) ; + for ( var i = 0 ; i < aChkFeatures.length ; i++ ) + { + if ( i > 0 ) sFeatures += ',' ; + sFeatures += aChkFeatures[i].value + '=' + ( aChkFeatures[i].checked ? 'yes' : 'no' ) ; + } + + if ( GetE('txtPopupWidth').value.length > 0 ) sFeatures += ',width=' + GetE('txtPopupWidth').value ; + if ( GetE('txtPopupHeight').value.length > 0 ) sFeatures += ',height=' + GetE('txtPopupHeight').value ; + if ( GetE('txtPopupLeft').value.length > 0 ) sFeatures += ',left=' + GetE('txtPopupLeft').value ; + if ( GetE('txtPopupTop').value.length > 0 ) sFeatures += ',top=' + GetE('txtPopupTop').value ; + + if ( sFeatures != '' ) + sFeatures = sFeatures + ",status" ; + + return ( "window.open(this.href," + sWindowName + ",'" + sFeatures + "'); return false" ) ; +} + +//#### Fills all Popup related fields. +function FillPopupFields( windowName, features ) +{ + if ( windowName ) + GetE('txtPopupName').value = windowName ; + + var oFeatures = new Object() ; + var oFeaturesMatch ; + while( ( oFeaturesMatch = oRegex.PopupFeatures.exec( features ) ) != null ) + { + var sValue = oFeaturesMatch[2] ; + if ( sValue == ( 'yes' || '1' ) ) + oFeatures[ oFeaturesMatch[1] ] = true ; + else if ( ! isNaN( sValue ) && sValue != 0 ) + oFeatures[ oFeaturesMatch[1] ] = sValue ; + } + + // Update all features check boxes. + var aChkFeatures = document.getElementsByName('chkFeature') ; + for ( var i = 0 ; i < aChkFeatures.length ; i++ ) + { + if ( oFeatures[ aChkFeatures[i].value ] ) + aChkFeatures[i].checked = true ; + } + + // Update position and size text boxes. + if ( oFeatures['width'] ) GetE('txtPopupWidth').value = oFeatures['width'] ; + if ( oFeatures['height'] ) GetE('txtPopupHeight').value = oFeatures['height'] ; + if ( oFeatures['left'] ) GetE('txtPopupLeft').value = oFeatures['left'] ; + if ( oFeatures['top'] ) GetE('txtPopupTop').value = oFeatures['top'] ; +} + +//#### The OK button was hit. +function Ok() +{ + var sUri, sInnerHtml ; + oEditor.FCKUndo.SaveUndoStep() ; + + switch ( GetE('cmbfindLinkType').value ) + { + case 'url' : + sUri = GetE('txtUrl').value ; + + if ( sUri.length == 0 ) + { + alert( FCKLang.DlnLnkMsgNoUrl ) ; + return false ; + } + + sUri = GetE('cmbLinkProtocol').value + sUri ; + + break ; + + case 'email' : + sUri = GetE('txtEMailAddress').value ; + + if ( sUri.length == 0 ) + { + alert( FCKLang.DlnLnkMsgNoEMail ) ; + return false ; + } + + sUri = oParser.CreateEMailUri( + sUri, + GetE('txtEMailSubject').value, + GetE('txtEMailBody').value ) ; + break ; + + case 'anchor' : + var sAnchor = GetE('cmbAnchorName').value ; + if ( sAnchor.length == 0 ) sAnchor = GetE('cmbAnchorId').value ; + + if ( sAnchor.length == 0 ) + { + alert( FCKLang.DlnLnkMsgNoAnchor ) ; + return false ; + } + + sUri = '#' + sAnchor ; + break ; + } + + // If no link is selected, create a new one (it may result in more than one link creation - #220). + var aLinks = oLink ? [ oLink ] : oEditor.FCK.CreateLink( sUri, true ) ; + + // If no selection, no links are created, so use the uri as the link text (by dom, 2006-05-26) + var aHasSelection = ( aLinks.length > 0 ) ; + if ( !aHasSelection ) + { + sInnerHtml = sUri; + + // Built a better text for empty links. + switch ( GetE('cmbfindLinkType').value ) + { + // anchor: use old behavior --> return true + case 'anchor': + sInnerHtml = sInnerHtml.replace( /^#/, '' ) ; + break ; + + // url: try to get path + case 'url': + var oLinkPathRegEx = new RegExp("//?([^?\"']+)([?].*)?$") ; + var asLinkPath = oLinkPathRegEx.exec( sUri ) ; + if (asLinkPath != null) + sInnerHtml = asLinkPath[1]; // use matched path + break ; + + // mailto: try to get email address + case 'email': + sInnerHtml = GetE('txtEMailAddress').value ; + break ; + } + + // Create a new (empty) anchor. + aLinks = [ oEditor.FCK.InsertElement( 'a' ) ] ; + } + + for ( var i = 0 ; i < aLinks.length ; i++ ) + { + oLink = aLinks[i] ; + + if ( aHasSelection ) + sInnerHtml = oLink.innerHTML ; // Save the innerHTML (IE changes it if it is like an URL). + + oLink.href = sUri ; + SetAttribute( oLink, '_fcksavedurl', sUri ) ; + + var onclick; + // Accessible popups + if( GetE('cmbTarget').value == 'popup' ) + { + onclick = BuildOnClickPopup() ; + // Encode the attribute + onclick = encodeURIComponent( " onclick=\"" + onclick + "\"" ) ; + SetAttribute( oLink, 'onclick_fckprotectedatt', onclick ) ; + } + else + { + // Check if the previous onclick was for a popup: + // In that case remove the onclick handler. + onclick = oLink.getAttribute( 'onclick_fckprotectedatt' ) ; + if ( onclick ) + { + // Decode the protected string + onclick = decodeURIComponent( onclick ) ; + + if( oRegex.OnClickPopup.test( onclick ) ) + SetAttribute( oLink, 'onclick_fckprotectedatt', '' ) ; + } + } + + oLink.innerHTML = sInnerHtml ; // Set (or restore) the innerHTML + + // Target + if( GetE('cmbTarget').value != 'popup' ) + SetAttribute( oLink, 'target', GetE('txtTargetFrame').value ) ; + else + SetAttribute( oLink, 'target', null ) ; + + // Let's set the "id" only for the first link to avoid duplication. + if ( i == 0 ) + SetAttribute( oLink, 'id', GetE('txtAttId').value ) ; + + // Advances Attributes + SetAttribute( oLink, 'name' , GetE('txtAttName').value ) ; + SetAttribute( oLink, 'dir' , GetE('cmbAttLangDir').value ) ; + SetAttribute( oLink, 'lang' , GetE('txtAttLangCode').value ) ; + SetAttribute( oLink, 'accesskey', GetE('txtAttAccessKey').value ) ; + SetAttribute( oLink, 'tabindex' , ( GetE('txtAttTabIndex').value > 0 ? GetE('txtAttTabIndex').value : null ) ) ; + SetAttribute( oLink, 'title' , GetE('txtAttTitle').value ) ; + SetAttribute( oLink, 'type' , GetE('txtAttContentType').value ) ; + SetAttribute( oLink, 'charset' , GetE('txtAttCharSet').value ) ; + + if ( oEditor.FCKBrowserInfo.IsIE ) + { + var sClass = GetE('txtAttClasses').value ; + // If it's also an anchor add an internal class + if ( GetE('txtAttName').value.length != 0 ) + sClass += ' FCK__AnchorC' ; + SetAttribute( oLink, 'className', sClass ) ; + + oLink.style.cssText = GetE('txtAttStyle').value ; + } + else + { + SetAttribute( oLink, 'class', GetE('txtAttClasses').value ) ; + SetAttribute( oLink, 'style', GetE('txtAttStyle').value ) ; + } + } + + // Select the (first) link. + oEditor.FCKSelection.SelectNode( aLinks[0] ); + + return true ; +} + +function BrowseServer() +{ + OpenFileBrowser( FCKConfig.LinkBrowserURL, FCKConfig.LinkBrowserWindowWidth, FCKConfig.LinkBrowserWindowHeight ) ; +} + +function SetUrl( url ) +{ + GetE('txtUrl').value = url ; + OnUrlChange() ; + dialog.SetSelectedTab( 'Info' ) ; +} + +function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg ) +{ + // Remove animation + window.parent.Throbber.Hide() ; + GetE( 'divUpload' ).style.display = '' ; + + switch ( errorNumber ) + { + case 0 : // No errors + alert( 'Your file has been successfully uploaded' ) ; + break ; + case 1 : // Custom error + alert( customMsg ) ; + return ; + case 101 : // Custom warning + alert( customMsg ) ; + break ; + case 201 : + alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ; + break ; + case 202 : + alert( 'Invalid file type' ) ; + return ; + case 203 : + alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ; + return ; + case 500 : + alert( 'The connector is disabled' ) ; + break ; + default : + alert( 'Error on file upload. Error number: ' + errorNumber ) ; + return ; + } + + SetUrl( fileUrl ) ; + GetE('frmUpload').reset() ; +} + +var oUploadAllowedExtRegex = new RegExp( FCKConfig.LinkUploadAllowedExtensions, 'i' ) ; +var oUploadDeniedExtRegex = new RegExp( FCKConfig.LinkUploadDeniedExtensions, 'i' ) ; + +function CheckUpload() +{ + var sFile = GetE('txtUploadFile').value ; + + if ( sFile.length == 0 ) + { + alert( 'Please select a file to upload' ) ; + return false ; + } + + if ( ( FCKConfig.LinkUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) || + ( FCKConfig.LinkUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) ) + { + OnUploadCompleted( 202 ) ; + return false ; + } + + // Show animation + window.parent.Throbber.Show( 100 ) ; + GetE( 'divUpload' ).style.display = 'none' ; + + return true ; +} + +function SetDefaultTarget() +{ + var target = FCKConfig.DefaultLinkTarget || '' ; + + if ( oLink || target.length == 0 ) + return ; + + switch ( target ) + { + case '_blank' : + case '_self' : + case '_parent' : + case '_top' : + GetE('cmbTarget').value = target ; + break ; + default : + GetE('cmbTarget').value = 'frame' ; + break ; + } + + GetE('txtTargetFrame').value = target ; +} diff --git a/fckeditor/FCKeditor/editor/dialog/fck_listprop.html b/fckeditor/FCKeditor/editor/dialog/fck_listprop.html new file mode 100644 index 0000000..a67af18 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_listprop.html @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + +
+ + + + + +
+ List Type
+ + +   +
+
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_paste.html b/fckeditor/FCKeditor/editor/dialog/fck_paste.html new file mode 100644 index 0000000..3e11da1 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_paste.html @@ -0,0 +1,347 @@ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ Please paste inside the following box using the keyboard + (Ctrl+V) and hit OK.
+   +
+
+ +
+ + + +
+ + + +
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_radiobutton.html b/fckeditor/FCKeditor/editor/dialog/fck_radiobutton.html new file mode 100644 index 0000000..556890f --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_radiobutton.html @@ -0,0 +1,104 @@ + + + + + Radio Button Properties + + + + + + + + + + +
+ + + + + + + + + + +
+ Name
+ +
+ Value
+ +
+
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_replace.html b/fckeditor/FCKeditor/editor/dialog/fck_replace.html new file mode 100644 index 0000000..2c574d2 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_replace.html @@ -0,0 +1,650 @@ + + + + + + + + + + + + + + + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_scayt.html b/fckeditor/FCKeditor/editor/dialog/fck_scayt.html new file mode 100644 index 0000000..f8ef9b4 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_scayt.html @@ -0,0 +1,746 @@ + + + + + SCAYT Properties + + + + + + + +
+ +
    +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
+
+
+ +
+
+
+
+ +
+
+
+ + +
+
+ + + + +
+ +
+ +
+
+
+
+
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_scayt/scayt_dialog.css b/fckeditor/FCKeditor/editor/dialog/fck_scayt/scayt_dialog.css new file mode 100644 index 0000000..c2eeb75 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_scayt/scayt_dialog.css @@ -0,0 +1,169 @@ +html, body +{ + background-color: transparent; + margin: 0px; + padding: 0px; +} + +body +{ + padding: 10px; +} + +body, td, input, select, textarea +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; +} + +.midtext +{ + padding:0px; + margin:10px; +} + +.midtext p +{ + padding:0px; + margin:10px; +} + +.Button +{ + border: #737357 1px solid; + color: #3b3b1f; + background-color: #c7c78f; +} + +.PopupTabArea , .button +{ + color: #737357; + background-color: #e3e3c7; +} + +.PopupTitleBorder +{ + border-bottom: #d5d59d 1px solid; +} +.PopupTabEmptyArea +{ + padding-left: 10px; + border-bottom: #d5d59d 1px solid; +} + +.PopupTab, .PopupTabSelected +{ + border-right: #d5d59d 1px solid; + border-top: #d5d59d 1px solid; + border-left: #d5d59d 1px solid; + padding: 3px 5px 3px 5px; + color: #737357; +} + +.PopupTab +{ + margin-top: 1px; + border-bottom: #d5d59d 1px solid; + cursor: pointer; + cursor: hand; +} + +.PopupTabSelected +{ + font-weight: bold; + cursor: default; + padding-top: 4px; + border-bottom: #f1f1e3 1px solid; + background-color: #f1f1e3; +} + +ul { + padding:0; + margin:0px 0px 12px 0px; + list-style-type:none; +} +ul.tabs { + height:20px; + margin:10px 0px; +} +ul.tabs li { + float: left; + display:none; +} +div.tab_container { + /*display:none;*/ + padding: 0px 5px ; +} +.lcol { + float:left; + width:47%; + margin-left:5px; +} +.rcol { + float:right; + width:47%; + margin-right:5px; +} +div.tabs-container{ + height:220px; + overflow-x:hidden; + overflow-y:auto; +} + +div.tabs-container h3{ + margin:5px 15px 7px 15px; + background-color:transparent; + font-size: 14px ; +} + +.li { + border: 1px solid transparent; +} + +#dic_message{ + height: 24px; +} +#dic_message .error{ + color: red ; +} +#dic_message .success{ + color: blue ; +} + +.dic_buttons { + margin-top: 5px; + padding-left:10px; +} +.dic_buttons a { + display: none; +} +a.button { + border: #d5d59d 1px solid; + padding: 2px 4px; + margin-right: 4px; + text-decoration: none; +} + +a.button:hover, +a.button:active, +a.button:visited{ + padding: 2px 4px; + margin-right: 4px; + text-decoration: none; +} +a.button:hover { + border: #d5d59d 1px solid; + color: #e3e3c7; + background-color: #737357; +} + +#scayt_options li { + display: none; +} + +#dic_info { + margin:10px; +} +#dic_tab { + display:none; +} diff --git a/fckeditor/FCKeditor/editor/dialog/fck_select.html b/fckeditor/FCKeditor/editor/dialog/fck_select.html new file mode 100644 index 0000000..2f28da6 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_select.html @@ -0,0 +1,180 @@ + + + + + Select Properties + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
Name 
Value 
Size  lines
+
+
+  Available + Options  + + + + + + + + + + + + + + + + + + +
Text
+ +
Value
+ +
+ + +
+
+ +
   +
+
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_select/fck_select.js b/fckeditor/FCKeditor/editor/dialog/fck_select/fck_select.js new file mode 100644 index 0000000..3120bb3 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_select/fck_select.js @@ -0,0 +1,194 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Scripts for the fck_select.html page. + */ + +function Select( combo ) +{ + var iIndex = combo.selectedIndex ; + + oListText.selectedIndex = iIndex ; + oListValue.selectedIndex = iIndex ; + + var oTxtText = document.getElementById( "txtText" ) ; + var oTxtValue = document.getElementById( "txtValue" ) ; + + oTxtText.value = oListText.value ; + oTxtValue.value = oListValue.value ; +} + +function Add() +{ + var oTxtText = document.getElementById( "txtText" ) ; + var oTxtValue = document.getElementById( "txtValue" ) ; + + AddComboOption( oListText, oTxtText.value, oTxtText.value ) ; + AddComboOption( oListValue, oTxtValue.value, oTxtValue.value ) ; + + oListText.selectedIndex = oListText.options.length - 1 ; + oListValue.selectedIndex = oListValue.options.length - 1 ; + + oTxtText.value = '' ; + oTxtValue.value = '' ; + + oTxtText.focus() ; +} + +function Modify() +{ + var iIndex = oListText.selectedIndex ; + + if ( iIndex < 0 ) return ; + + var oTxtText = document.getElementById( "txtText" ) ; + var oTxtValue = document.getElementById( "txtValue" ) ; + + oListText.options[ iIndex ].innerHTML = HTMLEncode( oTxtText.value ) ; + oListText.options[ iIndex ].value = oTxtText.value ; + + oListValue.options[ iIndex ].innerHTML = HTMLEncode( oTxtValue.value ) ; + oListValue.options[ iIndex ].value = oTxtValue.value ; + + oTxtText.value = '' ; + oTxtValue.value = '' ; + + oTxtText.focus() ; +} + +function Move( steps ) +{ + ChangeOptionPosition( oListText, steps ) ; + ChangeOptionPosition( oListValue, steps ) ; +} + +function Delete() +{ + RemoveSelectedOptions( oListText ) ; + RemoveSelectedOptions( oListValue ) ; +} + +function SetSelectedValue() +{ + var iIndex = oListValue.selectedIndex ; + if ( iIndex < 0 ) return ; + + var oTxtValue = document.getElementById( "txtSelValue" ) ; + + oTxtValue.value = oListValue.options[ iIndex ].value ; +} + +// Moves the selected option by a number of steps (also negative) +function ChangeOptionPosition( combo, steps ) +{ + var iActualIndex = combo.selectedIndex ; + + if ( iActualIndex < 0 ) + return ; + + var iFinalIndex = iActualIndex + steps ; + + if ( iFinalIndex < 0 ) + iFinalIndex = 0 ; + + if ( iFinalIndex > ( combo.options.length - 1 ) ) + iFinalIndex = combo.options.length - 1 ; + + if ( iActualIndex == iFinalIndex ) + return ; + + var oOption = combo.options[ iActualIndex ] ; + var sText = HTMLDecode( oOption.innerHTML ) ; + var sValue = oOption.value ; + + combo.remove( iActualIndex ) ; + + oOption = AddComboOption( combo, sText, sValue, null, iFinalIndex ) ; + + oOption.selected = true ; +} + +// Remove all selected options from a SELECT object +function RemoveSelectedOptions(combo) +{ + // Save the selected index + var iSelectedIndex = combo.selectedIndex ; + + var oOptions = combo.options ; + + // Remove all selected options + for ( var i = oOptions.length - 1 ; i >= 0 ; i-- ) + { + if (oOptions[i].selected) combo.remove(i) ; + } + + // Reset the selection based on the original selected index + if ( combo.options.length > 0 ) + { + if ( iSelectedIndex >= combo.options.length ) iSelectedIndex = combo.options.length - 1 ; + combo.selectedIndex = iSelectedIndex ; + } +} + +// Add a new option to a SELECT object (combo or list) +function AddComboOption( combo, optionText, optionValue, documentObject, index ) +{ + var oOption ; + + if ( documentObject ) + oOption = documentObject.createElement("OPTION") ; + else + oOption = document.createElement("OPTION") ; + + if ( index != null ) + combo.options.add( oOption, index ) ; + else + combo.options.add( oOption ) ; + + oOption.innerHTML = optionText.length > 0 ? HTMLEncode( optionText ) : ' ' ; + oOption.value = optionValue ; + + return oOption ; +} + +function HTMLEncode( text ) +{ + if ( !text ) + return '' ; + + text = text.replace( /&/g, '&' ) ; + text = text.replace( //g, '>' ) ; + + return text ; +} + + +function HTMLDecode( text ) +{ + if ( !text ) + return '' ; + + text = text.replace( />/g, '>' ) ; + text = text.replace( /</g, '<' ) ; + text = text.replace( /&/g, '&' ) ; + + return text ; +} diff --git a/fckeditor/FCKeditor/editor/dialog/fck_smiley.html b/fckeditor/FCKeditor/editor/dialog/fck_smiley.html new file mode 100644 index 0000000..ba3a302 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_smiley.html @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + +
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_source.html b/fckeditor/FCKeditor/editor/dialog/fck_source.html new file mode 100644 index 0000000..0782c65 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_source.html @@ -0,0 +1,68 @@ + + + + + Source + + + + + + + + + + +
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_specialchar.html b/fckeditor/FCKeditor/editor/dialog/fck_specialchar.html new file mode 100644 index 0000000..9a8ba77 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_specialchar.html @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + +
+ + +
+
     + + + + +
 
+
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_spellerpages.html b/fckeditor/FCKeditor/editor/dialog/fck_spellerpages.html new file mode 100644 index 0000000..c3b7409 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_spellerpages.html @@ -0,0 +1,70 @@ + + + + + Spell Check + + + + + + + + + + + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_table.html b/fckeditor/FCKeditor/editor/dialog/fck_table.html new file mode 100644 index 0000000..3eb85b4 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_table.html @@ -0,0 +1,440 @@ + + + + + Table Properties + + + + + + + + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ Rows: +  
+ Columns: +  
Headers: +   +
+ Border size: +  
+ Alignment: +  
+
+     + + + + + + + + + + + + + + + + + + + + + + + + +
+ Width: +   +  
+ Height: +   +  pixels
 
+ Cell spacing: +   +  
+ Cell padding: +   +  
+
+ + + + + + + + + + + +
+ Caption +   +
+ Summary +   +
+
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_tablecell.html b/fckeditor/FCKeditor/editor/dialog/fck_tablecell.html new file mode 100644 index 0000000..a4d1c97 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_tablecell.html @@ -0,0 +1,293 @@ + + + + + Table Cell Properties + + + + + + + + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Width: +   
+ Height: +   pixels
+   +  
+ Word Wrap: +  
+   +  
+ Horizontal Alignment: +  
+ Vertical Alignment: +  
+
+     + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Cell Type: +   +
+   +   +  
+ Rows Span: +   + +
+ Columns Span: +   + +
+   +   +  
+ Background Color: +   +   +
+ Border Color: +   +   +
+
+
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_template.html b/fckeditor/FCKeditor/editor/dialog/fck_template.html new file mode 100644 index 0000000..e7c1292 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_template.html @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + +
+ Please select the template to open in the editor
+ (the actual contents will be lost):
+
+
+ + +
+
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_template/images/template1.gif b/fckeditor/FCKeditor/editor/dialog/fck_template/images/template1.gif new file mode 100644 index 0000000..efdabbe Binary files /dev/null and b/fckeditor/FCKeditor/editor/dialog/fck_template/images/template1.gif differ diff --git a/fckeditor/FCKeditor/editor/dialog/fck_template/images/template2.gif b/fckeditor/FCKeditor/editor/dialog/fck_template/images/template2.gif new file mode 100644 index 0000000..d1cebb3 Binary files /dev/null and b/fckeditor/FCKeditor/editor/dialog/fck_template/images/template2.gif differ diff --git a/fckeditor/FCKeditor/editor/dialog/fck_template/images/template3.gif b/fckeditor/FCKeditor/editor/dialog/fck_template/images/template3.gif new file mode 100644 index 0000000..db41cb4 Binary files /dev/null and b/fckeditor/FCKeditor/editor/dialog/fck_template/images/template3.gif differ diff --git a/fckeditor/FCKeditor/editor/dialog/fck_template/images/template4.gif b/fckeditor/FCKeditor/editor/dialog/fck_template/images/template4.gif new file mode 100644 index 0000000..1b7ffef Binary files /dev/null and b/fckeditor/FCKeditor/editor/dialog/fck_template/images/template4.gif differ diff --git a/fckeditor/FCKeditor/editor/dialog/fck_template/images/template5.gif b/fckeditor/FCKeditor/editor/dialog/fck_template/images/template5.gif new file mode 100644 index 0000000..dc645eb Binary files /dev/null and b/fckeditor/FCKeditor/editor/dialog/fck_template/images/template5.gif differ diff --git a/fckeditor/FCKeditor/editor/dialog/fck_textarea.html b/fckeditor/FCKeditor/editor/dialog/fck_textarea.html new file mode 100644 index 0000000..631fe27 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_textarea.html @@ -0,0 +1,94 @@ + + + + + Text Area Properties + + + + + + + + + + +
+ + + + +
+ Name
+ + Collumns
+ +
+ Rows
+ +
+
+ + diff --git a/fckeditor/FCKeditor/editor/dialog/fck_textfield.html b/fckeditor/FCKeditor/editor/dialog/fck_textfield.html new file mode 100644 index 0000000..43f91a6 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dialog/fck_textfield.html @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +
+ Name
+ +
+ + Value
+ +
+ Character Width
+ +
+ + Maximum Characters
+ +
+ Type
+ +
+   +
+
+ + diff --git a/fckeditor/FCKeditor/editor/dtd/fck_dtd_test.html b/fckeditor/FCKeditor/editor/dtd/fck_dtd_test.html new file mode 100644 index 0000000..c149d15 --- /dev/null +++ b/fckeditor/FCKeditor/editor/dtd/fck_dtd_test.html @@ -0,0 +1,41 @@ + + + + DTD Test Page + + + + + +

+ DTD Contents +

+ + +
+ + diff --git a/fckeditor/FCKeditor/editor/dtd/fck_xhtml10strict.js b/fckeditor/FCKeditor/editor/dtd/fck_xhtml10strict.js new file mode 100644 index 0000000..a39fcfc --- /dev/null +++ b/fckeditor/FCKeditor/editor/dtd/fck_xhtml10strict.js @@ -0,0 +1,116 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Contains the DTD mapping for XHTML 1.0 Strict. + * This file was automatically generated from the file: xhtml10-strict.dtd + */ +FCK.DTD = (function() +{ + var X = FCKTools.Merge ; + + var H,I,J,K,C,L,M,A,B,D,E,G,N,F ; + A = {ins:1, del:1, script:1} ; + B = {hr:1, ul:1, div:1, blockquote:1, noscript:1, table:1, address:1, pre:1, p:1, h5:1, dl:1, h4:1, ol:1, h6:1, h1:1, h3:1, h2:1} ; + C = X({fieldset:1}, B) ; + D = X({sub:1, bdo:1, 'var':1, sup:1, br:1, kbd:1, map:1, samp:1, b:1, acronym:1, '#':1, abbr:1, code:1, i:1, cite:1, tt:1, strong:1, q:1, em:1, big:1, small:1, span:1, dfn:1}, A) ; + E = X({img:1, object:1}, D) ; + F = {input:1, button:1, textarea:1, select:1, label:1} ; + G = X({a:1}, F) ; + H = {img:1, noscript:1, br:1, kbd:1, button:1, h5:1, h4:1, samp:1, h6:1, ol:1, h1:1, h3:1, h2:1, form:1, select:1, '#':1, ins:1, abbr:1, label:1, code:1, table:1, script:1, cite:1, input:1, strong:1, textarea:1, big:1, small:1, span:1, hr:1, sub:1, bdo:1, 'var':1, div:1, object:1, sup:1, map:1, dl:1, del:1, fieldset:1, ul:1, b:1, acronym:1, a:1, blockquote:1, i:1, address:1, tt:1, q:1, pre:1, p:1, em:1, dfn:1} ; + + I = X({form:1, fieldset:1}, B, E, G) ; + J = {tr:1} ; + K = {'#':1} ; + L = X(E, G) ; + M = {li:1} ; + N = X({form:1}, A, C) ; + + return { + col: {}, + tr: {td:1, th:1}, + img: {}, + colgroup: {col:1}, + noscript: N, + td: I, + br: {}, + th: I, + kbd: L, + button: X(B, E), + h5: L, + h4: L, + samp: L, + h6: L, + ol: M, + h1: L, + h3: L, + option: K, + h2: L, + form: X(A, C), + select: {optgroup:1, option:1}, + ins: I, + abbr: L, + label: L, + code: L, + table: {thead:1, col:1, tbody:1, tr:1, colgroup:1, caption:1, tfoot:1}, + script: K, + tfoot: J, + cite: L, + li: I, + input: {}, + strong: L, + textarea: K, + big: L, + small: L, + span: L, + dt: L, + hr: {}, + sub: L, + optgroup: {option:1}, + bdo: L, + param: {}, + 'var': L, + div: I, + object: X({param:1}, H), + sup: L, + dd: I, + area: {}, + map: X({form:1, area:1}, A, C), + dl: {dt:1, dd:1}, + del: I, + fieldset: X({legend:1}, H), + thead: J, + ul: M, + acronym: L, + b: L, + a: X({img:1, object:1}, D, F), + blockquote: N, + caption: L, + i: L, + tbody: J, + address: L, + tt: L, + legend: L, + q: L, + pre: X({a:1}, D, F), + p: L, + em: L, + dfn: L + } ; +})() ; diff --git a/fckeditor/FCKeditor/editor/dtd/fck_xhtml10transitional.js b/fckeditor/FCKeditor/editor/dtd/fck_xhtml10transitional.js new file mode 100644 index 0000000..53617bd --- /dev/null +++ b/fckeditor/FCKeditor/editor/dtd/fck_xhtml10transitional.js @@ -0,0 +1,140 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Contains the DTD mapping for XHTML 1.0 Transitional. + * This file was automatically generated from the file: xhtml10-transitional.dtd + */ +FCK.DTD = (function() +{ + var X = FCKTools.Merge ; + + var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I ; + A = {isindex:1, fieldset:1} ; + B = {input:1, button:1, select:1, textarea:1, label:1} ; + C = X({a:1}, B) ; + D = X({iframe:1}, C) ; + E = {hr:1, ul:1, menu:1, div:1, blockquote:1, noscript:1, table:1, center:1, address:1, dir:1, pre:1, h5:1, dl:1, h4:1, noframes:1, h6:1, ol:1, h1:1, h3:1, h2:1} ; + F = {ins:1, del:1, script:1} ; + G = X({b:1, acronym:1, bdo:1, 'var':1, '#':1, abbr:1, code:1, br:1, i:1, cite:1, kbd:1, u:1, strike:1, s:1, tt:1, strong:1, q:1, samp:1, em:1, dfn:1, span:1}, F) ; + H = X({sub:1, img:1, object:1, sup:1, basefont:1, map:1, applet:1, font:1, big:1, small:1}, G) ; + I = X({p:1}, H) ; + J = X({iframe:1}, H, B) ; + K = {img:1, noscript:1, br:1, kbd:1, center:1, button:1, basefont:1, h5:1, h4:1, samp:1, h6:1, ol:1, h1:1, h3:1, h2:1, form:1, font:1, '#':1, select:1, menu:1, ins:1, abbr:1, label:1, code:1, table:1, script:1, cite:1, input:1, iframe:1, strong:1, textarea:1, noframes:1, big:1, small:1, span:1, hr:1, sub:1, bdo:1, 'var':1, div:1, object:1, sup:1, strike:1, dir:1, map:1, dl:1, applet:1, del:1, isindex:1, fieldset:1, ul:1, b:1, acronym:1, a:1, blockquote:1, i:1, u:1, s:1, tt:1, address:1, q:1, pre:1, p:1, em:1, dfn:1} ; + + L = X({a:1}, J) ; + M = {tr:1} ; + N = {'#':1} ; + O = X({param:1}, K) ; + P = X({form:1}, A, D, E, I) ; + Q = {li:1} ; + + return { + col: {}, + tr: {td:1, th:1}, + img: {}, + colgroup: {col:1}, + noscript: P, + td: P, + br: {}, + th: P, + center: P, + kbd: L, + button: X(I, E), + basefont: {}, + h5: L, + h4: L, + samp: L, + h6: L, + ol: Q, + h1: L, + h3: L, + option: N, + h2: L, + form: X(A, D, E, I), + select: {optgroup:1, option:1}, + font: J, // Changed from L to J (see (1)) + ins: P, + menu: Q, + abbr: L, + label: L, + table: {thead:1, col:1, tbody:1, tr:1, colgroup:1, caption:1, tfoot:1}, + code: L, + script: N, + tfoot: M, + cite: L, + li: P, + input: {}, + iframe: P, + strong: J, // Changed from L to J (see (1)) + textarea: N, + noframes: P, + big: J, // Changed from L to J (see (1)) + small: J, // Changed from L to J (see (1)) + span: J, // Changed from L to J (see (1)) + hr: {}, + dt: L, + sub: J, // Changed from L to J (see (1)) + optgroup: {option:1}, + param: {}, + bdo: L, + 'var': J, // Changed from L to J (see (1)) + div: P, + object: O, + sup: J, // Changed from L to J (see (1)) + dd: P, + strike: J, // Changed from L to J (see (1)) + area: {}, + dir: Q, + map: X({area:1, form:1, p:1}, A, F, E), + applet: O, + dl: {dt:1, dd:1}, + del: P, + isindex: {}, + fieldset: X({legend:1}, K), + thead: M, + ul: Q, + acronym: L, + b: J, // Changed from L to J (see (1)) + a: J, + blockquote: P, + caption: L, + i: J, // Changed from L to J (see (1)) + u: J, // Changed from L to J (see (1)) + tbody: M, + s: L, + address: X(D, I), + tt: J, // Changed from L to J (see (1)) + legend: L, + q: L, + pre: X(G, C), + p: L, + em: J, // Changed from L to J (see (1)) + dfn: L + } ; +})() ; + +/* + Notes: + (1) According to the DTD, many elements, like accept elements + inside of them. But, to produce better output results, we have manually + changed the map to avoid breaking the links on pieces, having + "this is a link test", instead of + "this is a link test". +*/ diff --git a/fckeditor/FCKeditor/editor/fckdebug.html b/fckeditor/FCKeditor/editor/fckdebug.html new file mode 100644 index 0000000..e3b3420 --- /dev/null +++ b/fckeditor/FCKeditor/editor/fckdebug.html @@ -0,0 +1,153 @@ + + + + + FCKeditor Debug Window + + + + + + + + + + + +
+ + + + + +
+ FCKeditor Debug Window +
+
+ +
+ + diff --git a/fckeditor/FCKeditor/editor/fckdialog.html b/fckeditor/FCKeditor/editor/fckdialog.html new file mode 100644 index 0000000..0770c89 --- /dev/null +++ b/fckeditor/FCKeditor/editor/fckdialog.html @@ -0,0 +1,819 @@ + + + + + + + + + + +
+ +
+
+ + + + + +
  + +   + +
+
+
+
+
+
+
+
+
+
+
+ + + + + diff --git a/fckeditor/FCKeditor/editor/fckeditor.html b/fckeditor/FCKeditor/editor/fckeditor.html new file mode 100644 index 0000000..5f90c3d --- /dev/null +++ b/fckeditor/FCKeditor/editor/fckeditor.html @@ -0,0 +1,317 @@ + + + + + FCKeditor + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/browser.css b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/browser.css new file mode 100644 index 0000000..24142c8 --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/browser.css @@ -0,0 +1,99 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * CSS styles used by all pages that compose the File Browser. + */ + +body +{ + background-color: #e1e1d3; + margin-top:0; + margin-bottom:0; +} +a { + color: #000; + text-decoration: none; + } +form +{ + margin: 0; + padding: 0; +} + +.Frame +{ +} + +body.FileArea +{ + background-color: #ffffff; + margin: 10px; +} + +body, td, input, select +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; +} + +.ActualFolder +{ + font-weight: bold; + font-size: 14px; + +} + +.PopupButtons +{ + border-top: #d5d59d 1px solid; + background-color: #e3e3c7; + padding: 7px 10px 7px 10px; + +} + +.Button, button +{ + color: #3b3b1f; + border: #737357 1px solid; + background-color: #c7c78f; +} +b {color: #67672f; + } +.FolderListCurrentFolder img +{ + background-image: url(images/folder-open1.png); + background-position: top right; + background-repeat: no-repeat; +} + +.FolderListFolder img +{ + background-image: url(images/folder1.png); + background-position: top right; + background-repeat: no-repeat; +} + +.fullHeight { + height: 100%; + +} +.FileArea a { + text-decoration: none; + } diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/browser.html b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/browser.html new file mode 100644 index 0000000..1bdada0 --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/browser.html @@ -0,0 +1,202 @@ + + + + + Resource Browser::FCKeditor4CMSimple + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmactualfolder.html b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmactualfolder.html new file mode 100644 index 0000000..6dce412 --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmactualfolder.html @@ -0,0 +1,80 @@ + + + + + Folder path + + + + + +
+ + + diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmcreatefolder.html b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmcreatefolder.html new file mode 100644 index 0000000..593b0ff --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmcreatefolder.html @@ -0,0 +1,122 @@ + + + + + Create Folder + + + + + + +
+ + + + +
+ +
+
+ + diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmfolders.html b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmfolders.html new file mode 100644 index 0000000..62562dc --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmfolders.html @@ -0,0 +1,221 @@ + + + + + Folders + + + + + + + + + Home + + + + + +
+ + \ No newline at end of file diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmresourceslist.html b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmresourceslist.html new file mode 100644 index 0000000..151f784 --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmresourceslist.html @@ -0,0 +1,247 @@ + + + + + Resources + + + + + + + +
+
+ + diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmresourcetype.html b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmresourcetype.html new file mode 100644 index 0000000..c2f8cdd --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmresourcetype.html @@ -0,0 +1,73 @@ + + + + + Available types + + + + + + + + + + + diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmupload.html b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmupload.html new file mode 100644 index 0000000..967466d --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/frmupload.html @@ -0,0 +1,108 @@ + + + + + File Upload + + + + + + + +
+ + + +
+ + diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/ButtonArrow.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/ButtonArrow.gif new file mode 100644 index 0000000..a355e5a Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/ButtonArrow.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Downloads.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Downloads.png new file mode 100644 index 0000000..7911c45 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Downloads.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/File.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/File.png new file mode 100644 index 0000000..1d9c49f Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/File.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Flash.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Flash.png new file mode 100644 index 0000000..5d6c8d1 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Flash.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Folder.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Folder.gif new file mode 100644 index 0000000..ab6824d Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Folder.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Folder32.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Folder32.gif new file mode 100644 index 0000000..b93b752 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Folder32.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/FolderOpened.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/FolderOpened.gif new file mode 100644 index 0000000..0c5dd41 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/FolderOpened.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/FolderOpened32.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/FolderOpened32.gif new file mode 100644 index 0000000..3e3fcf5 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/FolderOpened32.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/FolderUp.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/FolderUp.gif new file mode 100644 index 0000000..ad5bc20 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/FolderUp.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Image.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Image.png new file mode 100644 index 0000000..a7b86d4 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Image.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Media.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Media.png new file mode 100644 index 0000000..d09995a Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/Media.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/applications-graphics2.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/applications-graphics2.png new file mode 100644 index 0000000..36b77c2 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/applications-graphics2.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/edit-delete.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/edit-delete.png new file mode 100644 index 0000000..c054e96 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/edit-delete.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/edit-delete1.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/edit-delete1.png new file mode 100644 index 0000000..3811b64 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/edit-delete1.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/edit-delete2.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/edit-delete2.png new file mode 100644 index 0000000..ea03150 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/edit-delete2.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder-new1.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder-new1.png new file mode 100644 index 0000000..1c3dc94 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder-new1.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder-new2.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder-new2.png new file mode 100644 index 0000000..fcd15c0 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder-new2.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder-open.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder-open.png new file mode 100644 index 0000000..b67403d Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder-open.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder-open1.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder-open1.png new file mode 100644 index 0000000..f81f70c Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder-open1.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder-open2.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder-open2.png new file mode 100644 index 0000000..901816c Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder-open2.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder.png new file mode 100644 index 0000000..65bd0bb Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder1.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder1.png new file mode 100644 index 0000000..01f45b8 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/folder1.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/go-home2.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/go-home2.png new file mode 100644 index 0000000..a3ca103 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/go-home2.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/go-jump.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/go-jump.png new file mode 100644 index 0000000..1d218c3 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/go-jump.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/go-previous.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/go-previous.png new file mode 100644 index 0000000..659cd90 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/go-previous.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/go-top1.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/go-top1.png new file mode 100644 index 0000000..96f98dd Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/go-top1.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/go-up1.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/go-up1.png new file mode 100644 index 0000000..b0a0cd7 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/go-up1.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/ai.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/ai.gif new file mode 100644 index 0000000..699e6a3 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/ai.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/avi.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/avi.gif new file mode 100644 index 0000000..97025bb Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/avi.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/bmp.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/bmp.gif new file mode 100644 index 0000000..f3c7f82 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/bmp.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/cs.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/cs.gif new file mode 100644 index 0000000..b62bd02 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/cs.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/default.icon.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/default.icon.gif new file mode 100644 index 0000000..976997b Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/default.icon.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/dll.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/dll.gif new file mode 100644 index 0000000..9b54964 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/dll.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/doc.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/doc.gif new file mode 100644 index 0000000..b557568 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/doc.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/exe.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/exe.gif new file mode 100644 index 0000000..7584993 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/exe.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/fla.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/fla.gif new file mode 100644 index 0000000..923079f Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/fla.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/gif.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/gif.gif new file mode 100644 index 0000000..df5f579 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/gif.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/htm.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/htm.gif new file mode 100644 index 0000000..a9bdf00 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/htm.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/html.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/html.gif new file mode 100644 index 0000000..a9bdf00 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/html.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/jpg.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/jpg.gif new file mode 100644 index 0000000..de78363 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/jpg.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/js.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/js.gif new file mode 100644 index 0000000..fe0c98e Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/js.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/mdb.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/mdb.gif new file mode 100644 index 0000000..d3af9e8 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/mdb.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/mp3.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/mp3.gif new file mode 100644 index 0000000..7d6360f Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/mp3.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/pdf.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/pdf.gif new file mode 100644 index 0000000..4950ec8 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/pdf.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/png.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/png.gif new file mode 100644 index 0000000..0a79ebf Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/png.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/ppt.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/ppt.gif new file mode 100644 index 0000000..023431c Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/ppt.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/rdp.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/rdp.gif new file mode 100644 index 0000000..b9eace7 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/rdp.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/swf.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/swf.gif new file mode 100644 index 0000000..5df7de5 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/swf.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/swt.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/swt.gif new file mode 100644 index 0000000..7807c07 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/swt.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/txt.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/txt.gif new file mode 100644 index 0000000..4e2c2e3 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/txt.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/vsd.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/vsd.gif new file mode 100644 index 0000000..7624697 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/vsd.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/xls.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/xls.gif new file mode 100644 index 0000000..afe724a Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/xls.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/xml.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/xml.gif new file mode 100644 index 0000000..4fae356 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/xml.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/zip.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/zip.gif new file mode 100644 index 0000000..7157f72 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/32/zip.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/ai.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/ai.gif new file mode 100644 index 0000000..ba5a913 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/ai.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/avi.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/avi.gif new file mode 100644 index 0000000..6f3bac9 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/avi.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/bmp.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/bmp.gif new file mode 100644 index 0000000..7708dd8 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/bmp.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/cs.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/cs.gif new file mode 100644 index 0000000..4d92723 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/cs.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/default.icon.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/default.icon.gif new file mode 100644 index 0000000..6ce26a4 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/default.icon.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/dll.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/dll.gif new file mode 100644 index 0000000..48d445a Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/dll.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/doc.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/doc.gif new file mode 100644 index 0000000..6535b4c Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/doc.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/exe.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/exe.gif new file mode 100644 index 0000000..315817f Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/exe.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/fla.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/fla.gif new file mode 100644 index 0000000..8f91a98 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/fla.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/gif.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/gif.gif new file mode 100644 index 0000000..a5e3e6c Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/gif.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/htm.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/htm.gif new file mode 100644 index 0000000..0b5d6ba Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/htm.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/html.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/html.gif new file mode 100644 index 0000000..0b5d6ba Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/html.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/jpg.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/jpg.gif new file mode 100644 index 0000000..634b386 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/jpg.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/js.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/js.gif new file mode 100644 index 0000000..4ea17d4 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/js.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/mdb.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/mdb.gif new file mode 100644 index 0000000..0d7c102 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/mdb.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/mp3.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/mp3.gif new file mode 100644 index 0000000..6f3bac9 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/mp3.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/pdf.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/pdf.gif new file mode 100644 index 0000000..ca1f94a Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/pdf.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/png.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/png.gif new file mode 100644 index 0000000..b6d1b32 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/png.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/ppt.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/ppt.gif new file mode 100644 index 0000000..877a8c8 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/ppt.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/rdp.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/rdp.gif new file mode 100644 index 0000000..916cd7e Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/rdp.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/swf.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/swf.gif new file mode 100644 index 0000000..314469d Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/swf.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/swt.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/swt.gif new file mode 100644 index 0000000..314469d Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/swt.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/txt.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/txt.gif new file mode 100644 index 0000000..1511ba3 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/txt.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/vsd.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/vsd.gif new file mode 100644 index 0000000..9be3daa Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/vsd.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/xls.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/xls.gif new file mode 100644 index 0000000..f57715d Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/xls.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/xml.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/xml.gif new file mode 100644 index 0000000..4559928 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/xml.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/zip.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/zip.gif new file mode 100644 index 0000000..b1e2492 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/icons/zip.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/spacer.gif b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/spacer.gif new file mode 100644 index 0000000..35d42e8 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/spacer.gif differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/user-home2.png b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/user-home2.png new file mode 100644 index 0000000..a29bd69 Binary files /dev/null and b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/images/user-home2.png differ diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/js/common.js b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/js/common.js new file mode 100644 index 0000000..a1df0c3 --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/js/common.js @@ -0,0 +1,88 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Common objects and functions shared by all pages that compose the + * File Browser dialog window. + */ + +// Automatically detect the correct document.domain (#1919). +(function() +{ + var d = document.domain ; + + while ( true ) + { + // Test if we can access a parent property. + try + { + var test = window.top.opener.document.domain ; + break ; + } + catch( e ) + {} + + // Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ... + d = d.replace( /.*?(?:\.|$)/, '' ) ; + + if ( d.length == 0 ) + break ; // It was not able to detect the domain. + + try + { + document.domain = d ; + } + catch (e) + { + break ; + } + } +})() ; + +function AddSelectOption( selectElement, optionText, optionValue ) +{ + var oOption = document.createElement("OPTION") ; + + oOption.text = optionText ; + oOption.value = optionValue ; + + selectElement.options.add(oOption) ; + + return oOption ; +} + +var oConnector = window.parent.oConnector ; +var oIcons = window.parent.oIcons ; + + +function StringBuilder( value ) +{ + this._Strings = new Array( value || '' ) ; +} + +StringBuilder.prototype.Append = function( value ) +{ + if ( value ) + this._Strings.push( value ) ; +} + +StringBuilder.prototype.ToString = function() +{ + return this._Strings.join( '' ) ; +} \ No newline at end of file diff --git a/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/js/fckxml.js b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/js/fckxml.js new file mode 100644 index 0000000..82d1cbb --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/js/fckxml.js @@ -0,0 +1,147 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Defines the FCKXml object that is used for XML data calls + * and XML processing. + * + * This script is shared by almost all pages that compose the + * File Browser frameset. + */ + +var FCKXml = function() +{} + +FCKXml.prototype.GetHttpRequest = function() +{ + // Gecko / IE7 + try { return new XMLHttpRequest(); } + catch(e) {} + + // IE6 + try { return new ActiveXObject( 'Msxml2.XMLHTTP' ) ; } + catch(e) {} + + // IE5 + try { return new ActiveXObject( 'Microsoft.XMLHTTP' ) ; } + catch(e) {} + + return null ; +} + +FCKXml.prototype.LoadUrl = function( urlToCall, asyncFunctionPointer ) +{ + var oFCKXml = this ; + + var bAsync = ( typeof(asyncFunctionPointer) == 'function' ) ; + + var oXmlHttp = this.GetHttpRequest() ; + + oXmlHttp.open( "GET", urlToCall, bAsync ) ; + + if ( bAsync ) + { + oXmlHttp.onreadystatechange = function() + { + if ( oXmlHttp.readyState == 4 ) + { + var oXml ; + try + { + // this is the same test for an FF2 bug as in fckxml_gecko.js + // but we've moved the responseXML assignment into the try{} + // so we don't even have to check the return status codes. + var test = oXmlHttp.responseXML.firstChild ; + oXml = oXmlHttp.responseXML ; + } + catch ( e ) + { + try + { + oXml = (new DOMParser()).parseFromString( oXmlHttp.responseText, 'text/xml' ) ; + } + catch ( e ) {} + } + + if ( !oXml || !oXml.firstChild || oXml.firstChild.nodeName == 'parsererror' ) + { + alert( 'The server didn\'t send back a proper XML response. Please contact your system administrator.\n\n' + + 'XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')\n\n' + + 'Requested URL:\n' + urlToCall + '\n\n' + + 'Response text:\n' + oXmlHttp.responseText ) ; + return ; + } + + oFCKXml.DOMDocument = oXml ; + asyncFunctionPointer( oFCKXml ) ; + } + } + } + + oXmlHttp.send( null ) ; + + if ( ! bAsync ) + { + if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 ) + this.DOMDocument = oXmlHttp.responseXML ; + else + { + alert( 'XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')' ) ; + } + } +} + +FCKXml.prototype.SelectNodes = function( xpath ) +{ + if ( navigator.userAgent.indexOf('MSIE') >= 0 ) // IE + return this.DOMDocument.selectNodes( xpath ) ; + else // Gecko + { + var aNodeArray = new Array(); + + var xPathResult = this.DOMDocument.evaluate( xpath, this.DOMDocument, + this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ; + if ( xPathResult ) + { + var oNode = xPathResult.iterateNext() ; + while( oNode ) + { + aNodeArray[aNodeArray.length] = oNode ; + oNode = xPathResult.iterateNext(); + } + } + return aNodeArray ; + } +} + +FCKXml.prototype.SelectSingleNode = function( xpath ) +{ + if ( navigator.userAgent.indexOf('MSIE') >= 0 ) // IE + return this.DOMDocument.selectSingleNode( xpath ) ; + else // Gecko + { + var xPathResult = this.DOMDocument.evaluate( xpath, this.DOMDocument, + this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), 9, null); + + if ( xPathResult && xPathResult.singleNodeValue ) + return xPathResult.singleNodeValue ; + else + return null ; + } +} diff --git a/fckeditor/FCKeditor/editor/filemanager/connectors/php/basexml.php b/fckeditor/FCKeditor/editor/filemanager/connectors/php/basexml.php new file mode 100644 index 0000000..e8ae37b --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/connectors/php/basexml.php @@ -0,0 +1,99 @@ +' ; + + // Create the main "Connector" node. + echo '' ; + + // Add the current folder node. + echo '' ; + + $GLOBALS['HeaderSent'] = true ; +} + +function CreateXmlFooter() +{ + echo '' ; +} + +function SendError( $number, $text ) +{ + if ( $_GET['Command'] == 'FileUpload' ) + SendUploadResults( $number, "", "", $text ) ; + + if ( isset( $GLOBALS['HeaderSent'] ) && $GLOBALS['HeaderSent'] ) + { + SendErrorNode( $number, $text ) ; + CreateXmlFooter() ; + } + else + { + SetXmlHeaders() ; + + // Create the XML document header + echo '' ; + + echo '' ; + + SendErrorNode( $number, $text ) ; + + echo '' ; + } + exit ; +} + +function SendErrorNode( $number, $text ) +{ + if ($text) + echo '' ; + else + echo '' ; +} +?> diff --git a/fckeditor/FCKeditor/editor/filemanager/connectors/php/commands.php b/fckeditor/FCKeditor/editor/filemanager/connectors/php/commands.php new file mode 100644 index 0000000..ddfc3a7 --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/connectors/php/commands.php @@ -0,0 +1,306 @@ +' ; + } + closedir( $oCurrentFolder ) ; + } + + // Open the "Folders" node. + echo "" ; + + natcasesort( $aFolders ) ; + foreach ( $aFolders as $sFolder ) + echo $sFolder ; + + // Close the "Folders" node. + echo "" ; +} + +function GetFoldersAndFiles( $resourceType, $currentFolder ) +{ + // Map the virtual path to the local server path. + $sServerDir = ServerMapFolder( $resourceType, $currentFolder, 'GetFoldersAndFiles' ) ; + + // Arrays that will hold the folders and files names. + $aFolders = array() ; + $aFiles = array() ; + + $oCurrentFolder = @opendir( $sServerDir ) ; + + if ($oCurrentFolder !== false) + { + while ( $sFile = readdir( $oCurrentFolder ) ) + { + if ( $sFile != '.' && $sFile != '..' ) + { + if ( is_dir( $sServerDir . $sFile ) ) + $aFolders[] = '' ; + else + { + $iFileSize = @filesize( $sServerDir . $sFile ) ; + if ( !$iFileSize ) { + $iFileSize = 0 ; + } + if ( $iFileSize > 0 ) + { + $iFileSize = round( $iFileSize / 1024 ) ; + if ( $iFileSize < 1 ) + $iFileSize = 1 ; + } + + $aFiles[] = '' ; + } + } + } + closedir( $oCurrentFolder ) ; + } + + // Send the folders + natcasesort( $aFolders ) ; + echo '' ; + + foreach ( $aFolders as $sFolder ) + echo $sFolder ; + + echo '' ; + + // Send the files + natcasesort( $aFiles ) ; + echo '' ; + + foreach ( $aFiles as $sFiles ) + echo $sFiles ; + + echo '' ; +} + +function CreateFolder( $resourceType, $currentFolder ) +{ + if (!isset($_GET)) { + global $_GET; + } + $sErrorNumber = '0' ; + $sErrorMsg = '' ; + + if ( isset( $_GET['NewFolderName'] ) ) + { + $sNewFolderName = $_GET['NewFolderName'] ; + $sNewFolderName = SanitizeFolderName( $sNewFolderName ) ; + + if ( strpos( $sNewFolderName, '..' ) !== FALSE ) + $sErrorNumber = '102' ; // Invalid folder name. + else + { + // Map the virtual path to the local server path of the current folder. + $sServerDir = ServerMapFolder( $resourceType, $currentFolder, 'CreateFolder' ) ; + + if ( is_writable( $sServerDir ) ) + { + $sServerDir .= $sNewFolderName ; + + $sErrorMsg = CreateServerFolder( $sServerDir ) ; + + switch ( $sErrorMsg ) + { + case '' : + $sErrorNumber = '0' ; + break ; + case 'Invalid argument' : + case 'No such file or directory' : + $sErrorNumber = '102' ; // Path too long. + break ; + default : + $sErrorNumber = '110' ; + break ; + } + } + else + $sErrorNumber = '103' ; + } + } + else + $sErrorNumber = '102' ; + + // Create the "Error" node. + echo '' ; +} + +function FileUpload( $resourceType, $currentFolder, $sCommand ) +{ + if (!isset($_FILES)) { + global $_FILES; + } + $sErrorNumber = '0' ; + $sFileName = '' ; + + if ( isset( $_FILES['NewFile'] ) && !is_null( $_FILES['NewFile']['tmp_name'] ) ) + { + global $Config ; + + $oFile = $_FILES['NewFile'] ; + + // Map the virtual path to the local server path. + $sServerDir = ServerMapFolder( $resourceType, $currentFolder, $sCommand ) ; + + // Get the uploaded file name. + $sFileName = $oFile['name'] ; + $sFileName = SanitizeFileName( $sFileName ) ; + + $sOriginalFileName = $sFileName ; + + // Get the extension. + $sExtension = substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) ; + $sExtension = strtolower( $sExtension ) ; + + if ( isset( $Config['SecureImageUploads'] ) ) + { + if ( ( $isImageValid = IsImageValid( $oFile['tmp_name'], $sExtension ) ) === false ) + { + $sErrorNumber = '202' ; + } + } + + if ( isset( $Config['HtmlExtensions'] ) ) + { + if ( !IsHtmlExtension( $sExtension, $Config['HtmlExtensions'] ) && + ( $detectHtml = DetectHtml( $oFile['tmp_name'] ) ) === true ) + { + $sErrorNumber = '202' ; + } + } + + // Check if it is an allowed extension. + if ( !$sErrorNumber && IsAllowedExt( $sExtension, $resourceType ) ) + { + $iCounter = 0 ; + + while ( true ) + { + $sFilePath = $sServerDir . $sFileName ; + + if ( is_file( $sFilePath ) ) + { + $iCounter++ ; + $sFileName = RemoveExtension( $sOriginalFileName ) . '(' . $iCounter . ').' . $sExtension ; + $sErrorNumber = '201' ; + } + else + { + move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ; + + if ( is_file( $sFilePath ) ) + { + if ( isset( $Config['ChmodOnUpload'] ) && !$Config['ChmodOnUpload'] ) + { + break ; + } + + $permissions = 0777; + + if ( isset( $Config['ChmodOnUpload'] ) && $Config['ChmodOnUpload'] ) + { + $permissions = $Config['ChmodOnUpload'] ; + } + + $oldumask = umask(0) ; + chmod( $sFilePath, $permissions ) ; + umask( $oldumask ) ; + } + + break ; + } + } + + if ( file_exists( $sFilePath ) ) + { + //previous checks failed, try once again + if ( isset( $isImageValid ) && $isImageValid === -1 && IsImageValid( $sFilePath, $sExtension ) === false ) + { + @unlink( $sFilePath ) ; + $sErrorNumber = '202' ; + } + else if ( isset( $detectHtml ) && $detectHtml === -1 && DetectHtml( $sFilePath ) === true ) + { + @unlink( $sFilePath ) ; + $sErrorNumber = '202' ; + } + } + } + else + $sErrorNumber = '202' ; + } + else + $sErrorNumber = '202' ; + + + $sFileUrl = CombinePaths( GetResourceTypePath( $resourceType, $sCommand ) , $currentFolder ) ; + $sFileUrl = CombinePaths( $sFileUrl, $sFileName ) ; + + SendUploadResults( $sErrorNumber, $sFileUrl, $sFileName ) ; + + exit ; +} +// code by bram.us +function DeleteFile($resourceType, $currentFolder) { + $sErrorNumber = '0' ; + $sErrorMsg = '' ; + if ( isset( $_GET['FileName'] ) ) { + // Map the virtual path to the local server path. + $sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ; + $sFileName = $_GET['FileName'] ; + if ( strpos( $sFileName, '..' ) !== FALSE ) { + $sErrorNumber = '102' ; // Invalid file name. + $sErrorMsg = 'Invalid file name'; + } else { + if ( @unlink($sServerDir.$sFileName) ) { + $sErrorNumber = '0' ; // deleted + } else { + $sErrorNumber = '103' ; // not deleted + $sErrorMsg = 'Could not delete file '.$sServerDir.$sFileName; + } + } + } else { + $sErrorNumber = '102' ; // no file set + $sErrorMsg = 'No file specified'; + } + // Create the "Error" node. + echo '' ; +} +?> diff --git a/fckeditor/FCKeditor/editor/filemanager/connectors/php/config.php b/fckeditor/FCKeditor/editor/filemanager/connectors/php/config.php new file mode 100644 index 0000000..cd5633e --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/connectors/php/config.php @@ -0,0 +1,226 @@ + diff --git a/fckeditor/FCKeditor/editor/filemanager/connectors/php/connector.php b/fckeditor/FCKeditor/editor/filemanager/connectors/php/connector.php new file mode 100644 index 0000000..e0e95ee --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/connectors/php/connector.php @@ -0,0 +1,90 @@ + diff --git a/fckeditor/FCKeditor/editor/filemanager/connectors/php/io.php b/fckeditor/FCKeditor/editor/filemanager/connectors/php/io.php new file mode 100644 index 0000000..666a8a8 --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/connectors/php/io.php @@ -0,0 +1,303 @@ + 0 ) + return $Config['QuickUploadAbsolutePath'][$resourceType] ; + + // Map the "UserFiles" path to a local directory. + return Server_MapPath( $Config['QuickUploadPath'][$resourceType] ) ; + } + else + { + if ( strlen( $Config['FileTypesAbsolutePath'][$resourceType] ) > 0 ) + return $Config['FileTypesAbsolutePath'][$resourceType] ; + + // Map the "UserFiles" path to a local directory. + return Server_MapPath( $Config['FileTypesPath'][$resourceType] ) ; + } +} + +function GetUrlFromPath( $resourceType, $folderPath, $sCommand ) +{ + return CombinePaths( GetResourceTypePath( $resourceType, $sCommand ), $folderPath ) ; +} + +function RemoveExtension( $fileName ) +{ + return substr( $fileName, 0, strrpos( $fileName, '.' ) ) ; +} + +function ServerMapFolder( $resourceType, $folderPath, $sCommand ) +{ + // Get the resource type directory. + $sResourceTypePath = GetResourceTypeDirectory( $resourceType, $sCommand ) ; + + // Ensure that the directory exists. + $sErrorMsg = CreateServerFolder( $sResourceTypePath ) ; + if ( $sErrorMsg != '' ) + SendError( 1, "Error creating folder \"{$sResourceTypePath}\" ({$sErrorMsg})" ) ; + + // Return the resource type directory combined with the required path. + return CombinePaths( $sResourceTypePath , $folderPath ) ; +} + +function GetParentFolder( $folderPath ) +{ + $sPattern = "-[/\\\\][^/\\\\]+[/\\\\]?$-" ; + return preg_replace( $sPattern, '', $folderPath ) ; +} + +function CreateServerFolder( $folderPath, $lastFolder = null ) +{ + global $Config ; + $sParent = GetParentFolder( $folderPath ) ; + + // Ensure the folder path has no double-slashes, or mkdir may fail on certain platforms + while ( strpos($folderPath, '//') !== false ) + { + $folderPath = str_replace( '//', '/', $folderPath ) ; + } + + // Check if the parent exists, or create it. + if ( !file_exists( $sParent ) ) + { + //prevents agains infinite loop when we can't create root folder + if ( !is_null( $lastFolder ) && $lastFolder === $sParent) { + return "Can't create $folderPath directory" ; + } + + $sErrorMsg = CreateServerFolder( $sParent, $folderPath ) ; + if ( $sErrorMsg != '' ) + return $sErrorMsg ; + } + + if ( !file_exists( $folderPath ) ) + { + // Turn off all error reporting. + error_reporting( 0 ) ; + + $php_errormsg = '' ; + // Enable error tracking to catch the error. + ini_set( 'track_errors', '1' ) ; + + if ( isset( $Config['ChmodOnFolderCreate'] ) && !$Config['ChmodOnFolderCreate'] ) + { + mkdir( $folderPath ) ; + } + else + { + $permissions = 0777 ; + if ( isset( $Config['ChmodOnFolderCreate'] ) ) + { + $permissions = $Config['ChmodOnFolderCreate'] ; + } + // To create the folder with 0777 permissions, we need to set umask to zero. + $oldumask = umask(0) ; + mkdir( $folderPath, $permissions ) ; + umask( $oldumask ) ; + } + + $sErrorMsg = $php_errormsg ; + + // Restore the configurations. + ini_restore( 'track_errors' ) ; + ini_restore( 'error_reporting' ) ; + + return $sErrorMsg ; + } + else + return '' ; +} + +function GetRootPath() +{ + if (!isset($_SERVER)) { + global $_SERVER; + } + $sRealPath = realpath( './' ) ; + // #2124 ensure that no slash is at the end + $sRealPath = rtrim($sRealPath,"\\/"); + + $sSelfPath = $_SERVER['PHP_SELF'] ; + $sSelfPath = substr( $sSelfPath, 0, strrpos( $sSelfPath, '/' ) ) ; + + $sSelfPath = str_replace( '/', DIRECTORY_SEPARATOR, $sSelfPath ) ; + + $position = strpos( $sRealPath, $sSelfPath ) ; + + // This can check only that this script isn't run from a virtual dir + // But it avoids the problems that arise if it isn't checked + if ( $position === false || $position <> strlen( $sRealPath ) - strlen( $sSelfPath ) ) + SendError( 1, 'Sorry, can\'t map "UserFilesPath" to a physical path. You must set the "UserFilesAbsolutePath" value in "editor/filemanager/connectors/php/config.php".' ) ; + + return substr( $sRealPath, 0, $position ) ; +} + +// Emulate the asp Server.mapPath function. +// given an url path return the physical directory that it corresponds to +function Server_MapPath( $path ) +{ + // This function is available only for Apache + if ( function_exists( 'apache_lookup_uri' ) ) + { + $info = apache_lookup_uri( $path ) ; + return $info->filename . $info->path_info ; + } + + // This isn't correct but for the moment there's no other solution + // If this script is under a virtual directory or symlink it will detect the problem and stop + return GetRootPath() . $path ; +} + +function IsAllowedExt( $sExtension, $resourceType ) +{ + global $Config ; + // Get the allowed and denied extensions arrays. + $arAllowed = $Config['AllowedExtensions'][$resourceType] ; + $arDenied = $Config['DeniedExtensions'][$resourceType] ; + + if ( count($arAllowed) > 0 && !in_array( $sExtension, $arAllowed ) ) + return false ; + + if ( count($arDenied) > 0 && in_array( $sExtension, $arDenied ) ) + return false ; + + return true ; +} + +function IsAllowedType( $resourceType ) +{ + global $Config ; + if ( !in_array( $resourceType, $Config['ConfigAllowedTypes'] ) ) + return false ; + + return true ; +} + +function IsAllowedCommand( $sCommand ) +{ + global $Config ; + + if ( !in_array( $sCommand, $Config['ConfigAllowedCommands'] ) ) + return false ; + + return true ; +} + +function GetCurrentFolder() +{ + if (!isset($_GET)) { + global $_GET; + } + $sCurrentFolder = isset( $_GET['CurrentFolder'] ) ? $_GET['CurrentFolder'] : '/' ; + + // Check the current folder syntax (must begin and start with a slash). + if ( !preg_match( '|/$|', $sCurrentFolder ) ) + $sCurrentFolder .= '/' ; + if ( strpos( $sCurrentFolder, '/' ) !== 0 ) + $sCurrentFolder = '/' . $sCurrentFolder ; + + // Ensure the folder path has no double-slashes + while ( strpos ($sCurrentFolder, '//') !== false ) { + $sCurrentFolder = str_replace ('//', '/', $sCurrentFolder) ; + } + + // Check for invalid folder paths (..) + if ( strpos( $sCurrentFolder, '..' ) || strpos( $sCurrentFolder, "\\" )) + SendError( 102, '' ) ; + + if ( preg_match(",(/\.)|[[:cntrl:]]|(//)|(\\\\)|([\:\*\?\"\<\>\|]),", $sCurrentFolder)) + SendError( 102, '' ) ; + + return $sCurrentFolder ; +} + +// Do a cleanup of the folder name to avoid possible problems +function SanitizeFolderName( $sNewFolderName ) +{ + $sNewFolderName = stripslashes( $sNewFolderName ) ; + + // Remove . \ / | : ? * " < > + $sNewFolderName = preg_replace( '/\\.|\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[[:cntrl:]]/', '_', $sNewFolderName ) ; + + return $sNewFolderName ; +} + +// Do a cleanup of the file name to avoid possible problems +function SanitizeFileName( $sNewFileName ) +{ + global $Config ; + + $sNewFileName = stripslashes( $sNewFileName ) ; + + // Replace dots in the name with underscores (only one dot can be there... security issue). + if ( $Config['ForceSingleExtension'] ) + $sNewFileName = preg_replace( '/\\.(?![^.]*$)/', '_', $sNewFileName ) ; + + // Remove \ / | : ? * " < > + $sNewFileName = preg_replace( '/\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[[:cntrl:]]/', '_', $sNewFileName ) ; + + return $sNewFileName ; +} + +// This is the function that sends the results of the uploading process. +function SendUploadResults( $errorNumber, $fileUrl = '', $fileName = '', $customMsg = '' ) +{ + // Minified version of the document.domain automatic fix script (#1919). + // The original script can be found at _dev/domain_fix_template.js + echo << +(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})(); +EOF; + + if ($errorNumber && $errorNumber != 201) { + $fileUrl = ""; + $fileName = ""; + } + + $rpl = array( '\\' => '\\\\', '"' => '\\"' ) ; + echo 'window.parent.OnUploadCompleted(' . $errorNumber . ',"' . strtr( $fileUrl, $rpl ) . '","' . strtr( $fileName, $rpl ) . '", "' . strtr( $customMsg, $rpl ) . '") ;' ; + echo '' ; + exit ; +} + +?> diff --git a/fckeditor/FCKeditor/editor/filemanager/connectors/php/phpcompat.php b/fckeditor/FCKeditor/editor/filemanager/connectors/php/phpcompat.php new file mode 100644 index 0000000..6fc89e5 --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/connectors/php/phpcompat.php @@ -0,0 +1,17 @@ + diff --git a/fckeditor/FCKeditor/editor/filemanager/connectors/php/util.php b/fckeditor/FCKeditor/editor/filemanager/connectors/php/util.php new file mode 100644 index 0000000..c41c765 --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/connectors/php/util.php @@ -0,0 +1,220 @@ + $val ) + { + $lcaseHtmlExtensions[$key] = strtolower( $val ) ; + } + return in_array( $ext, $lcaseHtmlExtensions ) ; +} + +/** + * Detect HTML in the first KB to prevent against potential security issue with + * IE/Safari/Opera file type auto detection bug. + * Returns true if file contain insecure HTML code at the beginning. + * + * @param string $filePath absolute path to file + * @return boolean + */ +function DetectHtml( $filePath ) +{ + $fp = @fopen( $filePath, 'rb' ) ; + + //open_basedir restriction, see #1906 + if ( $fp === false || !flock( $fp, LOCK_SH ) ) + { + return -1 ; + } + + $chunk = fread( $fp, 1024 ) ; + flock( $fp, LOCK_UN ) ; + fclose( $fp ) ; + + $chunk = strtolower( $chunk ) ; + + if (!$chunk) + { + return false ; + } + + $chunk = trim( $chunk ) ; + + if ( preg_match( "/= 4.0.7 + if ( function_exists( 'version_compare' ) ) { + $sCurrentVersion = phpversion(); + if ( version_compare( $sCurrentVersion, "4.2.0" ) >= 0 ) { + $imageCheckExtensions[] = "tiff"; + $imageCheckExtensions[] = "tif"; + } + if ( version_compare( $sCurrentVersion, "4.3.0" ) >= 0 ) { + $imageCheckExtensions[] = "swc"; + } + if ( version_compare( $sCurrentVersion, "4.3.2" ) >= 0 ) { + $imageCheckExtensions[] = "jpc"; + $imageCheckExtensions[] = "jp2"; + $imageCheckExtensions[] = "jpx"; + $imageCheckExtensions[] = "jb2"; + $imageCheckExtensions[] = "xbm"; + $imageCheckExtensions[] = "wbmp"; + } + } + + if ( !in_array( $extension, $imageCheckExtensions ) ) { + return true; + } + + if ( @getimagesize( $filePath ) === false ) { + return false ; + } + + return true; +} + +?> diff --git a/fckeditor/FCKeditor/editor/filemanager/connectors/test.html.txt b/fckeditor/FCKeditor/editor/filemanager/connectors/test.html.txt new file mode 100644 index 0000000..fc16031 --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/connectors/test.html.txt @@ -0,0 +1,210 @@ + + + + + FCKeditor - Connectors Tests + + + + + + + + + + + +
+ + + + + + + + +
+ Connector:
+ +
+     + Current Folder
+
+     + Resource Type
+ +
+
+ + + + + + + + + + +
+ Get Folders +     + Get Folders and Files +     + Create Folder +     +
+ File Upload
+ + +
+
+
+ URL: +
+ +
+ + diff --git a/fckeditor/FCKeditor/editor/filemanager/connectors/uploadtest.html.txt b/fckeditor/FCKeditor/editor/filemanager/connectors/uploadtest.html.txt new file mode 100644 index 0000000..c5bc8e2 --- /dev/null +++ b/fckeditor/FCKeditor/editor/filemanager/connectors/uploadtest.html.txt @@ -0,0 +1,192 @@ + + + + FCKeditor - Uploaders Tests + + + + + + + + + + + +
+ + + + + + + + +
+ Select the "File Uploader" to use:
+ +
+ Resource Type
+ +
+ Current Folder:
+ +
       + Custom Uploader URL:
+ +
+
+ + + + + + +
+
+ Upload a new file:
+
+ + +
+
       + Uploaded File URL:
+ +
+
+ Post URL:   +
+ +
+ + diff --git a/fckeditor/FCKeditor/editor/images/anchor.gif b/fckeditor/FCKeditor/editor/images/anchor.gif new file mode 100644 index 0000000..5aa797b Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/anchor.gif differ diff --git a/fckeditor/FCKeditor/editor/images/arrow_ltr.gif b/fckeditor/FCKeditor/editor/images/arrow_ltr.gif new file mode 100644 index 0000000..9c59bfe Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/arrow_ltr.gif differ diff --git a/fckeditor/FCKeditor/editor/images/arrow_rtl.gif b/fckeditor/FCKeditor/editor/images/arrow_rtl.gif new file mode 100644 index 0000000..22e8649 Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/arrow_rtl.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/angel_smile.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/angel_smile.gif new file mode 100644 index 0000000..a95e053 Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/angel_smile.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/angry_smile.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/angry_smile.gif new file mode 100644 index 0000000..c667c5d Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/angry_smile.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/broken_heart.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/broken_heart.gif new file mode 100644 index 0000000..938cce1 Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/broken_heart.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/cake.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/cake.gif new file mode 100644 index 0000000..f6489d7 Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/cake.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/confused_smile.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/confused_smile.gif new file mode 100644 index 0000000..aeb0539 Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/confused_smile.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/cry_smile.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/cry_smile.gif new file mode 100644 index 0000000..0758f42 Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/cry_smile.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/devil_smile.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/devil_smile.gif new file mode 100644 index 0000000..15518d7 Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/devil_smile.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/embaressed_smile.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/embaressed_smile.gif new file mode 100644 index 0000000..c431946 Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/embaressed_smile.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/envelope.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/envelope.gif new file mode 100644 index 0000000..66d3656 Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/envelope.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/heart.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/heart.gif new file mode 100644 index 0000000..305714f Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/heart.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/kiss.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/kiss.gif new file mode 100644 index 0000000..f840ea6 Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/kiss.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/lightbulb.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/lightbulb.gif new file mode 100644 index 0000000..863be6e Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/lightbulb.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/omg_smile.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/omg_smile.gif new file mode 100644 index 0000000..aabc7fd Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/omg_smile.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/regular_smile.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/regular_smile.gif new file mode 100644 index 0000000..33f297e Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/regular_smile.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/sad_smile.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/sad_smile.gif new file mode 100644 index 0000000..dfb78ef Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/sad_smile.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/shades_smile.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/shades_smile.gif new file mode 100644 index 0000000..157df77 Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/shades_smile.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/teeth_smile.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/teeth_smile.gif new file mode 100644 index 0000000..26b5a55 Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/teeth_smile.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/thumbs_down.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/thumbs_down.gif new file mode 100644 index 0000000..f53ee72 Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/thumbs_down.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/thumbs_up.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/thumbs_up.gif new file mode 100644 index 0000000..7e8c746 Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/thumbs_up.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/tounge_smile.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/tounge_smile.gif new file mode 100644 index 0000000..b87ec44 Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/tounge_smile.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif new file mode 100644 index 0000000..c074122 Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif differ diff --git a/fckeditor/FCKeditor/editor/images/smiley/msn/wink_smile.gif b/fckeditor/FCKeditor/editor/images/smiley/msn/wink_smile.gif new file mode 100644 index 0000000..eefe61d Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/smiley/msn/wink_smile.gif differ diff --git a/fckeditor/FCKeditor/editor/images/spacer.gif b/fckeditor/FCKeditor/editor/images/spacer.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/fckeditor/FCKeditor/editor/images/spacer.gif differ diff --git a/fckeditor/FCKeditor/editor/js/fckadobeair.js b/fckeditor/FCKeditor/editor/js/fckadobeair.js new file mode 100644 index 0000000..aea8fdc --- /dev/null +++ b/fckeditor/FCKeditor/editor/js/fckadobeair.js @@ -0,0 +1,176 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Compatibility code for Adobe AIR. + */ + +if ( FCKBrowserInfo.IsAIR ) +{ + var FCKAdobeAIR = (function() + { + /* + * ### Private functions. + */ + + var getDocumentHead = function( doc ) + { + var head ; + var heads = doc.getElementsByTagName( 'head' ) ; + + if( heads && heads[0] ) + head = heads[0] ; + else + { + head = doc.createElement( 'head' ) ; + doc.documentElement.insertBefore( head, doc.documentElement.firstChild ) ; + } + + return head ; + } ; + + /* + * ### Public interface. + */ + return { + FCKeditorAPI_Evaluate : function( parentWindow, script ) + { + // TODO : This one doesn't work always. The parent window will + // point to an anonymous function in this window. If this + // window is destroyied the parent window will be pointing to + // an invalid reference. + + // Evaluate the script in this window. + eval( script ) ; + + // Point the FCKeditorAPI property of the parent window to the + // local reference. + parentWindow.FCKeditorAPI = window.FCKeditorAPI ; + }, + + EditingArea_Start : function( doc, html ) + { + // Get the HTML for the . + var headInnerHtml = html.match( /([\s\S]*)<\/head>/i )[1] ; + + if ( headInnerHtml && headInnerHtml.length > 0 ) + { + // Inject the HTML inside a
. + // Do that before getDocumentHead because WebKit moves + // elements to the at this point. + var div = doc.createElement( 'div' ) ; + div.innerHTML = headInnerHtml ; + + // Move the
nodes to . + FCKDomTools.MoveChildren( div, getDocumentHead( doc ) ) ; + } + + doc.body.innerHTML = html.match( /([\s\S]*)<\/body>/i )[1] ; + + //prevent clicking on hyperlinks and navigating away + doc.addEventListener('click', function( ev ) + { + ev.preventDefault() ; + ev.stopPropagation() ; + }, true ) ; + }, + + Panel_Contructor : function( doc, baseLocation ) + { + var head = getDocumentHead( doc ) ; + + // Set the href. + head.appendChild( doc.createElement('base') ).href = baseLocation ; + + doc.body.style.margin = '0px' ; + doc.body.style.padding = '0px' ; + }, + + ToolbarSet_GetOutElement : function( win, outMatch ) + { + var toolbarTarget = win.parent ; + + var targetWindowParts = outMatch[1].split( '.' ) ; + while ( targetWindowParts.length > 0 ) + { + var part = targetWindowParts.shift() ; + if ( part.length > 0 ) + toolbarTarget = toolbarTarget[ part ] ; + } + + toolbarTarget = toolbarTarget.document.getElementById( outMatch[2] ) ; + }, + + ToolbarSet_InitOutFrame : function( doc ) + { + var head = getDocumentHead( doc ) ; + + head.appendChild( doc.createElement('base') ).href = window.document.location ; + + var targetWindow = doc.defaultView; + + targetWindow.adjust = function() + { + targetWindow.frameElement.height = doc.body.scrollHeight; + } ; + + targetWindow.onresize = targetWindow.adjust ; + targetWindow.setTimeout( targetWindow.adjust, 0 ) ; + + doc.body.style.overflow = 'hidden'; + doc.body.innerHTML = document.getElementById( 'xToolbarSpace' ).innerHTML ; + } + } ; + })(); + + /* + * ### Overrides + */ + ( function() + { + // Save references for override reuse. + var _Original_FCKPanel_Window_OnFocus = FCKPanel_Window_OnFocus ; + var _Original_FCKPanel_Window_OnBlur = FCKPanel_Window_OnBlur ; + var _Original_FCK_StartEditor = FCK.StartEditor ; + + FCKPanel_Window_OnFocus = function( e, panel ) + { + // Call the original implementation. + _Original_FCKPanel_Window_OnFocus.call( this, e, panel ) ; + + if ( panel._focusTimer ) + clearTimeout( panel._focusTimer ) ; + } + + FCKPanel_Window_OnBlur = function( e, panel ) + { + // Delay the execution of the original function. + panel._focusTimer = FCKTools.SetTimeout( _Original_FCKPanel_Window_OnBlur, 100, this, [ e, panel ] ) ; + } + + FCK.StartEditor = function() + { + // Force pointing to the CSS files instead of using the inline CSS cached styles. + window.FCK_InternalCSS = FCKConfig.BasePath + 'css/fck_internal.css' ; + window.FCK_ShowTableBordersCSS = FCKConfig.BasePath + 'css/fck_showtableborders_gecko.css' ; + + _Original_FCK_StartEditor.apply( this, arguments ) ; + } + })(); +} diff --git a/fckeditor/FCKeditor/editor/js/fckeditorcode_gecko.js b/fckeditor/FCKeditor/editor/js/fckeditorcode_gecko.js new file mode 100644 index 0000000..e407b69 --- /dev/null +++ b/fckeditor/FCKeditor/editor/js/fckeditorcode_gecko.js @@ -0,0 +1,109 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This file has been compressed for better performance. The original source + * can be found at "editor/_source". + */ + +var FCK_STATUS_NOTLOADED=window.parent.FCK_STATUS_NOTLOADED=0;var FCK_STATUS_ACTIVE=window.parent.FCK_STATUS_ACTIVE=1;var FCK_STATUS_COMPLETE=window.parent.FCK_STATUS_COMPLETE=2;var FCK_TRISTATE_OFF=window.parent.FCK_TRISTATE_OFF=0;var FCK_TRISTATE_ON=window.parent.FCK_TRISTATE_ON=1;var FCK_TRISTATE_DISABLED=window.parent.FCK_TRISTATE_DISABLED=-1;var FCK_UNKNOWN=window.parent.FCK_UNKNOWN=-9;var FCK_TOOLBARITEM_ONLYICON=window.parent.FCK_TOOLBARITEM_ONLYICON=0;var FCK_TOOLBARITEM_ONLYTEXT=window.parent.FCK_TOOLBARITEM_ONLYTEXT=1;var FCK_TOOLBARITEM_ICONTEXT=window.parent.FCK_TOOLBARITEM_ICONTEXT=2;var FCK_EDITMODE_WYSIWYG=window.parent.FCK_EDITMODE_WYSIWYG=0;var FCK_EDITMODE_SOURCE=window.parent.FCK_EDITMODE_SOURCE=1;var FCK_IMAGES_PATH='images/';var FCK_SPACER_PATH='images/spacer.gif';var CTRL=1000;var SHIFT=2000;var ALT=4000;var FCK_STYLE_BLOCK=0;var FCK_STYLE_INLINE=1;var FCK_STYLE_OBJECT=2; +String.prototype.Contains=function(A){return (this.indexOf(A)>-1);};String.prototype.Equals=function(){var A=arguments;if (A.length==1&&A[0].pop) A=A[0];for (var i=0;iC) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.Remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B=7),IsIE6:/*@cc_on!@*/false&&(parseInt(s.match(/msie (\d+)/)[1],10)>=6),IsSafari:s.Contains(' applewebkit/'),IsOpera:!!window.opera,IsAIR:s.Contains(' adobeair/'),IsMac:s.Contains('macintosh')};(function(A){A.IsGecko=(navigator.product=='Gecko')&&!A.IsSafari&&!A.IsOpera;A.IsGeckoLike=(A.IsGecko||A.IsSafari||A.IsOpera);if (A.IsGecko){var B=s.match(/rv:(\d+\.\d+)/);var C=B&&parseFloat(B[1]);if (C){A.IsGecko10=(C<1.8);A.IsGecko19=(C>1.8);}};if (A.IsSafari) A.IsSafari3=(parseFloat(s.match(/ applewebkit\/(\d+)/)[1])<526);})(FCKBrowserInfo); +var FCKURLParams={};(function(){var A=document.location.search.substr(1).split('&');for (var i=0;i';if (!FCKRegexLib.HtmlOpener.test(A)) A=''+A+'';if (!FCKRegexLib.HeadOpener.test(A)) A=A.replace(FCKRegexLib.HtmlOpener,'$&');return A;}else{var B=FCKConfig.DocType+'0&&!FCKRegexLib.Html4DocType.test(FCKConfig.DocType)) B+=' style="overflow-y: scroll"';B+='>'+A+'';return B;}},ConvertToDataFormat:function(A,B,C,D){var E=FCKXHtml.GetXHTML(A,!B,D);if (C&&FCKRegexLib.EmptyOutParagraph.test(E)) return '';return E;},FixHtml:function(A){return A;}}; +var FCK={Name:FCKURLParams['InstanceName'],Status:0,EditMode:0,Toolbar:null,HasFocus:false,DataProcessor:new FCKDataProcessor(),GetInstanceObject:(function(){var w=window;return function(name){return w[name];}})(),AttachToOnSelectionChange:function(A){this.Events.AttachEvent('OnSelectionChange',A);},GetLinkedFieldValue:function(){return this.LinkedField.value;},GetParentForm:function(){return this.LinkedField.form;},StartupValue:'',IsDirty:function(){if (this.EditMode==1) return (this.StartupValue!=this.EditingArea.Textarea.value);else{if (!this.EditorDocument) return false;return (this.StartupValue!=this.EditorDocument.body.innerHTML);}},ResetIsDirty:function(){if (this.EditMode==1) this.StartupValue=this.EditingArea.Textarea.value;else if (this.EditorDocument.body) this.StartupValue=this.EditorDocument.body.innerHTML;},StartEditor:function(){this.TempBaseTag=FCKConfig.BaseHref.length>0?'':'';var A=FCK.KeystrokeHandler=new FCKKeystrokeHandler();A.OnKeystroke=_FCK_KeystrokeHandler_OnKeystroke;A.SetKeystrokes(FCKConfig.Keystrokes);if (FCKBrowserInfo.IsIE7){if ((CTRL+86) in A.Keystrokes) A.SetKeystrokes([CTRL+86,true]);if ((SHIFT+45) in A.Keystrokes) A.SetKeystrokes([SHIFT+45,true]);};A.SetKeystrokes([CTRL+8,true]);this.EditingArea=new FCKEditingArea(document.getElementById('xEditingArea'));this.EditingArea.FFSpellChecker=FCKConfig.FirefoxSpellChecker;this.SetData(this.GetLinkedFieldValue(),true);FCKTools.AddEventListener(document,"keydown",this._TabKeyHandler);this.AttachToOnSelectionChange(_FCK_PaddingNodeListener);if (FCKBrowserInfo.IsGecko) this.AttachToOnSelectionChange(this._ExecCheckEmptyBlock);},Focus:function(){FCK.EditingArea.Focus();},SetStatus:function(A){this.Status=A;if (A==1){FCKFocusManager.AddWindow(window,true);if (FCKBrowserInfo.IsIE) FCKFocusManager.AddWindow(window.frameElement,true);if (FCKConfig.StartupFocus) FCK.Focus();};this.Events.FireEvent('OnStatusChange',A);},FixBody:function(){var A=FCKConfig.EnterMode;if (A!='p'&&A!='div') return;var B=this.EditorDocument;if (!B) return;var C=B.body;if (!C) return;FCKDomTools.TrimNode(C);var D=C.firstChild;var E;while (D){var F=false;switch (D.nodeType){case 1:var G=D.nodeName.toLowerCase();if (!FCKListsLib.BlockElements[G]&&G!='li'&&!D.getAttribute('_fckfakelement')&&D.getAttribute('_moz_dirty')==null) F=true;break;case 3:if (E||D.nodeValue.Trim().length>0) F=true;break;case 8:if (E) F=true;break;};if (F){var H=D.parentNode;if (!E) E=H.insertBefore(B.createElement(A),D);E.appendChild(H.removeChild(D));D=E.nextSibling;}else{if (E){FCKDomTools.TrimNode(E);E=null;};D=D.nextSibling;}};if (E) FCKDomTools.TrimNode(E);},GetData:function(A){FCK.Events.FireEvent("OnBeforeGetData");if (FCK.EditMode==1) return FCK.EditingArea.Textarea.value;this.FixBody();var B=FCK.EditorDocument;if (!B) return null;var C=FCKConfig.FullPage;var D=FCK.DataProcessor.ConvertToDataFormat(C?B.documentElement:B.body,!C,FCKConfig.IgnoreEmptyParagraphValue,A);D=FCK.ProtectEventsRestore(D);if (FCKBrowserInfo.IsIE) D=D.replace(FCKRegexLib.ToReplace,'$1');if (C){if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) D=FCK.DocTypeDeclaration+'\n'+D;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) D=FCK.XmlDeclaration+'\n'+D;};D=FCKConfig.ProtectedSource.Revert(D);setTimeout(function() { FCK.Events.FireEvent("OnAfterGetData");},0);return D;},UpdateLinkedField:function(){var A=FCK.GetXHTML(FCKConfig.FormatOutput);if (FCKConfig.HtmlEncodeOutput) A=FCKTools.HTMLEncode(A);FCK.LinkedField.value=A;FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');},RegisteredDoubleClickHandlers:{},OnDoubleClick:function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName.toUpperCase()];if (B){for (var i=0;i0?'|ABBR|XML|EMBED|OBJECT':'ABBR|XML|EMBED|OBJECT';var C;if (B.length>0){C=new RegExp('<('+B+')(?!\w|:)','gi');A=A.replace(C,'','gi');A=A.replace(C,'<\/FCK:$1>');};B='META';if (FCKBrowserInfo.IsIE) B+='|HR';C=new RegExp('<(('+B+')(?=\\s|>|/)[\\s\\S]*?)/?>','gi');A=A.replace(C,'');return A;},SetData:function(A,B){this.EditingArea.Mode=FCK.EditMode;if (FCKBrowserInfo.IsIE&&FCK.EditorDocument){FCK.EditorDocument.detachEvent("onselectionchange",Doc_OnSelectionChange);};FCKTempBin.Reset();FCK.Selection.Release();if (FCK.EditMode==0){this._ForceResetIsDirty=(B===true);A=FCKConfig.ProtectedSource.Protect(A);A=FCK.DataProcessor.ConvertToHtml(A);A=A.replace(FCKRegexLib.InvalidSelfCloseTags,'$1>');A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) A=A.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);var C='';if (!FCKConfig.FullPage) C+=_FCK_GetEditorAreaStyleTags();if (FCKBrowserInfo.IsIE) C+=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) C+=FCKTools.GetStyleHtml(FCK_ShowTableBordersCSS,true);C+=FCKTools.GetStyleHtml(FCK_InternalCSS,true);A=A.replace(FCKRegexLib.HeadCloser,C+'$&');this.EditingArea.OnLoad=_FCK_EditingArea_OnLoad;this.EditingArea.Start(A);}else{FCK.EditorWindow=null;FCK.EditorDocument=null;FCKDomTools.PaddingNode=null;this.EditingArea.OnLoad=null;this.EditingArea.Start(A);this.EditingArea.Textarea._FCKShowContextMenu=true;FCK.EnterKeyHandler=null;if (B) this.ResetIsDirty();FCK.KeystrokeHandler.AttachToElement(this.EditingArea.Textarea);this.EditingArea.Textarea.focus();FCK.Events.FireEvent('OnAfterSetHTML');};if (window.onresize) window.onresize();},RedirectNamedCommands:{},ExecuteNamedCommand:function(A,B,C,D){if (!D) FCKUndo.SaveUndoStep();if (!C&&FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};if (!D) FCKUndo.SaveUndoStep();},GetNamedCommandState:function(A){try{if (FCKBrowserInfo.IsSafari&&FCK.EditorWindow&&A.IEquals('Paste')) return 0;if (!FCK.EditorDocument.queryCommandEnabled(A)) return -1;else{return FCK.EditorDocument.queryCommandState(A)?1:0;}}catch (e){return 0;}},GetNamedCommandValue:function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==-1) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';},Paste:function(A){if (FCK.Status!=2||!FCK.Events.FireEvent('OnPaste')) return false;return A||FCK._ExecPaste();},PasteFromWord:function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');},Preview:function(){var A;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) A=FCK.TempBaseTag+FCK.GetXHTML();else A=FCK.GetXHTML();}else{A=FCKConfig.DocType+''+FCK.TempBaseTag+''+FCKLang.Preview+''+_FCK_GetEditorAreaStyleTags()+''+FCK.GetXHTML()+'';};var B=FCKConfig.ScreenWidth*0.8;var C=FCKConfig.ScreenHeight*0.7;var D=(FCKConfig.ScreenWidth-B)/2;var E='';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=A;E='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.opener._FCKHtmlToLoad );document.close() ;window.opener._FCKHtmlToLoad = null ;})() )';};var F=window.open(E,null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+B+',height='+C+',left='+D);if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){F.document.write(A);F.document.close();}},SwitchEditMode:function(A){var B=(FCK.EditMode==0);var C=FCK.IsDirty();var D;if (B){FCKCommands.GetCommand('ShowBlocks').SaveState();if (!A&&FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();D=FCK.GetXHTML(FCKConfig.FormatSource);if (FCKBrowserInfo.IsIE) FCKTempBin.ToHtml();if (D==null) return false;}else D=this.EditingArea.Textarea.value;FCK.EditMode=B?1:0;FCK.SetData(D,!C);FCK.Focus();FCKTools.RunFunction(FCK.ToolbarSet.RefreshModeState,FCK.ToolbarSet);return true;},InsertElement:function(A){if (typeof A=='string') A=this.EditorDocument.createElement(A);var B=A.nodeName.toLowerCase();FCKSelection.Restore();var C=new FCKDomRange(this.EditorWindow);C.MoveToSelection();C.DeleteContents();if (FCKListsLib.BlockElements[B]!=null){if (C.StartBlock){if (C.CheckStartOfBlock()) C.MoveToPosition(C.StartBlock,3);else if (C.CheckEndOfBlock()) C.MoveToPosition(C.StartBlock,4);else C.SplitBlock();};C.InsertNode(A);var D=FCKDomTools.GetNextSourceElement(A,false,null,['hr','br','param','img','area','input'],true);if (!D&&FCKConfig.EnterMode!='br'){D=this.EditorDocument.body.appendChild(this.EditorDocument.createElement(FCKConfig.EnterMode));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);};if (FCKListsLib.EmptyElements[B]==null) C.MoveToElementEditStart(A);else if (D) C.MoveToElementEditStart(D);else C.MoveToPosition(A,4);if (FCKBrowserInfo.IsGeckoLike){if (D) FCKDomTools.ScrollIntoView(D,false);FCKDomTools.ScrollIntoView(A,false);}}else{C.InsertNode(A);C.SetStart(A,4);C.SetEnd(A,4);};C.Select();C.Release();this.Focus();return A;},_InsertBlockElement:function(A){},_IsFunctionKey:function(A){if (A>=16&&A<=20) return true;if (A==27||(A>=33&&A<=40)) return true;if (A==45) return true;return false;},_KeyDownListener:function(A){if (!A) A=FCK.EditorWindow.event;if (FCK.EditorWindow){if (!FCK._IsFunctionKey(A.keyCode)&&!(A.ctrlKey||A.metaKey)&&!(A.keyCode==46)) FCK._KeyDownUndo();};return true;},_KeyDownUndo:function(){if (!FCKUndo.Typing){FCKUndo.SaveUndoStep();FCKUndo.Typing=true;FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.TypesCount++;FCKUndo.Changed=1;if (FCKUndo.TypesCount>FCKUndo.MaxTypes){FCKUndo.TypesCount=0;FCKUndo.SaveUndoStep();}},_TabKeyHandler:function(A){if (!A) A=window.event;var B=A.keyCode;if (B==9&&FCK.EditMode!=0){if (FCKBrowserInfo.IsIE){var C=document.selection.createRange();if (C.parentElement()!=FCK.EditingArea.Textarea) return true;C.text='\t';C.select();}else{var a=[];var D=FCK.EditingArea.Textarea;var E=D.selectionStart;var F=D.selectionEnd;a.push(D.value.substr(0,E));a.push('\t');a.push(D.value.substr(F));D.value=a.join('');D.setSelectionRange(E+1,E+1);};if (A.preventDefault) return A.preventDefault();return A.returnValue=false;};return true;}};FCK.Events=new FCKEvents(FCK);FCK.GetHTML=FCK.GetXHTML=FCK.GetData;FCK.SetHTML=FCK.SetData;FCK.InsertElementAndGetIt=FCK.CreateElement=FCK.InsertElement;function _FCK_ProtectEvents_ReplaceTags(A){return A.replace(FCKRegexLib.EventAttributes,_FCK_ProtectEvents_ReplaceEvents);};function _FCK_ProtectEvents_ReplaceEvents(A,B){return ' '+B+'_fckprotectedatt="'+encodeURIComponent(A)+'"';};function _FCK_ProtectEvents_RestoreEvents(A,B){return decodeURIComponent(B);};function _FCK_MouseEventsListener(A){if (!A) A=window.event;if (A.type=='mousedown') FCK.MouseDownFlag=true;else if (A.type=='mouseup') FCK.MouseDownFlag=false;else if (A.type=='mousemove') FCK.Events.FireEvent('OnMouseMove',A);};function _FCK_PaddingNodeListener(){if (FCKConfig.EnterMode.IEquals('br')) return;FCKDomTools.EnforcePaddingNode(FCK.EditorDocument,FCKConfig.EnterMode);if (!FCKBrowserInfo.IsIE&&FCKDomTools.PaddingNode){var A=FCKSelection.GetSelection();if (A&&A.rangeCount==1){var B=A.getRangeAt(0);if (B.collapsed&&B.startContainer==FCK.EditorDocument.body&&B.startOffset==0){B.selectNodeContents(FCKDomTools.PaddingNode);B.collapse(true);A.removeAllRanges();A.addRange(B);}}}else if (FCKDomTools.PaddingNode){var C=FCKSelection.GetParentElement();var D=FCKDomTools.PaddingNode;if (C&&C.nodeName.IEquals('body')){if (FCK.EditorDocument.body.childNodes.length==1&&FCK.EditorDocument.body.firstChild==D){if (FCKSelection._GetSelectionDocument(FCK.EditorDocument.selection)!=FCK.EditorDocument) return;var B=FCK.EditorDocument.body.createTextRange();var F=false;if (!D.childNodes.firstChild){D.appendChild(FCKTools.GetElementDocument(D).createTextNode('\ufeff'));F=true;};B.moveToElementText(D);B.select();if (F) B.pasteHTML('');}}}};function _FCK_EditingArea_OnLoad(){FCK.EditorWindow=FCK.EditingArea.Window;FCK.EditorDocument=FCK.EditingArea.Document;if (FCKBrowserInfo.IsIE) FCKTempBin.ToElements();FCK.InitializeBehaviors();FCK.MouseDownFlag=false;FCKTools.AddEventListener(FCK.EditorDocument,'mousemove',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mouseup',_FCK_MouseEventsListener);if (FCKBrowserInfo.IsSafari){FCKTools.AddEventListener(FCK.EditorDocument,'paste',function(evt){var A=new FCKDomRange(FCK.EditorWindow);var B=FCK.EditorDocument.createTextNode('\ufeff');var C=FCK.EditorDocument.createElement('a');C.id='fck_paste_padding';C.innerHTML='';A.MoveToSelection();A.DeleteContents();A.InsertNode(B);A.Collapse();A.InsertNode(C);A.MoveToPosition(C,3);A.Select();setTimeout(function(){B.parentNode.removeChild(B);C=FCK.EditorDocument.getElementById('fck_paste_padding');C.parentNode.removeChild(C);},0);});};if (FCKBrowserInfo.IsSafari){var D=function(evt){if (!(evt.ctrlKey||evt.metaKey)) return;if (FCK.EditMode!=0) return;switch (evt.keyCode){case 89:FCKUndo.Redo();break;case 90:FCKUndo.Undo();break;}};FCKTools.AddEventListener(FCK.EditorDocument,'keyup',D);};FCK.EnterKeyHandler=new FCKEnterKey(FCK.EditorWindow,FCKConfig.EnterMode,FCKConfig.ShiftEnterMode,FCKConfig.TabSpaces);FCK.KeystrokeHandler.AttachToElement(FCK.EditorDocument);if (FCK._ForceResetIsDirty) FCK.ResetIsDirty();if (FCKBrowserInfo.IsIE&&FCK.HasFocus) FCK.EditorDocument.body.setActive();FCK.OnAfterSetHTML();FCKCommands.GetCommand('ShowBlocks').RestoreState();if (FCK.Status!=0) return;FCK.SetStatus(1);};function _FCK_GetEditorAreaStyleTags(){return FCKTools.GetStyleHtml(FCKConfig.EditorAreaCSS)+FCKTools.GetStyleHtml(FCKConfig.EditorAreaStyles);};function _FCK_KeystrokeHandler_OnKeystroke(A,B){if (FCK.Status!=2) return false;if (FCK.EditMode==0){switch (B){case 'Paste':return!FCK.Paste();case 'Cut':FCKUndo.SaveUndoStep();return false;}}else{if (B.Equals('Paste','Undo','Redo','SelectAll','Cut')) return false;};var C=FCK.Commands.GetCommand(B);if (C.GetState()==-1) return false;return (C.Execute.apply(C,FCKTools.ArgumentsToArray(arguments,2))!==false);};(function(){var A=window.parent.document;var B=A.getElementById(FCK.Name);var i=0;while (B||i==0){if (B&&B.tagName.toLowerCase().Equals('input','textarea')){FCK.LinkedField=B;break;};B=A.getElementsByName(FCK.Name)[i++];}})();var FCKTempBin={Elements:[],AddElement:function(A){var B=this.Elements.length;this.Elements[B]=A;return B;},RemoveElement:function(A){var e=this.Elements[A];this.Elements[A]=null;return e;},Reset:function(){var i=0;while (i '+this.Elements[i].outerHTML+'
';this.Elements[i].isHtml=true;}},ToElements:function(){var A=FCK.EditorDocument.createElement('div');for (var i=0;i40) return;};var C=function(H){if (H.nodeType!=1) return false;var D=H.tagName.toLowerCase();return (FCKListsLib.BlockElements[D]||FCKListsLib.EmptyElements[D]);};var E=function(){var F=FCKSelection.GetSelection();var G=F.getRangeAt(0);if (!G||!G.collapsed) return;var H=G.endContainer;if (H.nodeType!=3) return;if (H.nodeValue.length!=G.endOffset) return;var I=H.parentNode.tagName.toLowerCase();if (!(I=='a'||(!FCKBrowserInfo.IsOpera&&String(H.parentNode.contentEditable)=='false')||(!(FCKListsLib.BlockElements[I]||FCKListsLib.NonEmptyBlockElements[I])&&B==35))) return;var J=FCKTools.GetNextTextNode(H,H.parentNode,C);if (J) return;G=FCK.EditorDocument.createRange();J=FCKTools.GetNextTextNode(H,H.parentNode.parentNode,C);if (J){if (FCKBrowserInfo.IsOpera&&B==37) return;G.setStart(J,0);G.setEnd(J,0);}else{while (H.parentNode&&H.parentNode!=FCK.EditorDocument.body&&H.parentNode!=FCK.EditorDocument.documentElement&&H==H.parentNode.lastChild&&(!FCKListsLib.BlockElements[H.parentNode.tagName.toLowerCase()]&&!FCKListsLib.NonEmptyBlockElements[H.parentNode.tagName.toLowerCase()])) H=H.parentNode;if (FCKListsLib.BlockElements[I]||FCKListsLib.EmptyElements[I]||H==FCK.EditorDocument.body){G.setStart(H,H.childNodes.length);G.setEnd(H,H.childNodes.length);}else{var K=H.nextSibling;while (K){if (K.nodeType!=1){K=K.nextSibling;continue;};var L=K.tagName.toLowerCase();if (FCKListsLib.BlockElements[L]||FCKListsLib.EmptyElements[L]||FCKListsLib.NonEmptyBlockElements[L]) break;K=K.nextSibling;};var M=FCK.EditorDocument.createTextNode('');if (K) H.parentNode.insertBefore(M,K);else H.parentNode.appendChild(M);G.setStart(M,0);G.setEnd(M,0);}};F.removeAllRanges();F.addRange(G);FCK.Events.FireEvent("OnSelectionChange");};setTimeout(E,1);};this.ExecOnSelectionChangeTimer=function(){if (FCK.LastOnChangeTimer) window.clearTimeout(FCK.LastOnChangeTimer);FCK.LastOnChangeTimer=window.setTimeout(FCK.ExecOnSelectionChange,100);};this.EditorDocument.addEventListener('mouseup',this.ExecOnSelectionChange,false);this.EditorDocument.addEventListener('keyup',this.ExecOnSelectionChangeTimer,false);this._DblClickListener=function(e){FCK.OnDoubleClick(e.target);e.stopPropagation();};this.EditorDocument.addEventListener('dblclick',this._DblClickListener,true);this.EditorDocument.addEventListener('keydown',this._KeyDownListener,false);if (FCKBrowserInfo.IsGecko){this.EditorWindow.addEventListener('dragdrop',this._ExecDrop,true);}else if (FCKBrowserInfo.IsSafari){this.EditorDocument.addEventListener('dragover',function (evt){ if (!FCK.MouseDownFlag&&FCK.Config.ForcePasteAsPlainText) evt.returnValue=false;},true);this.EditorDocument.addEventListener('drop',this._ExecDrop,true);this.EditorDocument.addEventListener('mousedown',function(ev){var N=ev.srcElement;if (N.nodeName.IEquals('IMG','HR','INPUT','TEXTAREA','SELECT')){FCKSelection.SelectNode(N);}},true);this.EditorDocument.addEventListener('mouseup',function(ev){if (ev.srcElement.nodeName.IEquals('INPUT','TEXTAREA','SELECT')) ev.preventDefault()},true);this.EditorDocument.addEventListener('click',function(ev){if (ev.srcElement.nodeName.IEquals('INPUT','TEXTAREA','SELECT')) ev.preventDefault()},true);};if (FCKBrowserInfo.IsGecko||FCKBrowserInfo.IsOpera){this.EditorDocument.addEventListener('keypress',this._ExecCheckCaret,false);this.EditorDocument.addEventListener('click',this._ExecCheckCaret,false);};FCK.ContextMenu._InnerContextMenu.SetMouseClickWindow(FCK.EditorWindow);FCK.ContextMenu._InnerContextMenu.AttachToElement(FCK.EditorDocument);};FCK.MakeEditable=function(){this.EditingArea.MakeEditable();};function Document_OnContextMenu(e){if (!e.target._FCKShowContextMenu) e.preventDefault();};document.oncontextmenu=Document_OnContextMenu;FCK._BaseGetNamedCommandState=FCK.GetNamedCommandState;FCK.GetNamedCommandState=function(A){switch (A){case 'Unlink':return FCKSelection.HasAncestorNode('A')?0:-1;default:return FCK._BaseGetNamedCommandState(A);}};FCK.RedirectNamedCommands={Print:true,Paste:true};FCK.ExecuteRedirectedNamedCommand=function(A,B){switch (A){case 'Print':FCK.EditorWindow.print();break;case 'Paste':try{if (FCKBrowserInfo.IsSafari) throw '';if (FCK.Paste()) FCK.ExecuteNamedCommand('Paste',null,true);}catch (e) {if (FCKConfig.ForcePasteAsPlainText) FCK.PasteAsPlainText();else FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.Paste,'dialog/fck_paste.html',400,330,'Security');};break;default:FCK.ExecuteNamedCommand(A,B);}};FCK._ExecPaste=function(){FCKUndo.SaveUndoStep();if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;};return true;};FCK.InsertHtml=function(A){var B=FCK.EditorDocument,range;A=FCKConfig.ProtectedSource.Protect(A);A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);FCKUndo.SaveUndoStep();if (FCKBrowserInfo.IsGecko){A=A.replace(/ $/,'$&');var C=new FCKDocumentFragment(this.EditorDocument);C.AppendHtml(A);var D=C.RootNode.lastChild;range=new FCKDomRange(this.EditorWindow);range.MoveToSelection();var E=C.RootNode.firstChild;while (E&&E.nodeType!=1) E=E.nextSibling;if (E&&FCKListsLib.BlockElements[E.nodeName.toLowerCase()]) range.SplitBlock();range.DeleteContents();range.InsertNode(C.RootNode);range.MoveToPosition(D,4);}else B.execCommand('inserthtml',false,A);this.Focus();if (!range){range=new FCKDomRange(this.EditorWindow);range.MoveToSelection();};var F=range.CreateBookmark();FCKDocumentProcessor.Process(B);try{range.MoveToBookmark(F);range.Select();}catch (e) {};this.Events.FireEvent("OnSelectionChange");};FCK.PasteAsPlainText=function(){FCKTools.RunFunction(FCKDialog.OpenDialog,FCKDialog,['FCKDialog_Paste',FCKLang.PasteAsText,'dialog/fck_paste.html',400,330,'PlainText']);};FCK.GetClipboardHTML=function(){return '';};FCK.CreateLink=function(A,B){var C=[];if (FCKSelection.GetSelection().isCollapsed) return C;FCK.ExecuteNamedCommand('Unlink',null,false,!!B);if (A.length>0){var D='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',D,false,!!B);var E=this.EditorDocument.evaluate("//a[@href='"+D+"']",this.EditorDocument.body,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);for (var i=0;i0&&!isNaN(E)) this.PageConfig[D]=parseFloat(E);else this.PageConfig[D]=E;}};function FCKConfig_LoadPageConfig(){var A=FCKConfig.PageConfig;for (var B in A) FCKConfig[B]=A[B];};function FCKConfig_PreProcess(){var A=FCKConfig;if (A.AllowQueryStringDebug){try{if ((/fckdebug=true/i).test(window.top.location.search)) A.Debug=true;}catch (e) { }};if (!A.PluginsPath.EndsWith('/')) A.PluginsPath+='/';var B=A.ToolbarComboPreviewCSS;if (!B||B.length==0) A.ToolbarComboPreviewCSS=A.EditorAreaCSS;A.RemoveAttributesArray=(A.RemoveAttributes||'').split(',');if (!FCKConfig.SkinEditorCSS||FCKConfig.SkinEditorCSS.length==0) FCKConfig.SkinEditorCSS=FCKConfig.SkinPath+'fck_editor.css';if (!FCKConfig.SkinDialogCSS||FCKConfig.SkinDialogCSS.length==0) FCKConfig.SkinDialogCSS=FCKConfig.SkinPath+'fck_dialog.css';};FCKConfig.ToolbarSets={};FCKConfig.Plugins={};FCKConfig.Plugins.Items=[];FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.push([A,B,C]);};FCKConfig.ProtectedSource={};FCKConfig.ProtectedSource._CodeTag=(new Date()).valueOf();FCKConfig.ProtectedSource.RegexEntries=[//g,//gi,//gi];FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.push(A);};FCKConfig.ProtectedSource.Protect=function(A){var B=this._CodeTag;function _Replace(protectedSource){var C=FCKTempBin.AddElement(protectedSource);return '';};for (var i=0;i|>)","g");return A.replace(D,_Replace);};FCKConfig.GetBodyAttributes=function(){var A='';if (this.BodyId&&this.BodyId.length>0) A+=' id="'+this.BodyId+'"';if (this.BodyClass&&this.BodyClass.length>0) A+=' class="'+this.BodyClass+'"';return A;};FCKConfig.ApplyBodyAttributes=function(A){if (this.BodyId&&this.BodyId.length>0) A.id=FCKConfig.BodyId;if (this.BodyClass&&this.BodyClass.length>0) A.className+=' '+FCKConfig.BodyClass;}; +var FCKDebug={Output:function(){},OutputObject:function(){}}; +var FCKDomTools={MoveChildren:function(A,B,C){if (A==B) return;var D;if (C){while ((D=A.lastChild)) B.insertBefore(A.removeChild(D),B.firstChild);}else{while ((D=A.firstChild)) B.appendChild(A.removeChild(D));}},MoveNode:function(A,B,C){if (C) B.insertBefore(FCKDomTools.RemoveNode(A),B.firstChild);else B.appendChild(FCKDomTools.RemoveNode(A));},TrimNode:function(A){this.LTrimNode(A);this.RTrimNode(A);},LTrimNode:function(A){var B;while ((B=A.firstChild)){if (B.nodeType==3){var C=B.nodeValue.LTrim();var D=B.nodeValue.length;if (C.length==0){A.removeChild(B);continue;}else if (C.length0) break;if (A.lastChild) A=A.lastChild;else return this.GetPreviousSourceElement(A,B,C,D);};return null;},GetNextSourceElement:function(A,B,C,D,E){while((A=this.GetNextSourceNode(A,E))){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (D&&A.nodeName.IEquals(D)) return this.GetNextSourceElement(A,B,C,D);return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;};return null;},GetNextSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.firstChild) E=A.firstChild;else{if (D&&A==D) return null;E=A.nextSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetNextSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetNextSourceNode(E,false,C,D);return E;},GetPreviousSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.lastChild) E=A.lastChild;else{if (D&&A==D) return null;E=A.previousSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetPreviousSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetPreviousSourceNode(E,false,C,D);return E;},InsertAfterNode:function(A,B){return A.parentNode.insertBefore(B,A.nextSibling);},GetParents:function(A){var B=[];while (A){B.unshift(A);A=A.parentNode;};return B;},GetCommonParents:function(A,B){var C=this.GetParents(A);var D=this.GetParents(B);var E=[];for (var i=0;i0) D[C.pop().toLowerCase()]=1;var E=this.GetCommonParents(A,B);var F=null;while ((F=E.pop())){if (D[F.nodeName.toLowerCase()]) return F;};return null;},GetIndexOf:function(A){var B=A.parentNode?A.parentNode.firstChild:null;var C=-1;while (B){C++;if (B==A) return C;B=B.nextSibling;};return-1;},PaddingNode:null,EnforcePaddingNode:function(A,B){try{if (!A||!A.body) return;}catch (e){return;};this.CheckAndRemovePaddingNode(A,B,true);try{if (A.body.lastChild&&(A.body.lastChild.nodeType!=1||A.body.lastChild.tagName.toLowerCase()==B.toLowerCase())) return;}catch (e){return;};var C=A.createElement(B);if (FCKBrowserInfo.IsGecko&&FCKListsLib.NonEmptyBlockElements[B]) FCKTools.AppendBogusBr(C);this.PaddingNode=C;if (A.body.childNodes.length==1&&A.body.firstChild.nodeType==1&&A.body.firstChild.tagName.toLowerCase()=='br'&&(A.body.firstChild.getAttribute('_moz_dirty')!=null||A.body.firstChild.getAttribute('type')=='_moz')) A.body.replaceChild(C,A.body.firstChild);else A.body.appendChild(C);},CheckAndRemovePaddingNode:function(A,B,C){var D=this.PaddingNode;if (!D) return;try{if (D.parentNode!=A.body||D.tagName.toLowerCase()!=B||(D.childNodes.length>1)||(D.firstChild&&D.firstChild.nodeValue!='\xa0'&&String(D.firstChild.tagName).toLowerCase()!='br')){this.PaddingNode=null;return;}}catch (e){this.PaddingNode=null;return;};if (!C){if (D.parentNode.childNodes.length>1) D.parentNode.removeChild(D);this.PaddingNode=null;}},HasAttribute:function(A,B){if (A.hasAttribute) return A.hasAttribute(B);else{var C=A.attributes[B];return (C!=undefined&&C.specified);}},HasAttributes:function(A){var B=A.attributes;for (var i=0;i0) return true;continue;}};if (B[i].specified) return true;};return false;},RemoveAttribute:function(A,B){if (FCKBrowserInfo.IsIE&&B.toLowerCase()=='class') B='className';return A.removeAttribute(B,0);},RemoveAttributes:function (A,B){for (var i=0;i0) return false;C=C.nextSibling;};return D?this.CheckIsEmptyElement(D,B):true;},SetElementStyles:function(A,B){var C=A.style;for (var D in B) C[D]=B[D];},SetOpacity:function(A,B){if (FCKBrowserInfo.IsIE){B=Math.round(B*100);A.style.filter=(B>100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+B+')');}else A.style.opacity=B;},GetCurrentElementStyle:function(A,B){if (FCKBrowserInfo.IsIE) return A.currentStyle[B];else return A.ownerDocument.defaultView.getComputedStyle(A,'').getPropertyValue(B);},GetPositionedAncestor:function(A){var B=A;while (B!=FCKTools.GetElementDocument(B).documentElement){if (this.GetCurrentElementStyle(B,'position')!='static') return B;if (B==FCKTools.GetElementDocument(B).documentElement&¤tWindow!=w) B=currentWindow.frameElement;else B=B.parentNode;};return null;},ScrollIntoView:function(A,B){var C=FCKTools.GetElementWindow(A);var D=FCKTools.GetViewPaneSize(C).Height;var E=D*-1;if (B===false){E+=A.offsetHeight||0;E+=parseInt(this.GetCurrentElementStyle(A,'marginBottom')||0,10)||0;};var F=FCKTools.GetDocumentPosition(C,A);E+=F.y;var G=FCKTools.GetScrollPosition(C).Y;if (E>0&&(E>G||E'+styleDef+'';};var C=function(cssFileUrl,markTemp){if (cssFileUrl.length==0) return '';var B=markTemp?' _fcktemp="true"':'';return '';};return function(cssFileOrArrayOrDef,markTemp){if (!cssFileOrArrayOrDef) return '';if (typeof(cssFileOrArrayOrDef)=='string'){if (/[\\\/\.][^{}]*$/.test(cssFileOrArrayOrDef)){return this.GetStyleHtml(cssFileOrArrayOrDef.split(','),markTemp);}else return A(this._GetUrlFixedCss(cssFileOrArrayOrDef),markTemp);}else{var E='';for (var i=0;i/g,'>');return A;};FCKTools.HTMLDecode=function(A){if (!A) return '';A=A.replace(/>/g,'>');A=A.replace(/</g,'<');A=A.replace(/&/g,'&');return A;};FCKTools._ProcessLineBreaksForPMode=function(A,B,C,D,E){var F=0;var G="

";var H="

";var I="
";if (C){G="
  • ";H="
  • ";F=1;}while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='p'){F=1;break;};D=D.parentNode;};for (var i=0;i0) return A[A.length-1];return null;};FCKTools.GetDocumentPosition=function(w,A){var x=0;var y=0;var B=A;var C=null;var D=FCKTools.GetElementWindow(B);while (B&&!(D==w&&(B==w.document.body||B==w.document.documentElement))){x+=B.offsetLeft-B.scrollLeft;y+=B.offsetTop-B.scrollTop;if (!FCKBrowserInfo.IsOpera){var E=C;while (E&&E!=B){x-=E.scrollLeft;y-=E.scrollTop;E=E.parentNode;}};C=B;if (B.offsetParent) B=B.offsetParent;else{if (D!=w){B=D.frameElement;C=null;if (B) D=B.contentWindow.parent;}else B=null;}};if (FCKDomTools.GetCurrentElementStyle(w.document.body,'position')!='static'||(FCKBrowserInfo.IsIE&&FCKDomTools.GetPositionedAncestor(A)==null)){x+=w.document.body.offsetLeft;y+=w.document.body.offsetTop;};return { "x":x,"y":y };};FCKTools.GetWindowPosition=function(w,A){var B=this.GetDocumentPosition(w,A);var C=FCKTools.GetScrollPosition(w);B.x-=C.X;B.y-=C.Y;return B;};FCKTools.ProtectFormStyles=function(A){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return [];var B=[];var C=['style','className'];for (var i=0;i0){for (var i=B.length-1;i>=0;i--){var C=B[i][0];var D=B[i][1];if (D) A.insertBefore(C,D);else A.appendChild(C);}}};FCKTools.GetNextNode=function(A,B){if (A.firstChild) return A.firstChild;else if (A.nextSibling) return A.nextSibling;else{var C=A.parentNode;while (C){if (C==B) return null;if (C.nextSibling) return C.nextSibling;else C=C.parentNode;}};return null;};FCKTools.GetNextTextNode=function(A,B,C){node=this.GetNextNode(A,B);if (C&&node&&C(node)) return null;while (node&&node.nodeType!=3){node=this.GetNextNode(node,B);if (C&&node&&C(node)) return null;};return node;};FCKTools.Merge=function(){var A=arguments;var o=A[0];for (var i=1;i');document.domain = '"+FCK_RUNTIME_DOMAIN+"';document.close();}() ) ;";if (FCKBrowserInfo.IsIE){if (FCKBrowserInfo.IsIE7||!FCKBrowserInfo.IsIE6) return "";else return "javascript: '';";};return "javascript: void(0);";};FCKTools.ResetStyles=function(A){A.style.cssText='margin:0;padding:0;border:0;background-color:transparent;background-image:none;';}; +FCKTools.CancelEvent=function(e){if (e) e.preventDefault();};FCKTools.DisableSelection=function(A){if (FCKBrowserInfo.IsGecko) A.style.MozUserSelect='none';else if (FCKBrowserInfo.IsSafari) A.style.KhtmlUserSelect='none';else A.style.userSelect='none';};FCKTools._AppendStyleSheet=function(A,B){var e=A.createElement('LINK');e.rel='stylesheet';e.type='text/css';e.href=B;A.getElementsByTagName("HEAD")[0].appendChild(e);return e;};FCKTools.AppendStyleString=function(A,B){if (!B) return null;var e=A.createElement("STYLE");e.appendChild(A.createTextNode(B));A.getElementsByTagName("HEAD")[0].appendChild(e);return e;};FCKTools.ClearElementAttributes=function(A){for (var i=0;i0) B[B.length]=D;C(parent.childNodes[i]);}};C(A);return B;};FCKTools.RemoveOuterTags=function(e){var A=e.ownerDocument.createDocumentFragment();for (var i=0;i','text/xml');FCKDomTools.RemoveNode(B.firstChild);return B;};return null;};FCKTools.GetScrollPosition=function(A){return { X:A.pageXOffset,Y:A.pageYOffset };};FCKTools.AddEventListener=function(A,B,C){A.addEventListener(B,C,false);};FCKTools.RemoveEventListener=function(A,B,C){A.removeEventListener(B,C,false);};FCKTools.AddEventListenerEx=function(A,B,C,D){A.addEventListener(B,function(e){C.apply(A,[e].concat(D||[]));},false);};FCKTools.GetViewPaneSize=function(A){return { Width:A.innerWidth,Height:A.innerHeight };};FCKTools.SaveStyles=function(A){var B=FCKTools.ProtectFormStyles(A);var C={};if (A.className.length>0){C.Class=A.className;A.className='';};var D=A.getAttribute('style');if (D&&D.length>0){C.Inline=D;A.setAttribute('style','',0);};FCKTools.RestoreFormStyles(A,B);return C;};FCKTools.RestoreStyles=function(A,B){var C=FCKTools.ProtectFormStyles(A);A.className=B.Class||'';if (B.Inline) A.setAttribute('style',B.Inline,0);else A.removeAttribute('style',0);FCKTools.RestoreFormStyles(A,C);};FCKTools.RegisterDollarFunction=function(A){A.$=function(id){return A.document.getElementById(id);};};FCKTools.AppendElement=function(A,B){return A.appendChild(A.ownerDocument.createElement(B));};FCKTools.GetElementPosition=function(A,B){var c={ X:0,Y:0 };var C=B||window;var D=FCKTools.GetElementWindow(A);var E=null;while (A){var F=D.getComputedStyle(A,'').position;if (F&&F!='static'&&A.style.zIndex!=FCKConfig.FloatingPanelsZIndex) break;c.X+=A.offsetLeft-A.scrollLeft;c.Y+=A.offsetTop-A.scrollTop;if (!FCKBrowserInfo.IsOpera){var G=E;while (G&&G!=A){c.X-=G.scrollLeft;c.Y-=G.scrollTop;G=G.parentNode;}};E=A;if (A.offsetParent) A=A.offsetParent;else{if (D!=C){A=D.frameElement;E=null;if (A) D=FCKTools.GetElementWindow(A);}else{c.X+=A.scrollLeft;c.Y+=A.scrollTop;break;}}};return c;}; +var FCKeditorAPI;function InitializeAPI(){var A=window.parent;if (!(FCKeditorAPI=A.FCKeditorAPI)){var B='window.FCKeditorAPI = {Version : "2.6.6",VersionBuild : "25427",Instances : window.FCKeditorAPI && window.FCKeditorAPI.Instances || {},GetInstance : function( name ){return this.Instances[ name ];},_FormSubmit : function(){for ( var name in FCKeditorAPI.Instances ){var oEditor = FCKeditorAPI.Instances[ name ] ;if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )oEditor.UpdateLinkedField() ;}this._FCKOriginalSubmit() ;},_FunctionQueue : window.FCKeditorAPI && window.FCKeditorAPI._FunctionQueue || {Functions : new Array(),IsRunning : false,Add : function( f ){this.Functions.push( f );if ( !this.IsRunning )this.StartNext();},StartNext : function(){var aQueue = this.Functions ;if ( aQueue.length > 0 ){this.IsRunning = true;aQueue[0].call();}else this.IsRunning = false;},Remove : function( f ){var aQueue = this.Functions;var i = 0, fFunc;while( (fFunc = aQueue[ i ]) ){if ( fFunc == f )aQueue.splice( i,1 );i++ ;}this.StartNext();}}}';if (A.execScript) A.execScript(B,'JavaScript');else{if (FCKBrowserInfo.IsGecko10){eval.call(A,B);}else if(FCKBrowserInfo.IsAIR){FCKAdobeAIR.FCKeditorAPI_Evaluate(A,B);}else if (FCKBrowserInfo.IsSafari){var C=A.document;var D=C.createElement('script');D.appendChild(C.createTextNode(B));C.documentElement.appendChild(D);}else A.eval(B);};FCKeditorAPI=A.FCKeditorAPI;FCKeditorAPI.__Instances=FCKeditorAPI.Instances;};FCKeditorAPI.Instances[FCK.Name]=FCK;};function _AttachFormSubmitToAPI(){var A=FCK.GetParentForm();if (A){FCKTools.AddEventListener(A,'submit',FCK.UpdateLinkedField);if (!A._FCKOriginalSubmit&&(typeof(A.submit)=='function'||(!A.submit.tagName&&!A.submit.length))){A._FCKOriginalSubmit=A.submit;A.submit=FCKeditorAPI._FormSubmit;}}};function FCKeditorAPI_Cleanup(){if (window.FCKConfig&&FCKConfig.MsWebBrowserControlCompat&&!window.FCKUnloadFlag) return;delete FCKeditorAPI.Instances[FCK.Name];};function FCKeditorAPI_ConfirmCleanup(){if (window.FCKConfig&&FCKConfig.MsWebBrowserControlCompat) window.FCKUnloadFlag=true;};FCKTools.AddEventListener(window,'unload',FCKeditorAPI_Cleanup);FCKTools.AddEventListener(window,'beforeunload',FCKeditorAPI_ConfirmCleanup); +var FCKImagePreloader=function(){this._Images=[];};FCKImagePreloader.prototype={AddImages:function(A){if (typeof(A)=='string') A=A.split(';');this._Images=this._Images.concat(A);},Start:function(){var A=this._Images;this._PreloadCount=A.length;for (var i=0;i]*\>)/i,AfterBody:/(\<\/body\>[\s\S]*$)/i,ToReplace:/___fcktoreplace:([\w]+)/ig,MetaHttpEquiv:/http-equiv\s*=\s*["']?([^"' ]+)/i,HasBaseTag:/]/i,HtmlOpener:/]*>/i,HeadOpener:/]*>/i,HeadCloser:/<\/head\s*>/i,FCK_Class:/\s*FCK__[^ ]*(?=\s+|$)/,ElementName:/(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/,ForceSimpleAmpersand:/___FCKAmp___/g,SpaceNoClose:/\/>/g,EmptyParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>\s*(<\/\1>)?$/,EmptyOutParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>(?:\s*| | )(<\/\1>)?$/,TagBody:/>]+))/gi,ProtectUrlsA:/]+))/gi,ProtectUrlsArea:/]+))/gi,Html4DocType:/HTML 4\.0 Transitional/i,DocTypeTag:/]*>/i,HtmlDocType:/DTD HTML/,TagsWithEvent:/<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g,EventAttributes:/\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,ProtectedEvents:/\s\w+_fckprotectedatt="([^"]+)"/g,StyleProperties:/\S+\s*:/g,InvalidSelfCloseTags:/(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi,StyleVariableAttName:/#\(\s*("|')(.+?)\1[^\)]*\s*\)/g,RegExp:/^\/(.*)\/([gim]*)$/,HtmlTag:/<[^\s<>](?:"[^"]*"|'[^']*'|[^<])*>/}; +var FCKListsLib={BlockElements:{ address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,marquee:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },NonEmptyBlockElements:{ p:1,div:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },InlineChildReqElements:{ abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },InlineNonEmptyElements:{ a:1,abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },EmptyElements:{ base:1,col:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },PathBlockElements:{ address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1 },PathBlockLimitElements:{ body:1,div:1,td:1,th:1,caption:1,form:1 },StyleBlockElements:{ address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },StyleObjectElements:{ img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1 },NonEditableElements:{ button:1,option:1,script:1,iframe:1,textarea:1,object:1,embed:1,map:1,applet:1 },BlockBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1 },ListBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1,br:1 }}; +var FCKLanguageManager=FCK.Language={AvailableLanguages:{af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-uk':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French','fr-ca':'French (Canada)',gl:'Galician',gu:'Gujarati',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',is:'Icelandic',it:'Italian',ja:'Japanese',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},GetActiveLanguage:function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;}};return this.DefaultLanguage;},TranslateElements:function(A,B,C,D){var e=A.getElementsByTagName(B);var E,s;for (var i=0;i':'gt','ˆ':'circ','˜':'tilde',' ':'ensp',' ':'emsp',' ':'thinsp','‌':'zwnj','‍':'zwj','‎':'lrm','‏':'rlm','–':'ndash','—':'mdash','‘':'lsquo','’':'rsquo','‚':'sbquo','“':'ldquo','”':'rdquo','„':'bdquo','†':'dagger','‡':'Dagger','‰':'permil','‹':'lsaquo','›':'rsaquo','€':'euro'};for (e in FCKXHtmlEntities.Entities) A+=e;if (FCKConfig.IncludeLatinEntities){B={'À':'Agrave','Á':'Aacute','Â':'Acirc','Ã':'Atilde','Ä':'Auml','Å':'Aring','Æ':'AElig','Ç':'Ccedil','È':'Egrave','É':'Eacute','Ê':'Ecirc','Ë':'Euml','Ì':'Igrave','Í':'Iacute','Î':'Icirc','Ï':'Iuml','Ð':'ETH','Ñ':'Ntilde','Ò':'Ograve','Ó':'Oacute','Ô':'Ocirc','Õ':'Otilde','Ö':'Ouml','Ø':'Oslash','Ù':'Ugrave','Ú':'Uacute','Û':'Ucirc','Ü':'Uuml','Ý':'Yacute','Þ':'THORN','ß':'szlig','à':'agrave','á':'aacute','â':'acirc','ã':'atilde','ä':'auml','å':'aring','æ':'aelig','ç':'ccedil','è':'egrave','é':'eacute','ê':'ecirc','ë':'euml','ì':'igrave','í':'iacute','î':'icirc','ï':'iuml','ð':'eth','ñ':'ntilde','ò':'ograve','ó':'oacute','ô':'ocirc','õ':'otilde','ö':'ouml','ø':'oslash','ù':'ugrave','ú':'uacute','û':'ucirc','ü':'uuml','ý':'yacute','þ':'thorn','ÿ':'yuml','Œ':'OElig','œ':'oelig','Š':'Scaron','š':'scaron','Ÿ':'Yuml'};for (e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;};if (FCKConfig.IncludeGreekEntities){B={'Α':'Alpha','Β':'Beta','Γ':'Gamma','Δ':'Delta','Ε':'Epsilon','Ζ':'Zeta','Η':'Eta','Θ':'Theta','Ι':'Iota','Κ':'Kappa','Λ':'Lambda','Μ':'Mu','Ν':'Nu','Ξ':'Xi','Ο':'Omicron','Π':'Pi','Ρ':'Rho','Σ':'Sigma','Τ':'Tau','Υ':'Upsilon','Φ':'Phi','Χ':'Chi','Ψ':'Psi','Ω':'Omega','α':'alpha','β':'beta','γ':'gamma','δ':'delta','ε':'epsilon','ζ':'zeta','η':'eta','θ':'theta','ι':'iota','κ':'kappa','λ':'lambda','μ':'mu','ν':'nu','ξ':'xi','ο':'omicron','π':'pi','ρ':'rho','ς':'sigmaf','σ':'sigma','τ':'tau','υ':'upsilon','φ':'phi','χ':'chi','ψ':'psi','ω':'omega','\u03d1':'thetasym','\u03d2':'upsih','\u03d6':'piv'};for (e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;}}else{FCKXHtmlEntities.Entities={'>':'gt'};A='>';A+=' ';};var C='['+A+']';if (FCKConfig.ProcessNumericEntities) C='[^ -~]|'+C;var D=FCKConfig.AdditionalNumericEntities;if (D&&D.length>0) C+='|'+FCKConfig.AdditionalNumericEntities;FCKXHtmlEntities.EntitiesRegex=new RegExp(C,'g');}; +var FCKXHtml={};FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKDomTools.CheckAndRemovePaddingNode(FCKTools.GetElementDocument(A),FCKConfig.EnterMode);FCKXHtmlEntities.Initialize();this._NbspEntity=(FCKConfig.ProcessHTMLEntities?'nbsp':'#160');var D=FCK.IsDirty();FCKXHtml.SpecialBlocks=[];this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);if (FCKBrowserInfo.IsIE) FCKXHtml._RemoveXHtmlJobProperties(A);var E=this._GetMainXmlString();this.XML=null;if (FCKBrowserInfo.IsSafari) E=E.replace(/^/,'');E=E.substr(7,E.length-15).Trim();if (FCKConfig.DocType.length>0&&FCKRegexLib.HtmlDocType.test(FCKConfig.DocType)) E=E.replace(FCKRegexLib.SpaceNoClose,'>');else E=E.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) E=E.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) E=FCKCodeFormatter.Format(E);for (var i=0;i0;if (C) A.appendChild(this.XML.createTextNode(B.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity)));return C;};function FCKXHtml_GetEntity(A){var B=FCKXHtmlEntities.Entities[A]||('#'+A.charCodeAt(0));return '#?-:'+B+';';};FCKXHtml.TagProcessors={a:function(A,B){if (B.innerHTML.Trim().length==0&&!B.name) return false;var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);};A=FCKXHtml._AppendChildNodes(A,B,false);return A;},area:function(A,B){var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (!A.attributes.getNamedItem('coords')){var D=B.getAttribute('coords',2);if (D&&D!='0,0,0') FCKXHtml._AppendAttribute(A,'coords',D);};if (!A.attributes.getNamedItem('shape')){var E=B.getAttribute('shape',2);if (E&&E.length>0) FCKXHtml._AppendAttribute(A,'shape',E.toLowerCase());}};return A;},body:function(A,B){A=FCKXHtml._AppendChildNodes(A,B,false);A.removeAttribute('spellcheck');return A;},iframe:function(A,B){var C=B.innerHTML;if (FCKBrowserInfo.IsGecko) C=FCKTools.HTMLDecode(C);C=C.replace(/\s_fcksavedurl="[^"]*"/g,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},img:function(A,B){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'src',C);if (B.style.width) A.removeAttribute('width');if (B.style.height) A.removeAttribute('height');return A;},li:function(A,B,C){if (C.nodeName.IEquals(['ul','ol'])) return FCKXHtml._AppendChildNodes(A,B,true);var D=FCKXHtml.XML.createElement('ul');B._fckxhtmljob=null;do{FCKXHtml._AppendNode(D,B);do{B=FCKDomTools.GetNextSibling(B);} while (B&&B.nodeType==3&&B.nodeValue.Trim().length==0)} while (B&&B.nodeName.toLowerCase()=='li') return D;},ol:function(A,B,C){if (B.innerHTML.Trim().length==0) return false;var D=C.lastChild;if (D&&D.nodeType==3) D=D.previousSibling;if (D&&D.nodeName.toUpperCase()=='LI'){B._fckxhtmljob=null;FCKXHtml._AppendNode(D,B);return false;};A=FCKXHtml._AppendChildNodes(A,B);return A;},pre:function (A,B){var C=B.firstChild;if (C&&C.nodeType==3) A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem('\r\n')));FCKXHtml._AppendChildNodes(A,B,true);return A;},script:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;},span:function(A,B){if (B.innerHTML.length==0) return false;A=FCKXHtml._AppendChildNodes(A,B,false);return A;},style:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');var C=B.innerHTML;if (FCKBrowserInfo.IsIE) C=C.replace(/^(\r\n|\n|\r)/,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},title:function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;}};FCKXHtml.TagProcessors.ul=FCKXHtml.TagProcessors.ol; +FCKXHtml._GetMainXmlString=function(){return (new XMLSerializer()).serializeToString(this.MainNode);};FCKXHtml._AppendAttributes=function(A,B,C){var D=B.attributes;for (var n=0;n]*\>/gi;A.BlocksCloser=/\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DL|DT|DD|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.NewLineTags=/\<(BR|HR)[^\>]*\>/gi;A.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;A.LineSplitter=/\s*\n+\s*/g;A.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL|DL)[ \/\>]/i;A.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL|DL)[ \>]/i;A.FormatIndentatorRemove=new RegExp('^'+FCKConfig.FormatIndentator);A.ProtectedTags=/(]*>)([\s\S]*?)(<\/PRE>)/gi;};FCKCodeFormatter._ProtectData=function(A,B,C,D){return B+'___FCKpd___'+(FCKCodeFormatter.ProtectedData.push(C)-1)+D;};FCKCodeFormatter.Format=function(A){if (!this.Regex) this.Init();FCKCodeFormatter.ProtectedData=[];var B=A.replace(this.Regex.ProtectedTags,FCKCodeFormatter._ProtectData);B=B.replace(this.Regex.BlocksOpener,'\n$&');B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;iB[i]) return 1;};if (A.lengthB.length) return 1;return 0;};FCKUndo._CheckIsBookmarksEqual=function(A,B){if (!(A&&B)) return false;if (FCKBrowserInfo.IsIE){var C=A[1].search(A[0].StartId);var D=B[1].search(B[0].StartId);var E=A[1].search(A[0].EndId);var F=B[1].search(B[0].EndId);return C==D&&E==F;}else{return this._CompareCursors(A.Start,B.Start)==0&&this._CompareCursors(A.End,B.End)==0;}};FCKUndo.SaveUndoStep=function(){if (FCK.EditMode!=0||this.SaveLocked) return;if (this.SavedData.length) this.Changed=true;var A=FCK.EditorDocument.body.innerHTML;var B=this._GetBookmark();this.SavedData=this.SavedData.slice(0,this.CurrentIndex+1);if (this.CurrentIndex>0&&A==this.SavedData[this.CurrentIndex][0]&&this._CheckIsBookmarksEqual(B,this.SavedData[this.CurrentIndex][1])) return;else if (this.CurrentIndex==0&&this.SavedData.length&&A==this.SavedData[0][0]){this.SavedData[0][1]=B;return;};if (this.CurrentIndex+1>=FCKConfig.MaxUndoLevels) this.SavedData.shift();else this.CurrentIndex++;this.SavedData[this.CurrentIndex]=[A,B];FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.CheckUndoState=function(){return (this.Changed||this.CurrentIndex>0);};FCKUndo.CheckRedoState=function(){return (this.CurrentIndex<(this.SavedData.length-1));};FCKUndo.Undo=function(){if (this.CheckUndoState()){if (this.CurrentIndex==(this.SavedData.length-1)){this.SaveUndoStep();};this._ApplyUndoLevel(--this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo.Redo=function(){if (this.CheckRedoState()){this._ApplyUndoLevel(++this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo._ApplyUndoLevel=function(A){var B=this.SavedData[A];if (!B) return;if (FCKBrowserInfo.IsIE){if (B[1]&&B[1][1]) FCK.SetInnerHtml(B[1][1]);else FCK.SetInnerHtml(B[0]);}else FCK.EditorDocument.body.innerHTML=B[0];this._SelectBookmark(B[1]);this.TypesCount=0;this.Changed=false;this.Typing=false;}; +var FCKEditingArea=function(A){this.TargetElement=A;this.Mode=0;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKEditingArea_Cleanup);};FCKEditingArea.prototype.Start=function(A,B){var C=this.TargetElement;var D=FCKTools.GetElementDocument(C);while(C.firstChild) C.removeChild(C.firstChild);if (this.Mode==0){if (FCK_IS_CUSTOM_DOMAIN) A=''+A;if (FCKBrowserInfo.IsIE) A=A.replace(/(]*?)\s*\/?>(?!\s*<\/base>)/gi,'$1>');else if (!B){var E=A.match(FCKRegexLib.BeforeBody);var F=A.match(FCKRegexLib.AfterBody);if (E&&F){var G=A.substr(E[1].length,A.length-E[1].length-F[1].length);A=E[1]+' '+F[1];if (FCKBrowserInfo.IsGecko&&(G.length==0||FCKRegexLib.EmptyParagraph.test(G))) G='
    ';this._BodyHTML=G;}else this._BodyHTML=A;};var H=this.IFrame=D.createElement('iframe');var I='';H.frameBorder=0;H.style.width=H.style.height='100%';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=A.replace(//i,''+I);H.src='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.parent._FCKHtmlToLoad );document.close() ;window.parent._FCKHtmlToLoad = null ;})() )';}else if (!FCKBrowserInfo.IsGecko){H.src='javascript:void(0)';};C.appendChild(H);this.Window=H.contentWindow;if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){var J=this.Window.document;J.open();J.write(A.replace(//i,''+I));J.close();};if (FCKBrowserInfo.IsAIR) FCKAdobeAIR.EditingArea_Start(J,A);if (FCKBrowserInfo.IsGecko10&&!B){this.Start(A,true);return;};if (H.readyState&&H.readyState!='completed'){var K=this;setTimeout(function(){try{K.Window.document.documentElement.doScroll("left");}catch(e){setTimeout(arguments.callee,0);return;};K.Window._FCKEditingArea=K;FCKEditingArea_CompleteStart.call(K.Window);},0);}else{this.Window._FCKEditingArea=this;if (FCKBrowserInfo.IsGecko10) this.Window.setTimeout(FCKEditingArea_CompleteStart,500);else FCKEditingArea_CompleteStart.call(this.Window);}}else{var L=this.Textarea=D.createElement('textarea');L.className='SourceField';L.dir='ltr';FCKDomTools.SetElementStyles(L,{width:'100%',height:'100%',border:'none',resize:'none',outline:'none'});C.appendChild(L);L.value=A;FCKTools.RunFunction(this.OnLoad);}};function FCKEditingArea_CompleteStart(){if (!this.document.body){this.setTimeout(FCKEditingArea_CompleteStart,50);return;};var A=this._FCKEditingArea;A.Document=A.Window.document;A.MakeEditable();FCKTools.RunFunction(A.OnLoad);};FCKEditingArea.prototype.MakeEditable=function(){var A=this.Document;if (FCKBrowserInfo.IsIE){A.body.disabled=true;A.body.contentEditable=true;A.body.removeAttribute("disabled");}else{try{A.body.spellcheck=(this.FFSpellChecker!==false);if (this._BodyHTML){A.body.innerHTML=this._BodyHTML;A.body.offsetLeft;this._BodyHTML=null;};A.designMode='on';A.execCommand('enableObjectResizing',false,!FCKConfig.DisableObjectResizing);A.execCommand('enableInlineTableEditing',false,!FCKConfig.DisableFFTableHandles);}catch (e){FCKTools.AddEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);}}};function FCKEditingArea_Document_AttributeNodeModified(A){var B=A.currentTarget.contentWindow._FCKEditingArea;if (B._timer) window.clearTimeout(B._timer);B._timer=FCKTools.SetTimeout(FCKEditingArea_MakeEditableByMutation,1000,B);};function FCKEditingArea_MakeEditableByMutation(){delete this._timer;FCKTools.RemoveEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);this.MakeEditable();};FCKEditingArea.prototype.Focus=function(){try{if (this.Mode==0){if (FCKBrowserInfo.IsIE) this._FocusIE();else this.Window.focus();}else{var A=FCKTools.GetElementDocument(this.Textarea);if ((!A.hasFocus||A.hasFocus())&&A.activeElement==this.Textarea) return;this.Textarea.focus();}}catch(e) {}};FCKEditingArea.prototype._FocusIE=function(){this.Document.body.setActive();this.Window.focus();var A=this.Document.selection.createRange();var B=A.parentElement();var C=B.nodeName.toLowerCase();if (B.childNodes.length>0||!(FCKListsLib.BlockElements[C]||FCKListsLib.NonEmptyBlockElements[C])){return;};A=new FCKDomRange(this.Window);A.MoveToElementEditStart(B);A.Select();};function FCKEditingArea_Cleanup(){if (this.Document){this.Document.selection.empty();this.Document.body.innerHTML="";};this.TargetElement=null;this.IFrame=null;this.Document=null;this.Textarea=null;if (this.Window){this.Window._FCKEditingArea=null;this.Window=null;}}; +var FCKKeystrokeHandler=function(A){this.Keystrokes={};this.CancelCtrlDefaults=(A!==false);};FCKKeystrokeHandler.prototype.AttachToElement=function(A){FCKTools.AddEventListenerEx(A,'keydown',_FCKKeystrokeHandler_OnKeyDown,this);if (FCKBrowserInfo.IsGecko10||FCKBrowserInfo.IsOpera||(FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac)) FCKTools.AddEventListenerEx(A,'keypress',_FCKKeystrokeHandler_OnKeyPress,this);};FCKKeystrokeHandler.prototype.SetKeystrokes=function(){for (var i=0;i40))){B._CancelIt=true;if (A.preventDefault) return A.preventDefault();A.returnValue=false;A.cancelBubble=true;return false;};return true;};function _FCKKeystrokeHandler_OnKeyPress(A,B){if (B._CancelIt){if (A.preventDefault) return A.preventDefault();return false;};return true;}; +FCK.DTD=(function(){var X=FCKTools.Merge;var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I;A={isindex:1,fieldset:1};B={input:1,button:1,select:1,textarea:1,label:1};C=X({a:1},B);D=X({iframe:1},C);E={hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1};F={ins:1,del:1,script:1};G=X({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1},F);H=X({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1},G);I=X({p:1},H);J=X({iframe:1},H,B);K={img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1};L=X({a:1},J);M={tr:1};N={'#':1};O=X({param:1},K);P=X({form:1},A,D,E,I);Q={li:1};return {col:{},tr:{td:1,th:1},img:{},colgroup:{col:1},noscript:P,td:P,br:{},th:P,center:P,kbd:L,button:X(I,E),basefont:{},h5:L,h4:L,samp:L,h6:L,ol:Q,h1:L,h3:L,option:N,h2:L,form:X(A,D,E,I),select:{optgroup:1,option:1},font:J,ins:P,menu:Q,abbr:L,label:L,table:{thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},code:L,script:N,tfoot:M,cite:L,li:P,input:{},iframe:P,strong:J,textarea:N,noframes:P,big:J,small:J,span:J,hr:{},dt:L,sub:J,optgroup:{option:1},param:{},bdo:L,'var':J,div:P,object:O,sup:J,dd:P,strike:J,area:{},dir:Q,map:X({area:1,form:1,p:1},A,F,E),applet:O,dl:{dt:1,dd:1},del:P,isindex:{},fieldset:X({legend:1},K),thead:M,ul:Q,acronym:L,b:J,a:J,blockquote:P,caption:L,i:J,u:J,tbody:M,s:L,address:X(D,I),tt:J,legend:L,q:L,pre:X(G,C),p:L,em:J,dfn:L};})(); +var FCKStyle=function(A){this.Element=(A.Element||'span').toLowerCase();this._StyleDesc=A;};FCKStyle.prototype={GetType:function(){var A=this.GetType_$;if (A!=undefined) return A;var B=this.Element;if (B=='#'||FCKListsLib.StyleBlockElements[B]) A=0;else if (FCKListsLib.StyleObjectElements[B]) A=2;else A=1;return (this.GetType_$=A);},ApplyToSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.ApplyToRange(B,true);},ApplyToRange:function(A,B,C){switch (this.GetType()){case 0:this.ApplyToRange=this._ApplyBlockStyle;break;case 1:this.ApplyToRange=this._ApplyInlineStyle;break;default:return;};this.ApplyToRange(A,B,C);},ApplyToObject:function(A){if (!A) return;this.BuildElement(null,A);},RemoveFromSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.RemoveFromRange(B,true);},RemoveFromRange:function(A,B,C){var D;var E=this._GetAttribsForComparison();var F=this._GetOverridesForComparison();if (A.CheckIsCollapsed()){var D=A.CreateBookmark(true);var H=A.GetBookmarkNode(D,true);var I=new FCKElementPath(H.parentNode);var J=[];var K=!FCKDomTools.GetNextSibling(H);var L=K||!FCKDomTools.GetPreviousSibling(H);var M;var N=-1;for (var i=0;i=0;i--){var E=D[i];for (var F in B){if (FCKDomTools.HasAttribute(E,F)){switch (F){case 'style':this._RemoveStylesFromElement(E);break;case 'class':if (FCKDomTools.GetAttributeValue(E,F)!=this.GetFinalAttributeValue(F)) continue;default:FCKDomTools.RemoveAttribute(E,F);}}};this._RemoveOverrides(E,C[this.Element]);this._RemoveNoAttribElement(E);};for (var G in C){if (G!=this.Element){D=A.getElementsByTagName(G);for (var i=D.length-1;i>=0;i--){var E=D[i];this._RemoveOverrides(E,C[G]);this._RemoveNoAttribElement(E);}}}},_RemoveStylesFromElement:function(A){var B=A.style.cssText;var C=this.GetFinalStyleValue();if (B.length>0&&C.length==0) return;C='(^|;)\\s*('+C.replace(/\s*([^ ]+):.*?(;|$)/g,'$1|').replace(/\|$/,'')+'):[^;]+';var D=new RegExp(C,'gi');B=B.replace(D,'').Trim();if (B.length==0||B==';') FCKDomTools.RemoveAttribute(A,'style');else A.style.cssText=B.replace(D,'');},_RemoveOverrides:function(A,B){var C=B&&B.Attributes;if (C){for (var i=0;i0) C.style.cssText=this.GetFinalStyleValue();return C;},_CompareAttributeValues:function(A,B,C){if (A=='style'&&B&&C){B=B.replace(/;$/,'').toLowerCase();C=C.replace(/;$/,'').toLowerCase();};return (B==C||((B===null||B==='')&&(C===null||C==='')))},GetFinalAttributeValue:function(A){var B=this._StyleDesc.Attributes;var B=B?B[A]:null;if (!B&&A=='style') return this.GetFinalStyleValue();if (B&&this._Variables) B=B.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);return B;},GetFinalStyleValue:function(){var A=this._GetStyleText();if (A.length>0&&this._Variables){A=A.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);A=FCKTools.NormalizeCssText(A);};return A;},_GetVariableReplace:function(){return this._Variables[arguments[2]]||arguments[0];},SetVariable:function(A,B){var C=this._Variables;if (!C) C=this._Variables={};this._Variables[A]=B;},_FromPre:function(A,B,C){var D=B.innerHTML;D=D.replace(/(\r\n|\r)/g,'\n');D=D.replace(/^[ \t]*\n/,'');D=D.replace(/\n$/,'');D=D.replace(/^[ \t]+|[ \t]+$/g,function(match,offset,s){if (match.length==1) return ' ';else if (offset==0) return new Array(match.length).join(' ')+' ';else return ' '+new Array(match.length).join(' ');});var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag){value=value.replace(/\n/g,'
    ');value=value.replace(/[ \t]{2,}/g,function (match){return new Array(match.length).join(' ')+' ';});};F.push(value);});C.innerHTML=F.join('');return C;},_ToPre:function(A,B,C){var D=B.innerHTML.Trim();D=D.replace(/[ \t\r\n]*(]*>)[ \t\r\n]*/gi,'
    ');var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag) value=value.replace(/([ \t\n\r]+| )/g,' ');else if (isTag&&value=='
    ') value='\n';F.push(value);});if (FCKBrowserInfo.IsIE){var G=A.createElement('div');G.appendChild(C);C.outerHTML='
    \n'+F.join('')+'
    ';C=G.removeChild(G.firstChild);}else C.innerHTML=F.join('');return C;},_CheckAndMergePre:function(A,B){if (A!=FCKDomTools.GetPreviousSourceElement(B,true)) return;var C=A.innerHTML.replace(/\n$/,'')+'\n\n'+B.innerHTML.replace(/^\n/,'');if (FCKBrowserInfo.IsIE) B.outerHTML='
    '+C+'
    ';else B.innerHTML=C;FCKDomTools.RemoveNode(A);},_CheckAndSplitPre:function(A){var B;var C=A.firstChild;C=C&&C.nextSibling;while (C){var D=C.nextSibling;if (D&&D.nextSibling&&C.nodeName.IEquals('br')&&D.nodeName.IEquals('br')){FCKDomTools.RemoveNode(C);C=D.nextSibling;FCKDomTools.RemoveNode(D);B=FCKDomTools.InsertAfterNode(B||A,FCKDomTools.CloneElement(A));continue;};if (B){C=C.previousSibling;FCKDomTools.MoveNode(C.nextSibling,B);};C=C.nextSibling;}},_ApplyBlockStyle:function(A,B,C){var D;if (B) D=A.CreateBookmark();var E=new FCKDomRangeIterator(A);E.EnforceRealBlocks=true;var F;var G=A.Window.document;var H;while((F=E.GetNextParagraph())){var I=this.BuildElement(G);var J=I.nodeName.IEquals('pre');var K=F.nodeName.IEquals('pre');var L=J&&!K;var M=!J&&K;if (L) I=this._ToPre(G,F,I);else if (M) I=this._FromPre(G,F,I);else FCKDomTools.MoveChildren(F,I);F.parentNode.insertBefore(I,F);FCKDomTools.RemoveNode(F);if (J){if (H) this._CheckAndMergePre(H,I);H=I;}else if (M) this._CheckAndSplitPre(I);};if (B) A.SelectBookmark(D);if (C) A.MoveToBookmark(D);},_ApplyInlineStyle:function(A,B,C){var D=A.Window.document;if (A.CheckIsCollapsed()){var E=this.BuildElement(D);A.InsertNode(E);A.MoveToPosition(E,2);A.Select();return;};var F=this.Element;var G=FCK.DTD[F]||FCK.DTD.span;var H=this._GetAttribsForComparison();var I;A.Expand('inline_elements');var J=A.CreateBookmark(true);var K=A.GetBookmarkNode(J,true);var L=A.GetBookmarkNode(J,false);A.Release(true);var M=FCKDomTools.GetNextSourceNode(K,true);while (M){var N=false;var O=M.nodeType;var P=O==1?M.nodeName.toLowerCase():null;if (!P||G[P]){if ((FCK.DTD[M.parentNode.nodeName.toLowerCase()]||FCK.DTD.span)[F]||!FCK.DTD[F]){if (!A.CheckHasRange()) A.SetStart(M,3);if (O!=1||M.childNodes.length==0){var Q=M;var R=Q.parentNode;while (Q==R.lastChild&&G[R.nodeName.toLowerCase()]){Q=R;};A.SetEnd(Q,4);if (Q==Q.parentNode.lastChild&&!G[Q.parentNode.nodeName.toLowerCase()]) N=true;}else{A.SetEnd(M,3);}}else N=true;}else N=true;M=FCKDomTools.GetNextSourceNode(M);if (M==L){M=null;N=true;};if (N&&A.CheckHasRange()&&!A.CheckIsCollapsed()){I=this.BuildElement(D);A.ExtractContents().AppendTo(I);if (I.innerHTML.RTrim().length>0){A.InsertNode(I);this.RemoveFromElement(I);this._MergeSiblings(I,this._GetAttribsForComparison());if (!FCKBrowserInfo.IsIE) I.normalize();};A.Release(true);}};this._FixBookmarkStart(K);if (B) A.SelectBookmark(J);if (C) A.MoveToBookmark(J);},_FixBookmarkStart:function(A){var B;while ((B=A.nextSibling)){if (B.nodeType==1&&FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){if (!B.firstChild) FCKDomTools.RemoveNode(B);else FCKDomTools.MoveNode(A,B,true);continue;};if (B.nodeType==3&&B.length==0){FCKDomTools.RemoveNode(B);continue;};break;}},_MergeSiblings:function(A,B){if (!A||A.nodeType!=1||!FCKListsLib.InlineNonEmptyElements[A.nodeName.toLowerCase()]) return;this._MergeNextSibling(A,B);this._MergePreviousSibling(A,B);},_MergeNextSibling:function(A,B){var C=A.nextSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.nextSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.lastChild;if (D) FCKDomTools.MoveNode(A.nextSibling,A);FCKDomTools.MoveChildren(C,A);FCKDomTools.RemoveNode(C);if (E) this._MergeNextSibling(E);}}},_MergePreviousSibling:function(A,B){var C=A.previousSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.previousSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.firstChild;if (D) FCKDomTools.MoveNode(A.previousSibling,A,true);FCKDomTools.MoveChildren(C,A,true);FCKDomTools.RemoveNode(C);if (E) this._MergePreviousSibling(E);}}},_GetStyleText:function(){var A=this._StyleDesc.Styles;var B=(this._StyleDesc.Attributes?this._StyleDesc.Attributes['style']||'':'');if (B.length>0) B+=';';for (var C in A) B+=C+':'+A[C]+';';if (B.length>0&&!(/#\(/.test(B))){B=FCKTools.NormalizeCssText(B);};return (this._GetStyleText=function() { return B;})();},_GetAttribsForComparison:function(){var A=this._GetAttribsForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Attributes;if (B){for (var C in B){A[C.toLowerCase()]=B[C].toLowerCase();}};if (this._GetStyleText().length>0){A['style']=this._GetStyleText().toLowerCase();};FCKTools.AppendLengthProperty(A,'_length');return (this._GetAttribsForComparison_$=A);},_GetOverridesForComparison:function(){var A=this._GetOverridesForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Overrides;if (B){if (!FCKTools.IsArray(B)) B=[B];for (var i=0;i0) return true;};B=B.nextSibling;};return false;}}; +var FCKElementPath=function(A){var B=null;var C=null;var D=[];var e=A;while (e){if (e.nodeType==1){if (!this.LastElement) this.LastElement=e;var E=e.nodeName.toLowerCase();if (FCKBrowserInfo.IsIE&&e.scopeName!='HTML') E=e.scopeName.toLowerCase()+':'+E;if (!C){if (!B&&FCKListsLib.PathBlockElements[E]!=null) B=e;if (FCKListsLib.PathBlockLimitElements[E]!=null){if (!B&&E=='div'&&!FCKElementPath._CheckHasBlock(e)) B=e;else C=e;}};D.push(e);if (E=='body') break;};e=e.parentNode;};this.Block=B;this.BlockLimit=C;this.Elements=D;};FCKElementPath._CheckHasBlock=function(A){var B=A.childNodes;for (var i=0,count=B.length;i0){if (D.nodeType==3){var G=D.nodeValue.substr(0,E).Trim();if (G.length!=0) return A.IsStartOfBlock=false;}else F=D.childNodes[E-1];};if (!F) F=FCKDomTools.GetPreviousSourceNode(D,true,null,C);while (F){switch (F.nodeType){case 1:if (!FCKListsLib.InlineChildReqElements[F.nodeName.toLowerCase()]) return A.IsStartOfBlock=false;break;case 3:if (F.nodeValue.Trim().length>0) return A.IsStartOfBlock=false;};F=FCKDomTools.GetPreviousSourceNode(F,false,null,C);};return A.IsStartOfBlock=true;},CheckEndOfBlock:function(A){var B=this._Cache.IsEndOfBlock;if (B!=undefined) return B;var C=this.EndBlock||this.EndBlockLimit;var D=this._Range.endContainer;var E=this._Range.endOffset;var F;if (D.nodeType==3){var G=D.nodeValue;if (E0) return this._Cache.IsEndOfBlock=false;};F=FCKDomTools.GetNextSourceNode(F,false,null,C);};if (A) this.Select();return this._Cache.IsEndOfBlock=true;},CreateBookmark:function(A){var B={StartId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'S',EndId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'E'};var C=this.Window.document;var D;var E;var F;if (!this.CheckIsCollapsed()){E=C.createElement('span');E.style.display='none';E.id=B.EndId;E.setAttribute('_fck_bookmark',true);E.innerHTML=' ';F=this.Clone();F.Collapse(false);F.InsertNode(E);};D=C.createElement('span');D.style.display='none';D.id=B.StartId;D.setAttribute('_fck_bookmark',true);D.innerHTML=' ';F=this.Clone();F.Collapse(true);F.InsertNode(D);if (A){B.StartNode=D;B.EndNode=E;};if (E){this.SetStart(D,4);this.SetEnd(E,3);}else this.MoveToPosition(D,4);return B;},GetBookmarkNode:function(A,B){var C=this.Window.document;if (B) return A.StartNode||C.getElementById(A.StartId);else return A.EndNode||C.getElementById(A.EndId);},MoveToBookmark:function(A,B){var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);this.SetStart(C,3);if (!B) FCKDomTools.RemoveNode(C);if (D){this.SetEnd(D,3);if (!B) FCKDomTools.RemoveNode(D);}else this.Collapse(true);this._UpdateElementInfo();},CreateBookmark2:function(){if (!this._Range) return { "Start":0,"End":0 };var A={"Start":[this._Range.startOffset],"End":[this._Range.endOffset]};var B=this._Range.startContainer.previousSibling;var C=this._Range.endContainer.previousSibling;var D=this._Range.startContainer;var E=this._Range.endContainer;while (B&&B.nodeType==3&&D.nodeType==3){A.Start[0]+=B.length;D=B;B=B.previousSibling;}while (C&&C.nodeType==3&&E.nodeType==3){A.End[0]+=C.length;E=C;C=C.previousSibling;};if (D.nodeType==1&&D.childNodes[A.Start[0]]&&D.childNodes[A.Start[0]].nodeType==3){var F=D.childNodes[A.Start[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};D=F;A.Start[0]=G;};if (E.nodeType==1&&E.childNodes[A.End[0]]&&E.childNodes[A.End[0]].nodeType==3){var F=E.childNodes[A.End[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};E=F;A.End[0]=G;};A.Start=FCKDomTools.GetNodeAddress(D,true).concat(A.Start);A.End=FCKDomTools.GetNodeAddress(E,true).concat(A.End);return A;},MoveToBookmark2:function(A){var B=FCKDomTools.GetNodeFromAddress(this.Window.document,A.Start.slice(0,-1),true);var C=FCKDomTools.GetNodeFromAddress(this.Window.document,A.End.slice(0,-1),true);this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var D=A.Start[A.Start.length-1];var E=A.End[A.End.length-1];while (B.nodeType==3&&D>B.length){if (!B.nextSibling||B.nextSibling.nodeType!=3) break;D-=B.length;B=B.nextSibling;}while (C.nodeType==3&&E>C.length){if (!C.nextSibling||C.nextSibling.nodeType!=3) break;E-=C.length;C=C.nextSibling;};this._Range.setStart(B,D);this._Range.setEnd(C,E);this._UpdateElementInfo();},MoveToPosition:function(A,B){this.SetStart(A,B);this.Collapse(true);},SetStart:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setStart(A,0);break;case 2:D.setStart(A,A.childNodes.length);break;case 3:D.setStartBefore(A);break;case 4:D.setStartAfter(A);};if (!C) this._UpdateElementInfo();},SetEnd:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setEnd(A,0);break;case 2:D.setEnd(A,A.childNodes.length);break;case 3:D.setEndBefore(A);break;case 4:D.setEndAfter(A);};if (!C) this._UpdateElementInfo();},Expand:function(A){var B,oSibling;switch (A){case 'inline_elements':if (this._Range.startOffset==0){B=this._Range.startContainer;if (B.nodeType!=1) B=B.previousSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setStartBefore(B);if (B!=B.parentNode.firstChild) break;B=B.parentNode;}}};B=this._Range.endContainer;var C=this._Range.endOffset;if ((B.nodeType==3&&C>=B.nodeValue.length)||(B.nodeType==1&&C>=B.childNodes.length)||(B.nodeType!=1&&B.nodeType!=3)){if (B.nodeType!=1) B=B.nextSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setEndAfter(B);if (B!=B.parentNode.lastChild) break;B=B.parentNode;}}};break;case 'block_contents':case 'list_contents':var D=FCKListsLib.BlockBoundaries;if (A=='list_contents'||FCKConfig.EnterMode=='br') D=FCKListsLib.ListBoundaries;if (this.StartBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents') this.SetStart(this.StartBlock,1);else{B=this._Range.startContainer;if (B.nodeType==1){var E=B.childNodes[this._Range.startOffset];if (E) B=FCKDomTools.GetPreviousSourceNode(E,true);else B=B.lastChild||B;}while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setStartBefore(B);B=B.previousSibling||B.parentNode;}};if (this.EndBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents'&&this.EndBlock.nodeName.toLowerCase()!='li') this.SetEnd(this.EndBlock,2);else{B=this._Range.endContainer;if (B.nodeType==1) B=B.childNodes[this._Range.endOffset]||B.lastChild;while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setEndAfter(B);B=B.nextSibling||B.parentNode;};if (B&&B.nodeName.toLowerCase()=='br') this._Range.setEndAfter(B);};this._UpdateElementInfo();}},SplitBlock:function(A){var B=A||FCKConfig.EnterMode;if (!this._Range) this.MoveToSelection();if (this.StartBlockLimit==this.EndBlockLimit){var C=this.StartBlock;var D=this.EndBlock;var E=null;if (B!='br'){if (!C){C=this.FixBlock(true,B);D=this.EndBlock;};if (!D) D=this.FixBlock(false,B);};var F=(C!=null&&this.CheckStartOfBlock());var G=(D!=null&&this.CheckEndOfBlock());if (!this.CheckIsEmpty()) this.DeleteContents();if (C&&D&&C==D){if (G){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(D,4);D=null;}else if (F){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(C,3);C=null;}else{this.SetEnd(C,2);var H=this.ExtractContents();D=C.cloneNode(false);D.removeAttribute('id',false);H.AppendTo(D);FCKDomTools.InsertAfterNode(C,D);this.MoveToPosition(C,4);if (FCKBrowserInfo.IsGecko&&!C.nodeName.IEquals(['ul','ol'])) FCKTools.AppendBogusBr(C);}};return {PreviousBlock:C,NextBlock:D,WasStartOfBlock:F,WasEndOfBlock:G,ElementPath:E};};return null;},FixBlock:function(A,B){var C=this.CreateBookmark();this.Collapse(A);this.Expand('block_contents');var D=this.Window.document.createElement(B);this.ExtractContents().AppendTo(D);FCKDomTools.TrimNode(D);if (FCKDomTools.CheckIsEmptyElement(D,function(element) { return element.getAttribute('_fck_bookmark')!='true';})&&FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);this.InsertNode(D);this.MoveToBookmark(C);return D;},Release:function(A){if (!A) this.Window=null;this.StartNode=null;this.StartContainer=null;this.StartBlock=null;this.StartBlockLimit=null;this.EndNode=null;this.EndContainer=null;this.EndBlock=null;this.EndBlockLimit=null;this._Range=null;this._Cache=null;},CheckHasRange:function(){return!!this._Range;},GetTouchedStartNode:function(){var A=this._Range;var B=A.startContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.startOffset]||B;},GetTouchedEndNode:function(){var A=this._Range;var B=A.endContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.endOffset-1]||B;}}; +FCKDomRange.prototype.MoveToSelection=function(){this.Release(true);var A=this.Window.getSelection();if (A&&A.rangeCount>0){this._Range=FCKW3CRange.CreateFromRange(this.Window.document,A.getRangeAt(0));this._UpdateElementInfo();}else if (this.Window.document) this.MoveToElementStart(this.Window.document.body);};FCKDomRange.prototype.Select=function(){var A=this._Range;if (A){var B=A.startContainer;if (A.collapsed&&B.nodeType==1&&B.childNodes.length==0) B.appendChild(A._Document.createTextNode(''));var C=this.Window.document.createRange();C.setStart(B,A.startOffset);try{C.setEnd(A.endContainer,A.endOffset);}catch (e){if (e.toString().Contains('NS_ERROR_ILLEGAL_VALUE')){A.collapse(true);C.setEnd(A.endContainer,A.endOffset);}else throw(e);};var D=this.Window.getSelection();D.removeAllRanges();D.addRange(C);}};FCKDomRange.prototype.SelectBookmark=function(A){var B=this.Window.document.createRange();var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);B.setStart(C.parentNode,FCKDomTools.GetIndexOf(C));FCKDomTools.RemoveNode(C);if (D){B.setEnd(D.parentNode,FCKDomTools.GetIndexOf(D));FCKDomTools.RemoveNode(D);};var E=this.Window.getSelection();E.removeAllRanges();E.addRange(B);}; +var FCKDomRangeIterator=function(A){this.Range=A;this.ForceBrBreak=false;this.EnforceRealBlocks=false;};FCKDomRangeIterator.CreateFromSelection=function(A){var B=new FCKDomRange(A);B.MoveToSelection();return new FCKDomRangeIterator(B);};FCKDomRangeIterator.prototype={GetNextParagraph:function(){var A;var B;var C;var D;var E;var F=this.ForceBrBreak?FCKListsLib.ListBoundaries:FCKListsLib.BlockBoundaries;if (!this._LastNode){var B=this.Range.Clone();B.Expand(this.ForceBrBreak?'list_contents':'block_contents');this._NextNode=B.GetTouchedStartNode();this._LastNode=B.GetTouchedEndNode();B=null;};var H=this._NextNode;var I=this._LastNode;this._NextNode=null;while (H){var J=false;var K=(H.nodeType!=1);var L=false;if (!K){var M=H.nodeName.toLowerCase();if (F[M]&&(!FCKBrowserInfo.IsIE||H.scopeName=='HTML')){if (M=='br') K=true;else if (!B&&H.childNodes.length==0&&M!='hr'){A=H;C=H==I;break;};if (B){B.SetEnd(H,3,true);if (M!='br') this._NextNode=FCKDomTools.GetNextSourceNode(H,true,null,I)||H;};J=true;}else{if (H.firstChild){if (!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};H=H.firstChild;continue;};K=true;}}else if (H.nodeType==3){if (/^[\r\n\t ]+$/.test(H.nodeValue)) K=false;};if (K&&!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};C=((!J||K)&&H==I);if (B&&!J){while (!H.nextSibling&&!C){var N=H.parentNode;if (F[N.nodeName.toLowerCase()]){J=true;C=C||(N==I);break;};H=N;K=true;C=(H==I);L=true;}};if (K) B.SetEnd(H,4,true);if ((J||C)&&B){B._UpdateElementInfo();if (B.StartNode==B.EndNode&&B.StartNode.parentNode==B.StartBlockLimit&&B.StartNode.getAttribute&&B.StartNode.getAttribute('_fck_bookmark')) B=null;else break;};if (C) break;H=FCKDomTools.GetNextSourceNode(H,L,null,I);};if (!A){if (!B){this._NextNode=null;return null;};A=B.StartBlock;if (!A&&!this.EnforceRealBlocks&&B.StartBlockLimit.nodeName.IEquals('DIV','TH','TD')&&B.CheckStartOfBlock()&&B.CheckEndOfBlock()){A=B.StartBlockLimit;}else if (!A||(this.EnforceRealBlocks&&A.nodeName.toLowerCase()=='li')){A=this.Range.Window.document.createElement(FCKConfig.EnterMode=='p'?'p':'div');B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);B.InsertNode(A);D=true;E=true;}else if (A.nodeName.toLowerCase()!='li'){if (!B.CheckStartOfBlock()||!B.CheckEndOfBlock()){A=A.cloneNode(false);B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);var O=B.SplitBlock();D=!O.WasStartOfBlock;E=!O.WasEndOfBlock;B.InsertNode(A);}}else if (!C){this._NextNode=A==I?null:FCKDomTools.GetNextSourceNode(B.EndNode,true,null,I);return A;}};if (D){var P=A.previousSibling;if (P&&P.nodeType==1){if (P.nodeName.toLowerCase()=='br') P.parentNode.removeChild(P);else if (P.lastChild&&P.lastChild.nodeName.IEquals('br')) P.removeChild(P.lastChild);}};if (E){var Q=A.lastChild;if (Q&&Q.nodeType==1&&Q.nodeName.toLowerCase()=='br') A.removeChild(Q);};if (!this._NextNode) this._NextNode=(C||A==I)?null:FCKDomTools.GetNextSourceNode(A,true,null,I);return A;}}; +var FCKDocumentFragment=function(A,B){this.RootNode=B||A.createDocumentFragment();};FCKDocumentFragment.prototype={AppendTo:function(A){A.appendChild(this.RootNode);},AppendHtml:function(A){var B=this.RootNode.ownerDocument.createElement('div');B.innerHTML=A;FCKDomTools.MoveChildren(B,this.RootNode);},InsertAfterNode:function(A){FCKDomTools.InsertAfterNode(A,this.RootNode);}}; +var FCKW3CRange=function(A){this._Document=A;this.startContainer=null;this.startOffset=null;this.endContainer=null;this.endOffset=null;this.collapsed=true;};FCKW3CRange.CreateRange=function(A){return new FCKW3CRange(A);};FCKW3CRange.CreateFromRange=function(A,B){var C=FCKW3CRange.CreateRange(A);C.setStart(B.startContainer,B.startOffset);C.setEnd(B.endContainer,B.endOffset);return C;};FCKW3CRange.prototype={_UpdateCollapsed:function(){this.collapsed=(this.startContainer==this.endContainer&&this.startOffset==this.endOffset);},setStart:function(A,B){this.startContainer=A;this.startOffset=B;if (!this.endContainer){this.endContainer=A;this.endOffset=B;};this._UpdateCollapsed();},setEnd:function(A,B){this.endContainer=A;this.endOffset=B;if (!this.startContainer){this.startContainer=A;this.startOffset=B;};this._UpdateCollapsed();},setStartAfter:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setStartBefore:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A));},setEndAfter:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setEndBefore:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A));},collapse:function(A){if (A){this.endContainer=this.startContainer;this.endOffset=this.startOffset;}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset;};this.collapsed=true;},selectNodeContents:function(A){this.setStart(A,0);this.setEnd(A,A.nodeType==3?A.data.length:A.childNodes.length);},insertNode:function(A){var B=this.startContainer;var C=this.startOffset;if (B.nodeType==3){B.splitText(C);if (B==this.endContainer) this.setEnd(B.nextSibling,this.endOffset-this.startOffset);FCKDomTools.InsertAfterNode(B,A);return;}else{B.insertBefore(A,B.childNodes[C]||null);if (B==this.endContainer){this.endOffset++;this.collapsed=false;}}},deleteContents:function(){if (this.collapsed) return;this._ExecContentsAction(0);},extractContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(1,A);return A;},cloneContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(2,A);return A;},_ExecContentsAction:function(A,B){var C=this.startContainer;var D=this.endContainer;var E=this.startOffset;var F=this.endOffset;var G=false;var H=false;if (D.nodeType==3) D=D.splitText(F);else{if (D.childNodes.length>0){if (F>D.childNodes.length-1){D=FCKDomTools.InsertAfterNode(D.lastChild,this._Document.createTextNode(''));H=true;}else D=D.childNodes[F];}};if (C.nodeType==3){C.splitText(E);if (C==D) D=C.nextSibling;}else{if (E==0){C=C.insertBefore(this._Document.createTextNode(''),C.firstChild);G=true;}else if (E>C.childNodes.length-1){C=C.appendChild(this._Document.createTextNode(''));G=true;}else C=C.childNodes[E].previousSibling;};var I=FCKDomTools.GetParents(C);var J=FCKDomTools.GetParents(D);var i,topStart,topEnd;for (i=0;i0&&levelStartNode!=D) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==D));if (!I[k]||levelStartNode.parentNode!=I[k].parentNode){currentNode=levelStartNode.previousSibling;while(currentNode){if (currentNode==I[k]||currentNode==C) break;currentSibling=currentNode.previousSibling;if (A==2) K.insertBefore(currentNode.cloneNode(true),K.firstChild);else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.insertBefore(currentNode,K.firstChild);};currentNode=currentSibling;}};if (K) K=levelClone;};if (A==2){var L=this.startContainer;if (L.nodeType==3){L.data+=L.nextSibling.data;L.parentNode.removeChild(L.nextSibling);};var M=this.endContainer;if (M.nodeType==3&&M.nextSibling){M.data+=M.nextSibling.data;M.parentNode.removeChild(M.nextSibling);}}else{if (topStart&&topEnd&&(C.parentNode!=topStart.parentNode||D.parentNode!=topEnd.parentNode)){var N=FCKDomTools.GetIndexOf(topEnd);if (G&&topEnd.parentNode==C.parentNode) N--;this.setStart(topEnd.parentNode,N);};this.collapse(true);};if(G) C.parentNode.removeChild(C);if(H&&D.parentNode) D.parentNode.removeChild(D);},cloneRange:function(){return FCKW3CRange.CreateFromRange(this._Document,this);}}; +var FCKEnterKey=function(A,B,C,D){this.Window=A;this.EnterMode=B||'p';this.ShiftEnterMode=C||'br';var E=new FCKKeystrokeHandler(false);E._EnterKey=this;E.OnKeystroke=FCKEnterKey_OnKeystroke;E.SetKeystrokes([[13,'Enter'],[SHIFT+13,'ShiftEnter'],[8,'Backspace'],[CTRL+8,'CtrlBackspace'],[46,'Delete']]);this.TabText='';if (D>0||FCKBrowserInfo.IsSafari){while (D--) this.TabText+='\xa0';E.SetKeystrokes([9,'Tab']);};E.AttachToElement(A.document);};function FCKEnterKey_OnKeystroke(A,B){var C=this._EnterKey;try{switch (B){case 'Enter':return C.DoEnter();break;case 'ShiftEnter':return C.DoShiftEnter();break;case 'Backspace':return C.DoBackspace();break;case 'Delete':return C.DoDelete();break;case 'Tab':return C.DoTab();break;case 'CtrlBackspace':return C.DoCtrlBackspace();break;}}catch (e){};return false;};FCKEnterKey.prototype.DoEnter=function(A,B){FCKUndo.SaveUndoStep();this._HasShift=(B===true);var C=FCKSelection.GetParentElement();var D=new FCKElementPath(C);var E=A||this.EnterMode;if (E=='br'||D.Block&&D.Block.tagName.toLowerCase()=='pre') return this._ExecuteEnterBr();else return this._ExecuteEnterBlock(E);};FCKEnterKey.prototype.DoShiftEnter=function(){return this.DoEnter(this.ShiftEnterMode,true);};FCKEnterKey.prototype.DoBackspace=function(){var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};var C=B.CheckIsCollapsed();if (!C){if (FCKBrowserInfo.IsIE&&this.Window.document.selection.type.toLowerCase()=="control"){var D=this.Window.document.selection.createRange();for (var i=D.length-1;i>=0;i--){var E=D.item(i);E.parentNode.removeChild(E);};return true;};return false;};if (FCKBrowserInfo.IsIE){var F=FCKDomTools.GetPreviousSourceElement(B.StartNode,true);if (F&&F.nodeName.toLowerCase()=='br'){var G=B.Clone();G.SetStart(F,4);if (G.CheckIsEmpty()){F.parentNode.removeChild(F);return true;}}};var H=B.StartBlock;var I=B.EndBlock;if (B.StartBlockLimit==B.EndBlockLimit&&H&&I){if (!C){var J=B.CheckEndOfBlock();B.DeleteContents();if (H!=I){B.SetStart(I,1);B.SetEnd(I,1);};B.Select();A=(H==I);};if (B.CheckStartOfBlock()){var K=B.StartBlock;var L=FCKDomTools.GetPreviousSourceElement(K,true,['BODY',B.StartBlockLimit.nodeName],['UL','OL']);A=this._ExecuteBackspace(B,L,K);}else if (FCKBrowserInfo.IsGeckoLike){B.Select();}};B.Release();return A;};FCKEnterKey.prototype.DoCtrlBackspace=function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(this.Window);A.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(A,this.Window.document.body)){this._FixIESelectAllBug(A);return true;};return false;};FCKEnterKey.prototype._ExecuteBackspace=function(A,B,C){var D=false;if (!B&&C&&C.nodeName.IEquals('LI')&&C.parentNode.parentNode.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};if (B&&B.nodeName.IEquals('LI')){var E=FCKDomTools.GetLastChild(B,['UL','OL']);while (E){B=FCKDomTools.GetLastChild(E,'LI');E=FCKDomTools.GetLastChild(B,['UL','OL']);}};if (B&&C){if (C.nodeName.IEquals('LI')&&!B.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};var F=C.parentNode;var G=B.nodeName.toLowerCase();if (FCKListsLib.EmptyElements[G]!=null||G=='table'){FCKDomTools.RemoveNode(B);D=true;}else{FCKDomTools.RemoveNode(C);while (F.innerHTML.Trim().length==0){var H=F.parentNode;H.removeChild(F);F=H;};FCKDomTools.LTrimNode(C);FCKDomTools.RTrimNode(B);A.SetStart(B,2,true);A.Collapse(true);var I=A.CreateBookmark(true);if (!C.tagName.IEquals(['TABLE'])) FCKDomTools.MoveChildren(C,B);A.SelectBookmark(I);D=true;}};return D;};FCKEnterKey.prototype.DoDelete=function(){FCKUndo.SaveUndoStep();var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};if (B.CheckIsCollapsed()&&B.CheckEndOfBlock(FCKBrowserInfo.IsGeckoLike)){var C=B.StartBlock;var D=FCKTools.GetElementAscensor(C,'td');var E=FCKDomTools.GetNextSourceElement(C,true,[B.StartBlockLimit.nodeName],['UL','OL','TR'],true);if (D){var F=FCKTools.GetElementAscensor(E,'td');if (F!=D) return true;};A=this._ExecuteBackspace(B,C,E);};B.Release();return A;};FCKEnterKey.prototype.DoTab=function(){var A=new FCKDomRange(this.Window);A.MoveToSelection();var B=A._Range.startContainer;while (B){if (B.nodeType==1){var C=B.tagName.toLowerCase();if (C=="tr"||C=="td"||C=="th"||C=="tbody"||C=="table") return false;else break;};B=B.parentNode;};if (this.TabText){A.DeleteContents();A.InsertNode(this.Window.document.createTextNode(this.TabText));A.Collapse(false);A.Select();};return true;};FCKEnterKey.prototype._ExecuteEnterBlock=function(A,B){var C=B||new FCKDomRange(this.Window);var D=C.SplitBlock(A);if (D){var E=D.PreviousBlock;var F=D.NextBlock;var G=D.WasStartOfBlock;var H=D.WasEndOfBlock;if (F){if (F.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(F,F.parentNode);FCKDomTools.MoveNode(F,F.nextSibling,true);}}else if (E&&E.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(E,E.parentNode);C.MoveToElementEditStart(E.nextSibling);FCKDomTools.MoveNode(E,E.previousSibling);};if (!G&&!H){if (F.nodeName.IEquals('li')&&F.firstChild&&F.firstChild.nodeName.IEquals(['ul','ol'])) F.insertBefore(FCKTools.GetElementDocument(F).createTextNode('\xa0'),F.firstChild);if (F) C.MoveToElementEditStart(F);}else{if (G&&H&&E.tagName.toUpperCase()=='LI'){C.MoveToElementStart(E);this._OutdentWithSelection(E,C);C.Release();return true;};var I;if (E){var J=E.tagName.toUpperCase();if (!this._HasShift&&!(/^H[1-6]$/).test(J)){I=FCKDomTools.CloneElement(E);}}else if (F) I=FCKDomTools.CloneElement(F);if (!I) I=this.Window.document.createElement(A);var K=D.ElementPath;if (K){for (var i=0,len=K.Elements.length;i=0&&(C=B[i--])){if (C.name.length>0){if (C.innerHTML!==''){if (FCKBrowserInfo.IsIE) C.className+=' FCK__AnchorC';}else{var D=FCKDocumentProcessor_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}}}};var FCKPageBreaksProcessor=FCKDocumentProcessor.AppendNew();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('DIV');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.childNodes.length==1&&C.childNodes[0].style&&C.childNodes[0].style.display=='none'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};var FCKEmbedAndObjectProcessor=(function(){var A=[];var B=function(el){var C=el.cloneNode(true);var D;var E=D=FCKDocumentProcessor_CreateFakeImage('FCK__UnknownObject',C);FCKEmbedAndObjectProcessor.RefreshView(E,el);for (var i=0;i=0;i--) B(G[i]);};var H=function(doc){F('object',doc);F('embed',doc);};return FCKTools.Merge(FCKDocumentProcessor.AppendNew(),{ProcessDocument:function(doc){if (FCKBrowserInfo.IsGecko) FCKTools.RunFunction(H,this,[doc]);else H(doc);},RefreshView:function(placeHolder,original){if (original.getAttribute('width')>0) placeHolder.style.width=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('width'));if (original.getAttribute('height')>0) placeHolder.style.height=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('height'));},AddCustomHandler:function(func){A.push(func);}});})();FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;};if (FCKBrowserInfo.IsIE){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('HR');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=A.createElement('hr');D.mergeAttributes(C,true);FCKDomTools.InsertAfterNode(C,D);C.parentNode.removeChild(C);}}};FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('INPUT');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.type=='hidden'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__InputHidden',C.cloneNode(true));D.setAttribute('_fckinputhidden','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};FCKEmbedAndObjectProcessor.AddCustomHandler(function(A,B){if (!(A.nodeName.IEquals('embed')&&(A.type=='application/x-shockwave-flash'||/\.swf($|#|\?)/i.test(A.src)))) return;B.className='FCK__Flash';B.setAttribute('_fckflash','true',0);});if (FCKBrowserInfo.IsSafari){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByClassName?A.getElementsByClassName('Apple-style-span'):Array.prototype.filter.call(A.getElementsByTagName('span'),function(item){ return item.className=='Apple-style-span';});for (var i=B.length-1;i>=0;i--) FCKDomTools.RemoveNode(B[i],true);}}; +var FCKSelection=FCK.Selection={GetParentBlock:function(){var A=this.GetParentElement();while (A){if (FCKListsLib.BlockBoundaries[A.nodeName.toLowerCase()]) break;A=A.parentNode;};return A;},ApplyStyle:function(A){FCKStyles.ApplyStyle(new FCKStyle(A));}}; +FCKSelection.GetType=function(){var A='Text';var B;try { B=this.GetSelection();} catch (e) {};if (B&&B.rangeCount==1){var C=B.getRangeAt(0);if (C.startContainer==C.endContainer&&(C.endOffset-C.startOffset)==1&&C.startContainer.nodeType==1&&FCKListsLib.StyleObjectElements[C.startContainer.childNodes[C.startOffset].nodeName.toLowerCase()]){A='Control';}};return A;};FCKSelection.GetSelectedElement=function(){var A=!!FCK.EditorWindow&&this.GetSelection();if (!A||A.rangeCount<1) return null;var B=A.getRangeAt(0);if (B.startContainer!=B.endContainer||B.startContainer.nodeType!=1||B.startOffset!=B.endOffset-1) return null;var C=B.startContainer.childNodes[B.startOffset];if (C.nodeType!=1) return null;return C;};FCKSelection.GetParentElement=function(){if (this.GetType()=='Control') return FCKSelection.GetSelectedElement().parentNode;else{var A=this.GetSelection();if (A){if (A.anchorNode&&A.anchorNode==A.focusNode){var B=A.getRangeAt(0);if (B.collapsed||B.startContainer.nodeType==3) return A.anchorNode.parentNode;else return A.anchorNode;};var C=new FCKElementPath(A.anchorNode);var D=new FCKElementPath(A.focusNode);var E=null;var F=null;if (C.Elements.length>D.Elements.length){E=C.Elements;F=D.Elements;}else{E=D.Elements;F=C.Elements;};var G=E.length-F.length;for(var i=0;i0){var C=B.getRangeAt(A?0:(B.rangeCount-1));var D=A?C.startContainer:C.endContainer;return (D.nodeType==1?D:D.parentNode);}};return null;};FCKSelection.SelectNode=function(A){var B=FCK.EditorDocument.createRange();B.selectNode(A);var C=this.GetSelection();C.removeAllRanges();C.addRange(B);};FCKSelection.Collapse=function(A){var B=this.GetSelection();if (A==null||A===true) B.collapseToStart();else B.collapseToEnd();};FCKSelection.HasAncestorNode=function(A){var B=this.GetSelectedElement();if (!B&&FCK.EditorWindow){try { B=this.GetSelection().getRangeAt(0).startContainer;}catch(e){}}while (B){if (B.nodeType==1&&B.nodeName.IEquals(A)) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B;var C=this.GetSelectedElement();if (!C) C=this.GetSelection().getRangeAt(0).startContainer;while (C){if (C.nodeName.IEquals(A)) return C;C=C.parentNode;};return null;};FCKSelection.Delete=function(){var A=this.GetSelection();for (var i=0;i=0;i--){if (C[i]) FCKTableHandler.DeleteRows(C[i]);};return;};var E=FCKTools.GetElementAscensor(A,'TABLE');if (E.rows.length==1){FCKTableHandler.DeleteTable(E);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteTable=function(A){if (!A){A=FCKSelection.GetSelectedElement();if (!A||A.tagName!='TABLE') A=FCKSelection.MoveToAncestorNode('TABLE');};if (!A) return;FCKSelection.SelectNode(A);FCKSelection.Collapse();if (A.parentNode.childNodes.length==1) A.parentNode.parentNode.removeChild(A.parentNode);else A.parentNode.removeChild(A);};FCKTableHandler.InsertColumn=function(A){var B=null;var C=this.GetSelectedCells();if (C&&C.length) B=C[A?0:(C.length-1)];if (!B) return;var D=FCKTools.GetElementAscensor(B,'TABLE');var E=B.cellIndex;for (var i=0;i=0;i--){if (B[i]) FCKTableHandler.DeleteColumns(B[i]);};return;};if (!A) return;var C=FCKTools.GetElementAscensor(A,'TABLE');var D=A.cellIndex;for (var i=C.rows.length-1;i>=0;i--){var E=C.rows[i];if (D==0&&E.cells.length==1){FCKTableHandler.DeleteRows(E);continue;};if (E.cells[D]) E.removeChild(E.cells[D]);}};FCKTableHandler.InsertCell=function(A,B){var C=null;var D=this.GetSelectedCells();if (D&&D.length) C=D[B?0:(D.length-1)];if (!C) return null;var E=FCK.EditorDocument.createElement('TD');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(E);if (!B&&C.cellIndex==C.parentNode.cells.length-1) C.parentNode.appendChild(E);else C.parentNode.insertBefore(E,B?C:C.nextSibling);return E;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(A.parentNode);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);}};FCKTableHandler._MarkCells=function(A,B){for (var i=0;i=E.height){for (D=F;D0){var L=K.removeChild(K.firstChild);if (L.nodeType!=1||(L.getAttribute('type',2)!='_moz'&&L.getAttribute('_moz_dirty')!=null)){I.appendChild(L);J++;}}};if (J>0) I.appendChild(FCK.EditorDocument.createElement('br'));};this._ReplaceCellsByMarker(C,'_SelectedCells',B);this._UnmarkCells(A,'_SelectedCells');this._InstallTableMap(C,B.parentNode.parentNode.parentNode);B.appendChild(I);if (FCKBrowserInfo.IsGeckoLike&&(!B.firstChild)) FCKTools.AppendBogusBr(B);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeRight=function(){var A=this.GetMergeRightTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCK.EditorDocument.createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));D.parentNode.removeChild(D);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeDown=function(){var A=this.GetMergeDownTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCKTools.GetElementDocument(B).createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));if (E.firstChild) E.insertBefore(FCK.EditorDocument.createElement('br'),E.firstChild);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.HorizontalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B);var D=B.parentNode.rowIndex;var E=FCKTableHandler._GetCellIndexSpan(C,D,B);var F=isNaN(B.colSpan)?1:B.colSpan;if (F>1){var G=Math.ceil(F/2);var H=FCK.EditorDocument.createElement(B.nodeName);if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(H);var I=E+G;var J=E+F;var K=isNaN(B.rowSpan)?1:B.rowSpan;for (var r=D;r1){B.rowSpan=Math.ceil(G/2);var H=D+Math.ceil(G/2);var I=C[H];var J=null;for (var i=E+1;i1) K.colSpan=F;if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(K);B.parentNode.parentNode.parentNode.rows[H].insertBefore(K,J);}else{var L=B.parentNode.sectionRowIndex+1;var M=FCK.EditorDocument.createElement('tr');var N=B.parentNode.parentNode;if (N.rows.length>L) N.insertBefore(M,N.rows[L]);else N.appendChild(M);for (var i=0;i1) K.colSpan=F;if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(K);M.appendChild(K);}};FCKTableHandler._GetCellIndexSpan=function(A,B,C){if (A.lengthE) E=j;if (D._colScanned===true) continue;if (A[i][j-1]==D) D.colSpan++;if (A[i][j+1]!=D) D._colScanned=true;}};for (var i=0;i<=E;i++){for (var j=0;j 
    ';var A=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',e);var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.SplitBlock();B.InsertNode(A);FCK.Events.FireEvent('OnSelectionChange');};FCKPageBreakCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKUnlinkCommand=function(){this.Name='Unlink';};FCKUnlinkCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (FCKBrowserInfo.IsGeckoLike){var A=FCK.Selection.MoveToAncestorNode('A');if (A) FCKTools.RemoveOuterTags(A);return;};FCK.ExecuteNamedCommand(this.Name);};FCKUnlinkCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;var A=FCK.GetNamedCommandState(this.Name);if (A==0&&FCK.EditMode==0){var B=FCKSelection.MoveToAncestorNode('A');var C=(B&&B.name.length>0&&B.href.length==0);if (C) A=-1;};return A;};var FCKVisitLinkCommand=function(){this.Name='VisitLink';};FCKVisitLinkCommand.prototype={GetState:function(){if (FCK.EditMode!=0) return -1;var A=FCK.GetNamedCommandState('Unlink');if (A==0){var B=FCKSelection.MoveToAncestorNode('A');if (!B.href) A=-1;};return A;},Execute:function(){var A=FCKSelection.MoveToAncestorNode('A');var B=A.getAttribute('_fcksavedurl')||A.getAttribute('href',2);if (!/:\/\//.test(B)){var C=FCKConfig.BaseHref;var D=FCK.GetInstanceObject('parent');if (!C){C=D.document.location.href;C=C.substring(0,C.lastIndexOf('/')+1);};if (/^\//.test(B)){try{C=C.match(/^.*:\/\/+[^\/]+/)[0];}catch (e){C=D.document.location.protocol+'://'+D.parent.document.location.host;}};B=C+B;};if (!window.open(B,'_blank')) alert(FCKLang.VisitLinkBlocked);}};var FCKSelectAllCommand=function(){this.Name='SelectAll';};FCKSelectAllCommand.prototype.Execute=function(){if (FCK.EditMode==0){FCK.ExecuteNamedCommand('SelectAll');}else{var A=FCK.EditingArea.Textarea;if (FCKBrowserInfo.IsIE){A.createTextRange().execCommand('SelectAll');}else{A.selectionStart=0;A.selectionEnd=A.value.length;};A.focus();}};FCKSelectAllCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKPasteCommand=function(){this.Name='Paste';};FCKPasteCommand.prototype={Execute:function(){if (FCKBrowserInfo.IsIE) FCK.Paste();else FCK.ExecuteNamedCommand('Paste');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');}};var FCKRuleCommand=function(){this.Name='Rule';};FCKRuleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();FCK.InsertElement('hr');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('InsertHorizontalRule');}};var FCKCutCopyCommand=function(A){this.Name=A?'Cut':'Copy';};FCKCutCopyCommand.prototype={Execute:function(){var A=false;if (FCKBrowserInfo.IsIE){var B=function(){A=true;};var C='on'+this.Name.toLowerCase();FCK.EditorDocument.body.attachEvent(C,B);FCK.ExecuteNamedCommand(this.Name);FCK.EditorDocument.body.detachEvent(C,B);}else{try{FCK.ExecuteNamedCommand(this.Name);A=true;}catch(e){}};if (!A) alert(FCKLang['PasteError'+this.Name]);},GetState:function(){return FCK.EditMode!=0?-1:FCK.GetNamedCommandState('Cut');}};var FCKAnchorDeleteCommand=function(){this.Name='AnchorDelete';};FCKAnchorDeleteCommand.prototype={Execute:function(){if (FCK.Selection.GetType()=='Control'){FCK.Selection.Delete();}else{var A=FCK.Selection.GetSelectedElement();if (A){if (A.tagName=='IMG'&&A.getAttribute('_fckanchor')) oAnchor=FCK.GetRealElement(A);else A=null;};if (!A){oAnchor=FCK.Selection.MoveToAncestorNode('A');if (oAnchor) FCK.Selection.SelectNode(oAnchor);};if (oAnchor.href.length!=0){oAnchor.removeAttribute('name');if (FCKBrowserInfo.IsIE) oAnchor.className=oAnchor.className.replace(FCKRegexLib.FCK_Class,'');return;};if (A){A.parentNode.removeChild(A);return;};if (oAnchor.innerHTML.length==0){oAnchor.parentNode.removeChild(oAnchor);return;};FCKTools.RemoveOuterTags(oAnchor);};if (FCKBrowserInfo.IsGecko) FCK.Selection.Collapse(true);},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Unlink');}};var FCKDeleteDivCommand=function(){};FCKDeleteDivCommand.prototype={GetState:function(){if (FCK.EditMode!=0) return -1;var A=FCKSelection.GetParentElement();var B=new FCKElementPath(A);return B.BlockLimit&&B.BlockLimit.nodeName.IEquals('div')?0:-1;},Execute:function(){FCKUndo.SaveUndoStep();var A=FCKDomTools.GetSelectedDivContainers();var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.CreateBookmark();for (var i=0;i\n \n
    \n '+FCKLang.ColorAutomatic+'\n \n ';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_AutoOnClick,this);if (!FCKBrowserInfo.IsIE) C.style.width='96%';var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H
    ';if (H>=G.length) C.style.visibility='hidden';else FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_OnClick,[this,L]);}};if (FCKConfig.EnableMoreFontColors){E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='
    '+FCKLang.ColorMoreColors+'
    ';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_MoreOnClick,this);if (!FCKBrowserInfo.IsIE) C.style.width='96%';}}; +var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');}; +var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCK.EditMode!=0||FCKConfig.ForcePasteAsPlainText) return -1;else return FCK.GetNamedCommandState('Paste');}; +var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (!FCKBrowserInfo.IsGecko){switch (this.Name){case 'TableMergeRight':return FCKTableHandler.MergeRight();case 'TableMergeDown':return FCKTableHandler.MergeDown();}};switch (this.Name){case 'TableInsertRowAfter':return FCKTableHandler.InsertRow(false);case 'TableInsertRowBefore':return FCKTableHandler.InsertRow(true);case 'TableDeleteRows':return FCKTableHandler.DeleteRows();case 'TableInsertColumnAfter':return FCKTableHandler.InsertColumn(false);case 'TableInsertColumnBefore':return FCKTableHandler.InsertColumn(true);case 'TableDeleteColumns':return FCKTableHandler.DeleteColumns();case 'TableInsertCellAfter':return FCKTableHandler.InsertCell(null,false);case 'TableInsertCellBefore':return FCKTableHandler.InsertCell(null,true);case 'TableDeleteCells':return FCKTableHandler.DeleteCells();case 'TableMergeCells':return FCKTableHandler.MergeCells();case 'TableHorizontalSplitCell':return FCKTableHandler.HorizontalSplitCell();case 'TableVerticalSplitCell':return FCKTableHandler.VerticalSplitCell();case 'TableDelete':return FCKTableHandler.DeleteTable();default:return alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));}};FCKTableCommand.prototype.GetState=function(){if (FCK.EditorDocument!=null&&FCKSelection.HasAncestorNode('TABLE')){switch (this.Name){case 'TableHorizontalSplitCell':case 'TableVerticalSplitCell':if (FCKTableHandler.GetSelectedCells().length==1) return 0;else return -1;case 'TableMergeCells':if (FCKTableHandler.CheckIsSelectionRectangular()&&FCKTableHandler.GetSelectedCells().length>1) return 0;else return -1;case 'TableMergeRight':return FCKTableHandler.GetMergeRightTarget()?0:-1;case 'TableMergeDown':return FCKTableHandler.GetMergeDownTarget()?0:-1;default:return 0;}}else return -1;}; +var FCKFitWindow=function(){this.Name='FitWindow';};FCKFitWindow.prototype.Execute=function(){var A=window.frameElement;var B=A.style;var C=parent;var D=C.document.documentElement;var E=C.document.body;var F=E.style;var G;var H,oEditorScrollPos;if (FCK.EditMode==0){H=new FCKDomRange(FCK.EditorWindow);H.MoveToSelection();oEditorScrollPos=FCKTools.GetScrollPosition(FCK.EditorWindow);}else{var I=FCK.EditingArea.Textarea;H=!FCKBrowserInfo.IsIE&&[I.selectionStart,I.selectionEnd];oEditorScrollPos=[I.scrollLeft,I.scrollTop];};if (!this.IsMaximized){if(FCKBrowserInfo.IsIE) C.attachEvent('onresize',FCKFitWindow_Resize);else C.addEventListener('resize',FCKFitWindow_Resize,true);this._ScrollPos=FCKTools.GetScrollPosition(C);G=A;while((G=G.parentNode)){if (G.nodeType==1){G._fckSavedStyles=FCKTools.SaveStyles(G);G.style.zIndex=FCKConfig.FloatingPanelsZIndex-1;}};if (FCKBrowserInfo.IsIE){this.documentElementOverflow=D.style.overflow;D.style.overflow='hidden';F.overflow='hidden';}else{F.overflow='hidden';F.width='0px';F.height='0px';};this._EditorFrameStyles=FCKTools.SaveStyles(A);var J=FCKTools.GetViewPaneSize(C);B.position="absolute";A.offsetLeft;B.zIndex=FCKConfig.FloatingPanelsZIndex-1;B.left="0px";B.top="0px";B.width=J.Width+"px";B.height=J.Height+"px";if (!FCKBrowserInfo.IsIE){B.borderRight=B.borderBottom="9999px solid white";B.backgroundColor="white";};C.scrollTo(0,0);var K=FCKTools.GetWindowPosition(C,A);if (K.x!=0) B.left=(-1*K.x)+"px";if (K.y!=0) B.top=(-1*K.y)+"px";this.IsMaximized=true;}else{if(FCKBrowserInfo.IsIE) C.detachEvent("onresize",FCKFitWindow_Resize);else C.removeEventListener("resize",FCKFitWindow_Resize,true);G=A;while((G=G.parentNode)){if (G._fckSavedStyles){FCKTools.RestoreStyles(G,G._fckSavedStyles);G._fckSavedStyles=null;}};if (FCKBrowserInfo.IsIE) D.style.overflow=this.documentElementOverflow;FCKTools.RestoreStyles(A,this._EditorFrameStyles);C.scrollTo(this._ScrollPos.X,this._ScrollPos.Y);this.IsMaximized=false;};FCKToolbarItems.GetItem('FitWindow').RefreshState();if (FCK.EditMode==0) FCK.EditingArea.MakeEditable();FCK.Focus();if (FCK.EditMode==0){H.Select();FCK.EditorWindow.scrollTo(oEditorScrollPos.X,oEditorScrollPos.Y);}else{if (!FCKBrowserInfo.IsIE){I.selectionStart=H[0];I.selectionEnd=H[1];};I.scrollLeft=oEditorScrollPos[0];I.scrollTop=oEditorScrollPos[1];}};FCKFitWindow.prototype.GetState=function(){if (FCKConfig.ToolbarLocation!='In') return -1;else return (this.IsMaximized?1:0);};function FCKFitWindow_Resize(){var A=FCKTools.GetViewPaneSize(parent);var B=window.frameElement.style;B.width=A.Width+'px';B.height=A.Height+'px';}; +var FCKListCommand=function(A,B){this.Name=A;this.TagName=B;};FCKListCommand.prototype={GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=FCKSelection.GetBoundaryParentElement(true);var B=A;while (B){if (B.nodeName.IEquals(['ul','ol'])) break;B=B.parentNode;};if (B&&B.nodeName.IEquals(this.TagName)) return 1;else return 0;},Execute:function(){FCKUndo.SaveUndoStep();var A=FCK.EditorDocument;var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=this.GetState();if (C==0){FCKDomTools.TrimNode(A.body);if (!A.body.firstChild){var D=A.createElement('p');A.body.appendChild(D);B.MoveToNodeContents(D);}};var E=B.CreateBookmark();var F=[];var G={};var H=new FCKDomRangeIterator(B);var I;H.ForceBrBreak=(C==0);var J=true;var K=null;while (J){while ((I=H.GetNextParagraph())){var L=new FCKElementPath(I);var M=null;var N=false;var O=L.BlockLimit;for (var i=L.Elements.length-1;i>=0;i--){var P=L.Elements[i];if (P.nodeName.IEquals(['ol','ul'])){if (O._FCK_ListGroupObject) O._FCK_ListGroupObject=null;var Q=P._FCK_ListGroupObject;if (Q) Q.contents.push(I);else{Q={ 'root':P,'contents':[I] };F.push(Q);FCKDomTools.SetElementMarker(G,P,'_FCK_ListGroupObject',Q);};N=true;break;}};if (N) continue;var R=O;if (R._FCK_ListGroupObject) R._FCK_ListGroupObject.contents.push(I);else{var Q={ 'root':R,'contents':[I] };FCKDomTools.SetElementMarker(G,R,'_FCK_ListGroupObject',Q);F.push(Q);}};if (FCKBrowserInfo.IsIE) J=false;else{if (K==null){K=[];var T=FCKSelection.GetSelection();if (T&&F.length==0) K.push(T.getRangeAt(0));for (var i=1;T&&i0){var Q=F.shift();if (C==0){if (Q.root.nodeName.IEquals(['ul','ol'])) this._ChangeListType(Q,G,W);else this._CreateList(Q,W);}else if (C==1&&Q.root.nodeName.IEquals(['ul','ol'])) this._RemoveList(Q,G);};for (var i=0;iC[i-1].indent+1){var H=C[i-1].indent+1-C[i].indent;var I=C[i].indent;while (C[i]&&C[i].indent>=I){C[i].indent+=H;i++;};i--;}};var J=FCKDomTools.ArrayToList(C,B);if (A.root.nextSibling==null||A.root.nextSibling.nodeName.IEquals('br')){if (J.listNode.lastChild.nodeName.IEquals('br')) J.listNode.removeChild(J.listNode.lastChild);};A.root.parentNode.replaceChild(J.listNode,A.root);}}; +var FCKJustifyCommand=function(A){this.AlignValue=A;var B=FCKConfig.ContentLangDirection.toLowerCase();this.IsDefaultAlign=(A=='left'&&B=='ltr')||(A=='right'&&B=='rtl');var C=this._CssClassName=(function(){var D=FCKConfig.JustifyClasses;if (D){switch (A){case 'left':return D[0]||null;case 'center':return D[1]||null;case 'right':return D[2]||null;case 'justify':return D[3]||null;}};return null;})();if (C&&C.length>0) this._CssClassRegex=new RegExp('(?:^|\\s+)'+C+'(?=$|\\s)');};FCKJustifyCommand._GetClassNameRegex=function(){var A=FCKJustifyCommand._ClassRegex;if (A!=undefined) return A;var B=[];var C=FCKConfig.JustifyClasses;if (C){for (var i=0;i<4;i++){var D=C[i];if (D&&D.length>0) B.push(D);}};if (B.length>0) A=new RegExp('(?:^|\\s+)(?:'+B.join('|')+')(?=$|\\s)');else A=null;return FCKJustifyCommand._ClassRegex=A;};FCKJustifyCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=this.GetState();if (B==-1) return;var C=A.CreateBookmark();var D=this._CssClassName;var E=new FCKDomRangeIterator(A);var F;while ((F=E.GetNextParagraph())){F.removeAttribute('align');if (D){var G=F.className.replace(FCKJustifyCommand._GetClassNameRegex(),'');if (B==0){if (G.length>0) G+=' ';F.className=G+D;}else if (G.length==0) FCKDomTools.RemoveAttribute(F,'class');}else{var H=F.style;if (B==0) H.textAlign=this.AlignValue;else{H.textAlign='';if (H.cssText.length==0) F.removeAttribute('style');}}};A.MoveToBookmark(C);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;var C;if (FCKBrowserInfo.IsIE) C=B.currentStyle.textAlign;else C=FCK.EditorWindow.getComputedStyle(B,'').getPropertyValue('text-align');C=C.replace(/(-moz-|-webkit-|start|auto)/i,'');if ((!C&&this.IsDefaultAlign)||C==this.AlignValue) return 1;return 0;}}; +var FCKIndentCommand=function(A,B){this.Name=A;this.Offset=B;this.IndentCSSProperty=FCKConfig.ContentLangDirection.IEquals('ltr')?'marginLeft':'marginRight';};FCKIndentCommand._InitIndentModeParameters=function(){if (FCKConfig.IndentClasses&&FCKConfig.IndentClasses.length>0){this._UseIndentClasses=true;this._IndentClassMap={};for (var i=0;i0?H+' ':'')+FCKConfig.IndentClasses[G-1];}else{var I=parseInt(E.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;I+=this.Offset;I=Math.max(I,0);I=Math.ceil(I/this.Offset)*this.Offset;E.style[this.IndentCSSProperty]=I?I+FCKConfig.IndentUnit:'';if (E.getAttribute('style')=='') E.removeAttribute('style');}}},_IndentList:function(A,B){var C=A.StartContainer;var D=A.EndContainer;while (C&&C.parentNode!=B) C=C.parentNode;while (D&&D.parentNode!=B) D=D.parentNode;if (!C||!D) return;var E=C;var F=[];var G=false;while (G==false){if (E==D) G=true;F.push(E);E=E.nextSibling;};if (F.length<1) return;var H=FCKDomTools.GetParents(B);for (var i=0;iN;i++) M[i].indent+=I;var O=FCKDomTools.ArrayToList(M);if (O) B.parentNode.replaceChild(O.listNode,B);FCKDomTools.ClearAllMarkers(L);}}; +var FCKBlockQuoteCommand=function(){};FCKBlockQuoteCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=this.GetState();var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.CreateBookmark();if (FCKBrowserInfo.IsIE){var D=B.GetBookmarkNode(C,true);var E=B.GetBookmarkNode(C,false);var F;if (D&&D.parentNode.nodeName.IEquals('blockquote')&&!D.previousSibling){F=D;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]) FCKDomTools.MoveNode(D,F,true);}};if (E&&E.parentNode.nodeName.IEquals('blockquote')&&!E.previousSibling){F=E;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]){if (F.firstChild==D) FCKDomTools.InsertAfterNode(D,E);else FCKDomTools.MoveNode(E,F,true);}}}};var G=new FCKDomRangeIterator(B);var H;if (A==0){var I=[];while ((H=G.GetNextParagraph())) I.push(H);if (I.length<1){para=B.Window.document.createElement(FCKConfig.EnterMode.IEquals('p')?'p':'div');B.InsertNode(para);para.appendChild(B.Window.document.createTextNode('\ufeff'));B.MoveToBookmark(C);B.MoveToNodeContents(para);B.Collapse(true);C=B.CreateBookmark();I.push(para);};var J=I[0].parentNode;var K=[];for (var i=0;i0){H=I.shift();while (H.parentNode!=J) H=H.parentNode;if (H!=L) K.push(H);L=H;}while (K.length>0){H=K.shift();if (H.nodeName.IEquals('blockquote')){var M=FCKTools.GetElementDocument(H).createDocumentFragment();while (H.firstChild){M.appendChild(H.removeChild(H.firstChild));I.push(M.lastChild);};H.parentNode.replaceChild(M,H);}else I.push(H);};var N=B.Window.document.createElement('blockquote');J.insertBefore(N,I[0]);while (I.length>0){H=I.shift();N.appendChild(H);}}else if (A==1){var O=[];var P={};while ((H=G.GetNextParagraph())){var Q=null;var R=null;while (H.parentNode){if (H.parentNode.nodeName.IEquals('blockquote')){Q=H.parentNode;R=H;break;};H=H.parentNode;};if (Q&&R&&!R._fckblockquotemoveout){O.push(R);FCKDomTools.SetElementMarker(P,R,'_fckblockquotemoveout',true);}};FCKDomTools.ClearAllMarkers(P);var S=[];var T=[],P={};var U=function(N){for (var i=0;i0){var W=O.shift();var N=W.parentNode;if (W==W.parentNode.firstChild) N.parentNode.insertBefore(N.removeChild(W),N);else if (W==W.parentNode.lastChild) N.parentNode.insertBefore(N.removeChild(W),N.nextSibling);else FCKDomTools.BreakParent(W,W.parentNode,B);if (!N._fckbqprocessed){T.push(N);FCKDomTools.SetElementMarker(P,N,'_fckbqprocessed',true);};S.push(W);};for (var i=T.length-1;i>=0;i--){var N=T[i];if (U(N)) FCKDomTools.RemoveNode(N);};FCKDomTools.ClearAllMarkers(P);if (FCKConfig.EnterMode.IEquals('br')){while (S.length){var W=S.shift();var a=true;if (W.nodeName.IEquals('div')){var M=FCKTools.GetElementDocument(W).createDocumentFragment();var c=a&&W.previousSibling&&!FCKListsLib.BlockBoundaries[W.previousSibling.nodeName.toLowerCase()];if (a&&c) M.appendChild(FCKTools.GetElementDocument(W).createElement('br'));var d=W.nextSibling&&!FCKListsLib.BlockBoundaries[W.nextSibling.nodeName.toLowerCase()];while (W.firstChild) M.appendChild(W.removeChild(W.firstChild));if (d) M.appendChild(FCKTools.GetElementDocument(W).createElement('br'));W.parentNode.replaceChild(M,W);a=false;}}}};B.MoveToBookmark(C);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;for (var i=0;i';B.open();B.write(''+F+'<\/head><\/body><\/html>');B.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.Panel_Contructor(B,window.document.location);FCKTools.AddEventListenerEx(E,'focus',FCKPanel_Window_OnFocus,this);FCKTools.AddEventListenerEx(E,'blur',FCKPanel_Window_OnBlur,this);};B.dir=FCKLang.Dir;FCKTools.AddEventListener(B,'contextmenu',FCKTools.CancelEvent);this.MainNode=B.body.appendChild(B.createElement('DIV'));this.MainNode.style.cssFloat=this.IsRTL?'right':'left';};FCKPanel.prototype.AppendStyleSheet=function(A){FCKTools.AppendStyleSheet(this.Document,A);};FCKPanel.prototype.Preload=function(x,y,A){if (this._Popup) this._Popup.show(x,y,0,0,A);};FCKPanel.prototype.ResizeForSubpanel=function(A,B,C){if (!FCKBrowserInfo.IsIE7) return false;if (!this._Popup.isOpen){this.Subpanel=null;return false;};if (B==0&&C==0){if (this.Subpanel!==A) return false;this.Subpanel=null;this.IncreasedX=0;}else{this.Subpanel=A;if ((this.IncreasedX>=B)&&(this.IncreasedY>=C)) return false;this.IncreasedX=Math.max(this.IncreasedX,B);this.IncreasedY=Math.max(this.IncreasedY,C);};var x=this.ShowRect.x;var w=this.IncreasedX;if (this.IsRTL) x=x-w;var D=this.ShowRect.w+w;var E=Math.max(this.ShowRect.h,this.IncreasedY);if (this.ParentPanel) this.ParentPanel.ResizeForSubpanel(this,D,E);this._Popup.show(x,this.ShowRect.y,D,E,this.RelativeElement);return this.IsRTL;};FCKPanel.prototype.Show=function(x,y,A,B,C){var D;var E=this.MainNode;if (this._Popup){this._Popup.show(x,y,0,0,A);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (FCKBrowserInfo.IsIE7){if (this.ParentPanel&&this.ParentPanel.ResizeForSubpanel(this,D,E.offsetHeight)){FCKTools.RunFunction(this.Show,this,[x,y,A]);return;}};if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=(x*-1)+A.offsetWidth-D;};if (FCKBrowserInfo.IsIE7){this.ShowRect={x:x,y:y,w:D,h:E.offsetHeight};this.IncreasedX=0;this.IncreasedY=0;this.RelativeElement=A;};this._PopupArgs=[x,y,D,E.offsetHeight,A];this._Popup.show(x,y,D,E.offsetHeight,A);if (this.OnHide){if (this._Timer) CheckPopupOnHide.call(this,true);this._Timer=FCKTools.SetInterval(CheckPopupOnHide,100,this);}}else{if (typeof(FCK.ToolbarSet.CurrentInstance.FocusManager)!='undefined') FCK.ToolbarSet.CurrentInstance.FocusManager.Lock();if (this.ParentPanel){this.ParentPanel.Lock();FCKPanel_Window_OnBlur(null,this.ParentPanel);};if (FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac){this._IFrame.scrolling='';FCKTools.RunFunction(function(){ this._IFrame.scrolling='no';},this);};if (FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel&&FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel!=this) FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel.Hide(false,true);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (!B) this._IFrame.width=1;if (!C) this._IFrame.height=1;D=E.offsetWidth||E.firstChild.offsetWidth;var F=FCKTools.GetDocumentPosition(this._Window,A.nodeType==9?(FCKTools.IsStrictMode(A)?A.documentElement:A.body):A);var G=FCKDomTools.GetPositionedAncestor(this._IFrame.parentNode);if (G){var H=FCKTools.GetDocumentPosition(FCKTools.GetElementWindow(G),G);F.x-=H.x;F.y-=H.y;};if (this.IsRTL&&!this.IsContextMenu) x=(x*-1);x+=F.x;y+=F.y;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=x+A.offsetWidth-D;}else{var I=FCKTools.GetViewPaneSize(this._Window);var J=FCKTools.GetScrollPosition(this._Window);var K=I.Height+J.Y;var L=I.Width+J.X;if ((x+D)>L) x-=x+D-L;if ((y+E.offsetHeight)>K) y-=y+E.offsetHeight-K;};FCKDomTools.SetElementStyles(this._IFrame,{left:x+'px',top:y+'px'});this._IFrame.contentWindow.focus();this._IsOpened=true;var M=this;this._resizeTimer=setTimeout(function(){var N=E.offsetWidth||E.firstChild.offsetWidth;var O=E.offsetHeight;M._IFrame.style.width=N+'px';M._IFrame.style.height=O+'px';},0);FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel=this;};FCKTools.RunFunction(this.OnShow,this);};FCKPanel.prototype.Hide=function(A,B){if (this._Popup) this._Popup.hide();else{if (!this._IsOpened||this._LockCounter>0) return;if (typeof(FCKFocusManager)!='undefined'&&!B) FCKFocusManager.Unlock();this._IFrame.style.width=this._IFrame.style.height='0px';this._IsOpened=false;if (this._resizeTimer){clearTimeout(this._resizeTimer);this._resizeTimer=null;};if (this.ParentPanel) this.ParentPanel.Unlock();if (!A) FCKTools.RunFunction(this.OnHide,this);}};FCKPanel.prototype.CheckIsOpened=function(){if (this._Popup) return this._Popup.isOpen;else return this._IsOpened;};FCKPanel.prototype.CreateChildPanel=function(){var A=this._Popup?FCKTools.GetDocumentWindow(this.Document):this._Window;var B=new FCKPanel(A);B.ParentPanel=this;return B;};FCKPanel.prototype.Lock=function(){this._LockCounter++;};FCKPanel.prototype.Unlock=function(){if (--this._LockCounter==0&&!this.HasFocus) this.Hide();};function FCKPanel_Window_OnFocus(e,A){A.HasFocus=true;};function FCKPanel_Window_OnBlur(e,A){A.HasFocus=false;if (A._LockCounter==0) FCKTools.RunFunction(A.Hide,A);};function CheckPopupOnHide(A){if (A||!this._Popup.isOpen){window.clearInterval(this._Timer);this._Timer=null;if (this._Popup&&this.ParentPanel&&!A) this.ParentPanel.ResizeForSubpanel(this,0,0);FCKTools.RunFunction(this.OnHide,this);}};function FCKPanel_Cleanup(){this._Popup=null;this._Window=null;this.Document=null;this.MainNode=null;this.RelativeElement=null;}; +var FCKIcon=function(A){var B=A?typeof(A):'undefined';switch (B){case 'number':this.Path=FCKConfig.SkinPath+'fck_strip.gif';this.Size=16;this.Position=A;break;case 'undefined':this.Path=FCK_SPACER_PATH;break;case 'string':this.Path=A;break;default:this.Path=A[0];this.Size=A[1];this.Position=A[2];}};FCKIcon.prototype.CreateIconElement=function(A){var B,eIconImage;if (this.Position){var C='-'+((this.Position-1)*this.Size)+'px';if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path;eIconImage.style.top=C;}else{B=A.createElement('IMG');B.src=FCK_SPACER_PATH;B.style.backgroundPosition='0px '+C;B.style.backgroundImage='url("'+this.Path+'")';}}else{if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path?this.Path:FCK_SPACER_PATH;}else{B=A.createElement('IMG');B.src=this.Path?this.Path:FCK_SPACER_PATH;}};B.className='TB_Button_Image';return B;}; +var FCKToolbarButtonUI=function(A,B,C,D,E,F){this.Name=A;this.Label=B||A;this.Tooltip=C||this.Label;this.Style=E||0;this.State=F||0;this.Icon=new FCKIcon(D);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarButtonUI_Cleanup);};FCKToolbarButtonUI.prototype._CreatePaddingElement=function(A){var B=A.createElement('IMG');B.className='TB_Button_Padding';B.src=FCK_SPACER_PATH;return B;};FCKToolbarButtonUI.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this.MainElement=B.createElement('DIV');C.title=this.Tooltip;if (FCKBrowserInfo.IsGecko) C.onmousedown=FCKTools.CancelEvent;FCKTools.AddEventListenerEx(C,'mouseover',FCKToolbarButtonUI_OnMouseOver,this);FCKTools.AddEventListenerEx(C,'mouseout',FCKToolbarButtonUI_OnMouseOut,this);FCKTools.AddEventListenerEx(C,'click',FCKToolbarButtonUI_OnClick,this);this.ChangeState(this.State,true);if (this.Style==0&&!this.ShowArrow){C.appendChild(this.Icon.CreateIconElement(B));}else{var D=C.appendChild(B.createElement('TABLE'));D.cellPadding=0;D.cellSpacing=0;var E=D.insertRow(-1);var F=E.insertCell(-1);if (this.Style==0||this.Style==2) F.appendChild(this.Icon.CreateIconElement(B));else F.appendChild(this._CreatePaddingElement(B));if (this.Style==1||this.Style==2){F=E.insertCell(-1);F.className='TB_Button_Text';F.noWrap=true;F.appendChild(B.createTextNode(this.Label));};if (this.ShowArrow){if (this.Style!=0){E.insertCell(-1).appendChild(this._CreatePaddingElement(B));};F=E.insertCell(-1);var G=F.appendChild(B.createElement('IMG'));G.src=FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif';G.width=5;G.height=3;};F=E.insertCell(-1);F.appendChild(this._CreatePaddingElement(B));};A.appendChild(C);};FCKToolbarButtonUI.prototype.ChangeState=function(A,B){if (!B&&this.State==A) return;var e=this.MainElement;if (!e) return;switch (parseInt(A,10)){case 0:e.className='TB_Button_Off';break;case 1:e.className='TB_Button_On';break;case -1:e.className='TB_Button_Disabled';break;};this.State=A;};function FCKToolbarButtonUI_OnMouseOver(A,B){if (B.State==0) this.className='TB_Button_Off_Over';else if (B.State==1) this.className='TB_Button_On_Over';};function FCKToolbarButtonUI_OnMouseOut(A,B){if (B.State==0) this.className='TB_Button_Off';else if (B.State==1) this.className='TB_Button_On';};function FCKToolbarButtonUI_OnClick(A,B){if (B.OnClick&&B.State!=-1) B.OnClick(B);};function FCKToolbarButtonUI_Cleanup(){this.MainElement=null;}; +var FCKToolbarButton=function(A,B,C,D,E,F,G){this.CommandName=A;this.Label=B;this.Tooltip=C;this.Style=D;this.sourceView=E?true:false;this.ContextSensitive=F?true:false;if (G==null) this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(G)=='number') this.IconPath=[FCKConfig.SkinPath+'fck_strip.gif',16,G];else this.IconPath=G;};FCKToolbarButton.prototype.Create=function(A){this._UIButton=new FCKToolbarButtonUI(this.CommandName,this.Label,this.Tooltip,this.IconPath,this.Style);this._UIButton.OnClick=this.Click;this._UIButton._ToolbarButton=this;this._UIButton.Create(A);};FCKToolbarButton.prototype.RefreshState=function(){var A=this._UIButton;if (!A) return;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B==A.State) return;A.ChangeState(B);};FCKToolbarButton.prototype.Click=function(){var A=this._ToolbarButton||this;FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(A.CommandName).Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this._UIButton.ChangeState(-1);}; +var FCKSpecialCombo=function(A,B,C,D,E){this.FieldWidth=B||100;this.PanelWidth=C||150;this.PanelMaxHeight=D||150;this.Label=' ';this.Caption=A;this.Tooltip=A;this.Style=2;this.Enabled=true;this.Items={};this._Panel=new FCKPanel(E||window);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);this._PanelBox=this._Panel.MainNode.appendChild(this._Panel.Document.createElement('DIV'));this._PanelBox.className='SC_Panel';this._PanelBox.style.width=this.PanelWidth+'px';this._PanelBox.innerHTML='
    ';this._ItemsHolderEl=this._PanelBox.getElementsByTagName('TD')[0];if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKSpecialCombo_Cleanup);};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(A,B,C){this.className=this.originalClass;B._Panel.Hide();B.SetLabel(this.FCKItemLabel);if (typeof(B.OnSelect)=='function') B.OnSelect(C,this);};FCKSpecialCombo.prototype.ClearItems=function (){if (this.Items) this.Items={};var A=this._ItemsHolderEl;while (A.firstChild) A.removeChild(A.firstChild);};FCKSpecialCombo.prototype.AddItem=function(A,B,C,D){var E=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));E.className=E.originalClass='SC_Item';E.innerHTML=B;E.FCKItemLabel=C||A;E.Selected=false;if (FCKBrowserInfo.IsIE) E.style.width='100%';if (D) E.style.backgroundColor=D;FCKTools.AddEventListenerEx(E,'mouseover',FCKSpecialCombo_ItemOnMouseOver);FCKTools.AddEventListenerEx(E,'mouseout',FCKSpecialCombo_ItemOnMouseOut);FCKTools.AddEventListenerEx(E,'click',FCKSpecialCombo_ItemOnClick,[this,A]);this.Items[A.toString().toLowerCase()]=E;return E;};FCKSpecialCombo.prototype.SelectItem=function(A){if (typeof A=='string') A=this.Items[A.toString().toLowerCase()];if (A){A.className=A.originalClass='SC_ItemSelected';A.Selected=true;}};FCKSpecialCombo.prototype.SelectItemByLabel=function(A,B){for (var C in this.Items){var D=this.Items[C];if (D.FCKItemLabel==A){D.className=D.originalClass='SC_ItemSelected';D.Selected=true;if (B) this.SetLabel(A);}}};FCKSpecialCombo.prototype.DeselectAll=function(A){for (var i in this.Items){if (!this.Items[i]) continue;this.Items[i].className=this.Items[i].originalClass='SC_Item';this.Items[i].Selected=false;};if (A) this.SetLabel('');};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){A=(!A||A.length==0)?' ':A;if (A==this.Label) return;this.Label=A;var B=this._LabelEl;if (B){B.innerHTML=A;FCKTools.DisableSelection(B);}};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;if (this._OuterTable) this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this._OuterTable=A.appendChild(B.createElement('TABLE'));C.cellPadding=0;C.cellSpacing=0;C.insertRow(-1);var D;var E;switch (this.Style){case 0:D='TB_ButtonType_Icon';E=false;break;case 1:D='TB_ButtonType_Text';E=false;break;case 2:E=true;break;};if (this.Caption&&this.Caption.length>0&&E){var F=C.rows[0].insertCell(-1);F.innerHTML=this.Caption;F.className='SC_FieldCaption';};var G=FCKTools.AppendElement(C.rows[0].insertCell(-1),'div');if (E){G.className='SC_Field';G.style.width=this.FieldWidth+'px';G.innerHTML='
     
    ';this._LabelEl=G.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{G.className='TB_Button_Off';G.innerHTML='
    '+this.Caption+'
    ';};FCKTools.AddEventListenerEx(G,'mouseover',FCKSpecialCombo_OnMouseOver,this);FCKTools.AddEventListenerEx(G,'mouseout',FCKSpecialCombo_OnMouseOut,this);FCKTools.AddEventListenerEx(G,'click',FCKSpecialCombo_OnClick,this);FCKTools.DisableSelection(this._Panel.Document.body);};function FCKSpecialCombo_Cleanup(){this._LabelEl=null;this._OuterTable=null;this._ItemsHolderEl=null;this._PanelBox=null;if (this.Items){for (var A in this.Items) this.Items[A]=null;}};function FCKSpecialCombo_OnMouseOver(A,B){if (B.Enabled){switch (B.Style){case 0:this.className='TB_Button_On_Over';break;case 1:this.className='TB_Button_On_Over';break;case 2:this.className='SC_Field SC_FieldOver';break;}}};function FCKSpecialCombo_OnMouseOut(A,B){switch (B.Style){case 0:this.className='TB_Button_Off';break;case 1:this.className='TB_Button_Off';break;case 2:this.className='SC_Field';break;}};function FCKSpecialCombo_OnClick(e,A){if (A.Enabled){var B=A._Panel;var C=A._PanelBox;var D=A._ItemsHolderEl;var E=A.PanelMaxHeight;if (A.OnBeforeClick) A.OnBeforeClick(A);if (FCKBrowserInfo.IsIE) B.Preload(0,this.offsetHeight,this);if (D.offsetHeight>E) C.style.height=E+'px';else C.style.height='';B.Show(0,this.offsetHeight,this);}}; +var FCKToolbarSpecialCombo=function(){this.sourceView=false;this.ContextSensitive=true;this.FieldWidth=null;this.PanelWidth=null;this.PanelMaxHeight=null;};FCKToolbarSpecialCombo.prototype.DefaultLabel='';function FCKToolbarSpecialCombo_OnSelect(A,B){FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Execute(A,B);};FCKToolbarSpecialCombo.prototype.Create=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel(),this.FieldWidth,this.PanelWidth,this.PanelMaxHeight,FCKBrowserInfo.IsIE?window:FCKTools.GetElementWindow(A).parent);this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A);this._Combo.CommandName=this.CommandName;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(A,B){A.DeselectAll();A.SelectItem(B);A.SetLabelById(B);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B!=-1){A=1;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else{if (this._LastValue!==B){this._LastValue=B;if (!B||B.length==0){this._Combo.DeselectAll();this._Combo.SetLabel(this.DefaultLabel);}else FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}}}else A=-1;if (A==this.State) return;if (A==-1){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=-1);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=-1;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);}; +var FCKToolbarStyleCombo=function(A,B){if (A===false) return;this.CommandName='Style';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultStyleLabel||'';};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.GetStyles=function(){var A={};var B=FCK.ToolbarSet.CurrentInstance.Styles.GetStyles();for (var C in B){var D=B[C];if (!D.IsCore) A[C]=D;};return A;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);FCKTools.AppendStyleString(B,FCKConfig.EditorAreaStyles);B.body.className+=' ForceBaseFont';FCKConfig.ApplyBodyAttributes(B.body);var C=this.GetStyles();for (var D in C){var E=C[D];var F=E.GetType()==2?D:FCKToolbarStyleCombo_BuildPreview(E,E.Label||D);var G=A.AddItem(D,F);G.Style=E;};A.OnBeforeClick=this.StyleCombo_OnBeforeClick;};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Elements;for (var e=0;e');var E=A.Element;if (E=='bdo') E='span';D=['<',E];var F=A._StyleDesc.Attributes;if (F){for (var G in F){D.push(' ',G,'="',A.GetFinalAttributeValue(G),'"');}};if (A._GetStyleText().length>0) D.push(' style="',A.GetFinalStyleValue(),'"');D.push('>',B,'');if (C==0) D.push('');return D.join('');}; +var FCKToolbarFontFormatCombo=function(A,B){if (A===false) return;this.CommandName='FontFormat';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.NormalLabel='Normal';this.PanelWidth=190;this.DefaultLabel=FCKConfig.DefaultFontFormatLabel||'';};FCKToolbarFontFormatCombo.prototype=new FCKToolbarStyleCombo(false);FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.GetStyles=function(){var A={};var B=FCKLang['FontFormats'].split(';');var C={p:B[0],pre:B[1],address:B[2],h1:B[3],h2:B[4],h3:B[5],h4:B[6],h5:B[7],h6:B[8],div:B[9]||(B[0]+' (DIV)')};var D=FCKConfig.FontFormats.split(';');for (var i=0;iEnable SCAYT
    ';return C?'Disable SCAYT':'Enable SCAYT';};var Z=function(tooltip,style){this.Command=FCKCommands.GetCommand('Scayt');this.CommandName='Scayt';this.Label=this.GetLabel();this.Tooltip=FCKLang.ScaytTitle;this.Style=1;};Z.prototype=new FCKToolbarSpecialCombo;Z.prototype.CreateItems=function(){this._Combo.AddItem('Trigger','Enable SCAYT');this._Combo.AddItem('Options',FCKLang.ScaytTitleOptions||"Options");this._Combo.AddItem('Langs',FCKLang.ScaytTitleLangs||"Languages");this._Combo.AddItem('About',FCKLang.ScaytTitleAbout||"About");};Z.prototype.GetLabel=function(){var a=FCKConfig.SkinPath+'fck_strip.gif';return FCKBrowserInfo.IsIE?'
    ':'';};function ScaytMessage(m){m&&alert(m);};var b=function(){name='ScaytContext';};b.prototype.Execute=function(contextInfo){var c=contextInfo&&contextInfo.action,g=c&&contextInfo.node,Q=window.scayt_control;if (g){switch (c){case 'Suggestion':Q.replace(g,contextInfo.suggestion);break;case 'Ignore':Q.ignore(g);break;case 'Ignore All':Q.ignoreAll(g);break;case 'Add Word':var E=FCK.EditorWindow.parent.parent;E.scayt.addWordToUserDictionary(g);break;}}};function InitSetup(){FCK.ContextMenu.RegisterListener({AddItems:function(menu){var E=FCK.EditorWindow.parent.parent;var Q=window.scayt_control,P=E.scayt;if (!Q) return;var g=Q.getScaytNode();if (!g) return;var h=P.getSuggestion(Q.getWord(g),Q.getLang());if (!h||!h.length) return;menu.AddSeparator();var j=FCK.Config.ScaytMaxSuggestions||5;var k=(j==-1)?h.length:j;for (var i=0;i';G.open();G.write(''+H+''+document.getElementById('xToolbarSpace').innerHTML+'');G.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.ToolbarSet_InitOutFrame(G);FCKTools.AddEventListener(G,'contextmenu',FCKTools.CancelEvent);FCKTools.AppendStyleSheet(G,FCKConfig.SkinEditorCSS);B=D.__FCKToolbarSet=new FCKToolbarSet(G);B._IFrame=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(D,FCKToolbarSet_Target_Cleanup);};B.CurrentInstance=FCK;if (!B.ToolbarItems) B.ToolbarItems=FCKToolbarItems;FCK.AttachToOnSelectionChange(B.RefreshItemsState);return B;};function FCK_OnBlur(A){var B=A.ToolbarSet;if (B.CurrentInstance==A) B.Disable();};function FCK_OnFocus(A){var B=A.ToolbarSet;var C=A||FCK;B.CurrentInstance.FocusManager.RemoveWindow(B._IFrame.contentWindow);B.CurrentInstance=C;C.FocusManager.AddWindow(B._IFrame.contentWindow,true);B.Enable();};function FCKToolbarSet_Cleanup(){this._TargetElement=null;this._IFrame=null;};function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet=null;};var FCKToolbarSet=function(A){this._Document=A;this._TargetElement=A.getElementById('xToolbar');var B=A.getElementById('xExpandHandle');var C=A.getElementById('xCollapseHandle');B.title=FCKLang.ToolbarExpand;FCKTools.AddEventListener(B,'click',FCKToolbarSet_Expand_OnClick);C.title=FCKLang.ToolbarCollapse;FCKTools.AddEventListener(C,'click',FCKToolbarSet_Collapse_OnClick);if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();C.style.display=FCKConfig.ToolbarCanCollapse?'':'none';if (FCKConfig.ToolbarCanCollapse) C.style.display='';else A.getElementById('xTBLeftBorder').style.display='';this.Toolbars=[];this.IsLoaded=false;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarSet_Cleanup);};function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand();};function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse();};FCKToolbarSet.prototype.Expand=function(){this._ChangeVisibility(false);};FCKToolbarSet.prototype.Collapse=function(){this._ChangeVisibility(true);};FCKToolbarSet.prototype._ChangeVisibility=function(A){this._Document.getElementById('xCollapsed').style.display=A?'':'none';this._Document.getElementById('xExpanded').style.display=A?'none':'';if (window.onresize){FCKTools.RunFunction(window.onresize);}};FCKToolbarSet.prototype.Load=function(A){this.Name=A;this.Items=[];this.ItemsWysiwygOnly=[];this.ItemsContextSensitive=[];this._TargetElement.innerHTML='';var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=[];for (var x=0;x0) break;}catch (e){break;};D=D.parent;};var E=D.document;var F=function(){if (!B) B=FCKConfig.FloatingPanelsZIndex+999;return++B;};var G=function(){if (!C) return;var H=FCKTools.IsStrictMode(E)?E.documentElement:E.body;FCKDomTools.SetElementStyles(C,{'width':Math.max(H.scrollWidth,H.clientWidth,E.scrollWidth||0)-1+'px','height':Math.max(H.scrollHeight,H.clientHeight,E.scrollHeight||0)-1+'px'});};return {OpenDialog:function(dialogName,dialogTitle,dialogPage,width,height,customValue,resizable){if (!A) this.DisplayMainCover();var I={Title:dialogTitle,Page:dialogPage,Editor:window,CustomValue:customValue,TopWindow:D};FCK.ToolbarSet.CurrentInstance.Selection.Save(true);var J=FCKTools.GetViewPaneSize(D);var K={ 'X':0,'Y':0 };var L=FCKBrowserInfo.IsIE&&(!FCKBrowserInfo.IsIE7||!FCKTools.IsStrictMode(D.document));if (L) K=FCKTools.GetScrollPosition(D);var M=Math.max(K.Y+(J.Height-height-20)/2,0);var N=Math.max(K.X+(J.Width-width-20)/2,0);var O=E.createElement('iframe');FCKTools.ResetStyles(O);O.src=FCKConfig.BasePath+'fckdialog.html';O.frameBorder=0;O.allowTransparency=true;FCKDomTools.SetElementStyles(O,{'position':(L)?'absolute':'fixed','top':M+'px','left':N+'px','width':width+'px','height':height+'px','zIndex':F()});O._DialogArguments=I;E.body.appendChild(O);O._ParentDialog=A;A=O;},OnDialogClose:function(dialogWindow){var O=dialogWindow.frameElement;FCKDomTools.RemoveNode(O);if (O._ParentDialog){A=O._ParentDialog;O._ParentDialog.contentWindow.SetEnabled(true);}else{if (!FCKBrowserInfo.IsIE) FCK.Focus();this.HideMainCover();setTimeout(function(){ A=null;},0);FCK.ToolbarSet.CurrentInstance.Selection.Release();}},DisplayMainCover:function(){C=E.createElement('div');FCKTools.ResetStyles(C);FCKDomTools.SetElementStyles(C,{'position':'absolute','zIndex':F(),'top':'0px','left':'0px','backgroundColor':FCKConfig.BackgroundBlockerColor});FCKDomTools.SetOpacity(C,FCKConfig.BackgroundBlockerOpacity);if (FCKBrowserInfo.IsIE&&!FCKBrowserInfo.IsIE7){var Q=E.createElement('iframe');FCKTools.ResetStyles(Q);Q.hideFocus=true;Q.frameBorder=0;Q.src=FCKTools.GetVoidUrl();FCKDomTools.SetElementStyles(Q,{'width':'100%','height':'100%','position':'absolute','left':'0px','top':'0px','filter':'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'});C.appendChild(Q);};FCKTools.AddEventListener(D,'resize',G);G();E.body.appendChild(C);FCKFocusManager.Lock();var R=FCK.ToolbarSet.CurrentInstance.GetInstanceObject('frameElement');R._fck_originalTabIndex=R.tabIndex;R.tabIndex=-1;},HideMainCover:function(){FCKDomTools.RemoveNode(C);FCKFocusManager.Unlock();var R=FCK.ToolbarSet.CurrentInstance.GetInstanceObject('frameElement');R.tabIndex=R._fck_originalTabIndex;FCKDomTools.ClearElementJSProperty(R,'_fck_originalTabIndex');},GetCover:function(){return C;}};})(); +var FCKMenuItem=function(A,B,C,D,E,F){this.Name=B;this.Label=C||B;this.IsDisabled=E;this.Icon=new FCKIcon(D);this.SubMenu=new FCKMenuBlockPanel();this.SubMenu.Parent=A;this.SubMenu.OnClick=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnClick,this);this.CustomData=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuItem_Cleanup);};FCKMenuItem.prototype.AddItem=function(A,B,C,D,E){this.HasSubMenu=true;return this.SubMenu.AddItem(A,B,C,D,E);};FCKMenuItem.prototype.AddSeparator=function(){this.SubMenu.AddSeparator();};FCKMenuItem.prototype.Create=function(A){var B=this.HasSubMenu;var C=FCKTools.GetElementDocument(A);var r=this.MainElement=A.insertRow(-1);r.className=this.IsDisabled?'MN_Item_Disabled':'MN_Item';if (!this.IsDisabled){FCKTools.AddEventListenerEx(r,'mouseover',FCKMenuItem_OnMouseOver,[this]);FCKTools.AddEventListenerEx(r,'click',FCKMenuItem_OnClick,[this]);if (!B) FCKTools.AddEventListenerEx(r,'mouseout',FCKMenuItem_OnMouseOut,[this]);};var D=r.insertCell(-1);D.className='MN_Icon';D.appendChild(this.Icon.CreateIconElement(C));D=r.insertCell(-1);D.className='MN_Label';D.noWrap=true;D.appendChild(C.createTextNode(this.Label));D=r.insertCell(-1);if (B){D.className='MN_Arrow';var E=D.appendChild(C.createElement('IMG'));E.src=FCK_IMAGES_PATH+'arrow_'+FCKLang.Dir+'.gif';E.width=4;E.height=7;this.SubMenu.Create();this.SubMenu.Panel.OnHide=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnHide,this);}};FCKMenuItem.prototype.Activate=function(){this.MainElement.className='MN_Item_Over';if (this.HasSubMenu){this.SubMenu.Show(this.MainElement.offsetWidth+2,-2,this.MainElement);};FCKTools.RunFunction(this.OnActivate,this);};FCKMenuItem.prototype.Deactivate=function(){this.MainElement.className='MN_Item';if (this.HasSubMenu) this.SubMenu.Hide();};function FCKMenuItem_SubMenu_OnClick(A,B){FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuItem_SubMenu_OnHide(A){A.Deactivate();};function FCKMenuItem_OnClick(A,B){if (B.HasSubMenu) B.Activate();else{B.Deactivate();FCKTools.RunFunction(B.OnClick,B,[B]);}};function FCKMenuItem_OnMouseOver(A,B){B.Activate();};function FCKMenuItem_OnMouseOut(A,B){B.Deactivate();};function FCKMenuItem_Cleanup(){this.MainElement=null;}; +var FCKMenuBlock=function(){this._Items=[];};FCKMenuBlock.prototype.Count=function(){return this._Items.length;};FCKMenuBlock.prototype.AddItem=function(A,B,C,D,E){var F=new FCKMenuItem(this,A,B,C,D,E);F.OnClick=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnClick,this);F.OnActivate=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnActivate,this);this._Items.push(F);return F;};FCKMenuBlock.prototype.AddSeparator=function(){this._Items.push(new FCKMenuSeparator());};FCKMenuBlock.prototype.RemoveAllItems=function(){this._Items=[];var A=this._ItemsTable;if (A){while (A.rows.length>0) A.deleteRow(0);}};FCKMenuBlock.prototype.Create=function(A){if (!this._ItemsTable){if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuBlock_Cleanup);this._Window=FCKTools.GetElementWindow(A);var B=FCKTools.GetElementDocument(A);var C=A.appendChild(B.createElement('table'));C.cellPadding=0;C.cellSpacing=0;FCKTools.DisableSelection(C);var D=C.insertRow(-1).insertCell(-1);D.className='MN_Menu';var E=this._ItemsTable=D.appendChild(B.createElement('table'));E.cellPadding=0;E.cellSpacing=0;};for (var i=0;i0&&F.href.length==0);if (G) return;menu.AddSeparator();menu.AddItem('VisitLink',FCKLang.VisitLink);menu.AddSeparator();if (E) menu.AddItem('Link',FCKLang.EditLink,34);menu.AddItem('Unlink',FCKLang.RemoveLink,35);}}};case 'Image':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&!tag.getAttribute('_fckfakelement')){menu.AddSeparator();menu.AddItem('Image',FCKLang.ImageProperties,37);}}};case 'Anchor':return {AddItems:function(menu,tag,tagName){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0);if (G||(tagName=='IMG'&&tag.getAttribute('_fckanchor'))){menu.AddSeparator();menu.AddItem('Anchor',FCKLang.AnchorProp,36);menu.AddItem('AnchorDelete',FCKLang.AnchorDelete);}}};case 'Flash':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckflash')){menu.AddSeparator();menu.AddItem('Flash',FCKLang.FlashProperties,38);}}};case 'Form':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('FORM')){menu.AddSeparator();menu.AddItem('Form',FCKLang.FormProp,48);}}};case 'Checkbox':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='checkbox'){menu.AddSeparator();menu.AddItem('Checkbox',FCKLang.CheckboxProp,49);}}};case 'Radio':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='radio'){menu.AddSeparator();menu.AddItem('Radio',FCKLang.RadioButtonProp,50);}}};case 'TextField':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='text'||tag.type=='password')){menu.AddSeparator();menu.AddItem('TextField',FCKLang.TextFieldProp,51);}}};case 'HiddenField':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckinputhidden')){menu.AddSeparator();menu.AddItem('HiddenField',FCKLang.HiddenFieldProp,56);}}};case 'ImageButton':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='image'){menu.AddSeparator();menu.AddItem('ImageButton',FCKLang.ImageButtonProp,55);}}};case 'Button':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='button'||tag.type=='submit'||tag.type=='reset')){menu.AddSeparator();menu.AddItem('Button',FCKLang.ButtonProp,54);}}};case 'Select':return {AddItems:function(menu,tag,tagName){if (tagName=='SELECT'){menu.AddSeparator();menu.AddItem('Select',FCKLang.SelectionFieldProp,53);}}};case 'Textarea':return {AddItems:function(menu,tag,tagName){if (tagName=='TEXTAREA'){menu.AddSeparator();menu.AddItem('Textarea',FCKLang.TextareaProp,52);}}};case 'BulletedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('UL')){menu.AddSeparator();menu.AddItem('BulletedList',FCKLang.BulletedListProp,27);}}};case 'NumberedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('OL')){menu.AddSeparator();menu.AddItem('NumberedList',FCKLang.NumberedListProp,26);}}};case 'DivContainer':return {AddItems:function(menu,tag,tagName){var J=FCKDomTools.GetSelectedDivContainers();if (J.length>0){menu.AddSeparator();menu.AddItem('EditDiv',FCKLang.EditDiv,75);menu.AddItem('DeleteDiv',FCKLang.DeleteDiv,76);}}};};return null;};function FCK_ContextMenu_OnBeforeOpen(){FCK.Events.FireEvent('OnSelectionChange');var A,sTagName;if ((A=FCKSelection.GetSelectedElement())) sTagName=A.tagName;var B=FCK.ContextMenu._InnerContextMenu;B.RemoveAllItems();var C=FCK.ContextMenu.Listeners;for (var i=0;i0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}};var FCKHtmlIterator=function(A){this._sourceHtml=A;};FCKHtmlIterator.prototype={Next:function(){var A=this._sourceHtml;if (A==null) return null;var B=FCKRegexLib.HtmlTag.exec(A);var C=false;var D="";if (B){if (B.index>0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}}; +var FCKPlugin=function(A,B,C){this.Name=A;this.BasePath=C?C:FCKConfig.PluginsPath;this.Path=this.BasePath+A+'/';if (!B||B.length==0) this.AvailableLangs=[];else this.AvailableLangs=B.split(',');};FCKPlugin.prototype.Load=function(){if (this.AvailableLangs.length>0){var A;if (this.AvailableLangs.IndexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];LoadScript(this.Path+'lang/'+A+'.js');};LoadScript(this.Path+'fckplugin.js');}; +var FCKPlugins=FCK.Plugins={};FCKPlugins.ItemsCount=0;FCKPlugins.Items={};FCKPlugins.Load=function(){var A=FCKPlugins.Items;for (var i=0;i-1);};String.prototype.Equals=function(){var A=arguments;if (A.length==1&&A[0].pop) A=A[0];for (var i=0;iC) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.Remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B0){var B=A.pop();if (B) B[1].call(B[0]);};this._FCKCleanupObj=null;if (CollectGarbage) CollectGarbage();}; +var s=navigator.userAgent.toLowerCase();var FCKBrowserInfo={IsIE:/*@cc_on!@*/false,IsIE7:/*@cc_on!@*/false&&(parseInt(s.match(/msie (\d+)/)[1],10)>=7),IsIE6:/*@cc_on!@*/false&&(parseInt(s.match(/msie (\d+)/)[1],10)>=6),IsSafari:s.Contains(' applewebkit/'),IsOpera:!!window.opera,IsAIR:s.Contains(' adobeair/'),IsMac:s.Contains('macintosh')};(function(A){A.IsGecko=(navigator.product=='Gecko')&&!A.IsSafari&&!A.IsOpera;A.IsGeckoLike=(A.IsGecko||A.IsSafari||A.IsOpera);if (A.IsGecko){var B=s.match(/rv:(\d+\.\d+)/);var C=B&&parseFloat(B[1]);if (C){A.IsGecko10=(C<1.8);A.IsGecko19=(C>1.8);}};if (A.IsSafari) A.IsSafari3=(parseFloat(s.match(/ applewebkit\/(\d+)/)[1])<526);})(FCKBrowserInfo); +var FCKURLParams={};(function(){var A=document.location.search.substr(1).split('&');for (var i=0;i';if (!FCKRegexLib.HtmlOpener.test(A)) A=''+A+'';if (!FCKRegexLib.HeadOpener.test(A)) A=A.replace(FCKRegexLib.HtmlOpener,'$&');return A;}else{var B=FCKConfig.DocType+'0&&!FCKRegexLib.Html4DocType.test(FCKConfig.DocType)) B+=' style="overflow-y: scroll"';B+='>'+A+'';return B;}},ConvertToDataFormat:function(A,B,C,D){var E=FCKXHtml.GetXHTML(A,!B,D);if (C&&FCKRegexLib.EmptyOutParagraph.test(E)) return '';return E;},FixHtml:function(A){return A;}}; +var FCK={Name:FCKURLParams['InstanceName'],Status:0,EditMode:0,Toolbar:null,HasFocus:false,DataProcessor:new FCKDataProcessor(),GetInstanceObject:(function(){var w=window;return function(name){return w[name];}})(),AttachToOnSelectionChange:function(A){this.Events.AttachEvent('OnSelectionChange',A);},GetLinkedFieldValue:function(){return this.LinkedField.value;},GetParentForm:function(){return this.LinkedField.form;},StartupValue:'',IsDirty:function(){if (this.EditMode==1) return (this.StartupValue!=this.EditingArea.Textarea.value);else{if (!this.EditorDocument) return false;return (this.StartupValue!=this.EditorDocument.body.innerHTML);}},ResetIsDirty:function(){if (this.EditMode==1) this.StartupValue=this.EditingArea.Textarea.value;else if (this.EditorDocument.body) this.StartupValue=this.EditorDocument.body.innerHTML;},StartEditor:function(){this.TempBaseTag=FCKConfig.BaseHref.length>0?'':'';var A=FCK.KeystrokeHandler=new FCKKeystrokeHandler();A.OnKeystroke=_FCK_KeystrokeHandler_OnKeystroke;A.SetKeystrokes(FCKConfig.Keystrokes);if (FCKBrowserInfo.IsIE7){if ((CTRL+86) in A.Keystrokes) A.SetKeystrokes([CTRL+86,true]);if ((SHIFT+45) in A.Keystrokes) A.SetKeystrokes([SHIFT+45,true]);};A.SetKeystrokes([CTRL+8,true]);this.EditingArea=new FCKEditingArea(document.getElementById('xEditingArea'));this.EditingArea.FFSpellChecker=FCKConfig.FirefoxSpellChecker;this.SetData(this.GetLinkedFieldValue(),true);FCKTools.AddEventListener(document,"keydown",this._TabKeyHandler);this.AttachToOnSelectionChange(_FCK_PaddingNodeListener);if (FCKBrowserInfo.IsGecko) this.AttachToOnSelectionChange(this._ExecCheckEmptyBlock);},Focus:function(){FCK.EditingArea.Focus();},SetStatus:function(A){this.Status=A;if (A==1){FCKFocusManager.AddWindow(window,true);if (FCKBrowserInfo.IsIE) FCKFocusManager.AddWindow(window.frameElement,true);if (FCKConfig.StartupFocus) FCK.Focus();};this.Events.FireEvent('OnStatusChange',A);},FixBody:function(){var A=FCKConfig.EnterMode;if (A!='p'&&A!='div') return;var B=this.EditorDocument;if (!B) return;var C=B.body;if (!C) return;FCKDomTools.TrimNode(C);var D=C.firstChild;var E;while (D){var F=false;switch (D.nodeType){case 1:var G=D.nodeName.toLowerCase();if (!FCKListsLib.BlockElements[G]&&G!='li'&&!D.getAttribute('_fckfakelement')&&D.getAttribute('_moz_dirty')==null) F=true;break;case 3:if (E||D.nodeValue.Trim().length>0) F=true;break;case 8:if (E) F=true;break;};if (F){var H=D.parentNode;if (!E) E=H.insertBefore(B.createElement(A),D);E.appendChild(H.removeChild(D));D=E.nextSibling;}else{if (E){FCKDomTools.TrimNode(E);E=null;};D=D.nextSibling;}};if (E) FCKDomTools.TrimNode(E);},GetData:function(A){FCK.Events.FireEvent("OnBeforeGetData");if (FCK.EditMode==1) return FCK.EditingArea.Textarea.value;this.FixBody();var B=FCK.EditorDocument;if (!B) return null;var C=FCKConfig.FullPage;var D=FCK.DataProcessor.ConvertToDataFormat(C?B.documentElement:B.body,!C,FCKConfig.IgnoreEmptyParagraphValue,A);D=FCK.ProtectEventsRestore(D);if (FCKBrowserInfo.IsIE) D=D.replace(FCKRegexLib.ToReplace,'$1');if (C){if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) D=FCK.DocTypeDeclaration+'\n'+D;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) D=FCK.XmlDeclaration+'\n'+D;};D=FCKConfig.ProtectedSource.Revert(D);setTimeout(function() { FCK.Events.FireEvent("OnAfterGetData");},0);return D;},UpdateLinkedField:function(){var A=FCK.GetXHTML(FCKConfig.FormatOutput);if (FCKConfig.HtmlEncodeOutput) A=FCKTools.HTMLEncode(A);FCK.LinkedField.value=A;FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');},RegisteredDoubleClickHandlers:{},OnDoubleClick:function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName.toUpperCase()];if (B){for (var i=0;i0?'|ABBR|XML|EMBED|OBJECT':'ABBR|XML|EMBED|OBJECT';var C;if (B.length>0){C=new RegExp('<('+B+')(?!\w|:)','gi');A=A.replace(C,'','gi');A=A.replace(C,'<\/FCK:$1>');};B='META';if (FCKBrowserInfo.IsIE) B+='|HR';C=new RegExp('<(('+B+')(?=\\s|>|/)[\\s\\S]*?)/?>','gi');A=A.replace(C,'');return A;},SetData:function(A,B){this.EditingArea.Mode=FCK.EditMode;if (FCKBrowserInfo.IsIE&&FCK.EditorDocument){FCK.EditorDocument.detachEvent("onselectionchange",Doc_OnSelectionChange);};FCKTempBin.Reset();FCK.Selection.Release();if (FCK.EditMode==0){this._ForceResetIsDirty=(B===true);A=FCKConfig.ProtectedSource.Protect(A);A=FCK.DataProcessor.ConvertToHtml(A);A=A.replace(FCKRegexLib.InvalidSelfCloseTags,'$1>');A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) A=A.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);var C='';if (!FCKConfig.FullPage) C+=_FCK_GetEditorAreaStyleTags();if (FCKBrowserInfo.IsIE) C+=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) C+=FCKTools.GetStyleHtml(FCK_ShowTableBordersCSS,true);C+=FCKTools.GetStyleHtml(FCK_InternalCSS,true);A=A.replace(FCKRegexLib.HeadCloser,C+'$&');this.EditingArea.OnLoad=_FCK_EditingArea_OnLoad;this.EditingArea.Start(A);}else{FCK.EditorWindow=null;FCK.EditorDocument=null;FCKDomTools.PaddingNode=null;this.EditingArea.OnLoad=null;this.EditingArea.Start(A);this.EditingArea.Textarea._FCKShowContextMenu=true;FCK.EnterKeyHandler=null;if (B) this.ResetIsDirty();FCK.KeystrokeHandler.AttachToElement(this.EditingArea.Textarea);this.EditingArea.Textarea.focus();FCK.Events.FireEvent('OnAfterSetHTML');};if (window.onresize) window.onresize();},RedirectNamedCommands:{},ExecuteNamedCommand:function(A,B,C,D){if (!D) FCKUndo.SaveUndoStep();if (!C&&FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};if (!D) FCKUndo.SaveUndoStep();},GetNamedCommandState:function(A){try{if (FCKBrowserInfo.IsSafari&&FCK.EditorWindow&&A.IEquals('Paste')) return 0;if (!FCK.EditorDocument.queryCommandEnabled(A)) return -1;else{return FCK.EditorDocument.queryCommandState(A)?1:0;}}catch (e){return 0;}},GetNamedCommandValue:function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==-1) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';},Paste:function(A){if (FCK.Status!=2||!FCK.Events.FireEvent('OnPaste')) return false;return A||FCK._ExecPaste();},PasteFromWord:function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');},Preview:function(){var A;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) A=FCK.TempBaseTag+FCK.GetXHTML();else A=FCK.GetXHTML();}else{A=FCKConfig.DocType+''+FCK.TempBaseTag+''+FCKLang.Preview+''+_FCK_GetEditorAreaStyleTags()+''+FCK.GetXHTML()+'';};var B=FCKConfig.ScreenWidth*0.8;var C=FCKConfig.ScreenHeight*0.7;var D=(FCKConfig.ScreenWidth-B)/2;var E='';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=A;E='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.opener._FCKHtmlToLoad );document.close() ;window.opener._FCKHtmlToLoad = null ;})() )';};var F=window.open(E,null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+B+',height='+C+',left='+D);if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){F.document.write(A);F.document.close();}},SwitchEditMode:function(A){var B=(FCK.EditMode==0);var C=FCK.IsDirty();var D;if (B){FCKCommands.GetCommand('ShowBlocks').SaveState();if (!A&&FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();D=FCK.GetXHTML(FCKConfig.FormatSource);if (FCKBrowserInfo.IsIE) FCKTempBin.ToHtml();if (D==null) return false;}else D=this.EditingArea.Textarea.value;FCK.EditMode=B?1:0;FCK.SetData(D,!C);FCK.Focus();FCKTools.RunFunction(FCK.ToolbarSet.RefreshModeState,FCK.ToolbarSet);return true;},InsertElement:function(A){if (typeof A=='string') A=this.EditorDocument.createElement(A);var B=A.nodeName.toLowerCase();FCKSelection.Restore();var C=new FCKDomRange(this.EditorWindow);C.MoveToSelection();C.DeleteContents();if (FCKListsLib.BlockElements[B]!=null){if (C.StartBlock){if (C.CheckStartOfBlock()) C.MoveToPosition(C.StartBlock,3);else if (C.CheckEndOfBlock()) C.MoveToPosition(C.StartBlock,4);else C.SplitBlock();};C.InsertNode(A);var D=FCKDomTools.GetNextSourceElement(A,false,null,['hr','br','param','img','area','input'],true);if (!D&&FCKConfig.EnterMode!='br'){D=this.EditorDocument.body.appendChild(this.EditorDocument.createElement(FCKConfig.EnterMode));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);};if (FCKListsLib.EmptyElements[B]==null) C.MoveToElementEditStart(A);else if (D) C.MoveToElementEditStart(D);else C.MoveToPosition(A,4);if (FCKBrowserInfo.IsGeckoLike){if (D) FCKDomTools.ScrollIntoView(D,false);FCKDomTools.ScrollIntoView(A,false);}}else{C.InsertNode(A);C.SetStart(A,4);C.SetEnd(A,4);};C.Select();C.Release();this.Focus();return A;},_InsertBlockElement:function(A){},_IsFunctionKey:function(A){if (A>=16&&A<=20) return true;if (A==27||(A>=33&&A<=40)) return true;if (A==45) return true;return false;},_KeyDownListener:function(A){if (!A) A=FCK.EditorWindow.event;if (FCK.EditorWindow){if (!FCK._IsFunctionKey(A.keyCode)&&!(A.ctrlKey||A.metaKey)&&!(A.keyCode==46)) FCK._KeyDownUndo();};return true;},_KeyDownUndo:function(){if (!FCKUndo.Typing){FCKUndo.SaveUndoStep();FCKUndo.Typing=true;FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.TypesCount++;FCKUndo.Changed=1;if (FCKUndo.TypesCount>FCKUndo.MaxTypes){FCKUndo.TypesCount=0;FCKUndo.SaveUndoStep();}},_TabKeyHandler:function(A){if (!A) A=window.event;var B=A.keyCode;if (B==9&&FCK.EditMode!=0){if (FCKBrowserInfo.IsIE){var C=document.selection.createRange();if (C.parentElement()!=FCK.EditingArea.Textarea) return true;C.text='\t';C.select();}else{var a=[];var D=FCK.EditingArea.Textarea;var E=D.selectionStart;var F=D.selectionEnd;a.push(D.value.substr(0,E));a.push('\t');a.push(D.value.substr(F));D.value=a.join('');D.setSelectionRange(E+1,E+1);};if (A.preventDefault) return A.preventDefault();return A.returnValue=false;};return true;}};FCK.Events=new FCKEvents(FCK);FCK.GetHTML=FCK.GetXHTML=FCK.GetData;FCK.SetHTML=FCK.SetData;FCK.InsertElementAndGetIt=FCK.CreateElement=FCK.InsertElement;function _FCK_ProtectEvents_ReplaceTags(A){return A.replace(FCKRegexLib.EventAttributes,_FCK_ProtectEvents_ReplaceEvents);};function _FCK_ProtectEvents_ReplaceEvents(A,B){return ' '+B+'_fckprotectedatt="'+encodeURIComponent(A)+'"';};function _FCK_ProtectEvents_RestoreEvents(A,B){return decodeURIComponent(B);};function _FCK_MouseEventsListener(A){if (!A) A=window.event;if (A.type=='mousedown') FCK.MouseDownFlag=true;else if (A.type=='mouseup') FCK.MouseDownFlag=false;else if (A.type=='mousemove') FCK.Events.FireEvent('OnMouseMove',A);};function _FCK_PaddingNodeListener(){if (FCKConfig.EnterMode.IEquals('br')) return;FCKDomTools.EnforcePaddingNode(FCK.EditorDocument,FCKConfig.EnterMode);if (!FCKBrowserInfo.IsIE&&FCKDomTools.PaddingNode){var A=FCKSelection.GetSelection();if (A&&A.rangeCount==1){var B=A.getRangeAt(0);if (B.collapsed&&B.startContainer==FCK.EditorDocument.body&&B.startOffset==0){B.selectNodeContents(FCKDomTools.PaddingNode);B.collapse(true);A.removeAllRanges();A.addRange(B);}}}else if (FCKDomTools.PaddingNode){var C=FCKSelection.GetParentElement();var D=FCKDomTools.PaddingNode;if (C&&C.nodeName.IEquals('body')){if (FCK.EditorDocument.body.childNodes.length==1&&FCK.EditorDocument.body.firstChild==D){if (FCKSelection._GetSelectionDocument(FCK.EditorDocument.selection)!=FCK.EditorDocument) return;var B=FCK.EditorDocument.body.createTextRange();var F=false;if (!D.childNodes.firstChild){D.appendChild(FCKTools.GetElementDocument(D).createTextNode('\ufeff'));F=true;};B.moveToElementText(D);B.select();if (F) B.pasteHTML('');}}}};function _FCK_EditingArea_OnLoad(){FCK.EditorWindow=FCK.EditingArea.Window;FCK.EditorDocument=FCK.EditingArea.Document;if (FCKBrowserInfo.IsIE) FCKTempBin.ToElements();FCK.InitializeBehaviors();FCK.MouseDownFlag=false;FCKTools.AddEventListener(FCK.EditorDocument,'mousemove',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mouseup',_FCK_MouseEventsListener);if (FCKBrowserInfo.IsSafari){FCKTools.AddEventListener(FCK.EditorDocument,'paste',function(evt){var A=new FCKDomRange(FCK.EditorWindow);var B=FCK.EditorDocument.createTextNode('\ufeff');var C=FCK.EditorDocument.createElement('a');C.id='fck_paste_padding';C.innerHTML='';A.MoveToSelection();A.DeleteContents();A.InsertNode(B);A.Collapse();A.InsertNode(C);A.MoveToPosition(C,3);A.Select();setTimeout(function(){B.parentNode.removeChild(B);C=FCK.EditorDocument.getElementById('fck_paste_padding');C.parentNode.removeChild(C);},0);});};if (FCKBrowserInfo.IsSafari){var D=function(evt){if (!(evt.ctrlKey||evt.metaKey)) return;if (FCK.EditMode!=0) return;switch (evt.keyCode){case 89:FCKUndo.Redo();break;case 90:FCKUndo.Undo();break;}};FCKTools.AddEventListener(FCK.EditorDocument,'keyup',D);};FCK.EnterKeyHandler=new FCKEnterKey(FCK.EditorWindow,FCKConfig.EnterMode,FCKConfig.ShiftEnterMode,FCKConfig.TabSpaces);FCK.KeystrokeHandler.AttachToElement(FCK.EditorDocument);if (FCK._ForceResetIsDirty) FCK.ResetIsDirty();if (FCKBrowserInfo.IsIE&&FCK.HasFocus) FCK.EditorDocument.body.setActive();FCK.OnAfterSetHTML();FCKCommands.GetCommand('ShowBlocks').RestoreState();if (FCK.Status!=0) return;FCK.SetStatus(1);};function _FCK_GetEditorAreaStyleTags(){return FCKTools.GetStyleHtml(FCKConfig.EditorAreaCSS)+FCKTools.GetStyleHtml(FCKConfig.EditorAreaStyles);};function _FCK_KeystrokeHandler_OnKeystroke(A,B){if (FCK.Status!=2) return false;if (FCK.EditMode==0){switch (B){case 'Paste':return!FCK.Paste();case 'Cut':FCKUndo.SaveUndoStep();return false;}}else{if (B.Equals('Paste','Undo','Redo','SelectAll','Cut')) return false;};var C=FCK.Commands.GetCommand(B);if (C.GetState()==-1) return false;return (C.Execute.apply(C,FCKTools.ArgumentsToArray(arguments,2))!==false);};(function(){var A=window.parent.document;var B=A.getElementById(FCK.Name);var i=0;while (B||i==0){if (B&&B.tagName.toLowerCase().Equals('input','textarea')){FCK.LinkedField=B;break;};B=A.getElementsByName(FCK.Name)[i++];}})();var FCKTempBin={Elements:[],AddElement:function(A){var B=this.Elements.length;this.Elements[B]=A;return B;},RemoveElement:function(A){var e=this.Elements[A];this.Elements[A]=null;return e;},Reset:function(){var i=0;while (i '+this.Elements[i].outerHTML+'';this.Elements[i].isHtml=true;}},ToElements:function(){var A=FCK.EditorDocument.createElement('div');for (var i=0;i0) C+='TABLE { behavior: '+B+' ; }';C+='';FCK._BehaviorsStyle=C;};return FCK._BehaviorsStyle;};function Doc_OnMouseUp(){if (FCK.EditorWindow.event.srcElement.tagName=='HTML'){FCK.Focus();FCK.EditorWindow.event.cancelBubble=true;FCK.EditorWindow.event.returnValue=false;}};function Doc_OnPaste(){var A=FCK.EditorDocument.body;A.detachEvent('onpaste',Doc_OnPaste);var B=FCK.Paste(!FCKConfig.ForcePasteAsPlainText&&!FCKConfig.AutoDetectPasteFromWord);A.attachEvent('onpaste',Doc_OnPaste);return B;};function Doc_OnDblClick(){FCK.OnDoubleClick(FCK.EditorWindow.event.srcElement);FCK.EditorWindow.event.cancelBubble=true;};function Doc_OnSelectionChange(){if (!FCK.IsSelectionChangeLocked&&FCK.EditorDocument) FCK.Events.FireEvent("OnSelectionChange");};function Doc_OnDrop(){if (FCK.MouseDownFlag){FCK.MouseDownFlag=false;return;};if (FCKConfig.ForcePasteAsPlainText){var A=FCK.EditorWindow.event;if (FCK._CheckIsPastingEnabled()||FCKConfig.ShowDropDialog) FCK.PasteAsPlainText(A.dataTransfer.getData('Text'));A.returnValue=false;A.cancelBubble=true;}};FCK.InitializeBehaviors=function(A){this.EditorDocument.attachEvent('onmouseup',Doc_OnMouseUp);this.EditorDocument.body.attachEvent('onpaste',Doc_OnPaste);this.EditorDocument.body.attachEvent('ondrop',Doc_OnDrop);FCK.ContextMenu._InnerContextMenu.AttachToElement(FCK.EditorDocument.body);this.EditorDocument.attachEvent("onkeydown",FCK._KeyDownListener);this.EditorDocument.attachEvent("ondblclick",Doc_OnDblClick);this.EditorDocument.attachEvent("onbeforedeactivate",function(){ FCKSelection.Save();});this.EditorDocument.attachEvent("onselectionchange",Doc_OnSelectionChange);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',Doc_OnMouseDown);};FCK.InsertHtml=function(A){A=FCKConfig.ProtectedSource.Protect(A);A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);FCKSelection.Restore();FCK.EditorWindow.focus();FCKUndo.SaveUndoStep();var B=FCKSelection.GetSelection();if (B.type.toLowerCase()=='control') B.clear();A=''+A;B.createRange().pasteHTML(A);var C=FCK.EditorDocument.getElementById('__fakeFCKRemove__');if (C.parentNode.childNodes.length==1) C=C.parentNode;C.removeNode(true);FCKDocumentProcessor.Process(FCK.EditorDocument);this.Events.FireEvent("OnSelectionChange");};FCK.SetInnerHtml=function(A){var B=FCK.EditorDocument;B.body.innerHTML='
     
    '+A;B.getElementById('__fakeFCKRemove__').removeNode(true);};function FCK_PreloadImages(){var A=new FCKImagePreloader();A.AddImages(FCKConfig.PreloadImages);A.AddImages(FCKConfig.SkinPath+'fck_strip.gif');A.OnComplete=LoadToolbarSetup;A.Start();};function Document_OnContextMenu(){return (event.srcElement._FCKShowContextMenu==true);};document.oncontextmenu=Document_OnContextMenu;function FCK_Cleanup(){this.LinkedField=null;this.EditorWindow=null;this.EditorDocument=null;};FCK._ExecPaste=function(){if (FCK._PasteIsRunning) return true;if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;};var A=FCK._CheckIsPastingEnabled(true);if (A===false) FCKTools.RunFunction(FCKDialog.OpenDialog,FCKDialog,['FCKDialog_Paste',FCKLang.Paste,'dialog/fck_paste.html',400,330,'Security']);else{if (FCKConfig.AutoDetectPasteFromWord&&A.length>0){var B=/<\w[^>]*(( class="?MsoNormal"?)|(="mso-))/gi;if (B.test(A)){if (confirm(FCKLang.PasteWordConfirm)){FCK.PasteFromWord();return false;}}};FCK._PasteIsRunning=true;FCK.ExecuteNamedCommand('Paste');delete FCK._PasteIsRunning;};return false;};FCK.PasteAsPlainText=function(A){if (!FCK._CheckIsPastingEnabled()){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteAsText,'dialog/fck_paste.html',400,330,'PlainText');return;};var B=null;if (!A) B=clipboardData.getData("Text");else B=A;if (B&&B.length>0){B=FCKTools.HTMLEncode(B);B=FCKTools.ProcessLineBreaks(window,FCKConfig,B);var C=B.search('

    ');var D=B.search('

    ');if ((C!=-1&&D!=-1&&C0){if (D){var F=this.EditorDocument.createElement('A');F.href=A;var G=E;G.parentNode.insertBefore(F,G);G.parentNode.removeChild(G);F.appendChild(G);return [F];};var H='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',H,false,!!B);var I=this.EditorDocument.links;for (i=0;i0&&!isNaN(E)) this.PageConfig[D]=parseFloat(E);else this.PageConfig[D]=E;}};function FCKConfig_LoadPageConfig(){var A=FCKConfig.PageConfig;for (var B in A) FCKConfig[B]=A[B];};function FCKConfig_PreProcess(){var A=FCKConfig;if (A.AllowQueryStringDebug){try{if ((/fckdebug=true/i).test(window.top.location.search)) A.Debug=true;}catch (e) { }};if (!A.PluginsPath.EndsWith('/')) A.PluginsPath+='/';var B=A.ToolbarComboPreviewCSS;if (!B||B.length==0) A.ToolbarComboPreviewCSS=A.EditorAreaCSS;A.RemoveAttributesArray=(A.RemoveAttributes||'').split(',');if (!FCKConfig.SkinEditorCSS||FCKConfig.SkinEditorCSS.length==0) FCKConfig.SkinEditorCSS=FCKConfig.SkinPath+'fck_editor.css';if (!FCKConfig.SkinDialogCSS||FCKConfig.SkinDialogCSS.length==0) FCKConfig.SkinDialogCSS=FCKConfig.SkinPath+'fck_dialog.css';};FCKConfig.ToolbarSets={};FCKConfig.Plugins={};FCKConfig.Plugins.Items=[];FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.push([A,B,C]);};FCKConfig.ProtectedSource={};FCKConfig.ProtectedSource._CodeTag=(new Date()).valueOf();FCKConfig.ProtectedSource.RegexEntries=[//g,//gi,//gi];FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.push(A);};FCKConfig.ProtectedSource.Protect=function(A){var B=this._CodeTag;function _Replace(protectedSource){var C=FCKTempBin.AddElement(protectedSource);return '';};for (var i=0;i|>)","g");return A.replace(D,_Replace);};FCKConfig.GetBodyAttributes=function(){var A='';if (this.BodyId&&this.BodyId.length>0) A+=' id="'+this.BodyId+'"';if (this.BodyClass&&this.BodyClass.length>0) A+=' class="'+this.BodyClass+'"';return A;};FCKConfig.ApplyBodyAttributes=function(A){if (this.BodyId&&this.BodyId.length>0) A.id=FCKConfig.BodyId;if (this.BodyClass&&this.BodyClass.length>0) A.className+=' '+FCKConfig.BodyClass;}; +var FCKDebug={Output:function(){},OutputObject:function(){}}; +var FCKDomTools={MoveChildren:function(A,B,C){if (A==B) return;var D;if (C){while ((D=A.lastChild)) B.insertBefore(A.removeChild(D),B.firstChild);}else{while ((D=A.firstChild)) B.appendChild(A.removeChild(D));}},MoveNode:function(A,B,C){if (C) B.insertBefore(FCKDomTools.RemoveNode(A),B.firstChild);else B.appendChild(FCKDomTools.RemoveNode(A));},TrimNode:function(A){this.LTrimNode(A);this.RTrimNode(A);},LTrimNode:function(A){var B;while ((B=A.firstChild)){if (B.nodeType==3){var C=B.nodeValue.LTrim();var D=B.nodeValue.length;if (C.length==0){A.removeChild(B);continue;}else if (C.length0) break;if (A.lastChild) A=A.lastChild;else return this.GetPreviousSourceElement(A,B,C,D);};return null;},GetNextSourceElement:function(A,B,C,D,E){while((A=this.GetNextSourceNode(A,E))){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (D&&A.nodeName.IEquals(D)) return this.GetNextSourceElement(A,B,C,D);return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;};return null;},GetNextSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.firstChild) E=A.firstChild;else{if (D&&A==D) return null;E=A.nextSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetNextSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetNextSourceNode(E,false,C,D);return E;},GetPreviousSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.lastChild) E=A.lastChild;else{if (D&&A==D) return null;E=A.previousSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetPreviousSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetPreviousSourceNode(E,false,C,D);return E;},InsertAfterNode:function(A,B){return A.parentNode.insertBefore(B,A.nextSibling);},GetParents:function(A){var B=[];while (A){B.unshift(A);A=A.parentNode;};return B;},GetCommonParents:function(A,B){var C=this.GetParents(A);var D=this.GetParents(B);var E=[];for (var i=0;i0) D[C.pop().toLowerCase()]=1;var E=this.GetCommonParents(A,B);var F=null;while ((F=E.pop())){if (D[F.nodeName.toLowerCase()]) return F;};return null;},GetIndexOf:function(A){var B=A.parentNode?A.parentNode.firstChild:null;var C=-1;while (B){C++;if (B==A) return C;B=B.nextSibling;};return-1;},PaddingNode:null,EnforcePaddingNode:function(A,B){try{if (!A||!A.body) return;}catch (e){return;};this.CheckAndRemovePaddingNode(A,B,true);try{if (A.body.lastChild&&(A.body.lastChild.nodeType!=1||A.body.lastChild.tagName.toLowerCase()==B.toLowerCase())) return;}catch (e){return;};var C=A.createElement(B);if (FCKBrowserInfo.IsGecko&&FCKListsLib.NonEmptyBlockElements[B]) FCKTools.AppendBogusBr(C);this.PaddingNode=C;if (A.body.childNodes.length==1&&A.body.firstChild.nodeType==1&&A.body.firstChild.tagName.toLowerCase()=='br'&&(A.body.firstChild.getAttribute('_moz_dirty')!=null||A.body.firstChild.getAttribute('type')=='_moz')) A.body.replaceChild(C,A.body.firstChild);else A.body.appendChild(C);},CheckAndRemovePaddingNode:function(A,B,C){var D=this.PaddingNode;if (!D) return;try{if (D.parentNode!=A.body||D.tagName.toLowerCase()!=B||(D.childNodes.length>1)||(D.firstChild&&D.firstChild.nodeValue!='\xa0'&&String(D.firstChild.tagName).toLowerCase()!='br')){this.PaddingNode=null;return;}}catch (e){this.PaddingNode=null;return;};if (!C){if (D.parentNode.childNodes.length>1) D.parentNode.removeChild(D);this.PaddingNode=null;}},HasAttribute:function(A,B){if (A.hasAttribute) return A.hasAttribute(B);else{var C=A.attributes[B];return (C!=undefined&&C.specified);}},HasAttributes:function(A){var B=A.attributes;for (var i=0;i0) return true;continue;}};if (B[i].specified) return true;};return false;},RemoveAttribute:function(A,B){if (FCKBrowserInfo.IsIE&&B.toLowerCase()=='class') B='className';return A.removeAttribute(B,0);},RemoveAttributes:function (A,B){for (var i=0;i0) return false;C=C.nextSibling;};return D?this.CheckIsEmptyElement(D,B):true;},SetElementStyles:function(A,B){var C=A.style;for (var D in B) C[D]=B[D];},SetOpacity:function(A,B){if (FCKBrowserInfo.IsIE){B=Math.round(B*100);A.style.filter=(B>100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+B+')');}else A.style.opacity=B;},GetCurrentElementStyle:function(A,B){if (FCKBrowserInfo.IsIE) return A.currentStyle[B];else return A.ownerDocument.defaultView.getComputedStyle(A,'').getPropertyValue(B);},GetPositionedAncestor:function(A){var B=A;while (B!=FCKTools.GetElementDocument(B).documentElement){if (this.GetCurrentElementStyle(B,'position')!='static') return B;if (B==FCKTools.GetElementDocument(B).documentElement&¤tWindow!=w) B=currentWindow.frameElement;else B=B.parentNode;};return null;},ScrollIntoView:function(A,B){var C=FCKTools.GetElementWindow(A);var D=FCKTools.GetViewPaneSize(C).Height;var E=D*-1;if (B===false){E+=A.offsetHeight||0;E+=parseInt(this.GetCurrentElementStyle(A,'marginBottom')||0,10)||0;};var F=FCKTools.GetDocumentPosition(C,A);E+=F.y;var G=FCKTools.GetScrollPosition(C).Y;if (E>0&&(E>G||E'+styleDef+'';};var C=function(cssFileUrl,markTemp){if (cssFileUrl.length==0) return '';var B=markTemp?' _fcktemp="true"':'';return '';};return function(cssFileOrArrayOrDef,markTemp){if (!cssFileOrArrayOrDef) return '';if (typeof(cssFileOrArrayOrDef)=='string'){if (/[\\\/\.][^{}]*$/.test(cssFileOrArrayOrDef)){return this.GetStyleHtml(cssFileOrArrayOrDef.split(','),markTemp);}else return A(this._GetUrlFixedCss(cssFileOrArrayOrDef),markTemp);}else{var E='';for (var i=0;i/g,'>');return A;};FCKTools.HTMLDecode=function(A){if (!A) return '';A=A.replace(/>/g,'>');A=A.replace(/</g,'<');A=A.replace(/&/g,'&');return A;};FCKTools._ProcessLineBreaksForPMode=function(A,B,C,D,E){var F=0;var G="

    ";var H="

    ";var I="
    ";if (C){G="
  • ";H="
  • ";F=1;}while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='p'){F=1;break;};D=D.parentNode;};for (var i=0;i0) return A[A.length-1];return null;};FCKTools.GetDocumentPosition=function(w,A){var x=0;var y=0;var B=A;var C=null;var D=FCKTools.GetElementWindow(B);while (B&&!(D==w&&(B==w.document.body||B==w.document.documentElement))){x+=B.offsetLeft-B.scrollLeft;y+=B.offsetTop-B.scrollTop;if (!FCKBrowserInfo.IsOpera){var E=C;while (E&&E!=B){x-=E.scrollLeft;y-=E.scrollTop;E=E.parentNode;}};C=B;if (B.offsetParent) B=B.offsetParent;else{if (D!=w){B=D.frameElement;C=null;if (B) D=B.contentWindow.parent;}else B=null;}};if (FCKDomTools.GetCurrentElementStyle(w.document.body,'position')!='static'||(FCKBrowserInfo.IsIE&&FCKDomTools.GetPositionedAncestor(A)==null)){x+=w.document.body.offsetLeft;y+=w.document.body.offsetTop;};return { "x":x,"y":y };};FCKTools.GetWindowPosition=function(w,A){var B=this.GetDocumentPosition(w,A);var C=FCKTools.GetScrollPosition(w);B.x-=C.X;B.y-=C.Y;return B;};FCKTools.ProtectFormStyles=function(A){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return [];var B=[];var C=['style','className'];for (var i=0;i0){for (var i=B.length-1;i>=0;i--){var C=B[i][0];var D=B[i][1];if (D) A.insertBefore(C,D);else A.appendChild(C);}}};FCKTools.GetNextNode=function(A,B){if (A.firstChild) return A.firstChild;else if (A.nextSibling) return A.nextSibling;else{var C=A.parentNode;while (C){if (C==B) return null;if (C.nextSibling) return C.nextSibling;else C=C.parentNode;}};return null;};FCKTools.GetNextTextNode=function(A,B,C){node=this.GetNextNode(A,B);if (C&&node&&C(node)) return null;while (node&&node.nodeType!=3){node=this.GetNextNode(node,B);if (C&&node&&C(node)) return null;};return node;};FCKTools.Merge=function(){var A=arguments;var o=A[0];for (var i=1;i');document.domain = '"+FCK_RUNTIME_DOMAIN+"';document.close();}() ) ;";if (FCKBrowserInfo.IsIE){if (FCKBrowserInfo.IsIE7||!FCKBrowserInfo.IsIE6) return "";else return "javascript: '';";};return "javascript: void(0);";};FCKTools.ResetStyles=function(A){A.style.cssText='margin:0;padding:0;border:0;background-color:transparent;background-image:none;';}; +FCKTools.CancelEvent=function(e){return false;};FCKTools._AppendStyleSheet=function(A,B){return A.createStyleSheet(B).owningElement;};FCKTools.AppendStyleString=function(A,B){if (!B) return null;var s=A.createStyleSheet("");s.cssText=B;return s;};FCKTools.ClearElementAttributes=function(A){A.clearAttributes();};FCKTools.GetAllChildrenIds=function(A){var B=[];for (var i=0;i0) B[B.length]=C;};return B;};FCKTools.RemoveOuterTags=function(e){e.insertAdjacentHTML('beforeBegin',e.innerHTML);e.parentNode.removeChild(e);};FCKTools.CreateXmlObject=function(A){var B;switch (A){case 'XmlHttp':if (document.location.protocol!='file:') try { return new XMLHttpRequest();} catch (e) {};B=['MSXML2.XmlHttp','Microsoft.XmlHttp'];break;case 'DOMDocument':B=['MSXML2.DOMDocument','Microsoft.XmlDom'];break;};for (var i=0;i<2;i++){try { return new ActiveXObject(B[i]);}catch (e){}};if (FCKLang.NoActiveX){alert(FCKLang.NoActiveX);FCKLang.NoActiveX=null;};return null;};FCKTools.DisableSelection=function(A){A.unselectable='on';var e,i=0;while ((e=A.all[i++])){switch (e.tagName){case 'IFRAME':case 'TEXTAREA':case 'INPUT':case 'SELECT':break;default:e.unselectable='on';}}};FCKTools.GetScrollPosition=function(A){var B=A.document;var C={ X:B.documentElement.scrollLeft,Y:B.documentElement.scrollTop };if (C.X>0||C.Y>0) return C;return { X:B.body.scrollLeft,Y:B.body.scrollTop };};FCKTools.AddEventListener=function(A,B,C){A.attachEvent('on'+B,C);};FCKTools.RemoveEventListener=function(A,B,C){A.detachEvent('on'+B,C);};FCKTools.AddEventListenerEx=function(A,B,C,D){var o={};o.Source=A;o.Params=D||[];o.Listener=function(ev){return C.apply(o.Source,[ev].concat(o.Params));};if (FCK.IECleanup) FCK.IECleanup.AddItem(null,function() { o.Source=null;o.Params=null;});A.attachEvent('on'+B,o.Listener);A=null;D=null;};FCKTools.GetViewPaneSize=function(A){var B;var C=A.document.documentElement;if (C&&C.clientWidth) B=C;else B=A.document.body;if (B) return { Width:B.clientWidth,Height:B.clientHeight };else return { Width:0,Height:0 };};FCKTools.SaveStyles=function(A){var B=FCKTools.ProtectFormStyles(A);var C={};if (A.className.length>0){C.Class=A.className;A.className='';};var D=A.style.cssText;if (D.length>0){C.Inline=D;A.style.cssText='';};FCKTools.RestoreFormStyles(A,B);return C;};FCKTools.RestoreStyles=function(A,B){var C=FCKTools.ProtectFormStyles(A);A.className=B.Class||'';A.style.cssText=B.Inline||'';FCKTools.RestoreFormStyles(A,C);};FCKTools.RegisterDollarFunction=function(A){A.$=A.document.getElementById;};FCKTools.AppendElement=function(A,B){return A.appendChild(this.GetElementDocument(A).createElement(B));};FCKTools.ToLowerCase=function(A){return A.toLowerCase();}; +var FCKeditorAPI;function InitializeAPI(){var A=window.parent;if (!(FCKeditorAPI=A.FCKeditorAPI)){var B='window.FCKeditorAPI = {Version : "2.6.6",VersionBuild : "25427",Instances : window.FCKeditorAPI && window.FCKeditorAPI.Instances || {},GetInstance : function( name ){return this.Instances[ name ];},_FormSubmit : function(){for ( var name in FCKeditorAPI.Instances ){var oEditor = FCKeditorAPI.Instances[ name ] ;if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )oEditor.UpdateLinkedField() ;}this._FCKOriginalSubmit() ;},_FunctionQueue : window.FCKeditorAPI && window.FCKeditorAPI._FunctionQueue || {Functions : new Array(),IsRunning : false,Add : function( f ){this.Functions.push( f );if ( !this.IsRunning )this.StartNext();},StartNext : function(){var aQueue = this.Functions ;if ( aQueue.length > 0 ){this.IsRunning = true;aQueue[0].call();}else this.IsRunning = false;},Remove : function( f ){var aQueue = this.Functions;var i = 0, fFunc;while( (fFunc = aQueue[ i ]) ){if ( fFunc == f )aQueue.splice( i,1 );i++ ;}this.StartNext();}}}';if (A.execScript) A.execScript(B,'JavaScript');else{if (FCKBrowserInfo.IsGecko10){eval.call(A,B);}else if(FCKBrowserInfo.IsAIR){FCKAdobeAIR.FCKeditorAPI_Evaluate(A,B);}else if (FCKBrowserInfo.IsSafari){var C=A.document;var D=C.createElement('script');D.appendChild(C.createTextNode(B));C.documentElement.appendChild(D);}else A.eval(B);};FCKeditorAPI=A.FCKeditorAPI;FCKeditorAPI.__Instances=FCKeditorAPI.Instances;};FCKeditorAPI.Instances[FCK.Name]=FCK;};function _AttachFormSubmitToAPI(){var A=FCK.GetParentForm();if (A){FCKTools.AddEventListener(A,'submit',FCK.UpdateLinkedField);if (!A._FCKOriginalSubmit&&(typeof(A.submit)=='function'||(!A.submit.tagName&&!A.submit.length))){A._FCKOriginalSubmit=A.submit;A.submit=FCKeditorAPI._FormSubmit;}}};function FCKeditorAPI_Cleanup(){if (window.FCKConfig&&FCKConfig.MsWebBrowserControlCompat&&!window.FCKUnloadFlag) return;delete FCKeditorAPI.Instances[FCK.Name];};function FCKeditorAPI_ConfirmCleanup(){if (window.FCKConfig&&FCKConfig.MsWebBrowserControlCompat) window.FCKUnloadFlag=true;};FCKTools.AddEventListener(window,'unload',FCKeditorAPI_Cleanup);FCKTools.AddEventListener(window,'beforeunload',FCKeditorAPI_ConfirmCleanup); +var FCKImagePreloader=function(){this._Images=[];};FCKImagePreloader.prototype={AddImages:function(A){if (typeof(A)=='string') A=A.split(';');this._Images=this._Images.concat(A);},Start:function(){var A=this._Images;this._PreloadCount=A.length;for (var i=0;i]*\>)/i,AfterBody:/(\<\/body\>[\s\S]*$)/i,ToReplace:/___fcktoreplace:([\w]+)/ig,MetaHttpEquiv:/http-equiv\s*=\s*["']?([^"' ]+)/i,HasBaseTag:/]/i,HtmlOpener:/]*>/i,HeadOpener:/]*>/i,HeadCloser:/<\/head\s*>/i,FCK_Class:/\s*FCK__[^ ]*(?=\s+|$)/,ElementName:/(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/,ForceSimpleAmpersand:/___FCKAmp___/g,SpaceNoClose:/\/>/g,EmptyParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>\s*(<\/\1>)?$/,EmptyOutParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>(?:\s*| | )(<\/\1>)?$/,TagBody:/>]+))/gi,ProtectUrlsA:/]+))/gi,ProtectUrlsArea:/]+))/gi,Html4DocType:/HTML 4\.0 Transitional/i,DocTypeTag:/]*>/i,HtmlDocType:/DTD HTML/,TagsWithEvent:/<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g,EventAttributes:/\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,ProtectedEvents:/\s\w+_fckprotectedatt="([^"]+)"/g,StyleProperties:/\S+\s*:/g,InvalidSelfCloseTags:/(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi,StyleVariableAttName:/#\(\s*("|')(.+?)\1[^\)]*\s*\)/g,RegExp:/^\/(.*)\/([gim]*)$/,HtmlTag:/<[^\s<>](?:"[^"]*"|'[^']*'|[^<])*>/}; +var FCKListsLib={BlockElements:{ address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,marquee:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },NonEmptyBlockElements:{ p:1,div:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },InlineChildReqElements:{ abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },InlineNonEmptyElements:{ a:1,abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },EmptyElements:{ base:1,col:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },PathBlockElements:{ address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1 },PathBlockLimitElements:{ body:1,div:1,td:1,th:1,caption:1,form:1 },StyleBlockElements:{ address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },StyleObjectElements:{ img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1 },NonEditableElements:{ button:1,option:1,script:1,iframe:1,textarea:1,object:1,embed:1,map:1,applet:1 },BlockBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1 },ListBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1,br:1 }}; +var FCKLanguageManager=FCK.Language={AvailableLanguages:{af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-uk':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French','fr-ca':'French (Canada)',gl:'Galician',gu:'Gujarati',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',is:'Icelandic',it:'Italian',ja:'Japanese',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},GetActiveLanguage:function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;}};return this.DefaultLanguage;},TranslateElements:function(A,B,C,D){var e=A.getElementsByTagName(B);var E,s;for (var i=0;i':'gt','ˆ':'circ','˜':'tilde',' ':'ensp',' ':'emsp',' ':'thinsp','‌':'zwnj','‍':'zwj','‎':'lrm','‏':'rlm','–':'ndash','—':'mdash','‘':'lsquo','’':'rsquo','‚':'sbquo','“':'ldquo','”':'rdquo','„':'bdquo','†':'dagger','‡':'Dagger','‰':'permil','‹':'lsaquo','›':'rsaquo','€':'euro'};for (e in FCKXHtmlEntities.Entities) A+=e;if (FCKConfig.IncludeLatinEntities){B={'À':'Agrave','Á':'Aacute','Â':'Acirc','Ã':'Atilde','Ä':'Auml','Å':'Aring','Æ':'AElig','Ç':'Ccedil','È':'Egrave','É':'Eacute','Ê':'Ecirc','Ë':'Euml','Ì':'Igrave','Í':'Iacute','Î':'Icirc','Ï':'Iuml','Ð':'ETH','Ñ':'Ntilde','Ò':'Ograve','Ó':'Oacute','Ô':'Ocirc','Õ':'Otilde','Ö':'Ouml','Ø':'Oslash','Ù':'Ugrave','Ú':'Uacute','Û':'Ucirc','Ü':'Uuml','Ý':'Yacute','Þ':'THORN','ß':'szlig','à':'agrave','á':'aacute','â':'acirc','ã':'atilde','ä':'auml','å':'aring','æ':'aelig','ç':'ccedil','è':'egrave','é':'eacute','ê':'ecirc','ë':'euml','ì':'igrave','í':'iacute','î':'icirc','ï':'iuml','ð':'eth','ñ':'ntilde','ò':'ograve','ó':'oacute','ô':'ocirc','õ':'otilde','ö':'ouml','ø':'oslash','ù':'ugrave','ú':'uacute','û':'ucirc','ü':'uuml','ý':'yacute','þ':'thorn','ÿ':'yuml','Œ':'OElig','œ':'oelig','Š':'Scaron','š':'scaron','Ÿ':'Yuml'};for (e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;};if (FCKConfig.IncludeGreekEntities){B={'Α':'Alpha','Β':'Beta','Γ':'Gamma','Δ':'Delta','Ε':'Epsilon','Ζ':'Zeta','Η':'Eta','Θ':'Theta','Ι':'Iota','Κ':'Kappa','Λ':'Lambda','Μ':'Mu','Ν':'Nu','Ξ':'Xi','Ο':'Omicron','Π':'Pi','Ρ':'Rho','Σ':'Sigma','Τ':'Tau','Υ':'Upsilon','Φ':'Phi','Χ':'Chi','Ψ':'Psi','Ω':'Omega','α':'alpha','β':'beta','γ':'gamma','δ':'delta','ε':'epsilon','ζ':'zeta','η':'eta','θ':'theta','ι':'iota','κ':'kappa','λ':'lambda','μ':'mu','ν':'nu','ξ':'xi','ο':'omicron','π':'pi','ρ':'rho','ς':'sigmaf','σ':'sigma','τ':'tau','υ':'upsilon','φ':'phi','χ':'chi','ψ':'psi','ω':'omega','\u03d1':'thetasym','\u03d2':'upsih','\u03d6':'piv'};for (e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;}}else{FCKXHtmlEntities.Entities={'>':'gt'};A='>';A+=' ';};var C='['+A+']';if (FCKConfig.ProcessNumericEntities) C='[^ -~]|'+C;var D=FCKConfig.AdditionalNumericEntities;if (D&&D.length>0) C+='|'+FCKConfig.AdditionalNumericEntities;FCKXHtmlEntities.EntitiesRegex=new RegExp(C,'g');}; +var FCKXHtml={};FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKDomTools.CheckAndRemovePaddingNode(FCKTools.GetElementDocument(A),FCKConfig.EnterMode);FCKXHtmlEntities.Initialize();this._NbspEntity=(FCKConfig.ProcessHTMLEntities?'nbsp':'#160');var D=FCK.IsDirty();FCKXHtml.SpecialBlocks=[];this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);if (FCKBrowserInfo.IsIE) FCKXHtml._RemoveXHtmlJobProperties(A);var E=this._GetMainXmlString();this.XML=null;if (FCKBrowserInfo.IsSafari) E=E.replace(/^/,'');E=E.substr(7,E.length-15).Trim();if (FCKConfig.DocType.length>0&&FCKRegexLib.HtmlDocType.test(FCKConfig.DocType)) E=E.replace(FCKRegexLib.SpaceNoClose,'>');else E=E.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) E=E.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) E=FCKCodeFormatter.Format(E);for (var i=0;i0;if (C) A.appendChild(this.XML.createTextNode(B.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity)));return C;};function FCKXHtml_GetEntity(A){var B=FCKXHtmlEntities.Entities[A]||('#'+A.charCodeAt(0));return '#?-:'+B+';';};FCKXHtml.TagProcessors={a:function(A,B){if (B.innerHTML.Trim().length==0&&!B.name) return false;var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);};A=FCKXHtml._AppendChildNodes(A,B,false);return A;},area:function(A,B){var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (!A.attributes.getNamedItem('coords')){var D=B.getAttribute('coords',2);if (D&&D!='0,0,0') FCKXHtml._AppendAttribute(A,'coords',D);};if (!A.attributes.getNamedItem('shape')){var E=B.getAttribute('shape',2);if (E&&E.length>0) FCKXHtml._AppendAttribute(A,'shape',E.toLowerCase());}};return A;},body:function(A,B){A=FCKXHtml._AppendChildNodes(A,B,false);A.removeAttribute('spellcheck');return A;},iframe:function(A,B){var C=B.innerHTML;if (FCKBrowserInfo.IsGecko) C=FCKTools.HTMLDecode(C);C=C.replace(/\s_fcksavedurl="[^"]*"/g,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},img:function(A,B){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'src',C);if (B.style.width) A.removeAttribute('width');if (B.style.height) A.removeAttribute('height');return A;},li:function(A,B,C){if (C.nodeName.IEquals(['ul','ol'])) return FCKXHtml._AppendChildNodes(A,B,true);var D=FCKXHtml.XML.createElement('ul');B._fckxhtmljob=null;do{FCKXHtml._AppendNode(D,B);do{B=FCKDomTools.GetNextSibling(B);} while (B&&B.nodeType==3&&B.nodeValue.Trim().length==0)} while (B&&B.nodeName.toLowerCase()=='li') return D;},ol:function(A,B,C){if (B.innerHTML.Trim().length==0) return false;var D=C.lastChild;if (D&&D.nodeType==3) D=D.previousSibling;if (D&&D.nodeName.toUpperCase()=='LI'){B._fckxhtmljob=null;FCKXHtml._AppendNode(D,B);return false;};A=FCKXHtml._AppendChildNodes(A,B);return A;},pre:function (A,B){var C=B.firstChild;if (C&&C.nodeType==3) A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem('\r\n')));FCKXHtml._AppendChildNodes(A,B,true);return A;},script:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;},span:function(A,B){if (B.innerHTML.length==0) return false;A=FCKXHtml._AppendChildNodes(A,B,false);return A;},style:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');var C=B.innerHTML;if (FCKBrowserInfo.IsIE) C=C.replace(/^(\r\n|\n|\r)/,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},title:function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;}};FCKXHtml.TagProcessors.ul=FCKXHtml.TagProcessors.ol; +FCKXHtml._GetMainXmlString=function(){return this.MainNode.xml;};FCKXHtml._AppendAttributes=function(A,B,C,D){var E=B.attributes,bHasStyle;for (var n=0;n0){var I=FCKTools.ProtectFormStyles(B);var J=B.style.cssText.replace(FCKRegexLib.StyleProperties,FCKTools.ToLowerCase);FCKTools.RestoreFormStyles(B,I);this._AppendAttribute(C,'style',J);}};FCKXHtml._RemoveXHtmlJobProperties=function (A){if (!A||!A.nodeType||A.nodeType!=1) return;if (typeof A._fckxhtmljob=='undefined'&&A.tagName!=='BODY') return;A.removeAttribute('_fckxhtmljob');if (A.hasChildNodes()){var B=A.childNodes;for (var i=B.length-1;i>=0;i--){var C=B[i];if (C.parentNode==A) FCKXHtml._RemoveXHtmlJobProperties(C);}}};FCKXHtml.TagProcessors['div']=function(A,B){if (B.align.length>0) FCKXHtml._AppendAttribute(A,'align',B.align);A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['font']=function(A,B){if (A.attributes.length==0) A=FCKXHtml.XML.createDocumentFragment();A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['form']=function(A,B){if (B.acceptCharset&&B.acceptCharset.length>0&&B.acceptCharset!='UNKNOWN') FCKXHtml._AppendAttribute(A,'accept-charset',B.acceptCharset);var C=B.attributes['name'];if (C&&C.value.length>0) FCKXHtml._AppendAttribute(A,'name',C.value);A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['input']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);if (B.value&&!A.attributes.getNamedItem('value')) FCKXHtml._AppendAttribute(A,'value',B.value);if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text');return A;};FCKXHtml.TagProcessors['label']=function(A,B){if (B.htmlFor.length>0) FCKXHtml._AppendAttribute(A,'for',B.htmlFor);A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['map']=function(A,B){if (!A.attributes.getNamedItem('name')){var C=B.name;if (C) FCKXHtml._AppendAttribute(A,'name',C);};A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['meta']=function(A,B){var C=A.attributes.getNamedItem('http-equiv');if (C==null||C.value.length==0){var D=B.outerHTML.match(FCKRegexLib.MetaHttpEquiv);if (D){D=D[1];FCKXHtml._AppendAttribute(A,'http-equiv',D);}};return A;};FCKXHtml.TagProcessors['option']=function(A,B){if (B.selected&&!A.attributes.getNamedItem('selected')) FCKXHtml._AppendAttribute(A,'selected','selected');A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['textarea']=FCKXHtml.TagProcessors['select']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);A=FCKXHtml._AppendChildNodes(A,B);return A;}; +var FCKCodeFormatter={};FCKCodeFormatter.Init=function(){var A=this.Regex={};A.BlocksOpener=/\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DL|DT|DD|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.BlocksCloser=/\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DL|DT|DD|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.NewLineTags=/\<(BR|HR)[^\>]*\>/gi;A.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;A.LineSplitter=/\s*\n+\s*/g;A.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL|DL)[ \/\>]/i;A.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL|DL)[ \>]/i;A.FormatIndentatorRemove=new RegExp('^'+FCKConfig.FormatIndentator);A.ProtectedTags=/(]*>)([\s\S]*?)(<\/PRE>)/gi;};FCKCodeFormatter._ProtectData=function(A,B,C,D){return B+'___FCKpd___'+(FCKCodeFormatter.ProtectedData.push(C)-1)+D;};FCKCodeFormatter.Format=function(A){if (!this.Regex) this.Init();FCKCodeFormatter.ProtectedData=[];var B=A.replace(this.Regex.ProtectedTags,FCKCodeFormatter._ProtectData);B=B.replace(this.Regex.BlocksOpener,'\n$&');B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;iB[i]) return 1;};if (A.lengthB.length) return 1;return 0;};FCKUndo._CheckIsBookmarksEqual=function(A,B){if (!(A&&B)) return false;if (FCKBrowserInfo.IsIE){var C=A[1].search(A[0].StartId);var D=B[1].search(B[0].StartId);var E=A[1].search(A[0].EndId);var F=B[1].search(B[0].EndId);return C==D&&E==F;}else{return this._CompareCursors(A.Start,B.Start)==0&&this._CompareCursors(A.End,B.End)==0;}};FCKUndo.SaveUndoStep=function(){if (FCK.EditMode!=0||this.SaveLocked) return;if (this.SavedData.length) this.Changed=true;var A=FCK.EditorDocument.body.innerHTML;var B=this._GetBookmark();this.SavedData=this.SavedData.slice(0,this.CurrentIndex+1);if (this.CurrentIndex>0&&A==this.SavedData[this.CurrentIndex][0]&&this._CheckIsBookmarksEqual(B,this.SavedData[this.CurrentIndex][1])) return;else if (this.CurrentIndex==0&&this.SavedData.length&&A==this.SavedData[0][0]){this.SavedData[0][1]=B;return;};if (this.CurrentIndex+1>=FCKConfig.MaxUndoLevels) this.SavedData.shift();else this.CurrentIndex++;this.SavedData[this.CurrentIndex]=[A,B];FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.CheckUndoState=function(){return (this.Changed||this.CurrentIndex>0);};FCKUndo.CheckRedoState=function(){return (this.CurrentIndex<(this.SavedData.length-1));};FCKUndo.Undo=function(){if (this.CheckUndoState()){if (this.CurrentIndex==(this.SavedData.length-1)){this.SaveUndoStep();};this._ApplyUndoLevel(--this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo.Redo=function(){if (this.CheckRedoState()){this._ApplyUndoLevel(++this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo._ApplyUndoLevel=function(A){var B=this.SavedData[A];if (!B) return;if (FCKBrowserInfo.IsIE){if (B[1]&&B[1][1]) FCK.SetInnerHtml(B[1][1]);else FCK.SetInnerHtml(B[0]);}else FCK.EditorDocument.body.innerHTML=B[0];this._SelectBookmark(B[1]);this.TypesCount=0;this.Changed=false;this.Typing=false;}; +var FCKEditingArea=function(A){this.TargetElement=A;this.Mode=0;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKEditingArea_Cleanup);};FCKEditingArea.prototype.Start=function(A,B){var C=this.TargetElement;var D=FCKTools.GetElementDocument(C);while(C.firstChild) C.removeChild(C.firstChild);if (this.Mode==0){if (FCK_IS_CUSTOM_DOMAIN) A=''+A;if (FCKBrowserInfo.IsIE) A=A.replace(/(]*?)\s*\/?>(?!\s*<\/base>)/gi,'$1>');else if (!B){var E=A.match(FCKRegexLib.BeforeBody);var F=A.match(FCKRegexLib.AfterBody);if (E&&F){var G=A.substr(E[1].length,A.length-E[1].length-F[1].length);A=E[1]+' '+F[1];if (FCKBrowserInfo.IsGecko&&(G.length==0||FCKRegexLib.EmptyParagraph.test(G))) G='
    ';this._BodyHTML=G;}else this._BodyHTML=A;};var H=this.IFrame=D.createElement('iframe');var I='';H.frameBorder=0;H.style.width=H.style.height='100%';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=A.replace(//i,''+I);H.src='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.parent._FCKHtmlToLoad );document.close() ;window.parent._FCKHtmlToLoad = null ;})() )';}else if (!FCKBrowserInfo.IsGecko){H.src='javascript:void(0)';};C.appendChild(H);this.Window=H.contentWindow;if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){var J=this.Window.document;J.open();J.write(A.replace(//i,''+I));J.close();};if (FCKBrowserInfo.IsAIR) FCKAdobeAIR.EditingArea_Start(J,A);if (FCKBrowserInfo.IsGecko10&&!B){this.Start(A,true);return;};if (H.readyState&&H.readyState!='completed'){var K=this;setTimeout(function(){try{K.Window.document.documentElement.doScroll("left");}catch(e){setTimeout(arguments.callee,0);return;};K.Window._FCKEditingArea=K;FCKEditingArea_CompleteStart.call(K.Window);},0);}else{this.Window._FCKEditingArea=this;if (FCKBrowserInfo.IsGecko10) this.Window.setTimeout(FCKEditingArea_CompleteStart,500);else FCKEditingArea_CompleteStart.call(this.Window);}}else{var L=this.Textarea=D.createElement('textarea');L.className='SourceField';L.dir='ltr';FCKDomTools.SetElementStyles(L,{width:'100%',height:'100%',border:'none',resize:'none',outline:'none'});C.appendChild(L);L.value=A;FCKTools.RunFunction(this.OnLoad);}};function FCKEditingArea_CompleteStart(){if (!this.document.body){this.setTimeout(FCKEditingArea_CompleteStart,50);return;};var A=this._FCKEditingArea;A.Document=A.Window.document;A.MakeEditable();FCKTools.RunFunction(A.OnLoad);};FCKEditingArea.prototype.MakeEditable=function(){var A=this.Document;if (FCKBrowserInfo.IsIE){A.body.disabled=true;A.body.contentEditable=true;A.body.removeAttribute("disabled");}else{try{A.body.spellcheck=(this.FFSpellChecker!==false);if (this._BodyHTML){A.body.innerHTML=this._BodyHTML;A.body.offsetLeft;this._BodyHTML=null;};A.designMode='on';A.execCommand('enableObjectResizing',false,!FCKConfig.DisableObjectResizing);A.execCommand('enableInlineTableEditing',false,!FCKConfig.DisableFFTableHandles);}catch (e){FCKTools.AddEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);}}};function FCKEditingArea_Document_AttributeNodeModified(A){var B=A.currentTarget.contentWindow._FCKEditingArea;if (B._timer) window.clearTimeout(B._timer);B._timer=FCKTools.SetTimeout(FCKEditingArea_MakeEditableByMutation,1000,B);};function FCKEditingArea_MakeEditableByMutation(){delete this._timer;FCKTools.RemoveEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);this.MakeEditable();};FCKEditingArea.prototype.Focus=function(){try{if (this.Mode==0){if (FCKBrowserInfo.IsIE) this._FocusIE();else this.Window.focus();}else{var A=FCKTools.GetElementDocument(this.Textarea);if ((!A.hasFocus||A.hasFocus())&&A.activeElement==this.Textarea) return;this.Textarea.focus();}}catch(e) {}};FCKEditingArea.prototype._FocusIE=function(){this.Document.body.setActive();this.Window.focus();var A=this.Document.selection.createRange();var B=A.parentElement();var C=B.nodeName.toLowerCase();if (B.childNodes.length>0||!(FCKListsLib.BlockElements[C]||FCKListsLib.NonEmptyBlockElements[C])){return;};A=new FCKDomRange(this.Window);A.MoveToElementEditStart(B);A.Select();};function FCKEditingArea_Cleanup(){if (this.Document){this.Document.selection.empty();this.Document.body.innerHTML="";};this.TargetElement=null;this.IFrame=null;this.Document=null;this.Textarea=null;if (this.Window){this.Window._FCKEditingArea=null;this.Window=null;}}; +var FCKKeystrokeHandler=function(A){this.Keystrokes={};this.CancelCtrlDefaults=(A!==false);};FCKKeystrokeHandler.prototype.AttachToElement=function(A){FCKTools.AddEventListenerEx(A,'keydown',_FCKKeystrokeHandler_OnKeyDown,this);if (FCKBrowserInfo.IsGecko10||FCKBrowserInfo.IsOpera||(FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac)) FCKTools.AddEventListenerEx(A,'keypress',_FCKKeystrokeHandler_OnKeyPress,this);};FCKKeystrokeHandler.prototype.SetKeystrokes=function(){for (var i=0;i40))){B._CancelIt=true;if (A.preventDefault) return A.preventDefault();A.returnValue=false;A.cancelBubble=true;return false;};return true;};function _FCKKeystrokeHandler_OnKeyPress(A,B){if (B._CancelIt){if (A.preventDefault) return A.preventDefault();return false;};return true;}; +FCK.DTD=(function(){var X=FCKTools.Merge;var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I;A={isindex:1,fieldset:1};B={input:1,button:1,select:1,textarea:1,label:1};C=X({a:1},B);D=X({iframe:1},C);E={hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1};F={ins:1,del:1,script:1};G=X({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1},F);H=X({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1},G);I=X({p:1},H);J=X({iframe:1},H,B);K={img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1};L=X({a:1},J);M={tr:1};N={'#':1};O=X({param:1},K);P=X({form:1},A,D,E,I);Q={li:1};return {col:{},tr:{td:1,th:1},img:{},colgroup:{col:1},noscript:P,td:P,br:{},th:P,center:P,kbd:L,button:X(I,E),basefont:{},h5:L,h4:L,samp:L,h6:L,ol:Q,h1:L,h3:L,option:N,h2:L,form:X(A,D,E,I),select:{optgroup:1,option:1},font:J,ins:P,menu:Q,abbr:L,label:L,table:{thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},code:L,script:N,tfoot:M,cite:L,li:P,input:{},iframe:P,strong:J,textarea:N,noframes:P,big:J,small:J,span:J,hr:{},dt:L,sub:J,optgroup:{option:1},param:{},bdo:L,'var':J,div:P,object:O,sup:J,dd:P,strike:J,area:{},dir:Q,map:X({area:1,form:1,p:1},A,F,E),applet:O,dl:{dt:1,dd:1},del:P,isindex:{},fieldset:X({legend:1},K),thead:M,ul:Q,acronym:L,b:J,a:J,blockquote:P,caption:L,i:J,u:J,tbody:M,s:L,address:X(D,I),tt:J,legend:L,q:L,pre:X(G,C),p:L,em:J,dfn:L};})(); +var FCKStyle=function(A){this.Element=(A.Element||'span').toLowerCase();this._StyleDesc=A;};FCKStyle.prototype={GetType:function(){var A=this.GetType_$;if (A!=undefined) return A;var B=this.Element;if (B=='#'||FCKListsLib.StyleBlockElements[B]) A=0;else if (FCKListsLib.StyleObjectElements[B]) A=2;else A=1;return (this.GetType_$=A);},ApplyToSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.ApplyToRange(B,true);},ApplyToRange:function(A,B,C){switch (this.GetType()){case 0:this.ApplyToRange=this._ApplyBlockStyle;break;case 1:this.ApplyToRange=this._ApplyInlineStyle;break;default:return;};this.ApplyToRange(A,B,C);},ApplyToObject:function(A){if (!A) return;this.BuildElement(null,A);},RemoveFromSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.RemoveFromRange(B,true);},RemoveFromRange:function(A,B,C){var D;var E=this._GetAttribsForComparison();var F=this._GetOverridesForComparison();if (A.CheckIsCollapsed()){var D=A.CreateBookmark(true);var H=A.GetBookmarkNode(D,true);var I=new FCKElementPath(H.parentNode);var J=[];var K=!FCKDomTools.GetNextSibling(H);var L=K||!FCKDomTools.GetPreviousSibling(H);var M;var N=-1;for (var i=0;i=0;i--){var E=D[i];for (var F in B){if (FCKDomTools.HasAttribute(E,F)){switch (F){case 'style':this._RemoveStylesFromElement(E);break;case 'class':if (FCKDomTools.GetAttributeValue(E,F)!=this.GetFinalAttributeValue(F)) continue;default:FCKDomTools.RemoveAttribute(E,F);}}};this._RemoveOverrides(E,C[this.Element]);this._RemoveNoAttribElement(E);};for (var G in C){if (G!=this.Element){D=A.getElementsByTagName(G);for (var i=D.length-1;i>=0;i--){var E=D[i];this._RemoveOverrides(E,C[G]);this._RemoveNoAttribElement(E);}}}},_RemoveStylesFromElement:function(A){var B=A.style.cssText;var C=this.GetFinalStyleValue();if (B.length>0&&C.length==0) return;C='(^|;)\\s*('+C.replace(/\s*([^ ]+):.*?(;|$)/g,'$1|').replace(/\|$/,'')+'):[^;]+';var D=new RegExp(C,'gi');B=B.replace(D,'').Trim();if (B.length==0||B==';') FCKDomTools.RemoveAttribute(A,'style');else A.style.cssText=B.replace(D,'');},_RemoveOverrides:function(A,B){var C=B&&B.Attributes;if (C){for (var i=0;i0) C.style.cssText=this.GetFinalStyleValue();return C;},_CompareAttributeValues:function(A,B,C){if (A=='style'&&B&&C){B=B.replace(/;$/,'').toLowerCase();C=C.replace(/;$/,'').toLowerCase();};return (B==C||((B===null||B==='')&&(C===null||C==='')))},GetFinalAttributeValue:function(A){var B=this._StyleDesc.Attributes;var B=B?B[A]:null;if (!B&&A=='style') return this.GetFinalStyleValue();if (B&&this._Variables) B=B.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);return B;},GetFinalStyleValue:function(){var A=this._GetStyleText();if (A.length>0&&this._Variables){A=A.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);A=FCKTools.NormalizeCssText(A);};return A;},_GetVariableReplace:function(){return this._Variables[arguments[2]]||arguments[0];},SetVariable:function(A,B){var C=this._Variables;if (!C) C=this._Variables={};this._Variables[A]=B;},_FromPre:function(A,B,C){var D=B.innerHTML;D=D.replace(/(\r\n|\r)/g,'\n');D=D.replace(/^[ \t]*\n/,'');D=D.replace(/\n$/,'');D=D.replace(/^[ \t]+|[ \t]+$/g,function(match,offset,s){if (match.length==1) return ' ';else if (offset==0) return new Array(match.length).join(' ')+' ';else return ' '+new Array(match.length).join(' ');});var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag){value=value.replace(/\n/g,'
    ');value=value.replace(/[ \t]{2,}/g,function (match){return new Array(match.length).join(' ')+' ';});};F.push(value);});C.innerHTML=F.join('');return C;},_ToPre:function(A,B,C){var D=B.innerHTML.Trim();D=D.replace(/[ \t\r\n]*(]*>)[ \t\r\n]*/gi,'
    ');var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag) value=value.replace(/([ \t\n\r]+| )/g,' ');else if (isTag&&value=='
    ') value='\n';F.push(value);});if (FCKBrowserInfo.IsIE){var G=A.createElement('div');G.appendChild(C);C.outerHTML='
    \n'+F.join('')+'
    ';C=G.removeChild(G.firstChild);}else C.innerHTML=F.join('');return C;},_CheckAndMergePre:function(A,B){if (A!=FCKDomTools.GetPreviousSourceElement(B,true)) return;var C=A.innerHTML.replace(/\n$/,'')+'\n\n'+B.innerHTML.replace(/^\n/,'');if (FCKBrowserInfo.IsIE) B.outerHTML='
    '+C+'
    ';else B.innerHTML=C;FCKDomTools.RemoveNode(A);},_CheckAndSplitPre:function(A){var B;var C=A.firstChild;C=C&&C.nextSibling;while (C){var D=C.nextSibling;if (D&&D.nextSibling&&C.nodeName.IEquals('br')&&D.nodeName.IEquals('br')){FCKDomTools.RemoveNode(C);C=D.nextSibling;FCKDomTools.RemoveNode(D);B=FCKDomTools.InsertAfterNode(B||A,FCKDomTools.CloneElement(A));continue;};if (B){C=C.previousSibling;FCKDomTools.MoveNode(C.nextSibling,B);};C=C.nextSibling;}},_ApplyBlockStyle:function(A,B,C){var D;if (B) D=A.CreateBookmark();var E=new FCKDomRangeIterator(A);E.EnforceRealBlocks=true;var F;var G=A.Window.document;var H;while((F=E.GetNextParagraph())){var I=this.BuildElement(G);var J=I.nodeName.IEquals('pre');var K=F.nodeName.IEquals('pre');var L=J&&!K;var M=!J&&K;if (L) I=this._ToPre(G,F,I);else if (M) I=this._FromPre(G,F,I);else FCKDomTools.MoveChildren(F,I);F.parentNode.insertBefore(I,F);FCKDomTools.RemoveNode(F);if (J){if (H) this._CheckAndMergePre(H,I);H=I;}else if (M) this._CheckAndSplitPre(I);};if (B) A.SelectBookmark(D);if (C) A.MoveToBookmark(D);},_ApplyInlineStyle:function(A,B,C){var D=A.Window.document;if (A.CheckIsCollapsed()){var E=this.BuildElement(D);A.InsertNode(E);A.MoveToPosition(E,2);A.Select();return;};var F=this.Element;var G=FCK.DTD[F]||FCK.DTD.span;var H=this._GetAttribsForComparison();var I;A.Expand('inline_elements');var J=A.CreateBookmark(true);var K=A.GetBookmarkNode(J,true);var L=A.GetBookmarkNode(J,false);A.Release(true);var M=FCKDomTools.GetNextSourceNode(K,true);while (M){var N=false;var O=M.nodeType;var P=O==1?M.nodeName.toLowerCase():null;if (!P||G[P]){if ((FCK.DTD[M.parentNode.nodeName.toLowerCase()]||FCK.DTD.span)[F]||!FCK.DTD[F]){if (!A.CheckHasRange()) A.SetStart(M,3);if (O!=1||M.childNodes.length==0){var Q=M;var R=Q.parentNode;while (Q==R.lastChild&&G[R.nodeName.toLowerCase()]){Q=R;};A.SetEnd(Q,4);if (Q==Q.parentNode.lastChild&&!G[Q.parentNode.nodeName.toLowerCase()]) N=true;}else{A.SetEnd(M,3);}}else N=true;}else N=true;M=FCKDomTools.GetNextSourceNode(M);if (M==L){M=null;N=true;};if (N&&A.CheckHasRange()&&!A.CheckIsCollapsed()){I=this.BuildElement(D);A.ExtractContents().AppendTo(I);if (I.innerHTML.RTrim().length>0){A.InsertNode(I);this.RemoveFromElement(I);this._MergeSiblings(I,this._GetAttribsForComparison());if (!FCKBrowserInfo.IsIE) I.normalize();};A.Release(true);}};this._FixBookmarkStart(K);if (B) A.SelectBookmark(J);if (C) A.MoveToBookmark(J);},_FixBookmarkStart:function(A){var B;while ((B=A.nextSibling)){if (B.nodeType==1&&FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){if (!B.firstChild) FCKDomTools.RemoveNode(B);else FCKDomTools.MoveNode(A,B,true);continue;};if (B.nodeType==3&&B.length==0){FCKDomTools.RemoveNode(B);continue;};break;}},_MergeSiblings:function(A,B){if (!A||A.nodeType!=1||!FCKListsLib.InlineNonEmptyElements[A.nodeName.toLowerCase()]) return;this._MergeNextSibling(A,B);this._MergePreviousSibling(A,B);},_MergeNextSibling:function(A,B){var C=A.nextSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.nextSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.lastChild;if (D) FCKDomTools.MoveNode(A.nextSibling,A);FCKDomTools.MoveChildren(C,A);FCKDomTools.RemoveNode(C);if (E) this._MergeNextSibling(E);}}},_MergePreviousSibling:function(A,B){var C=A.previousSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.previousSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.firstChild;if (D) FCKDomTools.MoveNode(A.previousSibling,A,true);FCKDomTools.MoveChildren(C,A,true);FCKDomTools.RemoveNode(C);if (E) this._MergePreviousSibling(E);}}},_GetStyleText:function(){var A=this._StyleDesc.Styles;var B=(this._StyleDesc.Attributes?this._StyleDesc.Attributes['style']||'':'');if (B.length>0) B+=';';for (var C in A) B+=C+':'+A[C]+';';if (B.length>0&&!(/#\(/.test(B))){B=FCKTools.NormalizeCssText(B);};return (this._GetStyleText=function() { return B;})();},_GetAttribsForComparison:function(){var A=this._GetAttribsForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Attributes;if (B){for (var C in B){A[C.toLowerCase()]=B[C].toLowerCase();}};if (this._GetStyleText().length>0){A['style']=this._GetStyleText().toLowerCase();};FCKTools.AppendLengthProperty(A,'_length');return (this._GetAttribsForComparison_$=A);},_GetOverridesForComparison:function(){var A=this._GetOverridesForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Overrides;if (B){if (!FCKTools.IsArray(B)) B=[B];for (var i=0;i0) return true;};B=B.nextSibling;};return false;}}; +var FCKElementPath=function(A){var B=null;var C=null;var D=[];var e=A;while (e){if (e.nodeType==1){if (!this.LastElement) this.LastElement=e;var E=e.nodeName.toLowerCase();if (FCKBrowserInfo.IsIE&&e.scopeName!='HTML') E=e.scopeName.toLowerCase()+':'+E;if (!C){if (!B&&FCKListsLib.PathBlockElements[E]!=null) B=e;if (FCKListsLib.PathBlockLimitElements[E]!=null){if (!B&&E=='div'&&!FCKElementPath._CheckHasBlock(e)) B=e;else C=e;}};D.push(e);if (E=='body') break;};e=e.parentNode;};this.Block=B;this.BlockLimit=C;this.Elements=D;};FCKElementPath._CheckHasBlock=function(A){var B=A.childNodes;for (var i=0,count=B.length;i0){if (D.nodeType==3){var G=D.nodeValue.substr(0,E).Trim();if (G.length!=0) return A.IsStartOfBlock=false;}else F=D.childNodes[E-1];};if (!F) F=FCKDomTools.GetPreviousSourceNode(D,true,null,C);while (F){switch (F.nodeType){case 1:if (!FCKListsLib.InlineChildReqElements[F.nodeName.toLowerCase()]) return A.IsStartOfBlock=false;break;case 3:if (F.nodeValue.Trim().length>0) return A.IsStartOfBlock=false;};F=FCKDomTools.GetPreviousSourceNode(F,false,null,C);};return A.IsStartOfBlock=true;},CheckEndOfBlock:function(A){var B=this._Cache.IsEndOfBlock;if (B!=undefined) return B;var C=this.EndBlock||this.EndBlockLimit;var D=this._Range.endContainer;var E=this._Range.endOffset;var F;if (D.nodeType==3){var G=D.nodeValue;if (E0) return this._Cache.IsEndOfBlock=false;};F=FCKDomTools.GetNextSourceNode(F,false,null,C);};if (A) this.Select();return this._Cache.IsEndOfBlock=true;},CreateBookmark:function(A){var B={StartId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'S',EndId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'E'};var C=this.Window.document;var D;var E;var F;if (!this.CheckIsCollapsed()){E=C.createElement('span');E.style.display='none';E.id=B.EndId;E.setAttribute('_fck_bookmark',true);E.innerHTML=' ';F=this.Clone();F.Collapse(false);F.InsertNode(E);};D=C.createElement('span');D.style.display='none';D.id=B.StartId;D.setAttribute('_fck_bookmark',true);D.innerHTML=' ';F=this.Clone();F.Collapse(true);F.InsertNode(D);if (A){B.StartNode=D;B.EndNode=E;};if (E){this.SetStart(D,4);this.SetEnd(E,3);}else this.MoveToPosition(D,4);return B;},GetBookmarkNode:function(A,B){var C=this.Window.document;if (B) return A.StartNode||C.getElementById(A.StartId);else return A.EndNode||C.getElementById(A.EndId);},MoveToBookmark:function(A,B){var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);this.SetStart(C,3);if (!B) FCKDomTools.RemoveNode(C);if (D){this.SetEnd(D,3);if (!B) FCKDomTools.RemoveNode(D);}else this.Collapse(true);this._UpdateElementInfo();},CreateBookmark2:function(){if (!this._Range) return { "Start":0,"End":0 };var A={"Start":[this._Range.startOffset],"End":[this._Range.endOffset]};var B=this._Range.startContainer.previousSibling;var C=this._Range.endContainer.previousSibling;var D=this._Range.startContainer;var E=this._Range.endContainer;while (B&&B.nodeType==3&&D.nodeType==3){A.Start[0]+=B.length;D=B;B=B.previousSibling;}while (C&&C.nodeType==3&&E.nodeType==3){A.End[0]+=C.length;E=C;C=C.previousSibling;};if (D.nodeType==1&&D.childNodes[A.Start[0]]&&D.childNodes[A.Start[0]].nodeType==3){var F=D.childNodes[A.Start[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};D=F;A.Start[0]=G;};if (E.nodeType==1&&E.childNodes[A.End[0]]&&E.childNodes[A.End[0]].nodeType==3){var F=E.childNodes[A.End[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};E=F;A.End[0]=G;};A.Start=FCKDomTools.GetNodeAddress(D,true).concat(A.Start);A.End=FCKDomTools.GetNodeAddress(E,true).concat(A.End);return A;},MoveToBookmark2:function(A){var B=FCKDomTools.GetNodeFromAddress(this.Window.document,A.Start.slice(0,-1),true);var C=FCKDomTools.GetNodeFromAddress(this.Window.document,A.End.slice(0,-1),true);this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var D=A.Start[A.Start.length-1];var E=A.End[A.End.length-1];while (B.nodeType==3&&D>B.length){if (!B.nextSibling||B.nextSibling.nodeType!=3) break;D-=B.length;B=B.nextSibling;}while (C.nodeType==3&&E>C.length){if (!C.nextSibling||C.nextSibling.nodeType!=3) break;E-=C.length;C=C.nextSibling;};this._Range.setStart(B,D);this._Range.setEnd(C,E);this._UpdateElementInfo();},MoveToPosition:function(A,B){this.SetStart(A,B);this.Collapse(true);},SetStart:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setStart(A,0);break;case 2:D.setStart(A,A.childNodes.length);break;case 3:D.setStartBefore(A);break;case 4:D.setStartAfter(A);};if (!C) this._UpdateElementInfo();},SetEnd:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setEnd(A,0);break;case 2:D.setEnd(A,A.childNodes.length);break;case 3:D.setEndBefore(A);break;case 4:D.setEndAfter(A);};if (!C) this._UpdateElementInfo();},Expand:function(A){var B,oSibling;switch (A){case 'inline_elements':if (this._Range.startOffset==0){B=this._Range.startContainer;if (B.nodeType!=1) B=B.previousSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setStartBefore(B);if (B!=B.parentNode.firstChild) break;B=B.parentNode;}}};B=this._Range.endContainer;var C=this._Range.endOffset;if ((B.nodeType==3&&C>=B.nodeValue.length)||(B.nodeType==1&&C>=B.childNodes.length)||(B.nodeType!=1&&B.nodeType!=3)){if (B.nodeType!=1) B=B.nextSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setEndAfter(B);if (B!=B.parentNode.lastChild) break;B=B.parentNode;}}};break;case 'block_contents':case 'list_contents':var D=FCKListsLib.BlockBoundaries;if (A=='list_contents'||FCKConfig.EnterMode=='br') D=FCKListsLib.ListBoundaries;if (this.StartBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents') this.SetStart(this.StartBlock,1);else{B=this._Range.startContainer;if (B.nodeType==1){var E=B.childNodes[this._Range.startOffset];if (E) B=FCKDomTools.GetPreviousSourceNode(E,true);else B=B.lastChild||B;}while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setStartBefore(B);B=B.previousSibling||B.parentNode;}};if (this.EndBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents'&&this.EndBlock.nodeName.toLowerCase()!='li') this.SetEnd(this.EndBlock,2);else{B=this._Range.endContainer;if (B.nodeType==1) B=B.childNodes[this._Range.endOffset]||B.lastChild;while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setEndAfter(B);B=B.nextSibling||B.parentNode;};if (B&&B.nodeName.toLowerCase()=='br') this._Range.setEndAfter(B);};this._UpdateElementInfo();}},SplitBlock:function(A){var B=A||FCKConfig.EnterMode;if (!this._Range) this.MoveToSelection();if (this.StartBlockLimit==this.EndBlockLimit){var C=this.StartBlock;var D=this.EndBlock;var E=null;if (B!='br'){if (!C){C=this.FixBlock(true,B);D=this.EndBlock;};if (!D) D=this.FixBlock(false,B);};var F=(C!=null&&this.CheckStartOfBlock());var G=(D!=null&&this.CheckEndOfBlock());if (!this.CheckIsEmpty()) this.DeleteContents();if (C&&D&&C==D){if (G){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(D,4);D=null;}else if (F){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(C,3);C=null;}else{this.SetEnd(C,2);var H=this.ExtractContents();D=C.cloneNode(false);D.removeAttribute('id',false);H.AppendTo(D);FCKDomTools.InsertAfterNode(C,D);this.MoveToPosition(C,4);if (FCKBrowserInfo.IsGecko&&!C.nodeName.IEquals(['ul','ol'])) FCKTools.AppendBogusBr(C);}};return {PreviousBlock:C,NextBlock:D,WasStartOfBlock:F,WasEndOfBlock:G,ElementPath:E};};return null;},FixBlock:function(A,B){var C=this.CreateBookmark();this.Collapse(A);this.Expand('block_contents');var D=this.Window.document.createElement(B);this.ExtractContents().AppendTo(D);FCKDomTools.TrimNode(D);if (FCKDomTools.CheckIsEmptyElement(D,function(element) { return element.getAttribute('_fck_bookmark')!='true';})&&FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);this.InsertNode(D);this.MoveToBookmark(C);return D;},Release:function(A){if (!A) this.Window=null;this.StartNode=null;this.StartContainer=null;this.StartBlock=null;this.StartBlockLimit=null;this.EndNode=null;this.EndContainer=null;this.EndBlock=null;this.EndBlockLimit=null;this._Range=null;this._Cache=null;},CheckHasRange:function(){return!!this._Range;},GetTouchedStartNode:function(){var A=this._Range;var B=A.startContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.startOffset]||B;},GetTouchedEndNode:function(){var A=this._Range;var B=A.endContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.endOffset-1]||B;}}; +FCKDomRange.prototype.MoveToSelection=function(){this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var A=this.Window.document.selection;if (A.type!='Control'){var B=this._GetSelectionMarkerTag(true);var C=this._GetSelectionMarkerTag(false);if (!B&&!C){this._Range.setStart(this.Window.document.body,0);this._UpdateElementInfo();return;};this._Range.setStart(B.parentNode,FCKDomTools.GetIndexOf(B));B.parentNode.removeChild(B);this._Range.setEnd(C.parentNode,FCKDomTools.GetIndexOf(C));C.parentNode.removeChild(C);this._UpdateElementInfo();}else{var D=A.createRange().item(0);if (D){this._Range.setStartBefore(D);this._Range.setEndAfter(D);this._UpdateElementInfo();}}};FCKDomRange.prototype.Select=function(A){if (this._Range) this.SelectBookmark(this.CreateBookmark(true),A);};FCKDomRange.prototype.SelectBookmark=function(A,B){var C=this.CheckIsCollapsed();var D;var E;var F=this.GetBookmarkNode(A,true);if (!F) return;var G;if (!C) G=this.GetBookmarkNode(A,false);var H=this.Window.document.body.createTextRange();H.moveToElementText(F);H.moveStart('character',1);if (G){var I=this.Window.document.body.createTextRange();I.moveToElementText(G);H.setEndPoint('EndToEnd',I);H.moveEnd('character',-1);}else{D=B||!F.previousSibling||F.previousSibling.nodeName.toLowerCase()=='br';E=this.Window.document.createElement('span');E.innerHTML='';F.parentNode.insertBefore(E,F);if (D){F.parentNode.insertBefore(this.Window.document.createTextNode('\ufeff'),F);}};if (!this._Range) this._Range=this.CreateRange();this._Range.setStartBefore(F);F.parentNode.removeChild(F);if (C){if (D){H.moveStart('character',-1);H.select();this.Window.document.selection.clear();}else H.select();FCKDomTools.RemoveNode(E);}else{this._Range.setEndBefore(G);G.parentNode.removeChild(G);H.select();}};FCKDomRange.prototype._GetSelectionMarkerTag=function(A){var B=this.Window.document;var C=B.selection;var D;try{D=C.createRange();}catch (e){return null;};if (D.parentElement().document!=B) return null;D.collapse(A===true);var E='fck_dom_range_temp_'+(new Date()).valueOf()+'_'+Math.floor(Math.random()*1000);D.pasteHTML('');return B.getElementById(E);}; +var FCKDomRangeIterator=function(A){this.Range=A;this.ForceBrBreak=false;this.EnforceRealBlocks=false;};FCKDomRangeIterator.CreateFromSelection=function(A){var B=new FCKDomRange(A);B.MoveToSelection();return new FCKDomRangeIterator(B);};FCKDomRangeIterator.prototype={GetNextParagraph:function(){var A;var B;var C;var D;var E;var F=this.ForceBrBreak?FCKListsLib.ListBoundaries:FCKListsLib.BlockBoundaries;if (!this._LastNode){var B=this.Range.Clone();B.Expand(this.ForceBrBreak?'list_contents':'block_contents');this._NextNode=B.GetTouchedStartNode();this._LastNode=B.GetTouchedEndNode();B=null;};var H=this._NextNode;var I=this._LastNode;this._NextNode=null;while (H){var J=false;var K=(H.nodeType!=1);var L=false;if (!K){var M=H.nodeName.toLowerCase();if (F[M]&&(!FCKBrowserInfo.IsIE||H.scopeName=='HTML')){if (M=='br') K=true;else if (!B&&H.childNodes.length==0&&M!='hr'){A=H;C=H==I;break;};if (B){B.SetEnd(H,3,true);if (M!='br') this._NextNode=FCKDomTools.GetNextSourceNode(H,true,null,I)||H;};J=true;}else{if (H.firstChild){if (!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};H=H.firstChild;continue;};K=true;}}else if (H.nodeType==3){if (/^[\r\n\t ]+$/.test(H.nodeValue)) K=false;};if (K&&!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};C=((!J||K)&&H==I);if (B&&!J){while (!H.nextSibling&&!C){var N=H.parentNode;if (F[N.nodeName.toLowerCase()]){J=true;C=C||(N==I);break;};H=N;K=true;C=(H==I);L=true;}};if (K) B.SetEnd(H,4,true);if ((J||C)&&B){B._UpdateElementInfo();if (B.StartNode==B.EndNode&&B.StartNode.parentNode==B.StartBlockLimit&&B.StartNode.getAttribute&&B.StartNode.getAttribute('_fck_bookmark')) B=null;else break;};if (C) break;H=FCKDomTools.GetNextSourceNode(H,L,null,I);};if (!A){if (!B){this._NextNode=null;return null;};A=B.StartBlock;if (!A&&!this.EnforceRealBlocks&&B.StartBlockLimit.nodeName.IEquals('DIV','TH','TD')&&B.CheckStartOfBlock()&&B.CheckEndOfBlock()){A=B.StartBlockLimit;}else if (!A||(this.EnforceRealBlocks&&A.nodeName.toLowerCase()=='li')){A=this.Range.Window.document.createElement(FCKConfig.EnterMode=='p'?'p':'div');B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);B.InsertNode(A);D=true;E=true;}else if (A.nodeName.toLowerCase()!='li'){if (!B.CheckStartOfBlock()||!B.CheckEndOfBlock()){A=A.cloneNode(false);B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);var O=B.SplitBlock();D=!O.WasStartOfBlock;E=!O.WasEndOfBlock;B.InsertNode(A);}}else if (!C){this._NextNode=A==I?null:FCKDomTools.GetNextSourceNode(B.EndNode,true,null,I);return A;}};if (D){var P=A.previousSibling;if (P&&P.nodeType==1){if (P.nodeName.toLowerCase()=='br') P.parentNode.removeChild(P);else if (P.lastChild&&P.lastChild.nodeName.IEquals('br')) P.removeChild(P.lastChild);}};if (E){var Q=A.lastChild;if (Q&&Q.nodeType==1&&Q.nodeName.toLowerCase()=='br') A.removeChild(Q);};if (!this._NextNode) this._NextNode=(C||A==I)?null:FCKDomTools.GetNextSourceNode(A,true,null,I);return A;}}; +var FCKDocumentFragment=function(A){this._Document=A;this.RootNode=A.createElement('div');};FCKDocumentFragment.prototype={AppendTo:function(A){FCKDomTools.MoveChildren(this.RootNode,A);},AppendHtml:function(A){var B=this._Document.createElement('div');B.innerHTML=A;FCKDomTools.MoveChildren(B,this.RootNode);},InsertAfterNode:function(A){var B=this.RootNode;var C;while((C=B.lastChild)) FCKDomTools.InsertAfterNode(A,B.removeChild(C));}}; +var FCKW3CRange=function(A){this._Document=A;this.startContainer=null;this.startOffset=null;this.endContainer=null;this.endOffset=null;this.collapsed=true;};FCKW3CRange.CreateRange=function(A){return new FCKW3CRange(A);};FCKW3CRange.CreateFromRange=function(A,B){var C=FCKW3CRange.CreateRange(A);C.setStart(B.startContainer,B.startOffset);C.setEnd(B.endContainer,B.endOffset);return C;};FCKW3CRange.prototype={_UpdateCollapsed:function(){this.collapsed=(this.startContainer==this.endContainer&&this.startOffset==this.endOffset);},setStart:function(A,B){this.startContainer=A;this.startOffset=B;if (!this.endContainer){this.endContainer=A;this.endOffset=B;};this._UpdateCollapsed();},setEnd:function(A,B){this.endContainer=A;this.endOffset=B;if (!this.startContainer){this.startContainer=A;this.startOffset=B;};this._UpdateCollapsed();},setStartAfter:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setStartBefore:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A));},setEndAfter:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setEndBefore:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A));},collapse:function(A){if (A){this.endContainer=this.startContainer;this.endOffset=this.startOffset;}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset;};this.collapsed=true;},selectNodeContents:function(A){this.setStart(A,0);this.setEnd(A,A.nodeType==3?A.data.length:A.childNodes.length);},insertNode:function(A){var B=this.startContainer;var C=this.startOffset;if (B.nodeType==3){B.splitText(C);if (B==this.endContainer) this.setEnd(B.nextSibling,this.endOffset-this.startOffset);FCKDomTools.InsertAfterNode(B,A);return;}else{B.insertBefore(A,B.childNodes[C]||null);if (B==this.endContainer){this.endOffset++;this.collapsed=false;}}},deleteContents:function(){if (this.collapsed) return;this._ExecContentsAction(0);},extractContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(1,A);return A;},cloneContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(2,A);return A;},_ExecContentsAction:function(A,B){var C=this.startContainer;var D=this.endContainer;var E=this.startOffset;var F=this.endOffset;var G=false;var H=false;if (D.nodeType==3) D=D.splitText(F);else{if (D.childNodes.length>0){if (F>D.childNodes.length-1){D=FCKDomTools.InsertAfterNode(D.lastChild,this._Document.createTextNode(''));H=true;}else D=D.childNodes[F];}};if (C.nodeType==3){C.splitText(E);if (C==D) D=C.nextSibling;}else{if (E==0){C=C.insertBefore(this._Document.createTextNode(''),C.firstChild);G=true;}else if (E>C.childNodes.length-1){C=C.appendChild(this._Document.createTextNode(''));G=true;}else C=C.childNodes[E].previousSibling;};var I=FCKDomTools.GetParents(C);var J=FCKDomTools.GetParents(D);var i,topStart,topEnd;for (i=0;i0&&levelStartNode!=D) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==D));if (!I[k]||levelStartNode.parentNode!=I[k].parentNode){currentNode=levelStartNode.previousSibling;while(currentNode){if (currentNode==I[k]||currentNode==C) break;currentSibling=currentNode.previousSibling;if (A==2) K.insertBefore(currentNode.cloneNode(true),K.firstChild);else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.insertBefore(currentNode,K.firstChild);};currentNode=currentSibling;}};if (K) K=levelClone;};if (A==2){var L=this.startContainer;if (L.nodeType==3){L.data+=L.nextSibling.data;L.parentNode.removeChild(L.nextSibling);};var M=this.endContainer;if (M.nodeType==3&&M.nextSibling){M.data+=M.nextSibling.data;M.parentNode.removeChild(M.nextSibling);}}else{if (topStart&&topEnd&&(C.parentNode!=topStart.parentNode||D.parentNode!=topEnd.parentNode)){var N=FCKDomTools.GetIndexOf(topEnd);if (G&&topEnd.parentNode==C.parentNode) N--;this.setStart(topEnd.parentNode,N);};this.collapse(true);};if(G) C.parentNode.removeChild(C);if(H&&D.parentNode) D.parentNode.removeChild(D);},cloneRange:function(){return FCKW3CRange.CreateFromRange(this._Document,this);}}; +var FCKEnterKey=function(A,B,C,D){this.Window=A;this.EnterMode=B||'p';this.ShiftEnterMode=C||'br';var E=new FCKKeystrokeHandler(false);E._EnterKey=this;E.OnKeystroke=FCKEnterKey_OnKeystroke;E.SetKeystrokes([[13,'Enter'],[SHIFT+13,'ShiftEnter'],[8,'Backspace'],[CTRL+8,'CtrlBackspace'],[46,'Delete']]);this.TabText='';if (D>0||FCKBrowserInfo.IsSafari){while (D--) this.TabText+='\xa0';E.SetKeystrokes([9,'Tab']);};E.AttachToElement(A.document);};function FCKEnterKey_OnKeystroke(A,B){var C=this._EnterKey;try{switch (B){case 'Enter':return C.DoEnter();break;case 'ShiftEnter':return C.DoShiftEnter();break;case 'Backspace':return C.DoBackspace();break;case 'Delete':return C.DoDelete();break;case 'Tab':return C.DoTab();break;case 'CtrlBackspace':return C.DoCtrlBackspace();break;}}catch (e){};return false;};FCKEnterKey.prototype.DoEnter=function(A,B){FCKUndo.SaveUndoStep();this._HasShift=(B===true);var C=FCKSelection.GetParentElement();var D=new FCKElementPath(C);var E=A||this.EnterMode;if (E=='br'||D.Block&&D.Block.tagName.toLowerCase()=='pre') return this._ExecuteEnterBr();else return this._ExecuteEnterBlock(E);};FCKEnterKey.prototype.DoShiftEnter=function(){return this.DoEnter(this.ShiftEnterMode,true);};FCKEnterKey.prototype.DoBackspace=function(){var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};var C=B.CheckIsCollapsed();if (!C){if (FCKBrowserInfo.IsIE&&this.Window.document.selection.type.toLowerCase()=="control"){var D=this.Window.document.selection.createRange();for (var i=D.length-1;i>=0;i--){var E=D.item(i);E.parentNode.removeChild(E);};return true;};return false;};if (FCKBrowserInfo.IsIE){var F=FCKDomTools.GetPreviousSourceElement(B.StartNode,true);if (F&&F.nodeName.toLowerCase()=='br'){var G=B.Clone();G.SetStart(F,4);if (G.CheckIsEmpty()){F.parentNode.removeChild(F);return true;}}};var H=B.StartBlock;var I=B.EndBlock;if (B.StartBlockLimit==B.EndBlockLimit&&H&&I){if (!C){var J=B.CheckEndOfBlock();B.DeleteContents();if (H!=I){B.SetStart(I,1);B.SetEnd(I,1);};B.Select();A=(H==I);};if (B.CheckStartOfBlock()){var K=B.StartBlock;var L=FCKDomTools.GetPreviousSourceElement(K,true,['BODY',B.StartBlockLimit.nodeName],['UL','OL']);A=this._ExecuteBackspace(B,L,K);}else if (FCKBrowserInfo.IsGeckoLike){B.Select();}};B.Release();return A;};FCKEnterKey.prototype.DoCtrlBackspace=function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(this.Window);A.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(A,this.Window.document.body)){this._FixIESelectAllBug(A);return true;};return false;};FCKEnterKey.prototype._ExecuteBackspace=function(A,B,C){var D=false;if (!B&&C&&C.nodeName.IEquals('LI')&&C.parentNode.parentNode.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};if (B&&B.nodeName.IEquals('LI')){var E=FCKDomTools.GetLastChild(B,['UL','OL']);while (E){B=FCKDomTools.GetLastChild(E,'LI');E=FCKDomTools.GetLastChild(B,['UL','OL']);}};if (B&&C){if (C.nodeName.IEquals('LI')&&!B.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};var F=C.parentNode;var G=B.nodeName.toLowerCase();if (FCKListsLib.EmptyElements[G]!=null||G=='table'){FCKDomTools.RemoveNode(B);D=true;}else{FCKDomTools.RemoveNode(C);while (F.innerHTML.Trim().length==0){var H=F.parentNode;H.removeChild(F);F=H;};FCKDomTools.LTrimNode(C);FCKDomTools.RTrimNode(B);A.SetStart(B,2,true);A.Collapse(true);var I=A.CreateBookmark(true);if (!C.tagName.IEquals(['TABLE'])) FCKDomTools.MoveChildren(C,B);A.SelectBookmark(I);D=true;}};return D;};FCKEnterKey.prototype.DoDelete=function(){FCKUndo.SaveUndoStep();var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};if (B.CheckIsCollapsed()&&B.CheckEndOfBlock(FCKBrowserInfo.IsGeckoLike)){var C=B.StartBlock;var D=FCKTools.GetElementAscensor(C,'td');var E=FCKDomTools.GetNextSourceElement(C,true,[B.StartBlockLimit.nodeName],['UL','OL','TR'],true);if (D){var F=FCKTools.GetElementAscensor(E,'td');if (F!=D) return true;};A=this._ExecuteBackspace(B,C,E);};B.Release();return A;};FCKEnterKey.prototype.DoTab=function(){var A=new FCKDomRange(this.Window);A.MoveToSelection();var B=A._Range.startContainer;while (B){if (B.nodeType==1){var C=B.tagName.toLowerCase();if (C=="tr"||C=="td"||C=="th"||C=="tbody"||C=="table") return false;else break;};B=B.parentNode;};if (this.TabText){A.DeleteContents();A.InsertNode(this.Window.document.createTextNode(this.TabText));A.Collapse(false);A.Select();};return true;};FCKEnterKey.prototype._ExecuteEnterBlock=function(A,B){var C=B||new FCKDomRange(this.Window);var D=C.SplitBlock(A);if (D){var E=D.PreviousBlock;var F=D.NextBlock;var G=D.WasStartOfBlock;var H=D.WasEndOfBlock;if (F){if (F.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(F,F.parentNode);FCKDomTools.MoveNode(F,F.nextSibling,true);}}else if (E&&E.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(E,E.parentNode);C.MoveToElementEditStart(E.nextSibling);FCKDomTools.MoveNode(E,E.previousSibling);};if (!G&&!H){if (F.nodeName.IEquals('li')&&F.firstChild&&F.firstChild.nodeName.IEquals(['ul','ol'])) F.insertBefore(FCKTools.GetElementDocument(F).createTextNode('\xa0'),F.firstChild);if (F) C.MoveToElementEditStart(F);}else{if (G&&H&&E.tagName.toUpperCase()=='LI'){C.MoveToElementStart(E);this._OutdentWithSelection(E,C);C.Release();return true;};var I;if (E){var J=E.tagName.toUpperCase();if (!this._HasShift&&!(/^H[1-6]$/).test(J)){I=FCKDomTools.CloneElement(E);}}else if (F) I=FCKDomTools.CloneElement(F);if (!I) I=this.Window.document.createElement(A);var K=D.ElementPath;if (K){for (var i=0,len=K.Elements.length;i=0&&(C=B[i--])){if (C.name.length>0){if (C.innerHTML!==''){if (FCKBrowserInfo.IsIE) C.className+=' FCK__AnchorC';}else{var D=FCKDocumentProcessor_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}}}};var FCKPageBreaksProcessor=FCKDocumentProcessor.AppendNew();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('DIV');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.childNodes.length==1&&C.childNodes[0].style&&C.childNodes[0].style.display=='none'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};var FCKEmbedAndObjectProcessor=(function(){var A=[];var B=function(el){var C=el.cloneNode(true);var D;var E=D=FCKDocumentProcessor_CreateFakeImage('FCK__UnknownObject',C);FCKEmbedAndObjectProcessor.RefreshView(E,el);for (var i=0;i=0;i--) B(G[i]);};var H=function(doc){F('object',doc);F('embed',doc);};return FCKTools.Merge(FCKDocumentProcessor.AppendNew(),{ProcessDocument:function(doc){if (FCKBrowserInfo.IsGecko) FCKTools.RunFunction(H,this,[doc]);else H(doc);},RefreshView:function(placeHolder,original){if (original.getAttribute('width')>0) placeHolder.style.width=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('width'));if (original.getAttribute('height')>0) placeHolder.style.height=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('height'));},AddCustomHandler:function(func){A.push(func);}});})();FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;};if (FCKBrowserInfo.IsIE){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('HR');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=A.createElement('hr');D.mergeAttributes(C,true);FCKDomTools.InsertAfterNode(C,D);C.parentNode.removeChild(C);}}};FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('INPUT');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.type=='hidden'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__InputHidden',C.cloneNode(true));D.setAttribute('_fckinputhidden','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};FCKEmbedAndObjectProcessor.AddCustomHandler(function(A,B){if (!(A.nodeName.IEquals('embed')&&(A.type=='application/x-shockwave-flash'||/\.swf($|#|\?)/i.test(A.src)))) return;B.className='FCK__Flash';B.setAttribute('_fckflash','true',0);});if (FCKBrowserInfo.IsSafari){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByClassName?A.getElementsByClassName('Apple-style-span'):Array.prototype.filter.call(A.getElementsByTagName('span'),function(item){ return item.className=='Apple-style-span';});for (var i=B.length-1;i>=0;i--) FCKDomTools.RemoveNode(B[i],true);}}; +var FCKSelection=FCK.Selection={GetParentBlock:function(){var A=this.GetParentElement();while (A){if (FCKListsLib.BlockBoundaries[A.nodeName.toLowerCase()]) break;A=A.parentNode;};return A;},ApplyStyle:function(A){FCKStyles.ApplyStyle(new FCKStyle(A));}}; +FCKSelection.GetType=function(){try{var A=FCKSelection.GetSelection().type;if (A=='Control'||A=='Text') return A;if (this.GetSelection().createRange().parentElement) return 'Text';}catch(e){};return 'None';};FCKSelection.GetSelectedElement=function(){if (this.GetType()=='Control'){var A=this.GetSelection().createRange();if (A&&A.item) return this.GetSelection().createRange().item(0);};return null;};FCKSelection.GetParentElement=function(){switch (this.GetType()){case 'Control':var A=FCKSelection.GetSelectedElement();return A?A.parentElement:null;case 'None':return null;default:return this.GetSelection().createRange().parentElement();}};FCKSelection.GetBoundaryParentElement=function(A){switch (this.GetType()){case 'Control':var B=FCKSelection.GetSelectedElement();return B?B.parentElement:null;case 'None':return null;default:var C=FCK.EditorDocument;var D=C.selection.createRange();D.collapse(A!==false);var B=D.parentElement();return FCKTools.GetElementDocument(B)==C?B:null;}};FCKSelection.SelectNode=function(A){FCK.Focus();this.GetSelection().empty();var B;try{B=FCK.EditorDocument.body.createControlRange();B.addElement(A);B.select();}catch(e){B=FCK.EditorDocument.body.createTextRange();B.moveToElementText(A);B.select();}};FCKSelection.Collapse=function(A){FCK.Focus();if (this.GetType()=='Text'){var B=this.GetSelection().createRange();B.collapse(A==null||A===true);B.select();}};FCKSelection.HasAncestorNode=function(A){var B;if (this.GetSelection().type=="Control"){B=this.GetSelectedElement();}else{var C=this.GetSelection().createRange();B=C.parentElement();}while (B){if (B.nodeName.IEquals(A)) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B,oRange;if (!FCK.EditorDocument) return null;if (this.GetSelection().type=="Control"){oRange=this.GetSelection().createRange();for (i=0;i=0;i--){if (C[i]) FCKTableHandler.DeleteRows(C[i]);};return;};var E=FCKTools.GetElementAscensor(A,'TABLE');if (E.rows.length==1){FCKTableHandler.DeleteTable(E);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteTable=function(A){if (!A){A=FCKSelection.GetSelectedElement();if (!A||A.tagName!='TABLE') A=FCKSelection.MoveToAncestorNode('TABLE');};if (!A) return;FCKSelection.SelectNode(A);FCKSelection.Collapse();if (A.parentNode.childNodes.length==1) A.parentNode.parentNode.removeChild(A.parentNode);else A.parentNode.removeChild(A);};FCKTableHandler.InsertColumn=function(A){var B=null;var C=this.GetSelectedCells();if (C&&C.length) B=C[A?0:(C.length-1)];if (!B) return;var D=FCKTools.GetElementAscensor(B,'TABLE');var E=B.cellIndex;for (var i=0;i=0;i--){if (B[i]) FCKTableHandler.DeleteColumns(B[i]);};return;};if (!A) return;var C=FCKTools.GetElementAscensor(A,'TABLE');var D=A.cellIndex;for (var i=C.rows.length-1;i>=0;i--){var E=C.rows[i];if (D==0&&E.cells.length==1){FCKTableHandler.DeleteRows(E);continue;};if (E.cells[D]) E.removeChild(E.cells[D]);}};FCKTableHandler.InsertCell=function(A,B){var C=null;var D=this.GetSelectedCells();if (D&&D.length) C=D[B?0:(D.length-1)];if (!C) return null;var E=FCK.EditorDocument.createElement('TD');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(E);if (!B&&C.cellIndex==C.parentNode.cells.length-1) C.parentNode.appendChild(E);else C.parentNode.insertBefore(E,B?C:C.nextSibling);return E;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(A.parentNode);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);}};FCKTableHandler._MarkCells=function(A,B){for (var i=0;i=E.height){for (D=F;D0){var L=K.removeChild(K.firstChild);if (L.nodeType!=1||(L.getAttribute('type',2)!='_moz'&&L.getAttribute('_moz_dirty')!=null)){I.appendChild(L);J++;}}};if (J>0) I.appendChild(FCK.EditorDocument.createElement('br'));};this._ReplaceCellsByMarker(C,'_SelectedCells',B);this._UnmarkCells(A,'_SelectedCells');this._InstallTableMap(C,B.parentNode.parentNode.parentNode);B.appendChild(I);if (FCKBrowserInfo.IsGeckoLike&&(!B.firstChild)) FCKTools.AppendBogusBr(B);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeRight=function(){var A=this.GetMergeRightTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCK.EditorDocument.createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));D.parentNode.removeChild(D);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeDown=function(){var A=this.GetMergeDownTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCKTools.GetElementDocument(B).createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));if (E.firstChild) E.insertBefore(FCK.EditorDocument.createElement('br'),E.firstChild);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.HorizontalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B);var D=B.parentNode.rowIndex;var E=FCKTableHandler._GetCellIndexSpan(C,D,B);var F=isNaN(B.colSpan)?1:B.colSpan;if (F>1){var G=Math.ceil(F/2);var H=FCK.EditorDocument.createElement(B.nodeName);if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(H);var I=E+G;var J=E+F;var K=isNaN(B.rowSpan)?1:B.rowSpan;for (var r=D;r1){B.rowSpan=Math.ceil(G/2);var H=D+Math.ceil(G/2);var I=C[H];var J=null;for (var i=E+1;i1) K.colSpan=F;if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(K);B.parentNode.parentNode.parentNode.rows[H].insertBefore(K,J);}else{var L=B.parentNode.sectionRowIndex+1;var M=FCK.EditorDocument.createElement('tr');var N=B.parentNode.parentNode;if (N.rows.length>L) N.insertBefore(M,N.rows[L]);else N.appendChild(M);for (var i=0;i1) K.colSpan=F;if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(K);M.appendChild(K);}};FCKTableHandler._GetCellIndexSpan=function(A,B,C){if (A.lengthE) E=j;if (D._colScanned===true) continue;if (A[i][j-1]==D) D.colSpan++;if (A[i][j+1]!=D) D._colScanned=true;}};for (var i=0;i<=E;i++){for (var j=0;j=0&&C.compareEndPoints('StartToEnd',E)<=0)||(C.compareEndPoints('EndToStart',E)>=0&&C.compareEndPoints('EndToEnd',E)<=0)){B[B.length]=D.cells[i];}}}};return B;}; +var FCKXml=function(){this.Error=false;};FCKXml.GetAttribute=function(A,B,C){var D=A.attributes.getNamedItem(B);return D?D.value:C;};FCKXml.TransformToObject=function(A){if (!A) return null;var B={};var C=A.attributes;for (var i=0;i ';var A=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',e);var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.SplitBlock();B.InsertNode(A);FCK.Events.FireEvent('OnSelectionChange');};FCKPageBreakCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKUnlinkCommand=function(){this.Name='Unlink';};FCKUnlinkCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (FCKBrowserInfo.IsGeckoLike){var A=FCK.Selection.MoveToAncestorNode('A');if (A) FCKTools.RemoveOuterTags(A);return;};FCK.ExecuteNamedCommand(this.Name);};FCKUnlinkCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;var A=FCK.GetNamedCommandState(this.Name);if (A==0&&FCK.EditMode==0){var B=FCKSelection.MoveToAncestorNode('A');var C=(B&&B.name.length>0&&B.href.length==0);if (C) A=-1;};return A;};var FCKVisitLinkCommand=function(){this.Name='VisitLink';};FCKVisitLinkCommand.prototype={GetState:function(){if (FCK.EditMode!=0) return -1;var A=FCK.GetNamedCommandState('Unlink');if (A==0){var B=FCKSelection.MoveToAncestorNode('A');if (!B.href) A=-1;};return A;},Execute:function(){var A=FCKSelection.MoveToAncestorNode('A');var B=A.getAttribute('_fcksavedurl')||A.getAttribute('href',2);if (!/:\/\//.test(B)){var C=FCKConfig.BaseHref;var D=FCK.GetInstanceObject('parent');if (!C){C=D.document.location.href;C=C.substring(0,C.lastIndexOf('/')+1);};if (/^\//.test(B)){try{C=C.match(/^.*:\/\/+[^\/]+/)[0];}catch (e){C=D.document.location.protocol+'://'+D.parent.document.location.host;}};B=C+B;};if (!window.open(B,'_blank')) alert(FCKLang.VisitLinkBlocked);}};var FCKSelectAllCommand=function(){this.Name='SelectAll';};FCKSelectAllCommand.prototype.Execute=function(){if (FCK.EditMode==0){FCK.ExecuteNamedCommand('SelectAll');}else{var A=FCK.EditingArea.Textarea;if (FCKBrowserInfo.IsIE){A.createTextRange().execCommand('SelectAll');}else{A.selectionStart=0;A.selectionEnd=A.value.length;};A.focus();}};FCKSelectAllCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKPasteCommand=function(){this.Name='Paste';};FCKPasteCommand.prototype={Execute:function(){if (FCKBrowserInfo.IsIE) FCK.Paste();else FCK.ExecuteNamedCommand('Paste');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');}};var FCKRuleCommand=function(){this.Name='Rule';};FCKRuleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();FCK.InsertElement('hr');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('InsertHorizontalRule');}};var FCKCutCopyCommand=function(A){this.Name=A?'Cut':'Copy';};FCKCutCopyCommand.prototype={Execute:function(){var A=false;if (FCKBrowserInfo.IsIE){var B=function(){A=true;};var C='on'+this.Name.toLowerCase();FCK.EditorDocument.body.attachEvent(C,B);FCK.ExecuteNamedCommand(this.Name);FCK.EditorDocument.body.detachEvent(C,B);}else{try{FCK.ExecuteNamedCommand(this.Name);A=true;}catch(e){}};if (!A) alert(FCKLang['PasteError'+this.Name]);},GetState:function(){return FCK.EditMode!=0?-1:FCK.GetNamedCommandState('Cut');}};var FCKAnchorDeleteCommand=function(){this.Name='AnchorDelete';};FCKAnchorDeleteCommand.prototype={Execute:function(){if (FCK.Selection.GetType()=='Control'){FCK.Selection.Delete();}else{var A=FCK.Selection.GetSelectedElement();if (A){if (A.tagName=='IMG'&&A.getAttribute('_fckanchor')) oAnchor=FCK.GetRealElement(A);else A=null;};if (!A){oAnchor=FCK.Selection.MoveToAncestorNode('A');if (oAnchor) FCK.Selection.SelectNode(oAnchor);};if (oAnchor.href.length!=0){oAnchor.removeAttribute('name');if (FCKBrowserInfo.IsIE) oAnchor.className=oAnchor.className.replace(FCKRegexLib.FCK_Class,'');return;};if (A){A.parentNode.removeChild(A);return;};if (oAnchor.innerHTML.length==0){oAnchor.parentNode.removeChild(oAnchor);return;};FCKTools.RemoveOuterTags(oAnchor);};if (FCKBrowserInfo.IsGecko) FCK.Selection.Collapse(true);},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Unlink');}};var FCKDeleteDivCommand=function(){};FCKDeleteDivCommand.prototype={GetState:function(){if (FCK.EditMode!=0) return -1;var A=FCKSelection.GetParentElement();var B=new FCKElementPath(A);return B.BlockLimit&&B.BlockLimit.nodeName.IEquals('div')?0:-1;},Execute:function(){FCKUndo.SaveUndoStep();var A=FCKDomTools.GetSelectedDivContainers();var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.CreateBookmark();for (var i=0;i\n \n
    \n '+FCKLang.ColorAutomatic+'\n \n ';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_AutoOnClick,this);if (!FCKBrowserInfo.IsIE) C.style.width='96%';var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H
    ';if (H>=G.length) C.style.visibility='hidden';else FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_OnClick,[this,L]);}};if (FCKConfig.EnableMoreFontColors){E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='
    '+FCKLang.ColorMoreColors+'
    ';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_MoreOnClick,this);if (!FCKBrowserInfo.IsIE) C.style.width='96%';}}; +var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');}; +var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCK.EditMode!=0||FCKConfig.ForcePasteAsPlainText) return -1;else return FCK.GetNamedCommandState('Paste');}; +var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (!FCKBrowserInfo.IsGecko){switch (this.Name){case 'TableMergeRight':return FCKTableHandler.MergeRight();case 'TableMergeDown':return FCKTableHandler.MergeDown();}};switch (this.Name){case 'TableInsertRowAfter':return FCKTableHandler.InsertRow(false);case 'TableInsertRowBefore':return FCKTableHandler.InsertRow(true);case 'TableDeleteRows':return FCKTableHandler.DeleteRows();case 'TableInsertColumnAfter':return FCKTableHandler.InsertColumn(false);case 'TableInsertColumnBefore':return FCKTableHandler.InsertColumn(true);case 'TableDeleteColumns':return FCKTableHandler.DeleteColumns();case 'TableInsertCellAfter':return FCKTableHandler.InsertCell(null,false);case 'TableInsertCellBefore':return FCKTableHandler.InsertCell(null,true);case 'TableDeleteCells':return FCKTableHandler.DeleteCells();case 'TableMergeCells':return FCKTableHandler.MergeCells();case 'TableHorizontalSplitCell':return FCKTableHandler.HorizontalSplitCell();case 'TableVerticalSplitCell':return FCKTableHandler.VerticalSplitCell();case 'TableDelete':return FCKTableHandler.DeleteTable();default:return alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));}};FCKTableCommand.prototype.GetState=function(){if (FCK.EditorDocument!=null&&FCKSelection.HasAncestorNode('TABLE')){switch (this.Name){case 'TableHorizontalSplitCell':case 'TableVerticalSplitCell':if (FCKTableHandler.GetSelectedCells().length==1) return 0;else return -1;case 'TableMergeCells':if (FCKTableHandler.CheckIsSelectionRectangular()&&FCKTableHandler.GetSelectedCells().length>1) return 0;else return -1;case 'TableMergeRight':return FCKTableHandler.GetMergeRightTarget()?0:-1;case 'TableMergeDown':return FCKTableHandler.GetMergeDownTarget()?0:-1;default:return 0;}}else return -1;}; +var FCKFitWindow=function(){this.Name='FitWindow';};FCKFitWindow.prototype.Execute=function(){var A=window.frameElement;var B=A.style;var C=parent;var D=C.document.documentElement;var E=C.document.body;var F=E.style;var G;var H,oEditorScrollPos;if (FCK.EditMode==0){H=new FCKDomRange(FCK.EditorWindow);H.MoveToSelection();oEditorScrollPos=FCKTools.GetScrollPosition(FCK.EditorWindow);}else{var I=FCK.EditingArea.Textarea;H=!FCKBrowserInfo.IsIE&&[I.selectionStart,I.selectionEnd];oEditorScrollPos=[I.scrollLeft,I.scrollTop];};if (!this.IsMaximized){if(FCKBrowserInfo.IsIE) C.attachEvent('onresize',FCKFitWindow_Resize);else C.addEventListener('resize',FCKFitWindow_Resize,true);this._ScrollPos=FCKTools.GetScrollPosition(C);G=A;while((G=G.parentNode)){if (G.nodeType==1){G._fckSavedStyles=FCKTools.SaveStyles(G);G.style.zIndex=FCKConfig.FloatingPanelsZIndex-1;}};if (FCKBrowserInfo.IsIE){this.documentElementOverflow=D.style.overflow;D.style.overflow='hidden';F.overflow='hidden';}else{F.overflow='hidden';F.width='0px';F.height='0px';};this._EditorFrameStyles=FCKTools.SaveStyles(A);var J=FCKTools.GetViewPaneSize(C);B.position="absolute";A.offsetLeft;B.zIndex=FCKConfig.FloatingPanelsZIndex-1;B.left="0px";B.top="0px";B.width=J.Width+"px";B.height=J.Height+"px";if (!FCKBrowserInfo.IsIE){B.borderRight=B.borderBottom="9999px solid white";B.backgroundColor="white";};C.scrollTo(0,0);var K=FCKTools.GetWindowPosition(C,A);if (K.x!=0) B.left=(-1*K.x)+"px";if (K.y!=0) B.top=(-1*K.y)+"px";this.IsMaximized=true;}else{if(FCKBrowserInfo.IsIE) C.detachEvent("onresize",FCKFitWindow_Resize);else C.removeEventListener("resize",FCKFitWindow_Resize,true);G=A;while((G=G.parentNode)){if (G._fckSavedStyles){FCKTools.RestoreStyles(G,G._fckSavedStyles);G._fckSavedStyles=null;}};if (FCKBrowserInfo.IsIE) D.style.overflow=this.documentElementOverflow;FCKTools.RestoreStyles(A,this._EditorFrameStyles);C.scrollTo(this._ScrollPos.X,this._ScrollPos.Y);this.IsMaximized=false;};FCKToolbarItems.GetItem('FitWindow').RefreshState();if (FCK.EditMode==0) FCK.EditingArea.MakeEditable();FCK.Focus();if (FCK.EditMode==0){H.Select();FCK.EditorWindow.scrollTo(oEditorScrollPos.X,oEditorScrollPos.Y);}else{if (!FCKBrowserInfo.IsIE){I.selectionStart=H[0];I.selectionEnd=H[1];};I.scrollLeft=oEditorScrollPos[0];I.scrollTop=oEditorScrollPos[1];}};FCKFitWindow.prototype.GetState=function(){if (FCKConfig.ToolbarLocation!='In') return -1;else return (this.IsMaximized?1:0);};function FCKFitWindow_Resize(){var A=FCKTools.GetViewPaneSize(parent);var B=window.frameElement.style;B.width=A.Width+'px';B.height=A.Height+'px';}; +var FCKListCommand=function(A,B){this.Name=A;this.TagName=B;};FCKListCommand.prototype={GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=FCKSelection.GetBoundaryParentElement(true);var B=A;while (B){if (B.nodeName.IEquals(['ul','ol'])) break;B=B.parentNode;};if (B&&B.nodeName.IEquals(this.TagName)) return 1;else return 0;},Execute:function(){FCKUndo.SaveUndoStep();var A=FCK.EditorDocument;var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=this.GetState();if (C==0){FCKDomTools.TrimNode(A.body);if (!A.body.firstChild){var D=A.createElement('p');A.body.appendChild(D);B.MoveToNodeContents(D);}};var E=B.CreateBookmark();var F=[];var G={};var H=new FCKDomRangeIterator(B);var I;H.ForceBrBreak=(C==0);var J=true;var K=null;while (J){while ((I=H.GetNextParagraph())){var L=new FCKElementPath(I);var M=null;var N=false;var O=L.BlockLimit;for (var i=L.Elements.length-1;i>=0;i--){var P=L.Elements[i];if (P.nodeName.IEquals(['ol','ul'])){if (O._FCK_ListGroupObject) O._FCK_ListGroupObject=null;var Q=P._FCK_ListGroupObject;if (Q) Q.contents.push(I);else{Q={ 'root':P,'contents':[I] };F.push(Q);FCKDomTools.SetElementMarker(G,P,'_FCK_ListGroupObject',Q);};N=true;break;}};if (N) continue;var R=O;if (R._FCK_ListGroupObject) R._FCK_ListGroupObject.contents.push(I);else{var Q={ 'root':R,'contents':[I] };FCKDomTools.SetElementMarker(G,R,'_FCK_ListGroupObject',Q);F.push(Q);}};if (FCKBrowserInfo.IsIE) J=false;else{if (K==null){K=[];var T=FCKSelection.GetSelection();if (T&&F.length==0) K.push(T.getRangeAt(0));for (var i=1;T&&i0){var Q=F.shift();if (C==0){if (Q.root.nodeName.IEquals(['ul','ol'])) this._ChangeListType(Q,G,W);else this._CreateList(Q,W);}else if (C==1&&Q.root.nodeName.IEquals(['ul','ol'])) this._RemoveList(Q,G);};for (var i=0;iC[i-1].indent+1){var H=C[i-1].indent+1-C[i].indent;var I=C[i].indent;while (C[i]&&C[i].indent>=I){C[i].indent+=H;i++;};i--;}};var J=FCKDomTools.ArrayToList(C,B);if (A.root.nextSibling==null||A.root.nextSibling.nodeName.IEquals('br')){if (J.listNode.lastChild.nodeName.IEquals('br')) J.listNode.removeChild(J.listNode.lastChild);};A.root.parentNode.replaceChild(J.listNode,A.root);}}; +var FCKJustifyCommand=function(A){this.AlignValue=A;var B=FCKConfig.ContentLangDirection.toLowerCase();this.IsDefaultAlign=(A=='left'&&B=='ltr')||(A=='right'&&B=='rtl');var C=this._CssClassName=(function(){var D=FCKConfig.JustifyClasses;if (D){switch (A){case 'left':return D[0]||null;case 'center':return D[1]||null;case 'right':return D[2]||null;case 'justify':return D[3]||null;}};return null;})();if (C&&C.length>0) this._CssClassRegex=new RegExp('(?:^|\\s+)'+C+'(?=$|\\s)');};FCKJustifyCommand._GetClassNameRegex=function(){var A=FCKJustifyCommand._ClassRegex;if (A!=undefined) return A;var B=[];var C=FCKConfig.JustifyClasses;if (C){for (var i=0;i<4;i++){var D=C[i];if (D&&D.length>0) B.push(D);}};if (B.length>0) A=new RegExp('(?:^|\\s+)(?:'+B.join('|')+')(?=$|\\s)');else A=null;return FCKJustifyCommand._ClassRegex=A;};FCKJustifyCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=this.GetState();if (B==-1) return;var C=A.CreateBookmark();var D=this._CssClassName;var E=new FCKDomRangeIterator(A);var F;while ((F=E.GetNextParagraph())){F.removeAttribute('align');if (D){var G=F.className.replace(FCKJustifyCommand._GetClassNameRegex(),'');if (B==0){if (G.length>0) G+=' ';F.className=G+D;}else if (G.length==0) FCKDomTools.RemoveAttribute(F,'class');}else{var H=F.style;if (B==0) H.textAlign=this.AlignValue;else{H.textAlign='';if (H.cssText.length==0) F.removeAttribute('style');}}};A.MoveToBookmark(C);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;var C;if (FCKBrowserInfo.IsIE) C=B.currentStyle.textAlign;else C=FCK.EditorWindow.getComputedStyle(B,'').getPropertyValue('text-align');C=C.replace(/(-moz-|-webkit-|start|auto)/i,'');if ((!C&&this.IsDefaultAlign)||C==this.AlignValue) return 1;return 0;}}; +var FCKIndentCommand=function(A,B){this.Name=A;this.Offset=B;this.IndentCSSProperty=FCKConfig.ContentLangDirection.IEquals('ltr')?'marginLeft':'marginRight';};FCKIndentCommand._InitIndentModeParameters=function(){if (FCKConfig.IndentClasses&&FCKConfig.IndentClasses.length>0){this._UseIndentClasses=true;this._IndentClassMap={};for (var i=0;i0?H+' ':'')+FCKConfig.IndentClasses[G-1];}else{var I=parseInt(E.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;I+=this.Offset;I=Math.max(I,0);I=Math.ceil(I/this.Offset)*this.Offset;E.style[this.IndentCSSProperty]=I?I+FCKConfig.IndentUnit:'';if (E.getAttribute('style')=='') E.removeAttribute('style');}}},_IndentList:function(A,B){var C=A.StartContainer;var D=A.EndContainer;while (C&&C.parentNode!=B) C=C.parentNode;while (D&&D.parentNode!=B) D=D.parentNode;if (!C||!D) return;var E=C;var F=[];var G=false;while (G==false){if (E==D) G=true;F.push(E);E=E.nextSibling;};if (F.length<1) return;var H=FCKDomTools.GetParents(B);for (var i=0;iN;i++) M[i].indent+=I;var O=FCKDomTools.ArrayToList(M);if (O) B.parentNode.replaceChild(O.listNode,B);FCKDomTools.ClearAllMarkers(L);}}; +var FCKBlockQuoteCommand=function(){};FCKBlockQuoteCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=this.GetState();var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.CreateBookmark();if (FCKBrowserInfo.IsIE){var D=B.GetBookmarkNode(C,true);var E=B.GetBookmarkNode(C,false);var F;if (D&&D.parentNode.nodeName.IEquals('blockquote')&&!D.previousSibling){F=D;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]) FCKDomTools.MoveNode(D,F,true);}};if (E&&E.parentNode.nodeName.IEquals('blockquote')&&!E.previousSibling){F=E;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]){if (F.firstChild==D) FCKDomTools.InsertAfterNode(D,E);else FCKDomTools.MoveNode(E,F,true);}}}};var G=new FCKDomRangeIterator(B);var H;if (A==0){var I=[];while ((H=G.GetNextParagraph())) I.push(H);if (I.length<1){para=B.Window.document.createElement(FCKConfig.EnterMode.IEquals('p')?'p':'div');B.InsertNode(para);para.appendChild(B.Window.document.createTextNode('\ufeff'));B.MoveToBookmark(C);B.MoveToNodeContents(para);B.Collapse(true);C=B.CreateBookmark();I.push(para);};var J=I[0].parentNode;var K=[];for (var i=0;i0){H=I.shift();while (H.parentNode!=J) H=H.parentNode;if (H!=L) K.push(H);L=H;}while (K.length>0){H=K.shift();if (H.nodeName.IEquals('blockquote')){var M=FCKTools.GetElementDocument(H).createDocumentFragment();while (H.firstChild){M.appendChild(H.removeChild(H.firstChild));I.push(M.lastChild);};H.parentNode.replaceChild(M,H);}else I.push(H);};var N=B.Window.document.createElement('blockquote');J.insertBefore(N,I[0]);while (I.length>0){H=I.shift();N.appendChild(H);}}else if (A==1){var O=[];var P={};while ((H=G.GetNextParagraph())){var Q=null;var R=null;while (H.parentNode){if (H.parentNode.nodeName.IEquals('blockquote')){Q=H.parentNode;R=H;break;};H=H.parentNode;};if (Q&&R&&!R._fckblockquotemoveout){O.push(R);FCKDomTools.SetElementMarker(P,R,'_fckblockquotemoveout',true);}};FCKDomTools.ClearAllMarkers(P);var S=[];var T=[],P={};var U=function(N){for (var i=0;i0){var W=O.shift();var N=W.parentNode;if (W==W.parentNode.firstChild) N.parentNode.insertBefore(N.removeChild(W),N);else if (W==W.parentNode.lastChild) N.parentNode.insertBefore(N.removeChild(W),N.nextSibling);else FCKDomTools.BreakParent(W,W.parentNode,B);if (!N._fckbqprocessed){T.push(N);FCKDomTools.SetElementMarker(P,N,'_fckbqprocessed',true);};S.push(W);};for (var i=T.length-1;i>=0;i--){var N=T[i];if (U(N)) FCKDomTools.RemoveNode(N);};FCKDomTools.ClearAllMarkers(P);if (FCKConfig.EnterMode.IEquals('br')){while (S.length){var W=S.shift();var a=true;if (W.nodeName.IEquals('div')){var M=FCKTools.GetElementDocument(W).createDocumentFragment();var c=a&&W.previousSibling&&!FCKListsLib.BlockBoundaries[W.previousSibling.nodeName.toLowerCase()];if (a&&c) M.appendChild(FCKTools.GetElementDocument(W).createElement('br'));var d=W.nextSibling&&!FCKListsLib.BlockBoundaries[W.nextSibling.nodeName.toLowerCase()];while (W.firstChild) M.appendChild(W.removeChild(W.firstChild));if (d) M.appendChild(FCKTools.GetElementDocument(W).createElement('br'));W.parentNode.replaceChild(M,W);a=false;}}}};B.MoveToBookmark(C);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;for (var i=0;i';B.open();B.write(''+F+'<\/head><\/body><\/html>');B.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.Panel_Contructor(B,window.document.location);FCKTools.AddEventListenerEx(E,'focus',FCKPanel_Window_OnFocus,this);FCKTools.AddEventListenerEx(E,'blur',FCKPanel_Window_OnBlur,this);};B.dir=FCKLang.Dir;FCKTools.AddEventListener(B,'contextmenu',FCKTools.CancelEvent);this.MainNode=B.body.appendChild(B.createElement('DIV'));this.MainNode.style.cssFloat=this.IsRTL?'right':'left';};FCKPanel.prototype.AppendStyleSheet=function(A){FCKTools.AppendStyleSheet(this.Document,A);};FCKPanel.prototype.Preload=function(x,y,A){if (this._Popup) this._Popup.show(x,y,0,0,A);};FCKPanel.prototype.ResizeForSubpanel=function(A,B,C){if (!FCKBrowserInfo.IsIE7) return false;if (!this._Popup.isOpen){this.Subpanel=null;return false;};if (B==0&&C==0){if (this.Subpanel!==A) return false;this.Subpanel=null;this.IncreasedX=0;}else{this.Subpanel=A;if ((this.IncreasedX>=B)&&(this.IncreasedY>=C)) return false;this.IncreasedX=Math.max(this.IncreasedX,B);this.IncreasedY=Math.max(this.IncreasedY,C);};var x=this.ShowRect.x;var w=this.IncreasedX;if (this.IsRTL) x=x-w;var D=this.ShowRect.w+w;var E=Math.max(this.ShowRect.h,this.IncreasedY);if (this.ParentPanel) this.ParentPanel.ResizeForSubpanel(this,D,E);this._Popup.show(x,this.ShowRect.y,D,E,this.RelativeElement);return this.IsRTL;};FCKPanel.prototype.Show=function(x,y,A,B,C){var D;var E=this.MainNode;if (this._Popup){this._Popup.show(x,y,0,0,A);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (FCKBrowserInfo.IsIE7){if (this.ParentPanel&&this.ParentPanel.ResizeForSubpanel(this,D,E.offsetHeight)){FCKTools.RunFunction(this.Show,this,[x,y,A]);return;}};if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=(x*-1)+A.offsetWidth-D;};if (FCKBrowserInfo.IsIE7){this.ShowRect={x:x,y:y,w:D,h:E.offsetHeight};this.IncreasedX=0;this.IncreasedY=0;this.RelativeElement=A;};this._PopupArgs=[x,y,D,E.offsetHeight,A];this._Popup.show(x,y,D,E.offsetHeight,A);if (this.OnHide){if (this._Timer) CheckPopupOnHide.call(this,true);this._Timer=FCKTools.SetInterval(CheckPopupOnHide,100,this);}}else{if (typeof(FCK.ToolbarSet.CurrentInstance.FocusManager)!='undefined') FCK.ToolbarSet.CurrentInstance.FocusManager.Lock();if (this.ParentPanel){this.ParentPanel.Lock();FCKPanel_Window_OnBlur(null,this.ParentPanel);};if (FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac){this._IFrame.scrolling='';FCKTools.RunFunction(function(){ this._IFrame.scrolling='no';},this);};if (FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel&&FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel!=this) FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel.Hide(false,true);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (!B) this._IFrame.width=1;if (!C) this._IFrame.height=1;D=E.offsetWidth||E.firstChild.offsetWidth;var F=FCKTools.GetDocumentPosition(this._Window,A.nodeType==9?(FCKTools.IsStrictMode(A)?A.documentElement:A.body):A);var G=FCKDomTools.GetPositionedAncestor(this._IFrame.parentNode);if (G){var H=FCKTools.GetDocumentPosition(FCKTools.GetElementWindow(G),G);F.x-=H.x;F.y-=H.y;};if (this.IsRTL&&!this.IsContextMenu) x=(x*-1);x+=F.x;y+=F.y;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=x+A.offsetWidth-D;}else{var I=FCKTools.GetViewPaneSize(this._Window);var J=FCKTools.GetScrollPosition(this._Window);var K=I.Height+J.Y;var L=I.Width+J.X;if ((x+D)>L) x-=x+D-L;if ((y+E.offsetHeight)>K) y-=y+E.offsetHeight-K;};FCKDomTools.SetElementStyles(this._IFrame,{left:x+'px',top:y+'px'});this._IFrame.contentWindow.focus();this._IsOpened=true;var M=this;this._resizeTimer=setTimeout(function(){var N=E.offsetWidth||E.firstChild.offsetWidth;var O=E.offsetHeight;M._IFrame.style.width=N+'px';M._IFrame.style.height=O+'px';},0);FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel=this;};FCKTools.RunFunction(this.OnShow,this);};FCKPanel.prototype.Hide=function(A,B){if (this._Popup) this._Popup.hide();else{if (!this._IsOpened||this._LockCounter>0) return;if (typeof(FCKFocusManager)!='undefined'&&!B) FCKFocusManager.Unlock();this._IFrame.style.width=this._IFrame.style.height='0px';this._IsOpened=false;if (this._resizeTimer){clearTimeout(this._resizeTimer);this._resizeTimer=null;};if (this.ParentPanel) this.ParentPanel.Unlock();if (!A) FCKTools.RunFunction(this.OnHide,this);}};FCKPanel.prototype.CheckIsOpened=function(){if (this._Popup) return this._Popup.isOpen;else return this._IsOpened;};FCKPanel.prototype.CreateChildPanel=function(){var A=this._Popup?FCKTools.GetDocumentWindow(this.Document):this._Window;var B=new FCKPanel(A);B.ParentPanel=this;return B;};FCKPanel.prototype.Lock=function(){this._LockCounter++;};FCKPanel.prototype.Unlock=function(){if (--this._LockCounter==0&&!this.HasFocus) this.Hide();};function FCKPanel_Window_OnFocus(e,A){A.HasFocus=true;};function FCKPanel_Window_OnBlur(e,A){A.HasFocus=false;if (A._LockCounter==0) FCKTools.RunFunction(A.Hide,A);};function CheckPopupOnHide(A){if (A||!this._Popup.isOpen){window.clearInterval(this._Timer);this._Timer=null;if (this._Popup&&this.ParentPanel&&!A) this.ParentPanel.ResizeForSubpanel(this,0,0);FCKTools.RunFunction(this.OnHide,this);}};function FCKPanel_Cleanup(){this._Popup=null;this._Window=null;this.Document=null;this.MainNode=null;this.RelativeElement=null;}; +var FCKIcon=function(A){var B=A?typeof(A):'undefined';switch (B){case 'number':this.Path=FCKConfig.SkinPath+'fck_strip.gif';this.Size=16;this.Position=A;break;case 'undefined':this.Path=FCK_SPACER_PATH;break;case 'string':this.Path=A;break;default:this.Path=A[0];this.Size=A[1];this.Position=A[2];}};FCKIcon.prototype.CreateIconElement=function(A){var B,eIconImage;if (this.Position){var C='-'+((this.Position-1)*this.Size)+'px';if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path;eIconImage.style.top=C;}else{B=A.createElement('IMG');B.src=FCK_SPACER_PATH;B.style.backgroundPosition='0px '+C;B.style.backgroundImage='url("'+this.Path+'")';}}else{if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path?this.Path:FCK_SPACER_PATH;}else{B=A.createElement('IMG');B.src=this.Path?this.Path:FCK_SPACER_PATH;}};B.className='TB_Button_Image';return B;}; +var FCKToolbarButtonUI=function(A,B,C,D,E,F){this.Name=A;this.Label=B||A;this.Tooltip=C||this.Label;this.Style=E||0;this.State=F||0;this.Icon=new FCKIcon(D);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarButtonUI_Cleanup);};FCKToolbarButtonUI.prototype._CreatePaddingElement=function(A){var B=A.createElement('IMG');B.className='TB_Button_Padding';B.src=FCK_SPACER_PATH;return B;};FCKToolbarButtonUI.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this.MainElement=B.createElement('DIV');C.title=this.Tooltip;if (FCKBrowserInfo.IsGecko) C.onmousedown=FCKTools.CancelEvent;FCKTools.AddEventListenerEx(C,'mouseover',FCKToolbarButtonUI_OnMouseOver,this);FCKTools.AddEventListenerEx(C,'mouseout',FCKToolbarButtonUI_OnMouseOut,this);FCKTools.AddEventListenerEx(C,'click',FCKToolbarButtonUI_OnClick,this);this.ChangeState(this.State,true);if (this.Style==0&&!this.ShowArrow){C.appendChild(this.Icon.CreateIconElement(B));}else{var D=C.appendChild(B.createElement('TABLE'));D.cellPadding=0;D.cellSpacing=0;var E=D.insertRow(-1);var F=E.insertCell(-1);if (this.Style==0||this.Style==2) F.appendChild(this.Icon.CreateIconElement(B));else F.appendChild(this._CreatePaddingElement(B));if (this.Style==1||this.Style==2){F=E.insertCell(-1);F.className='TB_Button_Text';F.noWrap=true;F.appendChild(B.createTextNode(this.Label));};if (this.ShowArrow){if (this.Style!=0){E.insertCell(-1).appendChild(this._CreatePaddingElement(B));};F=E.insertCell(-1);var G=F.appendChild(B.createElement('IMG'));G.src=FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif';G.width=5;G.height=3;};F=E.insertCell(-1);F.appendChild(this._CreatePaddingElement(B));};A.appendChild(C);};FCKToolbarButtonUI.prototype.ChangeState=function(A,B){if (!B&&this.State==A) return;var e=this.MainElement;if (!e) return;switch (parseInt(A,10)){case 0:e.className='TB_Button_Off';break;case 1:e.className='TB_Button_On';break;case -1:e.className='TB_Button_Disabled';break;};this.State=A;};function FCKToolbarButtonUI_OnMouseOver(A,B){if (B.State==0) this.className='TB_Button_Off_Over';else if (B.State==1) this.className='TB_Button_On_Over';};function FCKToolbarButtonUI_OnMouseOut(A,B){if (B.State==0) this.className='TB_Button_Off';else if (B.State==1) this.className='TB_Button_On';};function FCKToolbarButtonUI_OnClick(A,B){if (B.OnClick&&B.State!=-1) B.OnClick(B);};function FCKToolbarButtonUI_Cleanup(){this.MainElement=null;}; +var FCKToolbarButton=function(A,B,C,D,E,F,G){this.CommandName=A;this.Label=B;this.Tooltip=C;this.Style=D;this.sourceView=E?true:false;this.ContextSensitive=F?true:false;if (G==null) this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(G)=='number') this.IconPath=[FCKConfig.SkinPath+'fck_strip.gif',16,G];else this.IconPath=G;};FCKToolbarButton.prototype.Create=function(A){this._UIButton=new FCKToolbarButtonUI(this.CommandName,this.Label,this.Tooltip,this.IconPath,this.Style);this._UIButton.OnClick=this.Click;this._UIButton._ToolbarButton=this;this._UIButton.Create(A);};FCKToolbarButton.prototype.RefreshState=function(){var A=this._UIButton;if (!A) return;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B==A.State) return;A.ChangeState(B);};FCKToolbarButton.prototype.Click=function(){var A=this._ToolbarButton||this;FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(A.CommandName).Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this._UIButton.ChangeState(-1);}; +var FCKSpecialCombo=function(A,B,C,D,E){this.FieldWidth=B||100;this.PanelWidth=C||150;this.PanelMaxHeight=D||150;this.Label=' ';this.Caption=A;this.Tooltip=A;this.Style=2;this.Enabled=true;this.Items={};this._Panel=new FCKPanel(E||window);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);this._PanelBox=this._Panel.MainNode.appendChild(this._Panel.Document.createElement('DIV'));this._PanelBox.className='SC_Panel';this._PanelBox.style.width=this.PanelWidth+'px';this._PanelBox.innerHTML='
    ';this._ItemsHolderEl=this._PanelBox.getElementsByTagName('TD')[0];if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKSpecialCombo_Cleanup);};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(A,B,C){this.className=this.originalClass;B._Panel.Hide();B.SetLabel(this.FCKItemLabel);if (typeof(B.OnSelect)=='function') B.OnSelect(C,this);};FCKSpecialCombo.prototype.ClearItems=function (){if (this.Items) this.Items={};var A=this._ItemsHolderEl;while (A.firstChild) A.removeChild(A.firstChild);};FCKSpecialCombo.prototype.AddItem=function(A,B,C,D){var E=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));E.className=E.originalClass='SC_Item';E.innerHTML=B;E.FCKItemLabel=C||A;E.Selected=false;if (FCKBrowserInfo.IsIE) E.style.width='100%';if (D) E.style.backgroundColor=D;FCKTools.AddEventListenerEx(E,'mouseover',FCKSpecialCombo_ItemOnMouseOver);FCKTools.AddEventListenerEx(E,'mouseout',FCKSpecialCombo_ItemOnMouseOut);FCKTools.AddEventListenerEx(E,'click',FCKSpecialCombo_ItemOnClick,[this,A]);this.Items[A.toString().toLowerCase()]=E;return E;};FCKSpecialCombo.prototype.SelectItem=function(A){if (typeof A=='string') A=this.Items[A.toString().toLowerCase()];if (A){A.className=A.originalClass='SC_ItemSelected';A.Selected=true;}};FCKSpecialCombo.prototype.SelectItemByLabel=function(A,B){for (var C in this.Items){var D=this.Items[C];if (D.FCKItemLabel==A){D.className=D.originalClass='SC_ItemSelected';D.Selected=true;if (B) this.SetLabel(A);}}};FCKSpecialCombo.prototype.DeselectAll=function(A){for (var i in this.Items){if (!this.Items[i]) continue;this.Items[i].className=this.Items[i].originalClass='SC_Item';this.Items[i].Selected=false;};if (A) this.SetLabel('');};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){A=(!A||A.length==0)?' ':A;if (A==this.Label) return;this.Label=A;var B=this._LabelEl;if (B){B.innerHTML=A;FCKTools.DisableSelection(B);}};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;if (this._OuterTable) this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this._OuterTable=A.appendChild(B.createElement('TABLE'));C.cellPadding=0;C.cellSpacing=0;C.insertRow(-1);var D;var E;switch (this.Style){case 0:D='TB_ButtonType_Icon';E=false;break;case 1:D='TB_ButtonType_Text';E=false;break;case 2:E=true;break;};if (this.Caption&&this.Caption.length>0&&E){var F=C.rows[0].insertCell(-1);F.innerHTML=this.Caption;F.className='SC_FieldCaption';};var G=FCKTools.AppendElement(C.rows[0].insertCell(-1),'div');if (E){G.className='SC_Field';G.style.width=this.FieldWidth+'px';G.innerHTML='
     
    ';this._LabelEl=G.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{G.className='TB_Button_Off';G.innerHTML='
    '+this.Caption+'
    ';};FCKTools.AddEventListenerEx(G,'mouseover',FCKSpecialCombo_OnMouseOver,this);FCKTools.AddEventListenerEx(G,'mouseout',FCKSpecialCombo_OnMouseOut,this);FCKTools.AddEventListenerEx(G,'click',FCKSpecialCombo_OnClick,this);FCKTools.DisableSelection(this._Panel.Document.body);};function FCKSpecialCombo_Cleanup(){this._LabelEl=null;this._OuterTable=null;this._ItemsHolderEl=null;this._PanelBox=null;if (this.Items){for (var A in this.Items) this.Items[A]=null;}};function FCKSpecialCombo_OnMouseOver(A,B){if (B.Enabled){switch (B.Style){case 0:this.className='TB_Button_On_Over';break;case 1:this.className='TB_Button_On_Over';break;case 2:this.className='SC_Field SC_FieldOver';break;}}};function FCKSpecialCombo_OnMouseOut(A,B){switch (B.Style){case 0:this.className='TB_Button_Off';break;case 1:this.className='TB_Button_Off';break;case 2:this.className='SC_Field';break;}};function FCKSpecialCombo_OnClick(e,A){if (A.Enabled){var B=A._Panel;var C=A._PanelBox;var D=A._ItemsHolderEl;var E=A.PanelMaxHeight;if (A.OnBeforeClick) A.OnBeforeClick(A);if (FCKBrowserInfo.IsIE) B.Preload(0,this.offsetHeight,this);if (D.offsetHeight>E) C.style.height=E+'px';else C.style.height='';B.Show(0,this.offsetHeight,this);}}; +var FCKToolbarSpecialCombo=function(){this.sourceView=false;this.ContextSensitive=true;this.FieldWidth=null;this.PanelWidth=null;this.PanelMaxHeight=null;};FCKToolbarSpecialCombo.prototype.DefaultLabel='';function FCKToolbarSpecialCombo_OnSelect(A,B){FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Execute(A,B);};FCKToolbarSpecialCombo.prototype.Create=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel(),this.FieldWidth,this.PanelWidth,this.PanelMaxHeight,FCKBrowserInfo.IsIE?window:FCKTools.GetElementWindow(A).parent);this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A);this._Combo.CommandName=this.CommandName;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(A,B){A.DeselectAll();A.SelectItem(B);A.SetLabelById(B);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B!=-1){A=1;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else{if (this._LastValue!==B){this._LastValue=B;if (!B||B.length==0){this._Combo.DeselectAll();this._Combo.SetLabel(this.DefaultLabel);}else FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}}}else A=-1;if (A==this.State) return;if (A==-1){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=-1);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=-1;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);}; +var FCKToolbarStyleCombo=function(A,B){if (A===false) return;this.CommandName='Style';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultStyleLabel||'';};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.GetStyles=function(){var A={};var B=FCK.ToolbarSet.CurrentInstance.Styles.GetStyles();for (var C in B){var D=B[C];if (!D.IsCore) A[C]=D;};return A;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);FCKTools.AppendStyleString(B,FCKConfig.EditorAreaStyles);B.body.className+=' ForceBaseFont';FCKConfig.ApplyBodyAttributes(B.body);var C=this.GetStyles();for (var D in C){var E=C[D];var F=E.GetType()==2?D:FCKToolbarStyleCombo_BuildPreview(E,E.Label||D);var G=A.AddItem(D,F);G.Style=E;};A.OnBeforeClick=this.StyleCombo_OnBeforeClick;};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Elements;for (var e=0;e');var E=A.Element;if (E=='bdo') E='span';D=['<',E];var F=A._StyleDesc.Attributes;if (F){for (var G in F){D.push(' ',G,'="',A.GetFinalAttributeValue(G),'"');}};if (A._GetStyleText().length>0) D.push(' style="',A.GetFinalStyleValue(),'"');D.push('>',B,'');if (C==0) D.push('');return D.join('');}; +var FCKToolbarFontFormatCombo=function(A,B){if (A===false) return;this.CommandName='FontFormat';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.NormalLabel='Normal';this.PanelWidth=190;this.DefaultLabel=FCKConfig.DefaultFontFormatLabel||'';};FCKToolbarFontFormatCombo.prototype=new FCKToolbarStyleCombo(false);FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.GetStyles=function(){var A={};var B=FCKLang['FontFormats'].split(';');var C={p:B[0],pre:B[1],address:B[2],h1:B[3],h2:B[4],h3:B[5],h4:B[6],h5:B[7],h6:B[8],div:B[9]||(B[0]+' (DIV)')};var D=FCKConfig.FontFormats.split(';');for (var i=0;iEnable SCAYT';return C?'Disable SCAYT':'Enable SCAYT';};var Z=function(tooltip,style){this.Command=FCKCommands.GetCommand('Scayt');this.CommandName='Scayt';this.Label=this.GetLabel();this.Tooltip=FCKLang.ScaytTitle;this.Style=1;};Z.prototype=new FCKToolbarSpecialCombo;Z.prototype.CreateItems=function(){this._Combo.AddItem('Trigger','Enable SCAYT');this._Combo.AddItem('Options',FCKLang.ScaytTitleOptions||"Options");this._Combo.AddItem('Langs',FCKLang.ScaytTitleLangs||"Languages");this._Combo.AddItem('About',FCKLang.ScaytTitleAbout||"About");};Z.prototype.GetLabel=function(){var a=FCKConfig.SkinPath+'fck_strip.gif';return FCKBrowserInfo.IsIE?'
    ':'';};function ScaytMessage(m){m&&alert(m);};var b=function(){name='ScaytContext';};b.prototype.Execute=function(contextInfo){var c=contextInfo&&contextInfo.action,g=c&&contextInfo.node,Q=window.scayt_control;if (g){switch (c){case 'Suggestion':Q.replace(g,contextInfo.suggestion);break;case 'Ignore':Q.ignore(g);break;case 'Ignore All':Q.ignoreAll(g);break;case 'Add Word':var E=FCK.EditorWindow.parent.parent;E.scayt.addWordToUserDictionary(g);break;}}};function InitSetup(){FCK.ContextMenu.RegisterListener({AddItems:function(menu){var E=FCK.EditorWindow.parent.parent;var Q=window.scayt_control,P=E.scayt;if (!Q) return;var g=Q.getScaytNode();if (!g) return;var h=P.getSuggestion(Q.getWord(g),Q.getLang());if (!h||!h.length) return;menu.AddSeparator();var j=FCK.Config.ScaytMaxSuggestions||5;var k=(j==-1)?h.length:j;for (var i=0;i';G.open();G.write(''+H+''+document.getElementById('xToolbarSpace').innerHTML+'');G.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.ToolbarSet_InitOutFrame(G);FCKTools.AddEventListener(G,'contextmenu',FCKTools.CancelEvent);FCKTools.AppendStyleSheet(G,FCKConfig.SkinEditorCSS);B=D.__FCKToolbarSet=new FCKToolbarSet(G);B._IFrame=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(D,FCKToolbarSet_Target_Cleanup);};B.CurrentInstance=FCK;if (!B.ToolbarItems) B.ToolbarItems=FCKToolbarItems;FCK.AttachToOnSelectionChange(B.RefreshItemsState);return B;};function FCK_OnBlur(A){var B=A.ToolbarSet;if (B.CurrentInstance==A) B.Disable();};function FCK_OnFocus(A){var B=A.ToolbarSet;var C=A||FCK;B.CurrentInstance.FocusManager.RemoveWindow(B._IFrame.contentWindow);B.CurrentInstance=C;C.FocusManager.AddWindow(B._IFrame.contentWindow,true);B.Enable();};function FCKToolbarSet_Cleanup(){this._TargetElement=null;this._IFrame=null;};function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet=null;};var FCKToolbarSet=function(A){this._Document=A;this._TargetElement=A.getElementById('xToolbar');var B=A.getElementById('xExpandHandle');var C=A.getElementById('xCollapseHandle');B.title=FCKLang.ToolbarExpand;FCKTools.AddEventListener(B,'click',FCKToolbarSet_Expand_OnClick);C.title=FCKLang.ToolbarCollapse;FCKTools.AddEventListener(C,'click',FCKToolbarSet_Collapse_OnClick);if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();C.style.display=FCKConfig.ToolbarCanCollapse?'':'none';if (FCKConfig.ToolbarCanCollapse) C.style.display='';else A.getElementById('xTBLeftBorder').style.display='';this.Toolbars=[];this.IsLoaded=false;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarSet_Cleanup);};function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand();};function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse();};FCKToolbarSet.prototype.Expand=function(){this._ChangeVisibility(false);};FCKToolbarSet.prototype.Collapse=function(){this._ChangeVisibility(true);};FCKToolbarSet.prototype._ChangeVisibility=function(A){this._Document.getElementById('xCollapsed').style.display=A?'':'none';this._Document.getElementById('xExpanded').style.display=A?'none':'';if (window.onresize){FCKTools.RunFunction(window.onresize);}};FCKToolbarSet.prototype.Load=function(A){this.Name=A;this.Items=[];this.ItemsWysiwygOnly=[];this.ItemsContextSensitive=[];this._TargetElement.innerHTML='';var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=[];for (var x=0;x0) break;}catch (e){break;};D=D.parent;};var E=D.document;var F=function(){if (!B) B=FCKConfig.FloatingPanelsZIndex+999;return++B;};var G=function(){if (!C) return;var H=FCKTools.IsStrictMode(E)?E.documentElement:E.body;FCKDomTools.SetElementStyles(C,{'width':Math.max(H.scrollWidth,H.clientWidth,E.scrollWidth||0)-1+'px','height':Math.max(H.scrollHeight,H.clientHeight,E.scrollHeight||0)-1+'px'});};return {OpenDialog:function(dialogName,dialogTitle,dialogPage,width,height,customValue,resizable){if (!A) this.DisplayMainCover();var I={Title:dialogTitle,Page:dialogPage,Editor:window,CustomValue:customValue,TopWindow:D};FCK.ToolbarSet.CurrentInstance.Selection.Save(true);var J=FCKTools.GetViewPaneSize(D);var K={ 'X':0,'Y':0 };var L=FCKBrowserInfo.IsIE&&(!FCKBrowserInfo.IsIE7||!FCKTools.IsStrictMode(D.document));if (L) K=FCKTools.GetScrollPosition(D);var M=Math.max(K.Y+(J.Height-height-20)/2,0);var N=Math.max(K.X+(J.Width-width-20)/2,0);var O=E.createElement('iframe');FCKTools.ResetStyles(O);O.src=FCKConfig.BasePath+'fckdialog.html';O.frameBorder=0;O.allowTransparency=true;FCKDomTools.SetElementStyles(O,{'position':(L)?'absolute':'fixed','top':M+'px','left':N+'px','width':width+'px','height':height+'px','zIndex':F()});O._DialogArguments=I;E.body.appendChild(O);O._ParentDialog=A;A=O;},OnDialogClose:function(dialogWindow){var O=dialogWindow.frameElement;FCKDomTools.RemoveNode(O);if (O._ParentDialog){A=O._ParentDialog;O._ParentDialog.contentWindow.SetEnabled(true);}else{if (!FCKBrowserInfo.IsIE) FCK.Focus();this.HideMainCover();setTimeout(function(){ A=null;},0);FCK.ToolbarSet.CurrentInstance.Selection.Release();}},DisplayMainCover:function(){C=E.createElement('div');FCKTools.ResetStyles(C);FCKDomTools.SetElementStyles(C,{'position':'absolute','zIndex':F(),'top':'0px','left':'0px','backgroundColor':FCKConfig.BackgroundBlockerColor});FCKDomTools.SetOpacity(C,FCKConfig.BackgroundBlockerOpacity);if (FCKBrowserInfo.IsIE&&!FCKBrowserInfo.IsIE7){var Q=E.createElement('iframe');FCKTools.ResetStyles(Q);Q.hideFocus=true;Q.frameBorder=0;Q.src=FCKTools.GetVoidUrl();FCKDomTools.SetElementStyles(Q,{'width':'100%','height':'100%','position':'absolute','left':'0px','top':'0px','filter':'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'});C.appendChild(Q);};FCKTools.AddEventListener(D,'resize',G);G();E.body.appendChild(C);FCKFocusManager.Lock();var R=FCK.ToolbarSet.CurrentInstance.GetInstanceObject('frameElement');R._fck_originalTabIndex=R.tabIndex;R.tabIndex=-1;},HideMainCover:function(){FCKDomTools.RemoveNode(C);FCKFocusManager.Unlock();var R=FCK.ToolbarSet.CurrentInstance.GetInstanceObject('frameElement');R.tabIndex=R._fck_originalTabIndex;FCKDomTools.ClearElementJSProperty(R,'_fck_originalTabIndex');},GetCover:function(){return C;}};})(); +var FCKMenuItem=function(A,B,C,D,E,F){this.Name=B;this.Label=C||B;this.IsDisabled=E;this.Icon=new FCKIcon(D);this.SubMenu=new FCKMenuBlockPanel();this.SubMenu.Parent=A;this.SubMenu.OnClick=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnClick,this);this.CustomData=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuItem_Cleanup);};FCKMenuItem.prototype.AddItem=function(A,B,C,D,E){this.HasSubMenu=true;return this.SubMenu.AddItem(A,B,C,D,E);};FCKMenuItem.prototype.AddSeparator=function(){this.SubMenu.AddSeparator();};FCKMenuItem.prototype.Create=function(A){var B=this.HasSubMenu;var C=FCKTools.GetElementDocument(A);var r=this.MainElement=A.insertRow(-1);r.className=this.IsDisabled?'MN_Item_Disabled':'MN_Item';if (!this.IsDisabled){FCKTools.AddEventListenerEx(r,'mouseover',FCKMenuItem_OnMouseOver,[this]);FCKTools.AddEventListenerEx(r,'click',FCKMenuItem_OnClick,[this]);if (!B) FCKTools.AddEventListenerEx(r,'mouseout',FCKMenuItem_OnMouseOut,[this]);};var D=r.insertCell(-1);D.className='MN_Icon';D.appendChild(this.Icon.CreateIconElement(C));D=r.insertCell(-1);D.className='MN_Label';D.noWrap=true;D.appendChild(C.createTextNode(this.Label));D=r.insertCell(-1);if (B){D.className='MN_Arrow';var E=D.appendChild(C.createElement('IMG'));E.src=FCK_IMAGES_PATH+'arrow_'+FCKLang.Dir+'.gif';E.width=4;E.height=7;this.SubMenu.Create();this.SubMenu.Panel.OnHide=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnHide,this);}};FCKMenuItem.prototype.Activate=function(){this.MainElement.className='MN_Item_Over';if (this.HasSubMenu){this.SubMenu.Show(this.MainElement.offsetWidth+2,-2,this.MainElement);};FCKTools.RunFunction(this.OnActivate,this);};FCKMenuItem.prototype.Deactivate=function(){this.MainElement.className='MN_Item';if (this.HasSubMenu) this.SubMenu.Hide();};function FCKMenuItem_SubMenu_OnClick(A,B){FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuItem_SubMenu_OnHide(A){A.Deactivate();};function FCKMenuItem_OnClick(A,B){if (B.HasSubMenu) B.Activate();else{B.Deactivate();FCKTools.RunFunction(B.OnClick,B,[B]);}};function FCKMenuItem_OnMouseOver(A,B){B.Activate();};function FCKMenuItem_OnMouseOut(A,B){B.Deactivate();};function FCKMenuItem_Cleanup(){this.MainElement=null;}; +var FCKMenuBlock=function(){this._Items=[];};FCKMenuBlock.prototype.Count=function(){return this._Items.length;};FCKMenuBlock.prototype.AddItem=function(A,B,C,D,E){var F=new FCKMenuItem(this,A,B,C,D,E);F.OnClick=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnClick,this);F.OnActivate=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnActivate,this);this._Items.push(F);return F;};FCKMenuBlock.prototype.AddSeparator=function(){this._Items.push(new FCKMenuSeparator());};FCKMenuBlock.prototype.RemoveAllItems=function(){this._Items=[];var A=this._ItemsTable;if (A){while (A.rows.length>0) A.deleteRow(0);}};FCKMenuBlock.prototype.Create=function(A){if (!this._ItemsTable){if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuBlock_Cleanup);this._Window=FCKTools.GetElementWindow(A);var B=FCKTools.GetElementDocument(A);var C=A.appendChild(B.createElement('table'));C.cellPadding=0;C.cellSpacing=0;FCKTools.DisableSelection(C);var D=C.insertRow(-1).insertCell(-1);D.className='MN_Menu';var E=this._ItemsTable=D.appendChild(B.createElement('table'));E.cellPadding=0;E.cellSpacing=0;};for (var i=0;i0&&F.href.length==0);if (G) return;menu.AddSeparator();menu.AddItem('VisitLink',FCKLang.VisitLink);menu.AddSeparator();if (E) menu.AddItem('Link',FCKLang.EditLink,34);menu.AddItem('Unlink',FCKLang.RemoveLink,35);}}};case 'Image':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&!tag.getAttribute('_fckfakelement')){menu.AddSeparator();menu.AddItem('Image',FCKLang.ImageProperties,37);}}};case 'Anchor':return {AddItems:function(menu,tag,tagName){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0);if (G||(tagName=='IMG'&&tag.getAttribute('_fckanchor'))){menu.AddSeparator();menu.AddItem('Anchor',FCKLang.AnchorProp,36);menu.AddItem('AnchorDelete',FCKLang.AnchorDelete);}}};case 'Flash':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckflash')){menu.AddSeparator();menu.AddItem('Flash',FCKLang.FlashProperties,38);}}};case 'Form':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('FORM')){menu.AddSeparator();menu.AddItem('Form',FCKLang.FormProp,48);}}};case 'Checkbox':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='checkbox'){menu.AddSeparator();menu.AddItem('Checkbox',FCKLang.CheckboxProp,49);}}};case 'Radio':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='radio'){menu.AddSeparator();menu.AddItem('Radio',FCKLang.RadioButtonProp,50);}}};case 'TextField':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='text'||tag.type=='password')){menu.AddSeparator();menu.AddItem('TextField',FCKLang.TextFieldProp,51);}}};case 'HiddenField':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckinputhidden')){menu.AddSeparator();menu.AddItem('HiddenField',FCKLang.HiddenFieldProp,56);}}};case 'ImageButton':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='image'){menu.AddSeparator();menu.AddItem('ImageButton',FCKLang.ImageButtonProp,55);}}};case 'Button':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='button'||tag.type=='submit'||tag.type=='reset')){menu.AddSeparator();menu.AddItem('Button',FCKLang.ButtonProp,54);}}};case 'Select':return {AddItems:function(menu,tag,tagName){if (tagName=='SELECT'){menu.AddSeparator();menu.AddItem('Select',FCKLang.SelectionFieldProp,53);}}};case 'Textarea':return {AddItems:function(menu,tag,tagName){if (tagName=='TEXTAREA'){menu.AddSeparator();menu.AddItem('Textarea',FCKLang.TextareaProp,52);}}};case 'BulletedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('UL')){menu.AddSeparator();menu.AddItem('BulletedList',FCKLang.BulletedListProp,27);}}};case 'NumberedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('OL')){menu.AddSeparator();menu.AddItem('NumberedList',FCKLang.NumberedListProp,26);}}};case 'DivContainer':return {AddItems:function(menu,tag,tagName){var J=FCKDomTools.GetSelectedDivContainers();if (J.length>0){menu.AddSeparator();menu.AddItem('EditDiv',FCKLang.EditDiv,75);menu.AddItem('DeleteDiv',FCKLang.DeleteDiv,76);}}};};return null;};function FCK_ContextMenu_OnBeforeOpen(){FCK.Events.FireEvent('OnSelectionChange');var A,sTagName;if ((A=FCKSelection.GetSelectedElement())) sTagName=A.tagName;var B=FCK.ContextMenu._InnerContextMenu;B.RemoveAllItems();var C=FCK.ContextMenu.Listeners;for (var i=0;i0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}};var FCKHtmlIterator=function(A){this._sourceHtml=A;};FCKHtmlIterator.prototype={Next:function(){var A=this._sourceHtml;if (A==null) return null;var B=FCKRegexLib.HtmlTag.exec(A);var C=false;var D="";if (B){if (B.index>0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}}; +var FCKPlugin=function(A,B,C){this.Name=A;this.BasePath=C?C:FCKConfig.PluginsPath;this.Path=this.BasePath+A+'/';if (!B||B.length==0) this.AvailableLangs=[];else this.AvailableLangs=B.split(',');};FCKPlugin.prototype.Load=function(){if (this.AvailableLangs.length>0){var A;if (this.AvailableLangs.IndexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];LoadScript(this.Path+'lang/'+A+'.js');};LoadScript(this.Path+'fckplugin.js');}; +var FCKPlugins=FCK.Plugins={};FCKPlugins.ItemsCount=0;FCKPlugins.Items={};FCKPlugins.Load=function(){var A=FCKPlugins.Items;for (var i=0;iVil du rense teksten før den indsættes?", +NotCompatiblePaste : "Denne kommando er tilgændelig i Internet Explorer 5.5 eller senere.
    Vil du indsætte teksten uden at rense den ?", +UnknownToolbarItem : "Ukendt værktøjslinjeobjekt \"%1\"!", +UnknownCommand : "Ukendt kommandonavn \"%1\"!", +NotImplemented : "Kommandoen er ikke implementeret!", +UnknownToolbarSet : "Værktøjslinjen \"%1\" eksisterer ikke!", +NoActiveX : "Din browsers sikkerhedsindstillinger begrænser nogle af editorens muligheder.
    Slå \"Kør ActiveX-objekter og plug-ins\" til, ellers vil du opleve fejl og manglende muligheder.", +BrowseServerBlocked : "Browseren kunne ikke åbne de nødvendige ressourcer!
    Slå pop-up blokering fra.", +DialogBlocked : "Dialogvinduet kunne ikke åbnes!
    Slå pop-up blokering fra.", +VisitLinkBlocked : "Det var ikke muligt at åbne et nyt vindue. Tjek, at ingen popup-blokkere er aktive.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Annuller", +DlgBtnClose : "Luk", +DlgBtnBrowseServer : "Gennemse...", +DlgAdvancedTag : "Avanceret", +DlgOpOther : "", +DlgInfoTab : "Generelt", +DlgAlertUrl : "Indtast URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Tekstretning", +DlgGenLangDirLtr : "Fra venstre mod højre (LTR)", +DlgGenLangDirRtl : "Fra højre mod venstre (RTL)", +DlgGenLangCode : "Sprogkode", +DlgGenAccessKey : "Genvejstast", +DlgGenName : "Navn", +DlgGenTabIndex : "Tabulator indeks", +DlgGenLongDescr : "Udvidet beskrivelse", +DlgGenClass : "Typografiark", +DlgGenTitle : "Titel", +DlgGenContType : "Indholdstype", +DlgGenLinkCharset : "Tegnsæt", +DlgGenStyle : "Typografi", + +// Image Dialog +DlgImgTitle : "Egenskaber for billede", +DlgImgInfoTab : "Generelt", +DlgImgBtnUpload : "Upload", +DlgImgURL : "URL", +DlgImgUpload : "Upload", +DlgImgAlt : "Alternativ tekst", +DlgImgWidth : "Bredde", +DlgImgHeight : "Højde", +DlgImgLockRatio : "Lås størrelsesforhold", +DlgBtnResetSize : "Nulstil størrelse", +DlgImgBorder : "Ramme", +DlgImgHSpace : "HMargen", +DlgImgVSpace : "VMargen", +DlgImgAlign : "Justering", +DlgImgAlignLeft : "Venstre", +DlgImgAlignAbsBottom: "Absolut nederst", +DlgImgAlignAbsMiddle: "Absolut centreret", +DlgImgAlignBaseline : "Grundlinje", +DlgImgAlignBottom : "Nederst", +DlgImgAlignMiddle : "Centreret", +DlgImgAlignRight : "Højre", +DlgImgAlignTextTop : "Toppen af teksten", +DlgImgAlignTop : "Øverst", +DlgImgPreview : "Vis eksempel", +DlgImgAlertUrl : "Indtast stien til billedet", +DlgImgLinkTab : "Hyperlink", + +// Flash Dialog +DlgFlashTitle : "Egenskaber for Flash", +DlgFlashChkPlay : "Automatisk afspilning", +DlgFlashChkLoop : "Gentagelse", +DlgFlashChkMenu : "Vis Flash menu", +DlgFlashScale : "Skalér", +DlgFlashScaleAll : "Vis alt", +DlgFlashScaleNoBorder : "Ingen ramme", +DlgFlashScaleFit : "Tilpas størrelse", + +// Link Dialog +DlgLnkWindowTitle : "Egenskaber for hyperlink", +DlgLnkInfoTab : "Generelt", +DlgLnkTargetTab : "Mål", + +DlgLnkType : "Hyperlink type", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Bogmærke på denne side", +DlgLnkTypeEMail : "E-mail", +DlgLnkProto : "Protokol", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Vælg et anker", +DlgLnkAnchorByName : "Efter anker navn", +DlgLnkAnchorById : "Efter element Id", +DlgLnkNoAnchors : "(Ingen bogmærker dokumentet)", +DlgLnkEMail : "E-mailadresse", +DlgLnkEMailSubject : "Emne", +DlgLnkEMailBody : "Brødtekst", +DlgLnkUpload : "Upload", +DlgLnkBtnUpload : "Upload", + +DlgLnkTarget : "Mål", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Nyt vindue (_blank)", +DlgLnkTargetParent : "Overordnet ramme (_parent)", +DlgLnkTargetSelf : "Samme vindue (_self)", +DlgLnkTargetTop : "Hele vinduet (_top)", +DlgLnkTargetFrameName : "Destinationsvinduets navn", +DlgLnkPopWinName : "Pop-up vinduets navn", +DlgLnkPopWinFeat : "Egenskaber for pop-up", +DlgLnkPopResize : "Skalering", +DlgLnkPopLocation : "Adresselinje", +DlgLnkPopMenu : "Menulinje", +DlgLnkPopScroll : "Scrollbars", +DlgLnkPopStatus : "Statuslinje", +DlgLnkPopToolbar : "Værktøjslinje", +DlgLnkPopFullScrn : "Fuld skærm (IE)", +DlgLnkPopDependent : "Koblet/dependent (Netscape)", +DlgLnkPopWidth : "Bredde", +DlgLnkPopHeight : "Højde", +DlgLnkPopLeft : "Position fra venstre", +DlgLnkPopTop : "Position fra toppen", + +DlnLnkMsgNoUrl : "Indtast hyperlink URL!", +DlnLnkMsgNoEMail : "Indtast e-mailaddresse!", +DlnLnkMsgNoAnchor : "Vælg bogmærke!", +DlnLnkMsgInvPopName : "Navnet på popup'en skal starte med et bogstav og må ikke indeholde mellemrum", + +// Color Dialog +DlgColorTitle : "Vælg farve", +DlgColorBtnClear : "Nulstil", +DlgColorHighlight : "Markeret", +DlgColorSelected : "Valgt", + +// Smiley Dialog +DlgSmileyTitle : "Vælg smiley", + +// Special Character Dialog +DlgSpecialCharTitle : "Vælg symbol", + +// Table Dialog +DlgTableTitle : "Egenskaber for tabel", +DlgTableRows : "Rækker", +DlgTableColumns : "Kolonner", +DlgTableBorder : "Rammebredde", +DlgTableAlign : "Justering", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Venstrestillet", +DlgTableAlignCenter : "Centreret", +DlgTableAlignRight : "Højrestillet", +DlgTableWidth : "Bredde", +DlgTableWidthPx : "pixels", +DlgTableWidthPc : "procent", +DlgTableHeight : "Højde", +DlgTableCellSpace : "Celleafstand", +DlgTableCellPad : "Cellemargen", +DlgTableCaption : "Titel", +DlgTableSummary : "Resume", +DlgTableHeaders : "Headers", //MISSING +DlgTableHeadersNone : "None", //MISSING +DlgTableHeadersColumn : "First column", //MISSING +DlgTableHeadersRow : "First Row", //MISSING +DlgTableHeadersBoth : "Both", //MISSING + +// Table Cell Dialog +DlgCellTitle : "Egenskaber for celle", +DlgCellWidth : "Bredde", +DlgCellWidthPx : "pixels", +DlgCellWidthPc : "procent", +DlgCellHeight : "Højde", +DlgCellWordWrap : "Orddeling", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Ja", +DlgCellWordWrapNo : "Nej", +DlgCellHorAlign : "Vandret justering", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Venstrestillet", +DlgCellHorAlignCenter : "Centreret", +DlgCellHorAlignRight: "Højrestillet", +DlgCellVerAlign : "Lodret justering", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Øverst", +DlgCellVerAlignMiddle : "Centreret", +DlgCellVerAlignBottom : "Nederst", +DlgCellVerAlignBaseline : "Grundlinje", +DlgCellType : "Cell Type", //MISSING +DlgCellTypeData : "Data", //MISSING +DlgCellTypeHeader : "Header", //MISSING +DlgCellRowSpan : "Højde i antal rækker", +DlgCellCollSpan : "Bredde i antal kolonner", +DlgCellBackColor : "Baggrundsfarve", +DlgCellBorderColor : "Rammefarve", +DlgCellBtnSelect : "Vælg...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Søg og erstat", + +// Find Dialog +DlgFindTitle : "Find", +DlgFindFindBtn : "Find", +DlgFindNotFoundMsg : "Søgeteksten blev ikke fundet!", + +// Replace Dialog +DlgReplaceTitle : "Erstat", +DlgReplaceFindLbl : "Søg efter:", +DlgReplaceReplaceLbl : "Erstat med:", +DlgReplaceCaseChk : "Forskel på store og små bogstaver", +DlgReplaceReplaceBtn : "Erstat", +DlgReplaceReplAllBtn : "Erstat alle", +DlgReplaceWordChk : "Kun hele ord", + +// Paste Operations / Dialog +PasteErrorCut : "Din browsers sikkerhedsindstillinger tillader ikke editoren at klippe tekst automatisk!
    Brug i stedet tastaturet til at klippe teksten (Ctrl+X).", +PasteErrorCopy : "Din browsers sikkerhedsindstillinger tillader ikke editoren at kopiere tekst automatisk!
    Brug i stedet tastaturet til at kopiere teksten (Ctrl+C).", + +PasteAsText : "Indsæt som ikke-formateret tekst", +PasteFromWord : "Indsæt fra Word", + +DlgPasteMsg2 : "Indsæt i feltet herunder (Ctrl+V) og klik OK.", +DlgPasteSec : "På grund af browserens sikkerhedsindstillinger kan editoren ikke tilgå udklipsholderen direkte. Du skal indsætte udklipsholderens indhold i dette vindue igen.", +DlgPasteIgnoreFont : "Ignorer font definitioner", +DlgPasteRemoveStyles : "Ignorer typografi", + +// Color Picker +ColorAutomatic : "Automatisk", +ColorMoreColors : "Flere farver...", + +// Document Properties +DocProps : "Egenskaber for dokument", + +// Anchor Dialog +DlgAnchorTitle : "Egenskaber for bogmærke", +DlgAnchorName : "Bogmærke navn", +DlgAnchorErrorName : "Indtast bogmærke navn!", + +// Speller Pages Dialog +DlgSpellNotInDic : "Ikke i ordbogen", +DlgSpellChangeTo : "Forslag", +DlgSpellBtnIgnore : "Ignorer", +DlgSpellBtnIgnoreAll : "Ignorer alle", +DlgSpellBtnReplace : "Erstat", +DlgSpellBtnReplaceAll : "Erstat alle", +DlgSpellBtnUndo : "Tilbage", +DlgSpellNoSuggestions : "- ingen forslag -", +DlgSpellProgress : "Stavekontrolen arbejder...", +DlgSpellNoMispell : "Stavekontrol færdig: Ingen fejl fundet", +DlgSpellNoChanges : "Stavekontrol færdig: Ingen ord ændret", +DlgSpellOneChange : "Stavekontrol færdig: Et ord ændret", +DlgSpellManyChanges : "Stavekontrol færdig: %1 ord ændret", + +IeSpellDownload : "Stavekontrol ikke installeret.
    Vil du hente den nu?", + +// Button Dialog +DlgButtonText : "Tekst", +DlgButtonType : "Type", +DlgButtonTypeBtn : "Knap", +DlgButtonTypeSbm : "Send", +DlgButtonTypeRst : "Nulstil", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Navn", +DlgCheckboxValue : "Værdi", +DlgCheckboxSelected : "Valgt", + +// Form Dialog +DlgFormName : "Navn", +DlgFormAction : "Handling", +DlgFormMethod : "Metod", + +// Select Field Dialog +DlgSelectName : "Navn", +DlgSelectValue : "Værdi", +DlgSelectSize : "Størrelse", +DlgSelectLines : "linier", +DlgSelectChkMulti : "Tillad flere valg", +DlgSelectOpAvail : "Valgmuligheder", +DlgSelectOpText : "Tekst", +DlgSelectOpValue : "Værdi", +DlgSelectBtnAdd : "Tilføj", +DlgSelectBtnModify : "Rediger", +DlgSelectBtnUp : "Op", +DlgSelectBtnDown : "Ned", +DlgSelectBtnSetValue : "Sæt som valgt", +DlgSelectBtnDelete : "Slet", + +// Textarea Dialog +DlgTextareaName : "Navn", +DlgTextareaCols : "Kolonner", +DlgTextareaRows : "Rækker", + +// Text Field Dialog +DlgTextName : "Navn", +DlgTextValue : "Værdi", +DlgTextCharWidth : "Bredde (tegn)", +DlgTextMaxChars : "Max antal tegn", +DlgTextType : "Type", +DlgTextTypeText : "Tekst", +DlgTextTypePass : "Adgangskode", + +// Hidden Field Dialog +DlgHiddenName : "Navn", +DlgHiddenValue : "Værdi", + +// Bulleted List Dialog +BulletedListProp : "Egenskaber for punktopstilling", +NumberedListProp : "Egenskaber for talopstilling", +DlgLstStart : "Start", +DlgLstType : "Type", +DlgLstTypeCircle : "Cirkel", +DlgLstTypeDisc : "Udfyldt cirkel", +DlgLstTypeSquare : "Firkant", +DlgLstTypeNumbers : "Nummereret (1, 2, 3)", +DlgLstTypeLCase : "Små bogstaver (a, b, c)", +DlgLstTypeUCase : "Store bogstaver (A, B, C)", +DlgLstTypeSRoman : "Små romertal (i, ii, iii)", +DlgLstTypeLRoman : "Store romertal (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Generelt", +DlgDocBackTab : "Baggrund", +DlgDocColorsTab : "Farver og margen", +DlgDocMetaTab : "Metadata", + +DlgDocPageTitle : "Sidetitel", +DlgDocLangDir : "Sprog", +DlgDocLangDirLTR : "Fra venstre mod højre (LTR)", +DlgDocLangDirRTL : "Fra højre mod venstre (RTL)", +DlgDocLangCode : "Landekode", +DlgDocCharSet : "Tegnsæt kode", +DlgDocCharSetCE : "Centraleuropæisk", +DlgDocCharSetCT : "Traditionel kinesisk (Big5)", +DlgDocCharSetCR : "Kyrillisk", +DlgDocCharSetGR : "Græsk", +DlgDocCharSetJP : "Japansk", +DlgDocCharSetKR : "Koreansk", +DlgDocCharSetTR : "Tyrkisk", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Vesteuropæisk", +DlgDocCharSetOther : "Anden tegnsæt kode", + +DlgDocDocType : "Dokumenttype kategori", +DlgDocDocTypeOther : "Anden dokumenttype kategori", +DlgDocIncXHTML : "Inkludere XHTML deklartion", +DlgDocBgColor : "Baggrundsfarve", +DlgDocBgImage : "Baggrundsbillede URL", +DlgDocBgNoScroll : "Fastlåst baggrund", +DlgDocCText : "Tekst", +DlgDocCLink : "Hyperlink", +DlgDocCVisited : "Besøgt hyperlink", +DlgDocCActive : "Aktivt hyperlink", +DlgDocMargins : "Sidemargen", +DlgDocMaTop : "Øverst", +DlgDocMaLeft : "Venstre", +DlgDocMaRight : "Højre", +DlgDocMaBottom : "Nederst", +DlgDocMeIndex : "Dokument index nøgleord (kommasepareret)", +DlgDocMeDescr : "Dokument beskrivelse", +DlgDocMeAuthor : "Forfatter", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Vis", + +// Templates Dialog +Templates : "Skabeloner", +DlgTemplatesTitle : "Indholdsskabeloner", +DlgTemplatesSelMsg : "Vælg den skabelon, som skal åbnes i editoren:", +DlgTemplatesLoading : "Henter liste over skabeloner...", +DlgTemplatesNoTpl : "(Der er ikke defineret nogen skabelon!)", +DlgTemplatesReplace : "Erstat det faktiske indhold", + +// About Dialog +DlgAboutAboutTab : "Om", +DlgAboutBrowserInfoTab : "Generelt", +DlgAboutLicenseTab : "Licens", +DlgAboutVersion : "version", +DlgAboutInfo : "For yderlig information gå til", + +// Div Dialog +DlgDivGeneralTab : "Generelt", +DlgDivAdvancedTab : "Avanceret", +DlgDivStyle : "Style", +DlgDivInlineStyle : "Inline style", + +ScaytTitle : "SCAYT", //MISSING +ScaytTitleOptions : "Options", //MISSING +ScaytTitleLangs : "Languages", //MISSING +ScaytTitleAbout : "About" //MISSING +}; diff --git a/fckeditor/FCKeditor/editor/lang/de.js b/fckeditor/FCKeditor/editor/lang/de.js new file mode 100644 index 0000000..1d55a76 --- /dev/null +++ b/fckeditor/FCKeditor/editor/lang/de.js @@ -0,0 +1,539 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * German language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Symbolleiste einklappen", +ToolbarExpand : "Symbolleiste ausklappen", + +// Toolbar Items and Context Menu +Save : "Speichern", +NewPage : "Neue Seite", +Preview : "Vorschau", +Cut : "Ausschneiden", +Copy : "Kopieren", +Paste : "Einfügen", +PasteText : "aus Textdatei einfügen", +PasteWord : "aus MS-Word einfügen", +Print : "Drucken", +SelectAll : "Alles auswählen", +RemoveFormat : "Formatierungen entfernen", +InsertLinkLbl : "Link", +InsertLink : "Link einfügen/editieren", +RemoveLink : "Link entfernen", +VisitLink : "Link aufrufen", +Anchor : "Anker einfügen/editieren", +AnchorDelete : "Anker entfernen", +InsertImageLbl : "Bild", +InsertImage : "Bild einfügen/editieren", +InsertFlashLbl : "Flash", +InsertFlash : "Flash einfügen/editieren", +InsertTableLbl : "Tabelle", +InsertTable : "Tabelle einfügen/editieren", +InsertLineLbl : "Linie", +InsertLine : "Horizontale Linie einfügen", +InsertSpecialCharLbl: "Sonderzeichen", +InsertSpecialChar : "Sonderzeichen einfügen/editieren", +InsertSmileyLbl : "Smiley", +InsertSmiley : "Smiley einfügen", +About : "Über FCKeditor", +Bold : "Fett", +Italic : "Kursiv", +Underline : "Unterstrichen", +StrikeThrough : "Durchgestrichen", +Subscript : "Tiefgestellt", +Superscript : "Hochgestellt", +LeftJustify : "Linksbündig", +CenterJustify : "Zentriert", +RightJustify : "Rechtsbündig", +BlockJustify : "Blocksatz", +DecreaseIndent : "Einzug verringern", +IncreaseIndent : "Einzug erhöhen", +Blockquote : "Zitatblock", +CreateDiv : "Erzeuge Div Block", +EditDiv : "Bearbeite Div Block", +DeleteDiv : "Entferne Div Block", +Undo : "Rückgängig", +Redo : "Wiederherstellen", +NumberedListLbl : "Nummerierte Liste", +NumberedList : "Nummerierte Liste einfügen/entfernen", +BulletedListLbl : "Liste", +BulletedList : "Liste einfügen/entfernen", +ShowTableBorders : "Zeige Tabellenrahmen", +ShowDetails : "Zeige Details", +Style : "Stil", +FontFormat : "Format", +Font : "Schriftart", +FontSize : "Größe", +TextColor : "Textfarbe", +BGColor : "Hintergrundfarbe", +Source : "Quellcode", +Find : "Suchen", +Replace : "Ersetzen", +SpellCheck : "Rechtschreibprüfung", +UniversalKeyboard : "Universal-Tastatur", +PageBreakLbl : "Seitenumbruch", +PageBreak : "Seitenumbruch einfügen", + +Form : "Formular", +Checkbox : "Checkbox", +RadioButton : "Radiobutton", +TextField : "Textfeld einzeilig", +Textarea : "Textfeld mehrzeilig", +HiddenField : "verstecktes Feld", +Button : "Klickbutton", +SelectionField : "Auswahlfeld", +ImageButton : "Bildbutton", + +FitWindow : "Editor maximieren", +ShowBlocks : "Blöcke anzeigen", + +// Context Menu +EditLink : "Link editieren", +CellCM : "Zelle", +RowCM : "Zeile", +ColumnCM : "Spalte", +InsertRowAfter : "Zeile unterhalb einfügen", +InsertRowBefore : "Zeile oberhalb einfügen", +DeleteRows : "Zeile entfernen", +InsertColumnAfter : "Spalte rechts danach einfügen", +InsertColumnBefore : "Spalte links davor einfügen", +DeleteColumns : "Spalte löschen", +InsertCellAfter : "Zelle danach einfügen", +InsertCellBefore : "Zelle davor einfügen", +DeleteCells : "Zelle löschen", +MergeCells : "Zellen verbinden", +MergeRight : "nach rechts verbinden", +MergeDown : "nach unten verbinden", +HorizontalSplitCell : "Zelle horizontal teilen", +VerticalSplitCell : "Zelle vertikal teilen", +TableDelete : "Tabelle löschen", +CellProperties : "Zellen-Eigenschaften", +TableProperties : "Tabellen-Eigenschaften", +ImageProperties : "Bild-Eigenschaften", +FlashProperties : "Flash-Eigenschaften", + +AnchorProp : "Anker-Eigenschaften", +ButtonProp : "Button-Eigenschaften", +CheckboxProp : "Checkbox-Eigenschaften", +HiddenFieldProp : "Verstecktes Feld-Eigenschaften", +RadioButtonProp : "Optionsfeld-Eigenschaften", +ImageButtonProp : "Bildbutton-Eigenschaften", +TextFieldProp : "Textfeld (einzeilig) Eigenschaften", +SelectionFieldProp : "Auswahlfeld-Eigenschaften", +TextareaProp : "Textfeld (mehrzeilig) Eigenschaften", +FormProp : "Formular-Eigenschaften", + +FontFormats : "Normal;Formatiert;Addresse;Überschrift 1;Überschrift 2;Überschrift 3;Überschrift 4;Überschrift 5;Überschrift 6;Normal (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Bearbeite XHTML. Bitte warten...", +Done : "Fertig", +PasteWordConfirm : "Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?", +NotCompatiblePaste : "Diese Funktion steht nur im Internet Explorer ab Version 5.5 zur Verfügung. Möchten Sie den Text unbereinigt einfügen?", +UnknownToolbarItem : "Unbekanntes Menüleisten-Objekt \"%1\"", +UnknownCommand : "Unbekannter Befehl \"%1\"", +NotImplemented : "Befehl nicht implementiert", +UnknownToolbarSet : "Menüleiste \"%1\" existiert nicht", +NoActiveX : "Die Sicherheitseinstellungen Ihres Browsers beschränken evtl. einige Funktionen des Editors. Aktivieren Sie die Option \"ActiveX-Steuerelemente und Plugins ausführen\" in den Sicherheitseinstellungen, um diese Funktionen nutzen zu können", +BrowseServerBlocked : "Ein Auswahlfenster konnte nicht geöffnet werden. Stellen Sie sicher, das alle Popup-Blocker ausgeschaltet sind.", +DialogBlocked : "Das Dialog-Fenster konnte nicht geöffnet werden. Stellen Sie sicher, das alle Popup-Blocker ausgeschaltet sind.", +VisitLinkBlocked : "Es war leider nicht möglich ein neues Fenster zu öffnen. Bitte versichern Sie sich das der Popup-Blocker ausgeschaltet ist.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Abbrechen", +DlgBtnClose : "Schließen", +DlgBtnBrowseServer : "Server durchsuchen", +DlgAdvancedTag : "Erweitert", +DlgOpOther : "", +DlgInfoTab : "Info", +DlgAlertUrl : "Bitte tragen Sie die URL ein", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "ID", +DlgGenLangDir : "Schreibrichtung", +DlgGenLangDirLtr : "Links nach Rechts (LTR)", +DlgGenLangDirRtl : "Rechts nach Links (RTL)", +DlgGenLangCode : "Sprachenkürzel", +DlgGenAccessKey : "Zugriffstaste", +DlgGenName : "Name", +DlgGenTabIndex : "Tab-Index", +DlgGenLongDescr : "Langform URL", +DlgGenClass : "Stylesheet Klasse", +DlgGenTitle : "Titel Beschreibung", +DlgGenContType : "Inhaltstyp", +DlgGenLinkCharset : "Ziel-Zeichensatz", +DlgGenStyle : "Style", + +// Image Dialog +DlgImgTitle : "Bild-Eigenschaften", +DlgImgInfoTab : "Bild-Info", +DlgImgBtnUpload : "Zum Server senden", +DlgImgURL : "Bildauswahl", +DlgImgUpload : "Upload", +DlgImgAlt : "Alternativer Text", +DlgImgWidth : "Breite", +DlgImgHeight : "Höhe", +DlgImgLockRatio : "Größenverhältniss beibehalten", +DlgBtnResetSize : "Größe zurücksetzen", +DlgImgBorder : "Rahmen", +DlgImgHSpace : "Horizontal-Abstand", +DlgImgVSpace : "Vertikal-Abstand", +DlgImgAlign : "Ausrichtung", +DlgImgAlignLeft : "Links", +DlgImgAlignAbsBottom: "Abs Unten", +DlgImgAlignAbsMiddle: "Abs Mitte", +DlgImgAlignBaseline : "Baseline", +DlgImgAlignBottom : "Unten", +DlgImgAlignMiddle : "Mitte", +DlgImgAlignRight : "Rechts", +DlgImgAlignTextTop : "Text Oben", +DlgImgAlignTop : "Oben", +DlgImgPreview : "Vorschau", +DlgImgAlertUrl : "Bitte geben Sie die Bild-URL an", +DlgImgLinkTab : "Link", + +// Flash Dialog +DlgFlashTitle : "Flash-Eigenschaften", +DlgFlashChkPlay : "autom. Abspielen", +DlgFlashChkLoop : "Endlosschleife", +DlgFlashChkMenu : "Flash-Menü aktivieren", +DlgFlashScale : "Skalierung", +DlgFlashScaleAll : "Alles anzeigen", +DlgFlashScaleNoBorder : "ohne Rand", +DlgFlashScaleFit : "Passgenau", + +// Link Dialog +DlgLnkWindowTitle : "Link", +DlgLnkInfoTab : "Link-Info", +DlgLnkTargetTab : "Zielseite", + +DlgLnkType : "Link-Typ", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Anker in dieser Seite", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protokoll", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Anker auswählen", +DlgLnkAnchorByName : "nach Anker Name", +DlgLnkAnchorById : "nach Element Id", +DlgLnkNoAnchors : "(keine Anker im Dokument vorhanden)", +DlgLnkEMail : "E-Mail Addresse", +DlgLnkEMailSubject : "Betreffzeile", +DlgLnkEMailBody : "Nachrichtentext", +DlgLnkUpload : "Upload", +DlgLnkBtnUpload : "Zum Server senden", + +DlgLnkTarget : "Zielseite", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Neues Fenster (_blank)", +DlgLnkTargetParent : "Oberes Fenster (_parent)", +DlgLnkTargetSelf : "Gleiches Fenster (_self)", +DlgLnkTargetTop : "Oberstes Fenster (_top)", +DlgLnkTargetFrameName : "Ziel-Fenster-Name", +DlgLnkPopWinName : "Pop-up Fenster-Name", +DlgLnkPopWinFeat : "Pop-up Fenster-Eigenschaften", +DlgLnkPopResize : "Vergrößerbar", +DlgLnkPopLocation : "Adress-Leiste", +DlgLnkPopMenu : "Menü-Leiste", +DlgLnkPopScroll : "Rollbalken", +DlgLnkPopStatus : "Statusleiste", +DlgLnkPopToolbar : "Werkzeugleiste", +DlgLnkPopFullScrn : "Vollbild (IE)", +DlgLnkPopDependent : "Abhängig (Netscape)", +DlgLnkPopWidth : "Breite", +DlgLnkPopHeight : "Höhe", +DlgLnkPopLeft : "Linke Position", +DlgLnkPopTop : "Obere Position", + +DlnLnkMsgNoUrl : "Bitte geben Sie die Link-URL an", +DlnLnkMsgNoEMail : "Bitte geben Sie e-Mail Adresse an", +DlnLnkMsgNoAnchor : "Bitte wählen Sie einen Anker aus", +DlnLnkMsgInvPopName : "Der Name des Popups muss mit einem Buchstaben beginnen und darf keine Leerzeichen enthalten", + +// Color Dialog +DlgColorTitle : "Farbauswahl", +DlgColorBtnClear : "Keine Farbe", +DlgColorHighlight : "Vorschau", +DlgColorSelected : "Ausgewählt", + +// Smiley Dialog +DlgSmileyTitle : "Smiley auswählen", + +// Special Character Dialog +DlgSpecialCharTitle : "Sonderzeichen auswählen", + +// Table Dialog +DlgTableTitle : "Tabellen-Eigenschaften", +DlgTableRows : "Zeile", +DlgTableColumns : "Spalte", +DlgTableBorder : "Rahmen", +DlgTableAlign : "Ausrichtung", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Links", +DlgTableAlignCenter : "Zentriert", +DlgTableAlignRight : "Rechts", +DlgTableWidth : "Breite", +DlgTableWidthPx : "Pixel", +DlgTableWidthPc : "%", +DlgTableHeight : "Höhe", +DlgTableCellSpace : "Zellenabstand außen", +DlgTableCellPad : "Zellenabstand innen", +DlgTableCaption : "Überschrift", +DlgTableSummary : "Inhaltsübersicht", +DlgTableHeaders : "Headers", //MISSING +DlgTableHeadersNone : "None", //MISSING +DlgTableHeadersColumn : "First column", //MISSING +DlgTableHeadersRow : "First Row", //MISSING +DlgTableHeadersBoth : "Both", //MISSING + +// Table Cell Dialog +DlgCellTitle : "Zellen-Eigenschaften", +DlgCellWidth : "Breite", +DlgCellWidthPx : "Pixel", +DlgCellWidthPc : "%", +DlgCellHeight : "Höhe", +DlgCellWordWrap : "Umbruch", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Ja", +DlgCellWordWrapNo : "Nein", +DlgCellHorAlign : "Horizontale Ausrichtung", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Links", +DlgCellHorAlignCenter : "Zentriert", +DlgCellHorAlignRight: "Rechts", +DlgCellVerAlign : "Vertikale Ausrichtung", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Oben", +DlgCellVerAlignMiddle : "Mitte", +DlgCellVerAlignBottom : "Unten", +DlgCellVerAlignBaseline : "Grundlinie", +DlgCellType : "Cell Type", //MISSING +DlgCellTypeData : "Data", //MISSING +DlgCellTypeHeader : "Header", //MISSING +DlgCellRowSpan : "Zeilen zusammenfassen", +DlgCellCollSpan : "Spalten zusammenfassen", +DlgCellBackColor : "Hintergrundfarbe", +DlgCellBorderColor : "Rahmenfarbe", +DlgCellBtnSelect : "Auswahl...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Suchen und Ersetzen", + +// Find Dialog +DlgFindTitle : "Finden", +DlgFindFindBtn : "Finden", +DlgFindNotFoundMsg : "Der gesuchte Text wurde nicht gefunden.", + +// Replace Dialog +DlgReplaceTitle : "Ersetzen", +DlgReplaceFindLbl : "Suche nach:", +DlgReplaceReplaceLbl : "Ersetze mit:", +DlgReplaceCaseChk : "Groß-Kleinschreibung beachten", +DlgReplaceReplaceBtn : "Ersetzen", +DlgReplaceReplAllBtn : "Alle Ersetzen", +DlgReplaceWordChk : "Nur ganze Worte suchen", + +// Paste Operations / Dialog +PasteErrorCut : "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).", +PasteErrorCopy : "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).", + +PasteAsText : "Als Text einfügen", +PasteFromWord : "Aus Word einfügen", + +DlgPasteMsg2 : "Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit Strg+V) ein und bestätigen Sie mit OK.", +DlgPasteSec : "Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.", +DlgPasteIgnoreFont : "Ignoriere Schriftart-Definitionen", +DlgPasteRemoveStyles : "Entferne Style-Definitionen", + +// Color Picker +ColorAutomatic : "Automatisch", +ColorMoreColors : "Weitere Farben...", + +// Document Properties +DocProps : "Dokument-Eigenschaften", + +// Anchor Dialog +DlgAnchorTitle : "Anker-Eigenschaften", +DlgAnchorName : "Anker Name", +DlgAnchorErrorName : "Bitte geben Sie den Namen des Ankers ein", + +// Speller Pages Dialog +DlgSpellNotInDic : "Nicht im Wörterbuch", +DlgSpellChangeTo : "Ändern in", +DlgSpellBtnIgnore : "Ignorieren", +DlgSpellBtnIgnoreAll : "Alle Ignorieren", +DlgSpellBtnReplace : "Ersetzen", +DlgSpellBtnReplaceAll : "Alle Ersetzen", +DlgSpellBtnUndo : "Rückgängig", +DlgSpellNoSuggestions : " - keine Vorschläge - ", +DlgSpellProgress : "Rechtschreibprüfung läuft...", +DlgSpellNoMispell : "Rechtschreibprüfung abgeschlossen - keine Fehler gefunden", +DlgSpellNoChanges : "Rechtschreibprüfung abgeschlossen - keine Worte geändert", +DlgSpellOneChange : "Rechtschreibprüfung abgeschlossen - ein Wort geändert", +DlgSpellManyChanges : "Rechtschreibprüfung abgeschlossen - %1 Wörter geändert", + +IeSpellDownload : "Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?", + +// Button Dialog +DlgButtonText : "Text (Wert)", +DlgButtonType : "Typ", +DlgButtonTypeBtn : "Button", +DlgButtonTypeSbm : "Absenden", +DlgButtonTypeRst : "Zurücksetzen", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Name", +DlgCheckboxValue : "Wert", +DlgCheckboxSelected : "ausgewählt", + +// Form Dialog +DlgFormName : "Name", +DlgFormAction : "Action", +DlgFormMethod : "Method", + +// Select Field Dialog +DlgSelectName : "Name", +DlgSelectValue : "Wert", +DlgSelectSize : "Größe", +DlgSelectLines : "Linien", +DlgSelectChkMulti : "Erlaube Mehrfachauswahl", +DlgSelectOpAvail : "Mögliche Optionen", +DlgSelectOpText : "Text", +DlgSelectOpValue : "Wert", +DlgSelectBtnAdd : "Hinzufügen", +DlgSelectBtnModify : "Ändern", +DlgSelectBtnUp : "Hoch", +DlgSelectBtnDown : "Runter", +DlgSelectBtnSetValue : "Setze als Standardwert", +DlgSelectBtnDelete : "Entfernen", + +// Textarea Dialog +DlgTextareaName : "Name", +DlgTextareaCols : "Spalten", +DlgTextareaRows : "Reihen", + +// Text Field Dialog +DlgTextName : "Name", +DlgTextValue : "Wert", +DlgTextCharWidth : "Zeichenbreite", +DlgTextMaxChars : "Max. Zeichen", +DlgTextType : "Typ", +DlgTextTypeText : "Text", +DlgTextTypePass : "Passwort", + +// Hidden Field Dialog +DlgHiddenName : "Name", +DlgHiddenValue : "Wert", + +// Bulleted List Dialog +BulletedListProp : "Listen-Eigenschaften", +NumberedListProp : "Nummerierte Listen-Eigenschaften", +DlgLstStart : "Start", +DlgLstType : "Typ", +DlgLstTypeCircle : "Ring", +DlgLstTypeDisc : "Kreis", +DlgLstTypeSquare : "Quadrat", +DlgLstTypeNumbers : "Nummern (1, 2, 3)", +DlgLstTypeLCase : "Kleinbuchstaben (a, b, c)", +DlgLstTypeUCase : "Großbuchstaben (A, B, C)", +DlgLstTypeSRoman : "Kleine römische Zahlen (i, ii, iii)", +DlgLstTypeLRoman : "Große römische Zahlen (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Allgemein", +DlgDocBackTab : "Hintergrund", +DlgDocColorsTab : "Farben und Abstände", +DlgDocMetaTab : "Metadaten", + +DlgDocPageTitle : "Seitentitel", +DlgDocLangDir : "Schriftrichtung", +DlgDocLangDirLTR : "Links nach Rechts", +DlgDocLangDirRTL : "Rechts nach Links", +DlgDocLangCode : "Sprachkürzel", +DlgDocCharSet : "Zeichenkodierung", +DlgDocCharSetCE : "Zentraleuropäisch", +DlgDocCharSetCT : "traditionell Chinesisch (Big5)", +DlgDocCharSetCR : "Kyrillisch", +DlgDocCharSetGR : "Griechisch", +DlgDocCharSetJP : "Japanisch", +DlgDocCharSetKR : "Koreanisch", +DlgDocCharSetTR : "Türkisch", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Westeuropäisch", +DlgDocCharSetOther : "Andere Zeichenkodierung", + +DlgDocDocType : "Dokumententyp", +DlgDocDocTypeOther : "Anderer Dokumententyp", +DlgDocIncXHTML : "Beziehe XHTML Deklarationen ein", +DlgDocBgColor : "Hintergrundfarbe", +DlgDocBgImage : "Hintergrundbild URL", +DlgDocBgNoScroll : "feststehender Hintergrund", +DlgDocCText : "Text", +DlgDocCLink : "Link", +DlgDocCVisited : "Besuchter Link", +DlgDocCActive : "Aktiver Link", +DlgDocMargins : "Seitenränder", +DlgDocMaTop : "Oben", +DlgDocMaLeft : "Links", +DlgDocMaRight : "Rechts", +DlgDocMaBottom : "Unten", +DlgDocMeIndex : "Schlüsselwörter (durch Komma getrennt)", +DlgDocMeDescr : "Dokument-Beschreibung", +DlgDocMeAuthor : "Autor", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Vorschau", + +// Templates Dialog +Templates : "Vorlagen", +DlgTemplatesTitle : "Vorlagen", +DlgTemplatesSelMsg : "Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen:", +DlgTemplatesLoading : "Liste der Vorlagen wird geladen. Bitte warten...", +DlgTemplatesNoTpl : "(keine Vorlagen definiert)", +DlgTemplatesReplace : "Aktuellen Inhalt ersetzen", + +// About Dialog +DlgAboutAboutTab : "Über", +DlgAboutBrowserInfoTab : "Browser-Info", +DlgAboutLicenseTab : "Lizenz", +DlgAboutVersion : "Version", +DlgAboutInfo : "Für weitere Informationen siehe", + +// Div Dialog +DlgDivGeneralTab : "Allgemein", +DlgDivAdvancedTab : "Erweitert", +DlgDivStyle : "Style", +DlgDivInlineStyle : "Inline Style", + +ScaytTitle : "SCAYT", //MISSING +ScaytTitleOptions : "Options", //MISSING +ScaytTitleLangs : "Languages", //MISSING +ScaytTitleAbout : "About" //MISSING +}; diff --git a/fckeditor/FCKeditor/editor/lang/en.js b/fckeditor/FCKeditor/editor/lang/en.js new file mode 100644 index 0000000..3356518 --- /dev/null +++ b/fckeditor/FCKeditor/editor/lang/en.js @@ -0,0 +1,539 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * English language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Collapse Toolbar", +ToolbarExpand : "Expand Toolbar", + +// Toolbar Items and Context Menu +Save : "Save", +NewPage : "New Page", +Preview : "Preview", +Cut : "Cut", +Copy : "Copy", +Paste : "Paste", +PasteText : "Paste as plain text", +PasteWord : "Paste from Word", +Print : "Print", +SelectAll : "Select All", +RemoveFormat : "Remove Format", +InsertLinkLbl : "Link", +InsertLink : "Insert/Edit Link", +RemoveLink : "Remove Link", +VisitLink : "Open Link", +Anchor : "Insert/Edit Anchor", +AnchorDelete : "Remove Anchor", +InsertImageLbl : "Image", +InsertImage : "Insert/Edit Image", +InsertFlashLbl : "Flash", +InsertFlash : "Insert/Edit Flash", +InsertTableLbl : "Table", +InsertTable : "Insert/Edit Table", +InsertLineLbl : "Line", +InsertLine : "Insert Horizontal Line", +InsertSpecialCharLbl: "Special Character", +InsertSpecialChar : "Insert Special Character", +InsertSmileyLbl : "Smiley", +InsertSmiley : "Insert Smiley", +About : "About FCKeditor", +Bold : "Bold", +Italic : "Italic", +Underline : "Underline", +StrikeThrough : "Strike Through", +Subscript : "Subscript", +Superscript : "Superscript", +LeftJustify : "Left Justify", +CenterJustify : "Center Justify", +RightJustify : "Right Justify", +BlockJustify : "Block Justify", +DecreaseIndent : "Decrease Indent", +IncreaseIndent : "Increase Indent", +Blockquote : "Blockquote", +CreateDiv : "Create Div Container", +EditDiv : "Edit Div Container", +DeleteDiv : "Remove Div Container", +Undo : "Undo", +Redo : "Redo", +NumberedListLbl : "Numbered List", +NumberedList : "Insert/Remove Numbered List", +BulletedListLbl : "Bulleted List", +BulletedList : "Insert/Remove Bulleted List", +ShowTableBorders : "Show Table Borders", +ShowDetails : "Show Details", +Style : "Style", +FontFormat : "Format", +Font : "Font", +FontSize : "Size", +TextColor : "Text Color", +BGColor : "Background Color", +Source : "Source", +Find : "Find", +Replace : "Replace", +SpellCheck : "Check Spelling", +UniversalKeyboard : "Universal Keyboard", +PageBreakLbl : "Page Break", +PageBreak : "Insert Page Break", + +Form : "Form", +Checkbox : "Checkbox", +RadioButton : "Radio Button", +TextField : "Text Field", +Textarea : "Textarea", +HiddenField : "Hidden Field", +Button : "Button", +SelectionField : "Selection Field", +ImageButton : "Image Button", + +FitWindow : "Maximize the editor size", +ShowBlocks : "Show Blocks", + +// Context Menu +EditLink : "Edit Link", +CellCM : "Cell", +RowCM : "Row", +ColumnCM : "Column", +InsertRowAfter : "Insert Row After", +InsertRowBefore : "Insert Row Before", +DeleteRows : "Delete Rows", +InsertColumnAfter : "Insert Column After", +InsertColumnBefore : "Insert Column Before", +DeleteColumns : "Delete Columns", +InsertCellAfter : "Insert Cell After", +InsertCellBefore : "Insert Cell Before", +DeleteCells : "Delete Cells", +MergeCells : "Merge Cells", +MergeRight : "Merge Right", +MergeDown : "Merge Down", +HorizontalSplitCell : "Split Cell Horizontally", +VerticalSplitCell : "Split Cell Vertically", +TableDelete : "Delete Table", +CellProperties : "Cell Properties", +TableProperties : "Table Properties", +ImageProperties : "Image Properties", +FlashProperties : "Flash Properties", + +AnchorProp : "Anchor Properties", +ButtonProp : "Button Properties", +CheckboxProp : "Checkbox Properties", +HiddenFieldProp : "Hidden Field Properties", +RadioButtonProp : "Radio Button Properties", +ImageButtonProp : "Image Button Properties", +TextFieldProp : "Text Field Properties", +SelectionFieldProp : "Selection Field Properties", +TextareaProp : "Textarea Properties", +FormProp : "Form Properties", + +FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Processing XHTML. Please wait...", +Done : "Done", +PasteWordConfirm : "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?", +NotCompatiblePaste : "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?", +UnknownToolbarItem : "Unknown toolbar item \"%1\"", +UnknownCommand : "Unknown command name \"%1\"", +NotImplemented : "Command not implemented", +UnknownToolbarSet : "Toolbar set \"%1\" doesn't exist", +NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", +BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", +DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", +VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Cancel", +DlgBtnClose : "Close", +DlgBtnBrowseServer : "Browse Server", +DlgAdvancedTag : "Advanced", +DlgOpOther : "", +DlgInfoTab : "Info", +DlgAlertUrl : "Please insert the URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Language Direction", +DlgGenLangDirLtr : "Left to Right (LTR)", +DlgGenLangDirRtl : "Right to Left (RTL)", +DlgGenLangCode : "Language Code", +DlgGenAccessKey : "Access Key", +DlgGenName : "Name", +DlgGenTabIndex : "Tab Index", +DlgGenLongDescr : "Long Description URL", +DlgGenClass : "Stylesheet Classes", +DlgGenTitle : "Advisory Title", +DlgGenContType : "Advisory Content Type", +DlgGenLinkCharset : "Linked Resource Charset", +DlgGenStyle : "Style", + +// Image Dialog +DlgImgTitle : "Image Properties", +DlgImgInfoTab : "Image Info", +DlgImgBtnUpload : "Send it to the Server", +DlgImgURL : "URL", +DlgImgUpload : "Upload", +DlgImgAlt : "Alternative Text", +DlgImgWidth : "Width", +DlgImgHeight : "Height", +DlgImgLockRatio : "Lock Ratio", +DlgBtnResetSize : "Reset Size", +DlgImgBorder : "Border", +DlgImgHSpace : "HSpace", +DlgImgVSpace : "VSpace", +DlgImgAlign : "Align", +DlgImgAlignLeft : "Left", +DlgImgAlignAbsBottom: "Abs Bottom", +DlgImgAlignAbsMiddle: "Abs Middle", +DlgImgAlignBaseline : "Baseline", +DlgImgAlignBottom : "Bottom", +DlgImgAlignMiddle : "Middle", +DlgImgAlignRight : "Right", +DlgImgAlignTextTop : "Text Top", +DlgImgAlignTop : "Top", +DlgImgPreview : "Preview", +DlgImgAlertUrl : "Please type the image URL", +DlgImgLinkTab : "Link", + +// Flash Dialog +DlgFlashTitle : "Flash Properties", +DlgFlashChkPlay : "Auto Play", +DlgFlashChkLoop : "Loop", +DlgFlashChkMenu : "Enable Flash Menu", +DlgFlashScale : "Scale", +DlgFlashScaleAll : "Show all", +DlgFlashScaleNoBorder : "No Border", +DlgFlashScaleFit : "Exact Fit", + +// Link Dialog +DlgLnkWindowTitle : "Link", +DlgLnkInfoTab : "Link Info", +DlgLnkTargetTab : "Target", + +DlgLnkType : "Link Type", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Link to anchor in the text", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protocol", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Select an Anchor", +DlgLnkAnchorByName : "By Anchor Name", +DlgLnkAnchorById : "By Element Id", +DlgLnkNoAnchors : "(No anchors available in the document)", +DlgLnkEMail : "E-Mail Address", +DlgLnkEMailSubject : "Message Subject", +DlgLnkEMailBody : "Message Body", +DlgLnkUpload : "Upload", +DlgLnkBtnUpload : "Send it to the Server", + +DlgLnkTarget : "Target", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "New Window (_blank)", +DlgLnkTargetParent : "Parent Window (_parent)", +DlgLnkTargetSelf : "Same Window (_self)", +DlgLnkTargetTop : "Topmost Window (_top)", +DlgLnkTargetFrameName : "Target Frame Name", +DlgLnkPopWinName : "Popup Window Name", +DlgLnkPopWinFeat : "Popup Window Features", +DlgLnkPopResize : "Resizable", +DlgLnkPopLocation : "Location Bar", +DlgLnkPopMenu : "Menu Bar", +DlgLnkPopScroll : "Scroll Bars", +DlgLnkPopStatus : "Status Bar", +DlgLnkPopToolbar : "Toolbar", +DlgLnkPopFullScrn : "Full Screen (IE)", +DlgLnkPopDependent : "Dependent (Netscape)", +DlgLnkPopWidth : "Width", +DlgLnkPopHeight : "Height", +DlgLnkPopLeft : "Left Position", +DlgLnkPopTop : "Top Position", + +DlnLnkMsgNoUrl : "Please type the link URL", +DlnLnkMsgNoEMail : "Please type the e-mail address", +DlnLnkMsgNoAnchor : "Please select an anchor", +DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", + +// Color Dialog +DlgColorTitle : "Select Color", +DlgColorBtnClear : "Clear", +DlgColorHighlight : "Highlight", +DlgColorSelected : "Selected", + +// Smiley Dialog +DlgSmileyTitle : "Insert a Smiley", + +// Special Character Dialog +DlgSpecialCharTitle : "Select Special Character", + +// Table Dialog +DlgTableTitle : "Table Properties", +DlgTableRows : "Rows", +DlgTableColumns : "Columns", +DlgTableBorder : "Border size", +DlgTableAlign : "Alignment", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Left", +DlgTableAlignCenter : "Center", +DlgTableAlignRight : "Right", +DlgTableWidth : "Width", +DlgTableWidthPx : "pixels", +DlgTableWidthPc : "percent", +DlgTableHeight : "Height", +DlgTableCellSpace : "Cell spacing", +DlgTableCellPad : "Cell padding", +DlgTableCaption : "Caption", +DlgTableSummary : "Summary", +DlgTableHeaders : "Headers", +DlgTableHeadersNone : "None", +DlgTableHeadersColumn : "First column", +DlgTableHeadersRow : "First Row", +DlgTableHeadersBoth : "Both", + +// Table Cell Dialog +DlgCellTitle : "Cell Properties", +DlgCellWidth : "Width", +DlgCellWidthPx : "pixels", +DlgCellWidthPc : "percent", +DlgCellHeight : "Height", +DlgCellWordWrap : "Word Wrap", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Yes", +DlgCellWordWrapNo : "No", +DlgCellHorAlign : "Horizontal Alignment", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Left", +DlgCellHorAlignCenter : "Center", +DlgCellHorAlignRight: "Right", +DlgCellVerAlign : "Vertical Alignment", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Top", +DlgCellVerAlignMiddle : "Middle", +DlgCellVerAlignBottom : "Bottom", +DlgCellVerAlignBaseline : "Baseline", +DlgCellType : "Cell Type", +DlgCellTypeData : "Data", +DlgCellTypeHeader : "Header", +DlgCellRowSpan : "Rows Span", +DlgCellCollSpan : "Columns Span", +DlgCellBackColor : "Background Color", +DlgCellBorderColor : "Border Color", +DlgCellBtnSelect : "Select...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", + +// Find Dialog +DlgFindTitle : "Find", +DlgFindFindBtn : "Find", +DlgFindNotFoundMsg : "The specified text was not found.", + +// Replace Dialog +DlgReplaceTitle : "Replace", +DlgReplaceFindLbl : "Find what:", +DlgReplaceReplaceLbl : "Replace with:", +DlgReplaceCaseChk : "Match case", +DlgReplaceReplaceBtn : "Replace", +DlgReplaceReplAllBtn : "Replace All", +DlgReplaceWordChk : "Match whole word", + +// Paste Operations / Dialog +PasteErrorCut : "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).", +PasteErrorCopy : "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).", + +PasteAsText : "Paste as Plain Text", +PasteFromWord : "Paste from Word", + +DlgPasteMsg2 : "Please paste inside the following box using the keyboard (Ctrl+V) and hit OK.", +DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", +DlgPasteIgnoreFont : "Ignore Font Face definitions", +DlgPasteRemoveStyles : "Remove Styles definitions", + +// Color Picker +ColorAutomatic : "Automatic", +ColorMoreColors : "More Colors...", + +// Document Properties +DocProps : "Document Properties", + +// Anchor Dialog +DlgAnchorTitle : "Anchor Properties", +DlgAnchorName : "Anchor Name", +DlgAnchorErrorName : "Please type the anchor name", + +// Speller Pages Dialog +DlgSpellNotInDic : "Not in dictionary", +DlgSpellChangeTo : "Change to", +DlgSpellBtnIgnore : "Ignore", +DlgSpellBtnIgnoreAll : "Ignore All", +DlgSpellBtnReplace : "Replace", +DlgSpellBtnReplaceAll : "Replace All", +DlgSpellBtnUndo : "Undo", +DlgSpellNoSuggestions : "- No suggestions -", +DlgSpellProgress : "Spell check in progress...", +DlgSpellNoMispell : "Spell check complete: No misspellings found", +DlgSpellNoChanges : "Spell check complete: No words changed", +DlgSpellOneChange : "Spell check complete: One word changed", +DlgSpellManyChanges : "Spell check complete: %1 words changed", + +IeSpellDownload : "Spell checker not installed. Do you want to download it now?", + +// Button Dialog +DlgButtonText : "Text (Value)", +DlgButtonType : "Type", +DlgButtonTypeBtn : "Button", +DlgButtonTypeSbm : "Submit", +DlgButtonTypeRst : "Reset", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Name", +DlgCheckboxValue : "Value", +DlgCheckboxSelected : "Selected", + +// Form Dialog +DlgFormName : "Name", +DlgFormAction : "Action", +DlgFormMethod : "Method", + +// Select Field Dialog +DlgSelectName : "Name", +DlgSelectValue : "Value", +DlgSelectSize : "Size", +DlgSelectLines : "lines", +DlgSelectChkMulti : "Allow multiple selections", +DlgSelectOpAvail : "Available Options", +DlgSelectOpText : "Text", +DlgSelectOpValue : "Value", +DlgSelectBtnAdd : "Add", +DlgSelectBtnModify : "Modify", +DlgSelectBtnUp : "Up", +DlgSelectBtnDown : "Down", +DlgSelectBtnSetValue : "Set as selected value", +DlgSelectBtnDelete : "Delete", + +// Textarea Dialog +DlgTextareaName : "Name", +DlgTextareaCols : "Columns", +DlgTextareaRows : "Rows", + +// Text Field Dialog +DlgTextName : "Name", +DlgTextValue : "Value", +DlgTextCharWidth : "Character Width", +DlgTextMaxChars : "Maximum Characters", +DlgTextType : "Type", +DlgTextTypeText : "Text", +DlgTextTypePass : "Password", + +// Hidden Field Dialog +DlgHiddenName : "Name", +DlgHiddenValue : "Value", + +// Bulleted List Dialog +BulletedListProp : "Bulleted List Properties", +NumberedListProp : "Numbered List Properties", +DlgLstStart : "Start", +DlgLstType : "Type", +DlgLstTypeCircle : "Circle", +DlgLstTypeDisc : "Disc", +DlgLstTypeSquare : "Square", +DlgLstTypeNumbers : "Numbers (1, 2, 3)", +DlgLstTypeLCase : "Lowercase Letters (a, b, c)", +DlgLstTypeUCase : "Uppercase Letters (A, B, C)", +DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)", +DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "General", +DlgDocBackTab : "Background", +DlgDocColorsTab : "Colors and Margins", +DlgDocMetaTab : "Meta Data", + +DlgDocPageTitle : "Page Title", +DlgDocLangDir : "Language Direction", +DlgDocLangDirLTR : "Left to Right (LTR)", +DlgDocLangDirRTL : "Right to Left (RTL)", +DlgDocLangCode : "Language Code", +DlgDocCharSet : "Character Set Encoding", +DlgDocCharSetCE : "Central European", +DlgDocCharSetCT : "Chinese Traditional (Big5)", +DlgDocCharSetCR : "Cyrillic", +DlgDocCharSetGR : "Greek", +DlgDocCharSetJP : "Japanese", +DlgDocCharSetKR : "Korean", +DlgDocCharSetTR : "Turkish", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Western European", +DlgDocCharSetOther : "Other Character Set Encoding", + +DlgDocDocType : "Document Type Heading", +DlgDocDocTypeOther : "Other Document Type Heading", +DlgDocIncXHTML : "Include XHTML Declarations", +DlgDocBgColor : "Background Color", +DlgDocBgImage : "Background Image URL", +DlgDocBgNoScroll : "Nonscrolling Background", +DlgDocCText : "Text", +DlgDocCLink : "Link", +DlgDocCVisited : "Visited Link", +DlgDocCActive : "Active Link", +DlgDocMargins : "Page Margins", +DlgDocMaTop : "Top", +DlgDocMaLeft : "Left", +DlgDocMaRight : "Right", +DlgDocMaBottom : "Bottom", +DlgDocMeIndex : "Document Indexing Keywords (comma separated)", +DlgDocMeDescr : "Document Description", +DlgDocMeAuthor : "Author", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Preview", + +// Templates Dialog +Templates : "Templates", +DlgTemplatesTitle : "Content Templates", +DlgTemplatesSelMsg : "Please select the template to open in the editor:", +DlgTemplatesLoading : "Loading templates list. Please wait...", +DlgTemplatesNoTpl : "(No templates defined)", +DlgTemplatesReplace : "Replace actual contents", + +// About Dialog +DlgAboutAboutTab : "About", +DlgAboutBrowserInfoTab : "Browser Info", +DlgAboutLicenseTab : "License", +DlgAboutVersion : "version", +DlgAboutInfo : "For further information go to", + +// Div Dialog +DlgDivGeneralTab : "General", +DlgDivAdvancedTab : "Advanced", +DlgDivStyle : "Style", +DlgDivInlineStyle : "Inline Style", + +ScaytTitle : "SCAYT", +ScaytTitleOptions : "Options", +ScaytTitleLangs : "Languages", +ScaytTitleAbout : "About" +}; diff --git a/fckeditor/FCKeditor/editor/lang/fr.js b/fckeditor/FCKeditor/editor/lang/fr.js new file mode 100644 index 0000000..dad92d3 --- /dev/null +++ b/fckeditor/FCKeditor/editor/lang/fr.js @@ -0,0 +1,539 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * French language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Masquer Outils", +ToolbarExpand : "Afficher Outils", + +// Toolbar Items and Context Menu +Save : "Enregistrer", +NewPage : "Nouvelle page", +Preview : "Prévisualisation", +Cut : "Couper", +Copy : "Copier", +Paste : "Coller", +PasteText : "Coller comme texte", +PasteWord : "Coller de Word", +Print : "Imprimer", +SelectAll : "Tout sélectionner", +RemoveFormat : "Supprimer le format", +InsertLinkLbl : "Lien", +InsertLink : "Insérer/modifier le lien", +RemoveLink : "Supprimer le lien", +VisitLink : "Suivre le lien", +Anchor : "Insérer/modifier l'ancre", +AnchorDelete : "Supprimer l'ancre", +InsertImageLbl : "Image", +InsertImage : "Insérer/modifier l'image", +InsertFlashLbl : "Animation Flash", +InsertFlash : "Insérer/modifier l'animation Flash", +InsertTableLbl : "Tableau", +InsertTable : "Insérer/modifier le tableau", +InsertLineLbl : "Séparateur", +InsertLine : "Insérer un séparateur", +InsertSpecialCharLbl: "Caractères spéciaux", +InsertSpecialChar : "Insérer un caractère spécial", +InsertSmileyLbl : "Smiley", +InsertSmiley : "Insérer un Smiley", +About : "A propos de FCKeditor", +Bold : "Gras", +Italic : "Italique", +Underline : "Souligné", +StrikeThrough : "Barré", +Subscript : "Indice", +Superscript : "Exposant", +LeftJustify : "Aligné à gauche", +CenterJustify : "Centré", +RightJustify : "Aligné à Droite", +BlockJustify : "Texte justifié", +DecreaseIndent : "Diminuer le retrait", +IncreaseIndent : "Augmenter le retrait", +Blockquote : "Citation", +CreateDiv : "Créer Balise Div", +EditDiv : "Modifier Balise Div", +DeleteDiv : "Supprimer Balise Div", +Undo : "Annuler", +Redo : "Refaire", +NumberedListLbl : "Liste numérotée", +NumberedList : "Insérer/supprimer la liste numérotée", +BulletedListLbl : "Liste à puces", +BulletedList : "Insérer/supprimer la liste à puces", +ShowTableBorders : "Afficher les bordures du tableau", +ShowDetails : "Afficher les caractères invisibles", +Style : "Style", +FontFormat : "Format", +Font : "Police", +FontSize : "Taille", +TextColor : "Couleur de caractère", +BGColor : "Couleur de fond", +Source : "Source", +Find : "Chercher", +Replace : "Remplacer", +SpellCheck : "Orthographe", +UniversalKeyboard : "Clavier universel", +PageBreakLbl : "Saut de page", +PageBreak : "Insérer un saut de page", + +Form : "Formulaire", +Checkbox : "Case à cocher", +RadioButton : "Bouton radio", +TextField : "Champ texte", +Textarea : "Zone de texte", +HiddenField : "Champ caché", +Button : "Bouton", +SelectionField : "Liste/menu", +ImageButton : "Bouton image", + +FitWindow : "Edition pleine page", +ShowBlocks : "Afficher les blocs", + +// Context Menu +EditLink : "Modifier le lien", +CellCM : "Cellule", +RowCM : "Ligne", +ColumnCM : "Colonne", +InsertRowAfter : "Insérer une ligne après", +InsertRowBefore : "Insérer une ligne avant", +DeleteRows : "Supprimer des lignes", +InsertColumnAfter : "Insérer une colonne après", +InsertColumnBefore : "Insérer une colonne avant", +DeleteColumns : "Supprimer des colonnes", +InsertCellAfter : "Insérer une cellule après", +InsertCellBefore : "Insérer une cellule avant", +DeleteCells : "Supprimer des cellules", +MergeCells : "Fusionner les cellules", +MergeRight : "Fusionner à droite", +MergeDown : "Fusionner en bas", +HorizontalSplitCell : "Scinder la cellule horizontalement", +VerticalSplitCell : "Scinder la cellule verticalement", +TableDelete : "Supprimer le tableau", +CellProperties : "Propriétés de cellule", +TableProperties : "Propriétés du tableau", +ImageProperties : "Propriétés de l'image", +FlashProperties : "Propriétés de l'animation Flash", + +AnchorProp : "Propriétés de l'ancre", +ButtonProp : "Propriétés du bouton", +CheckboxProp : "Propriétés de la case à cocher", +HiddenFieldProp : "Propriétés du champ caché", +RadioButtonProp : "Propriétés du bouton radio", +ImageButtonProp : "Propriétés du bouton image", +TextFieldProp : "Propriétés du champ texte", +SelectionFieldProp : "Propriétés de la liste/du menu", +TextareaProp : "Propriétés de la zone de texte", +FormProp : "Propriétés du formulaire", + +FontFormats : "Normal;Formaté;Adresse;En-tête 1;En-tête 2;En-tête 3;En-tête 4;En-tête 5;En-tête 6;Normal (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Calcul XHTML. Veuillez patienter...", +Done : "Terminé", +PasteWordConfirm : "Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?", +NotCompatiblePaste : "Cette commande nécessite Internet Explorer version 5.5 minimum. Souhaitez-vous coller sans nettoyage?", +UnknownToolbarItem : "Elément de barre d'outil inconnu \"%1\"", +UnknownCommand : "Nom de commande inconnu \"%1\"", +NotImplemented : "Commande non encore écrite", +UnknownToolbarSet : "La barre d'outils \"%1\" n'existe pas", +NoActiveX : "Les paramètres de sécurité de votre navigateur peuvent limiter quelques fonctionnalités de l'éditeur. Veuillez activer l'option \"Exécuter les contrôles ActiveX et les plug-ins\". Il se peut que vous rencontriez des erreurs et remarquiez quelques limitations.", +BrowseServerBlocked : "Le navigateur n'a pas pu être ouvert. Assurez-vous que les bloqueurs de popups soient désactivés.", +DialogBlocked : "La fenêtre de dialogue n'a pas pu s'ouvrir. Assurez-vous que les bloqueurs de popups soient désactivés.", +VisitLinkBlocked : "Impossible d'ouvrir une nouvelle fenêtre. Assurez-vous que les bloqueurs de popups soient désactivés.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Annuler", +DlgBtnClose : "Fermer", +DlgBtnBrowseServer : "Parcourir le serveur", +DlgAdvancedTag : "Avancé", +DlgOpOther : "", +DlgInfoTab : "Info", +DlgAlertUrl : "Veuillez saisir l'URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Sens d'écriture", +DlgGenLangDirLtr : "De gauche à droite (LTR)", +DlgGenLangDirRtl : "De droite à gauche (RTL)", +DlgGenLangCode : "Code langue", +DlgGenAccessKey : "Equivalent clavier", +DlgGenName : "Nom", +DlgGenTabIndex : "Ordre de tabulation", +DlgGenLongDescr : "URL de description longue", +DlgGenClass : "Classes de feuilles de style", +DlgGenTitle : "Titre", +DlgGenContType : "Type de contenu", +DlgGenLinkCharset : "Encodage de caractère", +DlgGenStyle : "Style", + +// Image Dialog +DlgImgTitle : "Propriétés de l'image", +DlgImgInfoTab : "Informations sur l'image", +DlgImgBtnUpload : "Envoyer sur le serveur", +DlgImgURL : "URL", +DlgImgUpload : "Télécharger", +DlgImgAlt : "Texte de remplacement", +DlgImgWidth : "Largeur", +DlgImgHeight : "Hauteur", +DlgImgLockRatio : "Garder les proportions", +DlgBtnResetSize : "Taille originale", +DlgImgBorder : "Bordure", +DlgImgHSpace : "Espacement horizontal", +DlgImgVSpace : "Espacement vertical", +DlgImgAlign : "Alignement", +DlgImgAlignLeft : "Gauche", +DlgImgAlignAbsBottom: "Abs Bas", +DlgImgAlignAbsMiddle: "Abs Milieu", +DlgImgAlignBaseline : "Bas du texte", +DlgImgAlignBottom : "Bas", +DlgImgAlignMiddle : "Milieu", +DlgImgAlignRight : "Droite", +DlgImgAlignTextTop : "Haut du texte", +DlgImgAlignTop : "Haut", +DlgImgPreview : "Prévisualisation", +DlgImgAlertUrl : "Veuillez saisir l'URL de l'image", +DlgImgLinkTab : "Lien", + +// Flash Dialog +DlgFlashTitle : "Propriétés de l'animation Flash", +DlgFlashChkPlay : "Lecture automatique", +DlgFlashChkLoop : "Boucle", +DlgFlashChkMenu : "Activer le menu Flash", +DlgFlashScale : "Affichage", +DlgFlashScaleAll : "Par défaut (tout montrer)", +DlgFlashScaleNoBorder : "Sans bordure", +DlgFlashScaleFit : "Ajuster aux dimensions", + +// Link Dialog +DlgLnkWindowTitle : "Propriétés du lien", +DlgLnkInfoTab : "Informations sur le lien", +DlgLnkTargetTab : "Destination", + +DlgLnkType : "Type de lien", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Ancre dans cette page", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protocole", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Sélectionner une ancre", +DlgLnkAnchorByName : "Par nom", +DlgLnkAnchorById : "Par id", +DlgLnkNoAnchors : "(Pas d'ancre disponible dans le document)", +DlgLnkEMail : "Adresse E-Mail", +DlgLnkEMailSubject : "Sujet du message", +DlgLnkEMailBody : "Corps du message", +DlgLnkUpload : "Télécharger", +DlgLnkBtnUpload : "Envoyer sur le serveur", + +DlgLnkTarget : "Destination", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Nouvelle fenêtre (_blank)", +DlgLnkTargetParent : "Fenêtre mère (_parent)", +DlgLnkTargetSelf : "Même fenêtre (_self)", +DlgLnkTargetTop : "Fenêtre supérieure (_top)", +DlgLnkTargetFrameName : "Nom du cadre de destination", +DlgLnkPopWinName : "Nom de la fenêtre popup", +DlgLnkPopWinFeat : "Caractéristiques de la fenêtre popup", +DlgLnkPopResize : "Taille modifiable", +DlgLnkPopLocation : "Barre d'adresses", +DlgLnkPopMenu : "Barre de menu", +DlgLnkPopScroll : "Barres de défilement", +DlgLnkPopStatus : "Barre d'état", +DlgLnkPopToolbar : "Barre d'outils", +DlgLnkPopFullScrn : "Plein écran (IE)", +DlgLnkPopDependent : "Dépendante (Netscape)", +DlgLnkPopWidth : "Largeur", +DlgLnkPopHeight : "Hauteur", +DlgLnkPopLeft : "Position à partir de la gauche", +DlgLnkPopTop : "Position à partir du haut", + +DlnLnkMsgNoUrl : "Veuillez saisir l'URL", +DlnLnkMsgNoEMail : "Veuillez saisir l'adresse e-mail", +DlnLnkMsgNoAnchor : "Veuillez sélectionner une ancre", +DlnLnkMsgInvPopName : "Le nom de la fenêtre popup doit commencer par une lettre et ne doit pas contenir d'espace", + +// Color Dialog +DlgColorTitle : "Sélectionner", +DlgColorBtnClear : "Effacer", +DlgColorHighlight : "Prévisualisation", +DlgColorSelected : "Sélectionné", + +// Smiley Dialog +DlgSmileyTitle : "Insérer un Smiley", + +// Special Character Dialog +DlgSpecialCharTitle : "Insérer un caractère spécial", + +// Table Dialog +DlgTableTitle : "Propriétés du tableau", +DlgTableRows : "Lignes", +DlgTableColumns : "Colonnes", +DlgTableBorder : "Bordure", +DlgTableAlign : "Alignement", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Gauche", +DlgTableAlignCenter : "Centré", +DlgTableAlignRight : "Droite", +DlgTableWidth : "Largeur", +DlgTableWidthPx : "pixels", +DlgTableWidthPc : "pourcentage", +DlgTableHeight : "Hauteur", +DlgTableCellSpace : "Espacement", +DlgTableCellPad : "Contour", +DlgTableCaption : "Titre", +DlgTableSummary : "Résumé", +DlgTableHeaders : "Entêtes", +DlgTableHeadersNone : "Sans", +DlgTableHeadersColumn : "Première colonne", +DlgTableHeadersRow : "Première Ligne", +DlgTableHeadersBoth : "Les 2", + +// Table Cell Dialog +DlgCellTitle : "Propriétés de la cellule", +DlgCellWidth : "Largeur", +DlgCellWidthPx : "pixels", +DlgCellWidthPc : "pourcentage", +DlgCellHeight : "Hauteur", +DlgCellWordWrap : "Retour à la ligne", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Oui", +DlgCellWordWrapNo : "Non", +DlgCellHorAlign : "Alignement horizontal", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Gauche", +DlgCellHorAlignCenter : "Centré", +DlgCellHorAlignRight: "Droite", +DlgCellVerAlign : "Alignement vertical", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Haut", +DlgCellVerAlignMiddle : "Milieu", +DlgCellVerAlignBottom : "Bas", +DlgCellVerAlignBaseline : "Bas du texte", +DlgCellType : "Type de Cellule", +DlgCellTypeData : "Données", +DlgCellTypeHeader : "Entête", +DlgCellRowSpan : "Lignes fusionnées", +DlgCellCollSpan : "Colonnes fusionnées", +DlgCellBackColor : "Fond", +DlgCellBorderColor : "Bordure", +DlgCellBtnSelect : "Choisir...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Chercher et Remplacer", + +// Find Dialog +DlgFindTitle : "Chercher", +DlgFindFindBtn : "Chercher", +DlgFindNotFoundMsg : "Le texte indiqué est introuvable.", + +// Replace Dialog +DlgReplaceTitle : "Remplacer", +DlgReplaceFindLbl : "Rechercher:", +DlgReplaceReplaceLbl : "Remplacer par:", +DlgReplaceCaseChk : "Respecter la casse", +DlgReplaceReplaceBtn : "Remplacer", +DlgReplaceReplAllBtn : "Tout remplacer", +DlgReplaceWordChk : "Mot entier", + +// Paste Operations / Dialog +PasteErrorCut : "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+X).", +PasteErrorCopy : "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+C).", + +PasteAsText : "Coller comme texte", +PasteFromWord : "Coller à partir de Word", + +DlgPasteMsg2 : "Veuillez coller dans la zone ci-dessous en utilisant le clavier (Ctrl+V) et cliquez sur OK.", +DlgPasteSec : "A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.", +DlgPasteIgnoreFont : "Ignorer les polices de caractères", +DlgPasteRemoveStyles : "Supprimer les styles", + +// Color Picker +ColorAutomatic : "Automatique", +ColorMoreColors : "Plus de couleurs...", + +// Document Properties +DocProps : "Propriétés du document", + +// Anchor Dialog +DlgAnchorTitle : "Propriétés de l'ancre", +DlgAnchorName : "Nom de l'ancre", +DlgAnchorErrorName : "Veuillez saisir le nom de l'ancre", + +// Speller Pages Dialog +DlgSpellNotInDic : "Pas dans le dictionnaire", +DlgSpellChangeTo : "Changer en", +DlgSpellBtnIgnore : "Ignorer", +DlgSpellBtnIgnoreAll : "Ignorer tout", +DlgSpellBtnReplace : "Remplacer", +DlgSpellBtnReplaceAll : "Remplacer tout", +DlgSpellBtnUndo : "Annuler", +DlgSpellNoSuggestions : "- Aucune suggestion -", +DlgSpellProgress : "Vérification d'orthographe en cours...", +DlgSpellNoMispell : "Vérification d'orthographe terminée: Aucune erreur trouvée", +DlgSpellNoChanges : "Vérification d'orthographe terminée: Pas de modifications", +DlgSpellOneChange : "Vérification d'orthographe terminée: Un mot modifié", +DlgSpellManyChanges : "Vérification d'orthographe terminée: %1 mots modifiés", + +IeSpellDownload : "Le Correcteur n'est pas installé. Souhaitez-vous le télécharger maintenant?", + +// Button Dialog +DlgButtonText : "Texte (valeur)", +DlgButtonType : "Type", +DlgButtonTypeBtn : "Bouton", +DlgButtonTypeSbm : "Envoyer", +DlgButtonTypeRst : "Réinitialiser", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Nom", +DlgCheckboxValue : "Valeur", +DlgCheckboxSelected : "Sélectionné", + +// Form Dialog +DlgFormName : "Nom", +DlgFormAction : "Action", +DlgFormMethod : "Méthode", + +// Select Field Dialog +DlgSelectName : "Nom", +DlgSelectValue : "Valeur", +DlgSelectSize : "Taille", +DlgSelectLines : "lignes", +DlgSelectChkMulti : "Sélection multiple", +DlgSelectOpAvail : "Options disponibles", +DlgSelectOpText : "Texte", +DlgSelectOpValue : "Valeur", +DlgSelectBtnAdd : "Ajouter", +DlgSelectBtnModify : "Modifier", +DlgSelectBtnUp : "Monter", +DlgSelectBtnDown : "Descendre", +DlgSelectBtnSetValue : "Valeur sélectionnée", +DlgSelectBtnDelete : "Supprimer", + +// Textarea Dialog +DlgTextareaName : "Nom", +DlgTextareaCols : "Colonnes", +DlgTextareaRows : "Lignes", + +// Text Field Dialog +DlgTextName : "Nom", +DlgTextValue : "Valeur", +DlgTextCharWidth : "Largeur en caractères", +DlgTextMaxChars : "Nombre maximum de caractères", +DlgTextType : "Type", +DlgTextTypeText : "Texte", +DlgTextTypePass : "Mot de passe", + +// Hidden Field Dialog +DlgHiddenName : "Nom", +DlgHiddenValue : "Valeur", + +// Bulleted List Dialog +BulletedListProp : "Propriétés de liste à puces", +NumberedListProp : "Propriétés de liste numérotée", +DlgLstStart : "Début", +DlgLstType : "Type", +DlgLstTypeCircle : "Cercle", +DlgLstTypeDisc : "Disque", +DlgLstTypeSquare : "Carré", +DlgLstTypeNumbers : "Nombres (1, 2, 3)", +DlgLstTypeLCase : "Lettres minuscules (a, b, c)", +DlgLstTypeUCase : "Lettres majuscules (A, B, C)", +DlgLstTypeSRoman : "Chiffres romains minuscules (i, ii, iii)", +DlgLstTypeLRoman : "Chiffres romains majuscules (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Général", +DlgDocBackTab : "Fond", +DlgDocColorsTab : "Couleurs et marges", +DlgDocMetaTab : "Métadonnées", + +DlgDocPageTitle : "Titre de la page", +DlgDocLangDir : "Sens d'écriture", +DlgDocLangDirLTR : "De la gauche vers la droite (LTR)", +DlgDocLangDirRTL : "De la droite vers la gauche (RTL)", +DlgDocLangCode : "Code langue", +DlgDocCharSet : "Encodage de caractère", +DlgDocCharSetCE : "Europe Centrale", +DlgDocCharSetCT : "Chinois Traditionnel (Big5)", +DlgDocCharSetCR : "Cyrillique", +DlgDocCharSetGR : "Grec", +DlgDocCharSetJP : "Japonais", +DlgDocCharSetKR : "Coréen", +DlgDocCharSetTR : "Turc", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Occidental", +DlgDocCharSetOther : "Autre encodage de caractère", + +DlgDocDocType : "Type de document", +DlgDocDocTypeOther : "Autre type de document", +DlgDocIncXHTML : "Inclure les déclarations XHTML", +DlgDocBgColor : "Couleur de fond", +DlgDocBgImage : "Image de fond", +DlgDocBgNoScroll : "Image fixe sans défilement", +DlgDocCText : "Texte", +DlgDocCLink : "Lien", +DlgDocCVisited : "Lien visité", +DlgDocCActive : "Lien activé", +DlgDocMargins : "Marges", +DlgDocMaTop : "Haut", +DlgDocMaLeft : "Gauche", +DlgDocMaRight : "Droite", +DlgDocMaBottom : "Bas", +DlgDocMeIndex : "Mots-clés (séparés par des virgules)", +DlgDocMeDescr : "Description", +DlgDocMeAuthor : "Auteur", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Prévisualisation", + +// Templates Dialog +Templates : "Modèles", +DlgTemplatesTitle : "Modèles de contenu", +DlgTemplatesSelMsg : "Veuillez sélectionner le modèle à ouvrir dans l'éditeur:", +DlgTemplatesLoading : "Chargement de la liste des modèles. Veuillez patienter...", +DlgTemplatesNoTpl : "(Aucun modèle disponible)", +DlgTemplatesReplace : "Remplacer tout le contenu", + +// About Dialog +DlgAboutAboutTab : "A propos de", +DlgAboutBrowserInfoTab : "Navigateur", +DlgAboutLicenseTab : "Licence", +DlgAboutVersion : "Version", +DlgAboutInfo : "Pour plus d'informations, aller à", + +// Div Dialog +DlgDivGeneralTab : "Général", +DlgDivAdvancedTab : "Avancé", +DlgDivStyle : "Style", +DlgDivInlineStyle : "Attribut Style", + +ScaytTitle : "SCAYT", //MISSING +ScaytTitleOptions : "Options", //MISSING +ScaytTitleLangs : "Languages", //MISSING +ScaytTitleAbout : "About" //MISSING +}; diff --git a/fckeditor/FCKeditor/editor/lang/it.js b/fckeditor/FCKeditor/editor/lang/it.js new file mode 100644 index 0000000..5353ac3 --- /dev/null +++ b/fckeditor/FCKeditor/editor/lang/it.js @@ -0,0 +1,539 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Italian language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Nascondi la barra degli strumenti", +ToolbarExpand : "Mostra la barra degli strumenti", + +// Toolbar Items and Context Menu +Save : "Salva", +NewPage : "Nuova pagina vuota", +Preview : "Anteprima", +Cut : "Taglia", +Copy : "Copia", +Paste : "Incolla", +PasteText : "Incolla come testo semplice", +PasteWord : "Incolla da Word", +Print : "Stampa", +SelectAll : "Seleziona tutto", +RemoveFormat : "Elimina formattazione", +InsertLinkLbl : "Collegamento", +InsertLink : "Inserisci/Modifica collegamento", +RemoveLink : "Elimina collegamento", +VisitLink : "Open Link", //MISSING +Anchor : "Inserisci/Modifica Ancora", +AnchorDelete : "Rimuovi Ancora", +InsertImageLbl : "Immagine", +InsertImage : "Inserisci/Modifica immagine", +InsertFlashLbl : "Oggetto Flash", +InsertFlash : "Inserisci/Modifica Oggetto Flash", +InsertTableLbl : "Tabella", +InsertTable : "Inserisci/Modifica tabella", +InsertLineLbl : "Riga orizzontale", +InsertLine : "Inserisci riga orizzontale", +InsertSpecialCharLbl: "Caratteri speciali", +InsertSpecialChar : "Inserisci carattere speciale", +InsertSmileyLbl : "Emoticon", +InsertSmiley : "Inserisci emoticon", +About : "Informazioni su FCKeditor", +Bold : "Grassetto", +Italic : "Corsivo", +Underline : "Sottolineato", +StrikeThrough : "Barrato", +Subscript : "Pedice", +Superscript : "Apice", +LeftJustify : "Allinea a sinistra", +CenterJustify : "Centra", +RightJustify : "Allinea a destra", +BlockJustify : "Giustifica", +DecreaseIndent : "Riduci rientro", +IncreaseIndent : "Aumenta rientro", +Blockquote : "Blockquote", //MISSING +CreateDiv : "Create Div Container", //MISSING +EditDiv : "Edit Div Container", //MISSING +DeleteDiv : "Remove Div Container", //MISSING +Undo : "Annulla", +Redo : "Ripristina", +NumberedListLbl : "Elenco numerato", +NumberedList : "Inserisci/Modifica elenco numerato", +BulletedListLbl : "Elenco puntato", +BulletedList : "Inserisci/Modifica elenco puntato", +ShowTableBorders : "Mostra bordi tabelle", +ShowDetails : "Mostra dettagli", +Style : "Stile", +FontFormat : "Formato", +Font : "Font", +FontSize : "Dimensione", +TextColor : "Colore testo", +BGColor : "Colore sfondo", +Source : "Codice Sorgente", +Find : "Trova", +Replace : "Sostituisci", +SpellCheck : "Correttore ortografico", +UniversalKeyboard : "Tastiera universale", +PageBreakLbl : "Interruzione di pagina", +PageBreak : "Inserisci interruzione di pagina", + +Form : "Modulo", +Checkbox : "Checkbox", +RadioButton : "Radio Button", +TextField : "Campo di testo", +Textarea : "Area di testo", +HiddenField : "Campo nascosto", +Button : "Bottone", +SelectionField : "Menu di selezione", +ImageButton : "Bottone immagine", + +FitWindow : "Massimizza l'area dell'editor", +ShowBlocks : "Visualizza Blocchi", + +// Context Menu +EditLink : "Modifica collegamento", +CellCM : "Cella", +RowCM : "Riga", +ColumnCM : "Colonna", +InsertRowAfter : "Inserisci Riga Dopo", +InsertRowBefore : "Inserisci Riga Prima", +DeleteRows : "Elimina righe", +InsertColumnAfter : "Inserisci Colonna Dopo", +InsertColumnBefore : "Inserisci Colonna Prima", +DeleteColumns : "Elimina colonne", +InsertCellAfter : "Inserisci Cella Dopo", +InsertCellBefore : "Inserisci Cella Prima", +DeleteCells : "Elimina celle", +MergeCells : "Unisce celle", +MergeRight : "Unisci a Destra", +MergeDown : "Unisci in Basso", +HorizontalSplitCell : "Dividi Cella Orizzontalmente", +VerticalSplitCell : "Dividi Cella Verticalmente", +TableDelete : "Cancella Tabella", +CellProperties : "Proprietà cella", +TableProperties : "Proprietà tabella", +ImageProperties : "Proprietà immagine", +FlashProperties : "Proprietà Oggetto Flash", + +AnchorProp : "Proprietà ancora", +ButtonProp : "Proprietà bottone", +CheckboxProp : "Proprietà checkbox", +HiddenFieldProp : "Proprietà campo nascosto", +RadioButtonProp : "Proprietà radio button", +ImageButtonProp : "Proprietà bottone immagine", +TextFieldProp : "Proprietà campo di testo", +SelectionFieldProp : "Proprietà menu di selezione", +TextareaProp : "Proprietà area di testo", +FormProp : "Proprietà modulo", + +FontFormats : "Normale;Formattato;Indirizzo;Titolo 1;Titolo 2;Titolo 3;Titolo 4;Titolo 5;Titolo 6;Paragrafo (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Elaborazione XHTML in corso. Attendere prego...", +Done : "Completato", +PasteWordConfirm : "Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?", +NotCompatiblePaste : "Questa funzione è disponibile solo per Internet Explorer 5.5 o superiore. Desideri incollare il testo senza pulirlo?", +UnknownToolbarItem : "Elemento della barra strumenti sconosciuto \"%1\"", +UnknownCommand : "Comando sconosciuto \"%1\"", +NotImplemented : "Comando non implementato", +UnknownToolbarSet : "La barra di strumenti \"%1\" non esiste", +NoActiveX : "Le impostazioni di sicurezza del tuo browser potrebbero limitare alcune funzionalità dell'editor. Devi abilitare l'opzione \"Esegui controlli e plug-in ActiveX\". Potresti avere errori e notare funzionalità mancanti.", +BrowseServerBlocked : "Non è possibile aprire la finestra di espolorazione risorse. Verifica che tutti i blocca popup siano bloccati.", +DialogBlocked : "Non è possibile aprire la finestra di dialogo. Verifica che tutti i blocca popup siano bloccati.", +VisitLinkBlocked : "It was not possible to open a new window. Make sure all popup blockers are disabled.", //MISSING + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Annulla", +DlgBtnClose : "Chiudi", +DlgBtnBrowseServer : "Cerca sul server", +DlgAdvancedTag : "Avanzate", +DlgOpOther : "", +DlgInfoTab : "Info", +DlgAlertUrl : "Devi inserire l'URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Direzione scrittura", +DlgGenLangDirLtr : "Da Sinistra a Destra (LTR)", +DlgGenLangDirRtl : "Da Destra a Sinistra (RTL)", +DlgGenLangCode : "Codice Lingua", +DlgGenAccessKey : "Scorciatoia
    da tastiera", +DlgGenName : "Nome", +DlgGenTabIndex : "Ordine di tabulazione", +DlgGenLongDescr : "URL descrizione estesa", +DlgGenClass : "Nome classe CSS", +DlgGenTitle : "Titolo", +DlgGenContType : "Tipo della risorsa collegata", +DlgGenLinkCharset : "Set di caretteri della risorsa collegata", +DlgGenStyle : "Stile", + +// Image Dialog +DlgImgTitle : "Proprietà immagine", +DlgImgInfoTab : "Informazioni immagine", +DlgImgBtnUpload : "Invia al server", +DlgImgURL : "URL", +DlgImgUpload : "Carica", +DlgImgAlt : "Testo alternativo", +DlgImgWidth : "Larghezza", +DlgImgHeight : "Altezza", +DlgImgLockRatio : "Blocca rapporto", +DlgBtnResetSize : "Reimposta dimensione", +DlgImgBorder : "Bordo", +DlgImgHSpace : "HSpace", +DlgImgVSpace : "VSpace", +DlgImgAlign : "Allineamento", +DlgImgAlignLeft : "Sinistra", +DlgImgAlignAbsBottom: "In basso assoluto", +DlgImgAlignAbsMiddle: "Centrato assoluto", +DlgImgAlignBaseline : "Linea base", +DlgImgAlignBottom : "In Basso", +DlgImgAlignMiddle : "Centrato", +DlgImgAlignRight : "Destra", +DlgImgAlignTextTop : "In alto al testo", +DlgImgAlignTop : "In Alto", +DlgImgPreview : "Anteprima", +DlgImgAlertUrl : "Devi inserire l'URL per l'immagine", +DlgImgLinkTab : "Collegamento", + +// Flash Dialog +DlgFlashTitle : "Proprietà Oggetto Flash", +DlgFlashChkPlay : "Avvio Automatico", +DlgFlashChkLoop : "Cicla", +DlgFlashChkMenu : "Abilita Menu di Flash", +DlgFlashScale : "Ridimensiona", +DlgFlashScaleAll : "Mostra Tutto", +DlgFlashScaleNoBorder : "Senza Bordo", +DlgFlashScaleFit : "Dimensione Esatta", + +// Link Dialog +DlgLnkWindowTitle : "Collegamento", +DlgLnkInfoTab : "Informazioni collegamento", +DlgLnkTargetTab : "Destinazione", + +DlgLnkType : "Tipo di Collegamento", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Ancora nella pagina", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protocollo", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Scegli Ancora", +DlgLnkAnchorByName : "Per Nome", +DlgLnkAnchorById : "Per id elemento", +DlgLnkNoAnchors : "(Nessuna ancora disponibile nel documento)", +DlgLnkEMail : "Indirizzo E-Mail", +DlgLnkEMailSubject : "Oggetto del messaggio", +DlgLnkEMailBody : "Corpo del messaggio", +DlgLnkUpload : "Carica", +DlgLnkBtnUpload : "Invia al Server", + +DlgLnkTarget : "Destinazione", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Nuova finestra (_blank)", +DlgLnkTargetParent : "Finestra padre (_parent)", +DlgLnkTargetSelf : "Stessa finestra (_self)", +DlgLnkTargetTop : "Finestra superiore (_top)", +DlgLnkTargetFrameName : "Nome del riquadro di destinazione", +DlgLnkPopWinName : "Nome finestra popup", +DlgLnkPopWinFeat : "Caratteristiche finestra popup", +DlgLnkPopResize : "Ridimensionabile", +DlgLnkPopLocation : "Barra degli indirizzi", +DlgLnkPopMenu : "Barra del menu", +DlgLnkPopScroll : "Barre di scorrimento", +DlgLnkPopStatus : "Barra di stato", +DlgLnkPopToolbar : "Barra degli strumenti", +DlgLnkPopFullScrn : "A tutto schermo (IE)", +DlgLnkPopDependent : "Dipendente (Netscape)", +DlgLnkPopWidth : "Larghezza", +DlgLnkPopHeight : "Altezza", +DlgLnkPopLeft : "Posizione da sinistra", +DlgLnkPopTop : "Posizione dall'alto", + +DlnLnkMsgNoUrl : "Devi inserire l'URL del collegamento", +DlnLnkMsgNoEMail : "Devi inserire un'indirizzo e-mail", +DlnLnkMsgNoAnchor : "Devi selezionare un'ancora", +DlnLnkMsgInvPopName : "Il nome del popup deve iniziare con una lettera, e non può contenere spazi", + +// Color Dialog +DlgColorTitle : "Seleziona colore", +DlgColorBtnClear : "Vuota", +DlgColorHighlight : "Evidenziato", +DlgColorSelected : "Selezionato", + +// Smiley Dialog +DlgSmileyTitle : "Inserisci emoticon", + +// Special Character Dialog +DlgSpecialCharTitle : "Seleziona carattere speciale", + +// Table Dialog +DlgTableTitle : "Proprietà tabella", +DlgTableRows : "Righe", +DlgTableColumns : "Colonne", +DlgTableBorder : "Dimensione bordo", +DlgTableAlign : "Allineamento", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Sinistra", +DlgTableAlignCenter : "Centrato", +DlgTableAlignRight : "Destra", +DlgTableWidth : "Larghezza", +DlgTableWidthPx : "pixel", +DlgTableWidthPc : "percento", +DlgTableHeight : "Altezza", +DlgTableCellSpace : "Spaziatura celle", +DlgTableCellPad : "Padding celle", +DlgTableCaption : "Intestazione", +DlgTableSummary : "Indice", +DlgTableHeaders : "Headers", //MISSING +DlgTableHeadersNone : "None", //MISSING +DlgTableHeadersColumn : "First column", //MISSING +DlgTableHeadersRow : "First Row", //MISSING +DlgTableHeadersBoth : "Both", //MISSING + +// Table Cell Dialog +DlgCellTitle : "Proprietà cella", +DlgCellWidth : "Larghezza", +DlgCellWidthPx : "pixel", +DlgCellWidthPc : "percento", +DlgCellHeight : "Altezza", +DlgCellWordWrap : "A capo automatico", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Si", +DlgCellWordWrapNo : "No", +DlgCellHorAlign : "Allineamento orizzontale", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Sinistra", +DlgCellHorAlignCenter : "Centrato", +DlgCellHorAlignRight: "Destra", +DlgCellVerAlign : "Allineamento verticale", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "In Alto", +DlgCellVerAlignMiddle : "Centrato", +DlgCellVerAlignBottom : "In Basso", +DlgCellVerAlignBaseline : "Linea base", +DlgCellType : "Cell Type", //MISSING +DlgCellTypeData : "Data", //MISSING +DlgCellTypeHeader : "Header", //MISSING +DlgCellRowSpan : "Righe occupate", +DlgCellCollSpan : "Colonne occupate", +DlgCellBackColor : "Colore sfondo", +DlgCellBorderColor : "Colore bordo", +DlgCellBtnSelect : "Scegli...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Cerca e Sostituisci", + +// Find Dialog +DlgFindTitle : "Trova", +DlgFindFindBtn : "Trova", +DlgFindNotFoundMsg : "L'elemento cercato non è stato trovato.", + +// Replace Dialog +DlgReplaceTitle : "Sostituisci", +DlgReplaceFindLbl : "Trova:", +DlgReplaceReplaceLbl : "Sostituisci con:", +DlgReplaceCaseChk : "Maiuscole/minuscole", +DlgReplaceReplaceBtn : "Sostituisci", +DlgReplaceReplAllBtn : "Sostituisci tutto", +DlgReplaceWordChk : "Solo parole intere", + +// Paste Operations / Dialog +PasteErrorCut : "Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl+X).", +PasteErrorCopy : "Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl+C).", + +PasteAsText : "Incolla come testo semplice", +PasteFromWord : "Incolla da Word", + +DlgPasteMsg2 : "Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (Ctrl+V) e premi OK.", +DlgPasteSec : "A causa delle impostazioni di sicurezza del browser,l'editor non è in grado di accedere direttamente agli appunti. E' pertanto necessario incollarli di nuovo in questa finestra.", +DlgPasteIgnoreFont : "Ignora le definizioni di Font", +DlgPasteRemoveStyles : "Rimuovi le definizioni di Stile", + +// Color Picker +ColorAutomatic : "Automatico", +ColorMoreColors : "Altri colori...", + +// Document Properties +DocProps : "Proprietà del Documento", + +// Anchor Dialog +DlgAnchorTitle : "Proprietà ancora", +DlgAnchorName : "Nome ancora", +DlgAnchorErrorName : "Inserici il nome dell'ancora", + +// Speller Pages Dialog +DlgSpellNotInDic : "Non nel dizionario", +DlgSpellChangeTo : "Cambia in", +DlgSpellBtnIgnore : "Ignora", +DlgSpellBtnIgnoreAll : "Ignora tutto", +DlgSpellBtnReplace : "Cambia", +DlgSpellBtnReplaceAll : "Cambia tutto", +DlgSpellBtnUndo : "Annulla", +DlgSpellNoSuggestions : "- Nessun suggerimento -", +DlgSpellProgress : "Controllo ortografico in corso", +DlgSpellNoMispell : "Controllo ortografico completato: nessun errore trovato", +DlgSpellNoChanges : "Controllo ortografico completato: nessuna parola cambiata", +DlgSpellOneChange : "Controllo ortografico completato: 1 parola cambiata", +DlgSpellManyChanges : "Controllo ortografico completato: %1 parole cambiate", + +IeSpellDownload : "Contollo ortografico non installato. Lo vuoi scaricare ora?", + +// Button Dialog +DlgButtonText : "Testo (Value)", +DlgButtonType : "Tipo", +DlgButtonTypeBtn : "Bottone", +DlgButtonTypeSbm : "Invio", +DlgButtonTypeRst : "Annulla", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Nome", +DlgCheckboxValue : "Valore", +DlgCheckboxSelected : "Selezionato", + +// Form Dialog +DlgFormName : "Nome", +DlgFormAction : "Azione", +DlgFormMethod : "Metodo", + +// Select Field Dialog +DlgSelectName : "Nome", +DlgSelectValue : "Valore", +DlgSelectSize : "Dimensione", +DlgSelectLines : "righe", +DlgSelectChkMulti : "Permetti selezione multipla", +DlgSelectOpAvail : "Opzioni disponibili", +DlgSelectOpText : "Testo", +DlgSelectOpValue : "Valore", +DlgSelectBtnAdd : "Aggiungi", +DlgSelectBtnModify : "Modifica", +DlgSelectBtnUp : "Su", +DlgSelectBtnDown : "Gi", +DlgSelectBtnSetValue : "Imposta come predefinito", +DlgSelectBtnDelete : "Rimuovi", + +// Textarea Dialog +DlgTextareaName : "Nome", +DlgTextareaCols : "Colonne", +DlgTextareaRows : "Righe", + +// Text Field Dialog +DlgTextName : "Nome", +DlgTextValue : "Valore", +DlgTextCharWidth : "Larghezza", +DlgTextMaxChars : "Numero massimo di caratteri", +DlgTextType : "Tipo", +DlgTextTypeText : "Testo", +DlgTextTypePass : "Password", + +// Hidden Field Dialog +DlgHiddenName : "Nome", +DlgHiddenValue : "Valore", + +// Bulleted List Dialog +BulletedListProp : "Proprietà lista puntata", +NumberedListProp : "Proprietà lista numerata", +DlgLstStart : "Inizio", +DlgLstType : "Tipo", +DlgLstTypeCircle : "Tondo", +DlgLstTypeDisc : "Disco", +DlgLstTypeSquare : "Quadrato", +DlgLstTypeNumbers : "Numeri (1, 2, 3)", +DlgLstTypeLCase : "Caratteri minuscoli (a, b, c)", +DlgLstTypeUCase : "Caratteri maiuscoli (A, B, C)", +DlgLstTypeSRoman : "Numeri Romani minuscoli (i, ii, iii)", +DlgLstTypeLRoman : "Numeri Romani maiuscoli (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Genarale", +DlgDocBackTab : "Sfondo", +DlgDocColorsTab : "Colori e margini", +DlgDocMetaTab : "Meta Data", + +DlgDocPageTitle : "Titolo pagina", +DlgDocLangDir : "Direzione scrittura", +DlgDocLangDirLTR : "Da Sinistra a Destra (LTR)", +DlgDocLangDirRTL : "Da Destra a Sinistra (RTL)", +DlgDocLangCode : "Codice Lingua", +DlgDocCharSet : "Set di caretteri", +DlgDocCharSetCE : "Europa Centrale", +DlgDocCharSetCT : "Cinese Tradizionale (Big5)", +DlgDocCharSetCR : "Cirillico", +DlgDocCharSetGR : "Greco", +DlgDocCharSetJP : "Giapponese", +DlgDocCharSetKR : "Coreano", +DlgDocCharSetTR : "Turco", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Europa Occidentale", +DlgDocCharSetOther : "Altro set di caretteri", + +DlgDocDocType : "Intestazione DocType", +DlgDocDocTypeOther : "Altra intestazione DocType", +DlgDocIncXHTML : "Includi dichiarazione XHTML", +DlgDocBgColor : "Colore di sfondo", +DlgDocBgImage : "Immagine di sfondo", +DlgDocBgNoScroll : "Sfondo fissato", +DlgDocCText : "Testo", +DlgDocCLink : "Collegamento", +DlgDocCVisited : "Collegamento visitato", +DlgDocCActive : "Collegamento attivo", +DlgDocMargins : "Margini", +DlgDocMaTop : "In Alto", +DlgDocMaLeft : "A Sinistra", +DlgDocMaRight : "A Destra", +DlgDocMaBottom : "In Basso", +DlgDocMeIndex : "Chiavi di indicizzazione documento (separate da virgola)", +DlgDocMeDescr : "Descrizione documento", +DlgDocMeAuthor : "Autore", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Anteprima", + +// Templates Dialog +Templates : "Modelli", +DlgTemplatesTitle : "Contenuto dei modelli", +DlgTemplatesSelMsg : "Seleziona il modello da aprire nell'editor:", +DlgTemplatesLoading : "Caricamento modelli in corso. Attendere prego...", +DlgTemplatesNoTpl : "(Nessun modello definito)", +DlgTemplatesReplace : "Cancella il contenuto corrente", + +// About Dialog +DlgAboutAboutTab : "Informazioni", +DlgAboutBrowserInfoTab : "Informazioni Browser", +DlgAboutLicenseTab : "Licenza", +DlgAboutVersion : "versione", +DlgAboutInfo : "Per maggiori informazioni visitare", + +// Div Dialog +DlgDivGeneralTab : "General", //MISSING +DlgDivAdvancedTab : "Advanced", //MISSING +DlgDivStyle : "Style", //MISSING +DlgDivInlineStyle : "Inline Style", //MISSING + +ScaytTitle : "SCAYT", //MISSING +ScaytTitleOptions : "Options", //MISSING +ScaytTitleLangs : "Languages", //MISSING +ScaytTitleAbout : "About" //MISSING +}; diff --git a/fckeditor/FCKeditor/editor/lang/nl.js b/fckeditor/FCKeditor/editor/lang/nl.js new file mode 100644 index 0000000..bb5f357 --- /dev/null +++ b/fckeditor/FCKeditor/editor/lang/nl.js @@ -0,0 +1,539 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Dutch language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Menubalk inklappen", +ToolbarExpand : "Menubalk uitklappen", + +// Toolbar Items and Context Menu +Save : "Opslaan", +NewPage : "Nieuwe pagina", +Preview : "Voorbeeld", +Cut : "Knippen", +Copy : "Kopiëren", +Paste : "Plakken", +PasteText : "Plakken als platte tekst", +PasteWord : "Plakken als Word-gegevens", +Print : "Printen", +SelectAll : "Alles selecteren", +RemoveFormat : "Opmaak verwijderen", +InsertLinkLbl : "Link", +InsertLink : "Link invoegen/wijzigen", +RemoveLink : "Link verwijderen", +VisitLink : "Link volgen", +Anchor : "Interne link", +AnchorDelete : "Anker verwijderen", +InsertImageLbl : "Afbeelding", +InsertImage : "Afbeelding invoegen/wijzigen", +InsertFlashLbl : "Flash", +InsertFlash : "Flash invoegen/wijzigen", +InsertTableLbl : "Tabel", +InsertTable : "Tabel invoegen/wijzigen", +InsertLineLbl : "Lijn", +InsertLine : "Horizontale lijn invoegen", +InsertSpecialCharLbl: "Speciale tekens", +InsertSpecialChar : "Speciaal teken invoegen", +InsertSmileyLbl : "Smiley", +InsertSmiley : "Smiley invoegen", +About : "Over FCKeditor", +Bold : "Vet", +Italic : "Schuingedrukt", +Underline : "Onderstreept", +StrikeThrough : "Doorhalen", +Subscript : "Subscript", +Superscript : "Superscript", +LeftJustify : "Links uitlijnen", +CenterJustify : "Centreren", +RightJustify : "Rechts uitlijnen", +BlockJustify : "Uitvullen", +DecreaseIndent : "Inspringen verkleinen", +IncreaseIndent : "Inspringen vergroten", +Blockquote : "Citaatblok", +CreateDiv : "DIV aanmaken", +EditDiv : "DIV wijzigen", +DeleteDiv : "DIV verwijderen", +Undo : "Ongedaan maken", +Redo : "Opnieuw uitvoeren", +NumberedListLbl : "Genummerde lijst", +NumberedList : "Genummerde lijst invoegen/verwijderen", +BulletedListLbl : "Opsomming", +BulletedList : "Opsomming invoegen/verwijderen", +ShowTableBorders : "Randen tabel weergeven", +ShowDetails : "Details weergeven", +Style : "Stijl", +FontFormat : "Opmaak", +Font : "Lettertype", +FontSize : "Grootte", +TextColor : "Tekstkleur", +BGColor : "Achtergrondkleur", +Source : "Code", +Find : "Zoeken", +Replace : "Vervangen", +SpellCheck : "Spellingscontrole", +UniversalKeyboard : "Universeel toetsenbord", +PageBreakLbl : "Pagina-einde", +PageBreak : "Pagina-einde invoegen", + +Form : "Formulier", +Checkbox : "Aanvinkvakje", +RadioButton : "Selectievakje", +TextField : "Tekstveld", +Textarea : "Tekstvak", +HiddenField : "Verborgen veld", +Button : "Knop", +SelectionField : "Selectieveld", +ImageButton : "Afbeeldingsknop", + +FitWindow : "De editor maximaliseren", +ShowBlocks : "Toon blokken", + +// Context Menu +EditLink : "Link wijzigen", +CellCM : "Cel", +RowCM : "Rij", +ColumnCM : "Kolom", +InsertRowAfter : "Voeg rij in achter", +InsertRowBefore : "Voeg rij in voor", +DeleteRows : "Rijen verwijderen", +InsertColumnAfter : "Voeg kolom in achter", +InsertColumnBefore : "Voeg kolom in voor", +DeleteColumns : "Kolommen verwijderen", +InsertCellAfter : "Voeg cel in achter", +InsertCellBefore : "Voeg cel in voor", +DeleteCells : "Cellen verwijderen", +MergeCells : "Cellen samenvoegen", +MergeRight : "Voeg samen naar rechts", +MergeDown : "Voeg samen naar beneden", +HorizontalSplitCell : "Splits cellen horizontaal", +VerticalSplitCell : "Splits cellen verticaal", +TableDelete : "Tabel verwijderen", +CellProperties : "Eigenschappen cel", +TableProperties : "Eigenschappen tabel", +ImageProperties : "Eigenschappen afbeelding", +FlashProperties : "Eigenschappen Flash", + +AnchorProp : "Eigenschappen interne link", +ButtonProp : "Eigenschappen knop", +CheckboxProp : "Eigenschappen aanvinkvakje", +HiddenFieldProp : "Eigenschappen verborgen veld", +RadioButtonProp : "Eigenschappen selectievakje", +ImageButtonProp : "Eigenschappen afbeeldingsknop", +TextFieldProp : "Eigenschappen tekstveld", +SelectionFieldProp : "Eigenschappen selectieveld", +TextareaProp : "Eigenschappen tekstvak", +FormProp : "Eigenschappen formulier", + +FontFormats : "Normaal;Met opmaak;Adres;Kop 1;Kop 2;Kop 3;Kop 4;Kop 5;Kop 6;Normaal (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Bezig met verwerken XHTML. Even geduld aub...", +Done : "Klaar", +PasteWordConfirm : "De tekst die u plakte lijkt gekopieerd te zijn vanuit Word. Wilt u de tekst opschonen voordat deze geplakt wordt?", +NotCompatiblePaste : "Deze opdracht is beschikbaar voor Internet Explorer versie 5.5 of hoger. Wilt u plakken zonder op te schonen?", +UnknownToolbarItem : "Onbekend item op menubalk \"%1\"", +UnknownCommand : "Onbekende opdrachtnaam: \"%1\"", +NotImplemented : "Opdracht niet geïmplementeerd.", +UnknownToolbarSet : "Menubalk \"%1\" bestaat niet.", +NoActiveX : "De beveilingsinstellingen van uw browser zouden sommige functies van de editor kunnen beperken. De optie \"Activeer ActiveX-elementen en plug-ins\" dient ingeschakeld te worden. Het kan zijn dat er nu functies ontbreken of niet werken.", +BrowseServerBlocked : "De bestandsbrowser kon niet geopend worden. Zorg ervoor dat pop-up-blokkeerders uit staan.", +DialogBlocked : "Kan het dialoogvenster niet weergeven. Zorg ervoor dat pop-up-blokkeerders uit staan.", +VisitLinkBlocked : "Het was niet mogelijk een nieuw venster te openen. Controleer of er geen pop-up-blocker aktief is.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Annuleren", +DlgBtnClose : "Afsluiten", +DlgBtnBrowseServer : "Bladeren op server", +DlgAdvancedTag : "Geavanceerd", +DlgOpOther : "", +DlgInfoTab : "Informatie", +DlgAlertUrl : "Geef URL op", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Kenmerk", +DlgGenLangDir : "Schrijfrichting", +DlgGenLangDirLtr : "Links naar rechts (LTR)", +DlgGenLangDirRtl : "Rechts naar links (RTL)", +DlgGenLangCode : "Taalcode", +DlgGenAccessKey : "Toegangstoets", +DlgGenName : "Naam", +DlgGenTabIndex : "Tabvolgorde", +DlgGenLongDescr : "Lange URL-omschrijving", +DlgGenClass : "Stylesheet-klassen", +DlgGenTitle : "Aanbevolen titel", +DlgGenContType : "Aanbevolen content-type", +DlgGenLinkCharset : "Karakterset van gelinkte bron", +DlgGenStyle : "Stijl", + +// Image Dialog +DlgImgTitle : "Eigenschappen afbeelding", +DlgImgInfoTab : "Informatie afbeelding", +DlgImgBtnUpload : "Naar server verzenden", +DlgImgURL : "URL", +DlgImgUpload : "Upload", +DlgImgAlt : "Alternatieve tekst", +DlgImgWidth : "Breedte", +DlgImgHeight : "Hoogte", +DlgImgLockRatio : "Afmetingen vergrendelen", +DlgBtnResetSize : "Afmetingen resetten", +DlgImgBorder : "Rand", +DlgImgHSpace : "HSpace", +DlgImgVSpace : "VSpace", +DlgImgAlign : "Uitlijning", +DlgImgAlignLeft : "Links", +DlgImgAlignAbsBottom: "Absoluut-onder", +DlgImgAlignAbsMiddle: "Absoluut-midden", +DlgImgAlignBaseline : "Basislijn", +DlgImgAlignBottom : "Beneden", +DlgImgAlignMiddle : "Midden", +DlgImgAlignRight : "Rechts", +DlgImgAlignTextTop : "Boven tekst", +DlgImgAlignTop : "Boven", +DlgImgPreview : "Voorbeeld", +DlgImgAlertUrl : "Geef de URL van de afbeelding", +DlgImgLinkTab : "Link", + +// Flash Dialog +DlgFlashTitle : "Eigenschappen Flash", +DlgFlashChkPlay : "Automatisch afspelen", +DlgFlashChkLoop : "Herhalen", +DlgFlashChkMenu : "Flashmenu\'s inschakelen", +DlgFlashScale : "Schaal", +DlgFlashScaleAll : "Alles tonen", +DlgFlashScaleNoBorder : "Geen rand", +DlgFlashScaleFit : "Precies passend", + +// Link Dialog +DlgLnkWindowTitle : "Link", +DlgLnkInfoTab : "Linkomschrijving", +DlgLnkTargetTab : "Doel", + +DlgLnkType : "Linktype", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Interne link in pagina", +DlgLnkTypeEMail : "E-mail", +DlgLnkProto : "Protocol", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Kies een interne link", +DlgLnkAnchorByName : "Op naam interne link", +DlgLnkAnchorById : "Op kenmerk interne link", +DlgLnkNoAnchors : "(Geen interne links in document gevonden)", +DlgLnkEMail : "E-mailadres", +DlgLnkEMailSubject : "Onderwerp bericht", +DlgLnkEMailBody : "Inhoud bericht", +DlgLnkUpload : "Upload", +DlgLnkBtnUpload : "Naar de server versturen", + +DlgLnkTarget : "Doel", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Nieuw venster (_blank)", +DlgLnkTargetParent : "Origineel venster (_parent)", +DlgLnkTargetSelf : "Zelfde venster (_self)", +DlgLnkTargetTop : "Hele venster (_top)", +DlgLnkTargetFrameName : "Naam doelframe", +DlgLnkPopWinName : "Naam popupvenster", +DlgLnkPopWinFeat : "Instellingen popupvenster", +DlgLnkPopResize : "Grootte wijzigen", +DlgLnkPopLocation : "Locatiemenu", +DlgLnkPopMenu : "Menubalk", +DlgLnkPopScroll : "Schuifbalken", +DlgLnkPopStatus : "Statusbalk", +DlgLnkPopToolbar : "Menubalk", +DlgLnkPopFullScrn : "Volledig scherm (IE)", +DlgLnkPopDependent : "Afhankelijk (Netscape)", +DlgLnkPopWidth : "Breedte", +DlgLnkPopHeight : "Hoogte", +DlgLnkPopLeft : "Positie links", +DlgLnkPopTop : "Positie boven", + +DlnLnkMsgNoUrl : "Geef de link van de URL", +DlnLnkMsgNoEMail : "Geef een e-mailadres", +DlnLnkMsgNoAnchor : "Selecteer een interne link", +DlnLnkMsgInvPopName : "De naam van de popup moet met een alfa-numerieke waarde beginnen, en mag geen spaties bevatten.", + +// Color Dialog +DlgColorTitle : "Selecteer kleur", +DlgColorBtnClear : "Opschonen", +DlgColorHighlight : "Accentueren", +DlgColorSelected : "Geselecteerd", + +// Smiley Dialog +DlgSmileyTitle : "Smiley invoegen", + +// Special Character Dialog +DlgSpecialCharTitle : "Selecteer speciaal teken", + +// Table Dialog +DlgTableTitle : "Eigenschappen tabel", +DlgTableRows : "Rijen", +DlgTableColumns : "Kolommen", +DlgTableBorder : "Breedte rand", +DlgTableAlign : "Uitlijning", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Links", +DlgTableAlignCenter : "Centreren", +DlgTableAlignRight : "Rechts", +DlgTableWidth : "Breedte", +DlgTableWidthPx : "pixels", +DlgTableWidthPc : "procent", +DlgTableHeight : "Hoogte", +DlgTableCellSpace : "Afstand tussen cellen", +DlgTableCellPad : "Afstand vanaf rand cel", +DlgTableCaption : "Naam", +DlgTableSummary : "Samenvatting", +DlgTableHeaders : "Headers", //MISSING +DlgTableHeadersNone : "None", //MISSING +DlgTableHeadersColumn : "First column", //MISSING +DlgTableHeadersRow : "First Row", //MISSING +DlgTableHeadersBoth : "Both", //MISSING + +// Table Cell Dialog +DlgCellTitle : "Eigenschappen cel", +DlgCellWidth : "Breedte", +DlgCellWidthPx : "pixels", +DlgCellWidthPc : "procent", +DlgCellHeight : "Hoogte", +DlgCellWordWrap : "Afbreken woorden", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Ja", +DlgCellWordWrapNo : "Nee", +DlgCellHorAlign : "Horizontale uitlijning", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Links", +DlgCellHorAlignCenter : "Centreren", +DlgCellHorAlignRight: "Rechts", +DlgCellVerAlign : "Verticale uitlijning", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Boven", +DlgCellVerAlignMiddle : "Midden", +DlgCellVerAlignBottom : "Beneden", +DlgCellVerAlignBaseline : "Basislijn", +DlgCellType : "Cell Type", //MISSING +DlgCellTypeData : "Data", //MISSING +DlgCellTypeHeader : "Header", //MISSING +DlgCellRowSpan : "Overkoepeling rijen", +DlgCellCollSpan : "Overkoepeling kolommen", +DlgCellBackColor : "Achtergrondkleur", +DlgCellBorderColor : "Randkleur", +DlgCellBtnSelect : "Selecteren...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Zoeken en vervangen", + +// Find Dialog +DlgFindTitle : "Zoeken", +DlgFindFindBtn : "Zoeken", +DlgFindNotFoundMsg : "De opgegeven tekst is niet gevonden.", + +// Replace Dialog +DlgReplaceTitle : "Vervangen", +DlgReplaceFindLbl : "Zoeken naar:", +DlgReplaceReplaceLbl : "Vervangen met:", +DlgReplaceCaseChk : "Hoofdlettergevoelig", +DlgReplaceReplaceBtn : "Vervangen", +DlgReplaceReplAllBtn : "Alles vervangen", +DlgReplaceWordChk : "Hele woord moet voorkomen", + +// Paste Operations / Dialog +PasteErrorCut : "De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl+X van het toetsenbord.", +PasteErrorCopy : "De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl+C van het toetsenbord.", + +PasteAsText : "Plakken als platte tekst", +PasteFromWord : "Plakken als Word-gegevens", + +DlgPasteMsg2 : "Plak de tekst in het volgende vak gebruik makend van uw toetsenbord (Ctrl+V) en klik op OK.", +DlgPasteSec : "Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.", +DlgPasteIgnoreFont : "Negeer \"Font Face\"-definities", +DlgPasteRemoveStyles : "Verwijder \"Style\"-definities", + +// Color Picker +ColorAutomatic : "Automatisch", +ColorMoreColors : "Meer kleuren...", + +// Document Properties +DocProps : "Eigenschappen document", + +// Anchor Dialog +DlgAnchorTitle : "Eigenschappen interne link", +DlgAnchorName : "Naam interne link", +DlgAnchorErrorName : "Geef de naam van de interne link op", + +// Speller Pages Dialog +DlgSpellNotInDic : "Niet in het woordenboek", +DlgSpellChangeTo : "Wijzig in", +DlgSpellBtnIgnore : "Negeren", +DlgSpellBtnIgnoreAll : "Alles negeren", +DlgSpellBtnReplace : "Vervangen", +DlgSpellBtnReplaceAll : "Alles vervangen", +DlgSpellBtnUndo : "Ongedaan maken", +DlgSpellNoSuggestions : "-Geen suggesties-", +DlgSpellProgress : "Bezig met spellingscontrole...", +DlgSpellNoMispell : "Klaar met spellingscontrole: geen fouten gevonden", +DlgSpellNoChanges : "Klaar met spellingscontrole: geen woorden aangepast", +DlgSpellOneChange : "Klaar met spellingscontrole: één woord aangepast", +DlgSpellManyChanges : "Klaar met spellingscontrole: %1 woorden aangepast", + +IeSpellDownload : "De spellingscontrole niet geïnstalleerd. Wilt u deze nu downloaden?", + +// Button Dialog +DlgButtonText : "Tekst (waarde)", +DlgButtonType : "Soort", +DlgButtonTypeBtn : "Knop", +DlgButtonTypeSbm : "Versturen", +DlgButtonTypeRst : "Leegmaken", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Naam", +DlgCheckboxValue : "Waarde", +DlgCheckboxSelected : "Geselecteerd", + +// Form Dialog +DlgFormName : "Naam", +DlgFormAction : "Actie", +DlgFormMethod : "Methode", + +// Select Field Dialog +DlgSelectName : "Naam", +DlgSelectValue : "Waarde", +DlgSelectSize : "Grootte", +DlgSelectLines : "Regels", +DlgSelectChkMulti : "Gecombineerde selecties toestaan", +DlgSelectOpAvail : "Beschikbare opties", +DlgSelectOpText : "Tekst", +DlgSelectOpValue : "Waarde", +DlgSelectBtnAdd : "Toevoegen", +DlgSelectBtnModify : "Wijzigen", +DlgSelectBtnUp : "Omhoog", +DlgSelectBtnDown : "Omlaag", +DlgSelectBtnSetValue : "Als geselecteerde waarde instellen", +DlgSelectBtnDelete : "Verwijderen", + +// Textarea Dialog +DlgTextareaName : "Naam", +DlgTextareaCols : "Kolommen", +DlgTextareaRows : "Rijen", + +// Text Field Dialog +DlgTextName : "Naam", +DlgTextValue : "Waarde", +DlgTextCharWidth : "Breedte (tekens)", +DlgTextMaxChars : "Maximum aantal tekens", +DlgTextType : "Soort", +DlgTextTypeText : "Tekst", +DlgTextTypePass : "Wachtwoord", + +// Hidden Field Dialog +DlgHiddenName : "Naam", +DlgHiddenValue : "Waarde", + +// Bulleted List Dialog +BulletedListProp : "Eigenschappen opsommingslijst", +NumberedListProp : "Eigenschappen genummerde opsommingslijst", +DlgLstStart : "Start", +DlgLstType : "Soort", +DlgLstTypeCircle : "Cirkel", +DlgLstTypeDisc : "Schijf", +DlgLstTypeSquare : "Vierkant", +DlgLstTypeNumbers : "Nummers (1, 2, 3)", +DlgLstTypeLCase : "Kleine letters (a, b, c)", +DlgLstTypeUCase : "Hoofdletters (A, B, C)", +DlgLstTypeSRoman : "Klein Romeins (i, ii, iii)", +DlgLstTypeLRoman : "Groot Romeins (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Algemeen", +DlgDocBackTab : "Achtergrond", +DlgDocColorsTab : "Kleuring en marges", +DlgDocMetaTab : "META-data", + +DlgDocPageTitle : "Paginatitel", +DlgDocLangDir : "Schrijfrichting", +DlgDocLangDirLTR : "Links naar rechts", +DlgDocLangDirRTL : "Rechts naar links", +DlgDocLangCode : "Taalcode", +DlgDocCharSet : "Karakterset-encoding", +DlgDocCharSetCE : "Centraal Europees", +DlgDocCharSetCT : "Traditioneel Chinees (Big5)", +DlgDocCharSetCR : "Cyriliaans", +DlgDocCharSetGR : "Grieks", +DlgDocCharSetJP : "Japans", +DlgDocCharSetKR : "Koreaans", +DlgDocCharSetTR : "Turks", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "West europees", +DlgDocCharSetOther : "Andere karakterset-encoding", + +DlgDocDocType : "Opschrift documentsoort", +DlgDocDocTypeOther : "Ander opschrift documentsoort", +DlgDocIncXHTML : "XHTML-declaraties meenemen", +DlgDocBgColor : "Achtergrondkleur", +DlgDocBgImage : "URL achtergrondplaatje", +DlgDocBgNoScroll : "Vaste achtergrond", +DlgDocCText : "Tekst", +DlgDocCLink : "Link", +DlgDocCVisited : "Bezochte link", +DlgDocCActive : "Active link", +DlgDocMargins : "Afstandsinstellingen document", +DlgDocMaTop : "Boven", +DlgDocMaLeft : "Links", +DlgDocMaRight : "Rechts", +DlgDocMaBottom : "Onder", +DlgDocMeIndex : "Trefwoorden betreffende document (kommagescheiden)", +DlgDocMeDescr : "Beschrijving document", +DlgDocMeAuthor : "Auteur", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Voorbeeld", + +// Templates Dialog +Templates : "Sjablonen", +DlgTemplatesTitle : "Inhoud sjabonen", +DlgTemplatesSelMsg : "Selecteer het sjabloon dat in de editor geopend moet worden:", +DlgTemplatesLoading : "Bezig met laden sjabonen. Even geduld alstublieft...", +DlgTemplatesNoTpl : "(Geen sjablonen gedefinieerd)", +DlgTemplatesReplace : "Vervang de huidige inhoud", + +// About Dialog +DlgAboutAboutTab : "Over", +DlgAboutBrowserInfoTab : "Browserinformatie", +DlgAboutLicenseTab : "Licentie", +DlgAboutVersion : "Versie", +DlgAboutInfo : "Voor meer informatie ga naar ", + +// Div Dialog +DlgDivGeneralTab : "Algemeen", +DlgDivAdvancedTab : "Geavanceerd", +DlgDivStyle : "Style", +DlgDivInlineStyle : "Inline Style", + +ScaytTitle : "SCAYT", //MISSING +ScaytTitleOptions : "Options", //MISSING +ScaytTitleLangs : "Languages", //MISSING +ScaytTitleAbout : "About" //MISSING +}; diff --git a/fckeditor/FCKeditor/editor/lang/sk.js b/fckeditor/FCKeditor/editor/lang/sk.js new file mode 100644 index 0000000..0d9d1ad --- /dev/null +++ b/fckeditor/FCKeditor/editor/lang/sk.js @@ -0,0 +1,539 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Slovak language file. + */ + +var FCKLang = +{ +// Language direction : "ltr" (left to right) or "rtl" (right to left). +Dir : "ltr", + +ToolbarCollapse : "Skryť panel nástrojov", +ToolbarExpand : "Zobraziť panel nástrojov", + +// Toolbar Items and Context Menu +Save : "Uložiť", +NewPage : "Nová stránka", +Preview : "Náhľad", +Cut : "Vystrihnúť", +Copy : "Kopírovať", +Paste : "Vložiť", +PasteText : "Vložiť ako čistý text", +PasteWord : "Vložiť z Wordu", +Print : "Tlač", +SelectAll : "Vybrať všetko", +RemoveFormat : "Odstrániť formátovanie", +InsertLinkLbl : "Odkaz", +InsertLink : "Vložiť/zmeniť odkaz", +RemoveLink : "Odstrániť odkaz", +VisitLink : "Ísť na odkaz", +Anchor : "Vložiť/zmeniť kotvu", +AnchorDelete : "Odstrániť kotvu", +InsertImageLbl : "Obrázok", +InsertImage : "Vložiť/zmeniť obrázok", +InsertFlashLbl : "Flash", +InsertFlash : "Vložiť/zmeniť Flash", +InsertTableLbl : "Tabuľka", +InsertTable : "Vložiť/zmeniť tabuľku", +InsertLineLbl : "Čiara", +InsertLine : "Vložiť vodorovnú čiaru", +InsertSpecialCharLbl: "Špeciálne znaky", +InsertSpecialChar : "Vložiť špeciálne znaky", +InsertSmileyLbl : "Smajlíky", +InsertSmiley : "Vložiť smajlíka", +About : "O aplikácii FCKeditor", +Bold : "Tučné", +Italic : "Kurzíva", +Underline : "Podčiarknuté", +StrikeThrough : "Prečiarknuté", +Subscript : "Dolný index", +Superscript : "Horný index", +LeftJustify : "Zarovnať vľavo", +CenterJustify : "Zarovnať na stred", +RightJustify : "Zarovnať vpravo", +BlockJustify : "Zarovnať do bloku", +DecreaseIndent : "Zmenšiť odsadenie", +IncreaseIndent : "Zväčšiť odsadenie", +Blockquote : "Citácia", +CreateDiv : "Vytvoriť Div kontajner", +EditDiv : "Editovať Div kontajner", +DeleteDiv : "Odstrániť Div kontajner", +Undo : "Späť", +Redo : "Znovu", +NumberedListLbl : "Číslovanie", +NumberedList : "Vložiť/odstrániť číslovanie", +BulletedListLbl : "Odrážky", +BulletedList : "Vložiť/odstraniť odrážky", +ShowTableBorders : "Zobraziť okraje tabuliek", +ShowDetails : "Zobraziť podrobnosti", +Style : "Štýl", +FontFormat : "Formát", +Font : "Písmo", +FontSize : "Veľkosť", +TextColor : "Farba textu", +BGColor : "Farba pozadia", +Source : "Zdroj", +Find : "Hľadať", +Replace : "Nahradiť", +SpellCheck : "Kontrola pravopisu", +UniversalKeyboard : "Univerzálna klávesnica", +PageBreakLbl : "Oddeľovač stránky", +PageBreak : "Vložiť oddeľovač stránky", + +Form : "Formulár", +Checkbox : "Zaškrtávacie políčko", +RadioButton : "Prepínač", +TextField : "Textové pole", +Textarea : "Textová oblasť", +HiddenField : "Skryté pole", +Button : "Tlačidlo", +SelectionField : "Rozbaľovací zoznam", +ImageButton : "Obrázkové tlačidlo", + +FitWindow : "Maximalizovať veľkosť okna editora", +ShowBlocks : "Ukázať bloky", + +// Context Menu +EditLink : "Zmeniť odkaz", +CellCM : "Bunka", +RowCM : "Riadok", +ColumnCM : "Stĺpec", +InsertRowAfter : "Vložiť riadok pred", +InsertRowBefore : "Vložiť riadok za", +DeleteRows : "Vymazať riadok", +InsertColumnAfter : "Vložiť stĺpec pred", +InsertColumnBefore : "Vložiť stĺpec za", +DeleteColumns : "Zmazať stĺpec", +InsertCellAfter : "Vložiť bunku za", +InsertCellBefore : "Vložiť bunku pred", +DeleteCells : "Vymazať bunky", +MergeCells : "Zlúčiť bunky", +MergeRight : "Zlúčiť doprava", +MergeDown : "Zlúčiť dole", +HorizontalSplitCell : "Rozdeliť bunky horizontálne", +VerticalSplitCell : "Rozdeliť bunky vertikálne", +TableDelete : "Vymazať tabuľku", +CellProperties : "Vlastnosti bunky", +TableProperties : "Vlastnosti tabuľky", +ImageProperties : "Vlastnosti obrázku", +FlashProperties : "Vlastnosti Flashu", + +AnchorProp : "Vlastnosti kotvy", +ButtonProp : "Vlastnosti tlačidla", +CheckboxProp : "Vlastnosti zaškrtávacieho políčka", +HiddenFieldProp : "Vlastnosti skrytého poľa", +RadioButtonProp : "Vlastnosti prepínača", +ImageButtonProp : "Vlastnosti obrázkového tlačidla", +TextFieldProp : "Vlastnosti textového poľa", +SelectionFieldProp : "Vlastnosti rozbaľovacieho zoznamu", +TextareaProp : "Vlastnosti textovej oblasti", +FormProp : "Vlastnosti formulára", + +FontFormats : "Normálny;Formátovaný;Adresa;Nadpis 1;Nadpis 2;Nadpis 3;Nadpis 4;Nadpis 5;Nadpis 6;Odsek (DIV)", + +// Alerts and Messages +ProcessingXHTML : "Prebieha spracovanie XHTML. Čakajte prosím...", +Done : "Dokončené.", +PasteWordConfirm : "Vyzerá to tak, že vkladaný text je kopírovaný z Wordu. Chcete ho pred vložením vyčistiť?", +NotCompatiblePaste : "Tento príkaz je dostupný len v prehliadači Internet Explorer verzie 5.5 alebo vyššej. Chcete vložiť text bez vyčistenia?", +UnknownToolbarItem : "Neznáma položka panela nástrojov \"%1\"", +UnknownCommand : "Neznámy príkaz \"%1\"", +NotImplemented : "Príkaz nie je implementovaný", +UnknownToolbarSet : "Panel nástrojov \"%1\" neexistuje", +NoActiveX : "Bezpečnostné nastavenia vášho prehliadača môžu obmedzovať niektoré funkcie editora. Pre ich plnú funkčnosť musíte zapnúť voľbu \"Spúšťať ActiveX moduly a zásuvné moduly\", inak sa môžete stretnúť s chybami a nefunkčnosťou niektorých funkcií.", +BrowseServerBlocked : "Prehliadač zdrojových prvkov nebolo možné otvoriť. Uistite sa, že máte vypnutú službu blokovania popup okien.", +DialogBlocked : "Dialógové okno nebolo možné otvoriť. Uistite sa, že máte vypnutú službu blokovania popup okien.", +VisitLinkBlocked : "Nebolo možné otvoriť nové okno. Uistite sa, že máte vypnutú službu blokovania popup okien.", + +// Dialogs +DlgBtnOK : "OK", +DlgBtnCancel : "Zrušiť", +DlgBtnClose : "Zavrieť", +DlgBtnBrowseServer : "Prechádzať server", +DlgAdvancedTag : "Rozšírené", +DlgOpOther : "<Ďalšie>", +DlgInfoTab : "Info", +DlgAlertUrl : "Prosím vložte URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Orientácia jazyka", +DlgGenLangDirLtr : "Zľava doprava (LTR)", +DlgGenLangDirRtl : "Sprava doľava (RTL)", +DlgGenLangCode : "Kód jazyka", +DlgGenAccessKey : "Prístupový kľúč", +DlgGenName : "Meno", +DlgGenTabIndex : "Poradie prvku", +DlgGenLongDescr : "Dlhý popis URL", +DlgGenClass : "Trieda štýlu", +DlgGenTitle : "Pomocný titulok", +DlgGenContType : "Pomocný typ obsahu", +DlgGenLinkCharset : "Priradená znaková sada", +DlgGenStyle : "Štýl", + +// Image Dialog +DlgImgTitle : "Vlastnosti obrázku", +DlgImgInfoTab : "Informácie o obrázku", +DlgImgBtnUpload : "Odoslať na server", +DlgImgURL : "URL", +DlgImgUpload : "Odoslať", +DlgImgAlt : "Alternatívny text", +DlgImgWidth : "Šírka", +DlgImgHeight : "Výška", +DlgImgLockRatio : "Zámok", +DlgBtnResetSize : "Pôvodná veľkosť", +DlgImgBorder : "Okraje", +DlgImgHSpace : "H-medzera", +DlgImgVSpace : "V-medzera", +DlgImgAlign : "Zarovnanie", +DlgImgAlignLeft : "Vľavo", +DlgImgAlignAbsBottom: "Úplne dole", +DlgImgAlignAbsMiddle: "Do stredu", +DlgImgAlignBaseline : "Na základňu", +DlgImgAlignBottom : "Dole", +DlgImgAlignMiddle : "Na stred", +DlgImgAlignRight : "Vpravo", +DlgImgAlignTextTop : "Na horný okraj textu", +DlgImgAlignTop : "Nahor", +DlgImgPreview : "Náhľad", +DlgImgAlertUrl : "Zadajte prosím URL obrázku", +DlgImgLinkTab : "Odkaz", + +// Flash Dialog +DlgFlashTitle : "Vlastnosti Flashu", +DlgFlashChkPlay : "Automatické prehrávanie", +DlgFlashChkLoop : "Opakovanie", +DlgFlashChkMenu : "Povoliť Flash Menu", +DlgFlashScale : "Mierka", +DlgFlashScaleAll : "Zobraziť mierku", +DlgFlashScaleNoBorder : "Bez okrajov", +DlgFlashScaleFit : "Roztiahnuť na celé", + +// Link Dialog +DlgLnkWindowTitle : "Odkaz", +DlgLnkInfoTab : "Informácie o odkaze", +DlgLnkTargetTab : "Cieľ", + +DlgLnkType : "Typ odkazu", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Kotva v tejto stránke", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protokol", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Vybrať kotvu", +DlgLnkAnchorByName : "Podľa mena kotvy", +DlgLnkAnchorById : "Podľa Id objektu", +DlgLnkNoAnchors : "(V stránke nie je definovaná žiadna kotva)", +DlgLnkEMail : "E-Mailová adresa", +DlgLnkEMailSubject : "Predmet správy", +DlgLnkEMailBody : "Telo správy", +DlgLnkUpload : "Odoslať", +DlgLnkBtnUpload : "Odoslať na server", + +DlgLnkTarget : "Cieľ", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Nové okno (_blank)", +DlgLnkTargetParent : "Rodičovské okno (_parent)", +DlgLnkTargetSelf : "Rovnaké okno (_self)", +DlgLnkTargetTop : "Hlavné okno (_top)", +DlgLnkTargetFrameName : "Meno rámu cieľa", +DlgLnkPopWinName : "Názov vyskakovacieho okna", +DlgLnkPopWinFeat : "Vlastnosti vyskakovacieho okna", +DlgLnkPopResize : "Meniteľná veľkosť", +DlgLnkPopLocation : "Panel umiestnenia", +DlgLnkPopMenu : "Panel ponuky", +DlgLnkPopScroll : "Posuvníky", +DlgLnkPopStatus : "Stavový riadok", +DlgLnkPopToolbar : "Panel nástrojov", +DlgLnkPopFullScrn : "Celá obrazovka (IE)", +DlgLnkPopDependent : "Závislosť (Netscape)", +DlgLnkPopWidth : "Šírka", +DlgLnkPopHeight : "Výška", +DlgLnkPopLeft : "Ľavý okraj", +DlgLnkPopTop : "Horný okraj", + +DlnLnkMsgNoUrl : "Zadajte prosím URL odkazu", +DlnLnkMsgNoEMail : "Zadajte prosím e-mailovú adresu", +DlnLnkMsgNoAnchor : "Vyberte prosím kotvu", +DlnLnkMsgInvPopName : "Názov vyskakovacieho okna sa musá začínať písmenom a nemôže obsahovať medzery", + +// Color Dialog +DlgColorTitle : "Výber farby", +DlgColorBtnClear : "Vymazať", +DlgColorHighlight : "Zvýraznená", +DlgColorSelected : "Vybraná", + +// Smiley Dialog +DlgSmileyTitle : "Vkladanie smajlíkov", + +// Special Character Dialog +DlgSpecialCharTitle : "Výber špeciálneho znaku", + +// Table Dialog +DlgTableTitle : "Vlastnosti tabuľky", +DlgTableRows : "Riadky", +DlgTableColumns : "Stĺpce", +DlgTableBorder : "Ohraničenie", +DlgTableAlign : "Zarovnanie", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Vľavo", +DlgTableAlignCenter : "Na stred", +DlgTableAlignRight : "Vpravo", +DlgTableWidth : "Šírka", +DlgTableWidthPx : "pixelov", +DlgTableWidthPc : "percent", +DlgTableHeight : "Výška", +DlgTableCellSpace : "Vzdialenosť buniek", +DlgTableCellPad : "Odsadenie obsahu", +DlgTableCaption : "Popis", +DlgTableSummary : "Prehľad", +DlgTableHeaders : "Headers", //MISSING +DlgTableHeadersNone : "None", //MISSING +DlgTableHeadersColumn : "First column", //MISSING +DlgTableHeadersRow : "First Row", //MISSING +DlgTableHeadersBoth : "Both", //MISSING + +// Table Cell Dialog +DlgCellTitle : "Vlastnosti bunky", +DlgCellWidth : "Šírka", +DlgCellWidthPx : "bodov", +DlgCellWidthPc : "percent", +DlgCellHeight : "Výška", +DlgCellWordWrap : "Zalamovannie", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Áno", +DlgCellWordWrapNo : "Nie", +DlgCellHorAlign : "Vodorovné zarovnanie", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Vľavo", +DlgCellHorAlignCenter : "Na stred", +DlgCellHorAlignRight: "Vpravo", +DlgCellVerAlign : "Zvislé zarovnanie", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Nahor", +DlgCellVerAlignMiddle : "Doprostred", +DlgCellVerAlignBottom : "Dole", +DlgCellVerAlignBaseline : "Na základňu", +DlgCellType : "Cell Type", //MISSING +DlgCellTypeData : "Data", //MISSING +DlgCellTypeHeader : "Header", //MISSING +DlgCellRowSpan : "Zlúčené riadky", +DlgCellCollSpan : "Zlúčené stĺpce", +DlgCellBackColor : "Farba pozadia", +DlgCellBorderColor : "Farba ohraničenia", +DlgCellBtnSelect : "Výber...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Nájsť a nahradiť", + +// Find Dialog +DlgFindTitle : "Hľadať", +DlgFindFindBtn : "Hľadať", +DlgFindNotFoundMsg : "Hľadaný text nebol nájdený.", + +// Replace Dialog +DlgReplaceTitle : "Nahradiť", +DlgReplaceFindLbl : "Čo hľadať:", +DlgReplaceReplaceLbl : "Čím nahradiť:", +DlgReplaceCaseChk : "Rozlišovať malé/veľké písmená", +DlgReplaceReplaceBtn : "Nahradiť", +DlgReplaceReplAllBtn : "Nahradiť všetko", +DlgReplaceWordChk : "Len celé slová", + +// Paste Operations / Dialog +PasteErrorCut : "Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru spustiť funkciu pre vystrihnutie zvoleného textu do schránky. Prosím vystrihnite zvolený text do schránky pomocou klávesnice (Ctrl+X).", +PasteErrorCopy : "Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru spustiť funkciu pre kopírovanie zvoleného textu do schránky. Prosím skopírujte zvolený text do schránky pomocou klávesnice (Ctrl+C).", + +PasteAsText : "Vložiť ako čistý text", +PasteFromWord : "Vložiť text z Wordu", + +DlgPasteMsg2 : "Prosím vložte nasledovný rámček použitím klávesnice (Ctrl+V) a stlačte OK.", +DlgPasteSec : "Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru pristupovať priamo k datám v schránke. Musíte ich vložiť znovu do tohto okna.", +DlgPasteIgnoreFont : "Ignorovať nastavenia typu písma", +DlgPasteRemoveStyles : "Odstrániť formátovanie", + +// Color Picker +ColorAutomatic : "Automaticky", +ColorMoreColors : "Viac farieb...", + +// Document Properties +DocProps : "Vlastnosti dokumentu", + +// Anchor Dialog +DlgAnchorTitle : "Vlastnosti kotvy", +DlgAnchorName : "Meno kotvy", +DlgAnchorErrorName : "Zadajte prosím meno kotvy", + +// Speller Pages Dialog +DlgSpellNotInDic : "Nie je v slovníku", +DlgSpellChangeTo : "Zmeniť na", +DlgSpellBtnIgnore : "Ignorovať", +DlgSpellBtnIgnoreAll : "Ignorovať všetko", +DlgSpellBtnReplace : "Prepísat", +DlgSpellBtnReplaceAll : "Prepísat všetko", +DlgSpellBtnUndo : "Späť", +DlgSpellNoSuggestions : "- Žiadny návrh -", +DlgSpellProgress : "Prebieha kontrola pravopisu...", +DlgSpellNoMispell : "Kontrola pravopisu dokončená: bez chýb", +DlgSpellNoChanges : "Kontrola pravopisu dokončená: žiadne slová nezmenené", +DlgSpellOneChange : "Kontrola pravopisu dokončená: zmenené jedno slovo", +DlgSpellManyChanges : "Kontrola pravopisu dokončená: zmenených %1 slov", + +IeSpellDownload : "Kontrola pravopisu nie je naištalovaná. Chcete ju hneď stiahnuť?", + +// Button Dialog +DlgButtonText : "Text", +DlgButtonType : "Typ", +DlgButtonTypeBtn : "Tlačidlo", +DlgButtonTypeSbm : "Odoslať", +DlgButtonTypeRst : "Vymazať", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Názov", +DlgCheckboxValue : "Hodnota", +DlgCheckboxSelected : "Vybrané", + +// Form Dialog +DlgFormName : "Názov", +DlgFormAction : "Akcie", +DlgFormMethod : "Metóda", + +// Select Field Dialog +DlgSelectName : "Názov", +DlgSelectValue : "Hodnota", +DlgSelectSize : "Veľkosť", +DlgSelectLines : "riadkov", +DlgSelectChkMulti : "Povoliť viacnásobný výber", +DlgSelectOpAvail : "Dostupné možnosti", +DlgSelectOpText : "Text", +DlgSelectOpValue : "Hodnota", +DlgSelectBtnAdd : "Pridať", +DlgSelectBtnModify : "Zmeniť", +DlgSelectBtnUp : "Hore", +DlgSelectBtnDown : "Dole", +DlgSelectBtnSetValue : "Nastaviť ako vybranú hodnotu", +DlgSelectBtnDelete : "Zmazať", + +// Textarea Dialog +DlgTextareaName : "Názov", +DlgTextareaCols : "Stĺpce", +DlgTextareaRows : "Riadky", + +// Text Field Dialog +DlgTextName : "Názov", +DlgTextValue : "Hodnota", +DlgTextCharWidth : "Šírka pola (znakov)", +DlgTextMaxChars : "Maximálny počet znakov", +DlgTextType : "Typ", +DlgTextTypeText : "Text", +DlgTextTypePass : "Heslo", + +// Hidden Field Dialog +DlgHiddenName : "Názov", +DlgHiddenValue : "Hodnota", + +// Bulleted List Dialog +BulletedListProp : "Vlastnosti odrážok", +NumberedListProp : "Vlastnosti číslovania", +DlgLstStart : "Štart", +DlgLstType : "Typ", +DlgLstTypeCircle : "Krúžok", +DlgLstTypeDisc : "Disk", +DlgLstTypeSquare : "Štvorec", +DlgLstTypeNumbers : "Číslovanie (1, 2, 3)", +DlgLstTypeLCase : "Malé písmená (a, b, c)", +DlgLstTypeUCase : "Veľké písmená (A, B, C)", +DlgLstTypeSRoman : "Malé rímske číslice (i, ii, iii)", +DlgLstTypeLRoman : "Veľké rímske číslice (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Všeobecné", +DlgDocBackTab : "Pozadie", +DlgDocColorsTab : "Farby a okraje", +DlgDocMetaTab : "Meta Data", + +DlgDocPageTitle : "Titulok", +DlgDocLangDir : "Orientácie jazyka", +DlgDocLangDirLTR : "Zľava doprava (LTR)", +DlgDocLangDirRTL : "Sprava doľava (RTL)", +DlgDocLangCode : "Kód jazyka", +DlgDocCharSet : "Kódová stránka", +DlgDocCharSetCE : "Stredoeurópske", +DlgDocCharSetCT : "Čínština tradičná (Big5)", +DlgDocCharSetCR : "Cyrillika", +DlgDocCharSetGR : "Gréčtina", +DlgDocCharSetJP : "Japončina", +DlgDocCharSetKR : "Korejčina", +DlgDocCharSetTR : "Turečtina", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Západná európa", +DlgDocCharSetOther : "Iná kódová stránka", + +DlgDocDocType : "Typ záhlavia dokumentu", +DlgDocDocTypeOther : "Iný typ záhlavia dokumentu", +DlgDocIncXHTML : "Obsahuje deklarácie XHTML", +DlgDocBgColor : "Farba pozadia", +DlgDocBgImage : "URL adresa obrázku na pozadí", +DlgDocBgNoScroll : "Fixné pozadie", +DlgDocCText : "Text", +DlgDocCLink : "Odkaz", +DlgDocCVisited : "Navštívený odkaz", +DlgDocCActive : "Aktívny odkaz", +DlgDocMargins : "Okraje stránky", +DlgDocMaTop : "Horný", +DlgDocMaLeft : "Ľavý", +DlgDocMaRight : "Pravý", +DlgDocMaBottom : "Dolný", +DlgDocMeIndex : "Kľúčové slová pre indexovanie (oddelené čiarkou)", +DlgDocMeDescr : "Popis stránky", +DlgDocMeAuthor : "Autor", +DlgDocMeCopy : "Autorské práva", +DlgDocPreview : "Náhľad", + +// Templates Dialog +Templates : "Šablóny", +DlgTemplatesTitle : "Šablóny obsahu", +DlgTemplatesSelMsg : "Prosím vyberte šablóny na otvorenie v editore:", +DlgTemplatesLoading : "Nahrávam zoznam šablón. Čakajte prosím...", +DlgTemplatesNoTpl : "(žiadne šablóny nenájdené)", +DlgTemplatesReplace : "Nahradiť aktuálny obsah", + +// About Dialog +DlgAboutAboutTab : "O aplikáci", +DlgAboutBrowserInfoTab : "Informácie o prehliadači", +DlgAboutLicenseTab : "Licencia", +DlgAboutVersion : "verzia", +DlgAboutInfo : "Viac informácií získate na", + +// Div Dialog +DlgDivGeneralTab : "Hlavné", +DlgDivAdvancedTab : "Rozšírené", +DlgDivStyle : "Štýl", +DlgDivInlineStyle : "Inline štýl", + +ScaytTitle : "SCAYT", //MISSING +ScaytTitleOptions : "Options", //MISSING +ScaytTitleLangs : "Languages", //MISSING +ScaytTitleAbout : "About" //MISSING +}; diff --git a/fckeditor/FCKeditor/editor/plugins/autogrow/fckplugin.js b/fckeditor/FCKeditor/editor/plugins/autogrow/fckplugin.js new file mode 100644 index 0000000..1df2d0f --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/autogrow/fckplugin.js @@ -0,0 +1,111 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Plugin: automatically resizes the editor until a configurable maximun + * height (FCKConfig.AutoGrowMax), based on its contents. + */ + +var FCKAutoGrow = { + MIN_HEIGHT : window.frameElement.offsetHeight, + + Check : function() + { + var delta = FCKAutoGrow.GetHeightDelta() ; + if ( delta != 0 ) + { + var newHeight = window.frameElement.offsetHeight + delta ; + + newHeight = FCKAutoGrow.GetEffectiveHeight( newHeight ) ; + + if ( newHeight != window.frameElement.height ) + { + window.frameElement.style.height = newHeight + "px" ; + + // Gecko browsers use an onresize handler to update the innermost + // IFRAME's height. If the document is modified before the onresize + // is triggered, the plugin will miscalculate the new height. Thus, + // forcibly trigger onresize. #1336 + if ( typeof window.onresize == 'function' ) + { + window.onresize() ; + } + } + } + }, + + CheckEditorStatus : function( sender, status ) + { + if ( status == FCK_STATUS_COMPLETE ) + FCKAutoGrow.Check() ; + }, + + GetEffectiveHeight : function( height ) + { + if ( height < FCKAutoGrow.MIN_HEIGHT ) + height = FCKAutoGrow.MIN_HEIGHT; + else + { + var max = FCKConfig.AutoGrowMax; + if ( max && max > 0 && height > max ) + height = max; + } + + return height; + }, + + GetHeightDelta : function() + { + var oInnerDoc = FCK.EditorDocument ; + + var iFrameHeight ; + var iInnerHeight ; + + if ( FCKBrowserInfo.IsIE ) + { + iFrameHeight = FCK.EditorWindow.frameElement.offsetHeight ; + iInnerHeight = oInnerDoc.body.scrollHeight ; + } + else + { + iFrameHeight = FCK.EditorWindow.innerHeight ; + iInnerHeight = oInnerDoc.body.offsetHeight + + ( parseInt( FCKDomTools.GetCurrentElementStyle( oInnerDoc.body, 'margin-top' ), 10 ) || 0 ) + + ( parseInt( FCKDomTools.GetCurrentElementStyle( oInnerDoc.body, 'margin-bottom' ), 10 ) || 0 ) ; + } + + return iInnerHeight - iFrameHeight ; + }, + + SetListeners : function() + { + if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG ) + return ; + + FCK.EditorWindow.attachEvent( 'onscroll', FCKAutoGrow.Check ) ; + FCK.EditorDocument.attachEvent( 'onkeyup', FCKAutoGrow.Check ) ; + } +}; + +FCK.AttachToOnSelectionChange( FCKAutoGrow.Check ) ; + +if ( FCKBrowserInfo.IsIE ) + FCK.Events.AttachEvent( 'OnAfterSetHTML', FCKAutoGrow.SetListeners ) ; + +FCK.Events.AttachEvent( 'OnStatusChange', FCKAutoGrow.CheckEditorStatus ) ; diff --git a/fckeditor/FCKeditor/editor/plugins/dragresizetable/fckplugin.js b/fckeditor/FCKeditor/editor/plugins/dragresizetable/fckplugin.js new file mode 100644 index 0000000..87061ff --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/dragresizetable/fckplugin.js @@ -0,0 +1,529 @@ +var FCKDragTableHandler = +{ + "_DragState" : 0, + "_LeftCell" : null, + "_RightCell" : null, + "_MouseMoveMode" : 0, // 0 - find candidate cells for resizing, 1 - drag to resize + "_ResizeBar" : null, + "_OriginalX" : null, + "_MinimumX" : null, + "_MaximumX" : null, + "_LastX" : null, + "_TableMap" : null, + "_doc" : document, + "_IsInsideNode" : function( w, domNode, pos ) + { + var myCoords = FCKTools.GetWindowPosition( w, domNode ) ; + var xMin = myCoords.x ; + var yMin = myCoords.y ; + var xMax = parseInt( xMin, 10 ) + parseInt( domNode.offsetWidth, 10 ) ; + var yMax = parseInt( yMin, 10 ) + parseInt( domNode.offsetHeight, 10 ) ; + if ( pos.x >= xMin && pos.x <= xMax && pos.y >= yMin && pos.y <= yMax ) + return true; + return false; + }, + "_GetBorderCells" : function( w, tableNode, tableMap, mouse ) + { + // Enumerate all the cells in the table. + var cells = [] ; + for ( var i = 0 ; i < tableNode.rows.length ; i++ ) + { + var r = tableNode.rows[i] ; + for ( var j = 0 ; j < r.cells.length ; j++ ) + cells.push( r.cells[j] ) ; + } + + if ( cells.length < 1 ) + return null ; + + // Get the cells whose right or left border is nearest to the mouse cursor's x coordinate. + var minRxDist = null ; + var lxDist = null ; + var minYDist = null ; + var rbCell = null ; + var lbCell = null ; + for ( var i = 0 ; i < cells.length ; i++ ) + { + var pos = FCKTools.GetWindowPosition( w, cells[i] ) ; + var rightX = pos.x + parseInt( cells[i].clientWidth, 10 ) ; + var rxDist = mouse.x - rightX ; + var yDist = mouse.y - ( pos.y + ( cells[i].clientHeight / 2 ) ) ; + if ( minRxDist == null || + ( Math.abs( rxDist ) <= Math.abs( minRxDist ) && + ( minYDist == null || Math.abs( yDist ) <= Math.abs( minYDist ) ) ) ) + { + minRxDist = rxDist ; + minYDist = yDist ; + rbCell = cells[i] ; + } + } + /* + var rowNode = FCKTools.GetElementAscensor( rbCell, "tr" ) ; + var cellIndex = rbCell.cellIndex + 1 ; + if ( cellIndex >= rowNode.cells.length ) + return null ; + lbCell = rowNode.cells.item( cellIndex ) ; + */ + var rowIdx = rbCell.parentNode.rowIndex ; + var colIdx = FCKTableHandler._GetCellIndexSpan( tableMap, rowIdx, rbCell ) ; + var colSpan = isNaN( rbCell.colSpan ) ? 1 : rbCell.colSpan ; + lbCell = tableMap[rowIdx][colIdx + colSpan] ; + + if ( ! lbCell ) + return null ; + + // Abort if too far from the border. + lxDist = mouse.x - FCKTools.GetWindowPosition( w, lbCell ).x ; + if ( lxDist < 0 && minRxDist < 0 && minRxDist < -2 ) + return null ; + if ( lxDist > 0 && minRxDist > 0 && lxDist > 3 ) + return null ; + + return { "leftCell" : rbCell, "rightCell" : lbCell } ; + }, + "_GetResizeBarPosition" : function() + { + var row = FCKTools.GetElementAscensor( this._RightCell, "tr" ) ; + return FCKTableHandler._GetCellIndexSpan( this._TableMap, row.rowIndex, this._RightCell ) ; + }, + "_ResizeBarMouseDownListener" : function( evt ) + { + if ( FCKDragTableHandler._LeftCell ) + FCKDragTableHandler._MouseMoveMode = 1 ; + if ( FCKBrowserInfo.IsIE ) + FCKDragTableHandler._ResizeBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 50 ; + else + FCKDragTableHandler._ResizeBar.style.opacity = 0.5 ; + FCKDragTableHandler._OriginalX = evt.clientX ; + + // Calculate maximum and minimum x-coordinate delta. + var borderIndex = FCKDragTableHandler._GetResizeBarPosition() ; + var offset = FCKDragTableHandler._GetIframeOffset(); + var table = FCKTools.GetElementAscensor( FCKDragTableHandler._LeftCell, "table" ); + var minX = null ; + var maxX = null ; + for ( var r = 0 ; r < FCKDragTableHandler._TableMap.length ; r++ ) + { + var leftCell = FCKDragTableHandler._TableMap[r][borderIndex - 1] ; + var rightCell = FCKDragTableHandler._TableMap[r][borderIndex] ; + var leftPosition = FCKTools.GetWindowPosition( FCK.EditorWindow, leftCell ) ; + var rightPosition = FCKTools.GetWindowPosition( FCK.EditorWindow, rightCell ) ; + var leftPadding = FCKDragTableHandler._GetCellPadding( table, leftCell ) ; + var rightPadding = FCKDragTableHandler._GetCellPadding( table, rightCell ) ; + if ( minX == null || leftPosition.x + leftPadding > minX ) + minX = leftPosition.x + leftPadding ; + if ( maxX == null || rightPosition.x + rightCell.clientWidth - rightPadding < maxX ) + maxX = rightPosition.x + rightCell.clientWidth - rightPadding ; + } + + FCKDragTableHandler._MinimumX = minX + offset.x ; + FCKDragTableHandler._MaximumX = maxX + offset.x ; + FCKDragTableHandler._LastX = null ; + + if (evt.preventDefault) + evt.preventDefault(); + else + evt.returnValue = false; + }, + "_ResizeBarMouseUpListener" : function( evt ) + { + FCKDragTableHandler._MouseMoveMode = 0 ; + FCKDragTableHandler._HideResizeBar() ; + + if ( FCKDragTableHandler._LastX == null ) + return ; + + // Calculate the delta value. + var deltaX = FCKDragTableHandler._LastX - FCKDragTableHandler._OriginalX ; + + // Then, build an array of current column width values. + // This algorithm can be very slow if the cells have insane colSpan values. (e.g. colSpan=1000). + var table = FCKTools.GetElementAscensor( FCKDragTableHandler._LeftCell, "table" ) ; + var colArray = [] ; + var tableMap = FCKDragTableHandler._TableMap ; + for ( var i = 0 ; i < tableMap.length ; i++ ) + { + for ( var j = 0 ; j < tableMap[i].length ; j++ ) + { + var cell = tableMap[i][j] ; + var width = FCKDragTableHandler._GetCellWidth( table, cell ) ; + var colSpan = isNaN( cell.colSpan) ? 1 : cell.colSpan ; + if ( colArray.length <= j ) + colArray.push( { width : width / colSpan, colSpan : colSpan } ) ; + else + { + var guessItem = colArray[j] ; + if ( guessItem.colSpan > colSpan ) + { + guessItem.width = width / colSpan ; + guessItem.colSpan = colSpan ; + } + } + } + } + + // Find out the equivalent column index of the two cells selected for resizing. + colIndex = FCKDragTableHandler._GetResizeBarPosition() ; + + // Note that colIndex must be at least 1 here, so it's safe to subtract 1 from it. + colIndex-- ; + + // Modify the widths in the colArray according to the mouse coordinate delta value. + colArray[colIndex].width += deltaX ; + colArray[colIndex + 1].width -= deltaX ; + + // Clear all cell widths, delete all elements from the table. + for ( var r = 0 ; r < table.rows.length ; r++ ) + { + var row = table.rows.item( r ) ; + for ( var c = 0 ; c < row.cells.length ; c++ ) + { + var cell = row.cells.item( c ) ; + cell.width = "" ; + cell.style.width = "" ; + } + } + var colElements = table.getElementsByTagName( "col" ) ; + for ( var i = colElements.length - 1 ; i >= 0 ; i-- ) + colElements[i].parentNode.removeChild( colElements[i] ) ; + + // Set new cell widths. + var processedCells = [] ; + for ( var i = 0 ; i < tableMap.length ; i++ ) + { + for ( var j = 0 ; j < tableMap[i].length ; j++ ) + { + var cell = tableMap[i][j] ; + if ( cell._Processed ) + continue ; + if ( tableMap[i][j-1] != cell ) + cell.width = colArray[j].width ; + else + cell.width = parseInt( cell.width, 10 ) + parseInt( colArray[j].width, 10 ) ; + if ( tableMap[i][j+1] != cell ) + { + processedCells.push( cell ) ; + cell._Processed = true ; + } + } + } + for ( var i = 0 ; i < processedCells.length ; i++ ) + { + if ( FCKBrowserInfo.IsIE ) + processedCells[i].removeAttribute( '_Processed' ) ; + else + delete processedCells[i]._Processed ; + } + + FCKDragTableHandler._LastX = null ; + }, + "_ResizeBarMouseMoveListener" : function( evt ) + { + if ( FCKDragTableHandler._MouseMoveMode == 0 ) + return FCKDragTableHandler._MouseFindHandler( FCK, evt ) ; + else + return FCKDragTableHandler._MouseDragHandler( FCK, evt ) ; + }, + // Calculate the padding of a table cell. + // It returns the value of paddingLeft + paddingRight of a table cell. + // This function is used, in part, to calculate the width parameter that should be used for setting cell widths. + // The equation in question is clientWidth = paddingLeft + paddingRight + width. + // So that width = clientWidth - paddingLeft - paddingRight. + // The return value of this function must be pixel accurate acorss all supported browsers, so be careful if you need to modify it. + "_GetCellPadding" : function( table, cell ) + { + var attrGuess = parseInt( table.cellPadding, 10 ) * 2 ; + var cssGuess = null ; + if ( typeof( window.getComputedStyle ) == "function" ) + { + var styleObj = window.getComputedStyle( cell, null ) ; + cssGuess = parseInt( styleObj.getPropertyValue( "padding-left" ), 10 ) + + parseInt( styleObj.getPropertyValue( "padding-right" ), 10 ) ; + } + else + cssGuess = parseInt( cell.currentStyle.paddingLeft, 10 ) + parseInt (cell.currentStyle.paddingRight, 10 ) ; + + var cssRuntime = cell.style.padding ; + if ( isFinite( cssRuntime ) ) + cssGuess = parseInt( cssRuntime, 10 ) * 2 ; + else + { + cssRuntime = cell.style.paddingLeft ; + if ( isFinite( cssRuntime ) ) + cssGuess = parseInt( cssRuntime, 10 ) ; + cssRuntime = cell.style.paddingRight ; + if ( isFinite( cssRuntime ) ) + cssGuess += parseInt( cssRuntime, 10 ) ; + } + + attrGuess = parseInt( attrGuess, 10 ) ; + cssGuess = parseInt( cssGuess, 10 ) ; + if ( isNaN( attrGuess ) ) + attrGuess = 0 ; + if ( isNaN( cssGuess ) ) + cssGuess = 0 ; + return Math.max( attrGuess, cssGuess ) ; + }, + // Calculate the real width of the table cell. + // The real width of the table cell is the pixel width that you can set to the width attribute of the table cell and after + // that, the table cell should be of exactly the same width as before. + // The real width of a table cell can be calculated as: + // width = clientWidth - paddingLeft - paddingRight. + "_GetCellWidth" : function( table, cell ) + { + var clientWidth = cell.clientWidth ; + if ( isNaN( clientWidth ) ) + clientWidth = 0 ; + return clientWidth - this._GetCellPadding( table, cell ) ; + }, + "MouseMoveListener" : function( FCK, evt ) + { + if ( FCKDragTableHandler._MouseMoveMode == 0 ) + return FCKDragTableHandler._MouseFindHandler( FCK, evt ) ; + else + return FCKDragTableHandler._MouseDragHandler( FCK, evt ) ; + }, + "_MouseFindHandler" : function( FCK, evt ) + { + if ( FCK.MouseDownFlag ) + return ; + var node = evt.srcElement || evt.target ; + try + { + if ( ! node || node.nodeType != 1 ) + { + this._HideResizeBar() ; + return ; + } + } + catch ( e ) + { + this._HideResizeBar() ; + return ; + } + + // Since this function might be called from the editing area iframe or the outer fckeditor iframe, + // the mouse point coordinates from evt.clientX/Y can have different reference points. + // We need to resolve the mouse pointer position relative to the editing area iframe. + var mouseX = evt.clientX ; + var mouseY = evt.clientY ; + if ( FCKTools.GetElementDocument( node ) == document ) + { + var offset = this._GetIframeOffset() ; + mouseX -= offset.x ; + mouseY -= offset.y ; + } + + + if ( this._ResizeBar && this._LeftCell ) + { + var leftPos = FCKTools.GetWindowPosition( FCK.EditorWindow, this._LeftCell ) ; + var rightPos = FCKTools.GetWindowPosition( FCK.EditorWindow, this._RightCell ) ; + var rxDist = mouseX - ( leftPos.x + this._LeftCell.clientWidth ) ; + var lxDist = mouseX - rightPos.x ; + var inRangeFlag = false ; + if ( lxDist >= 0 && rxDist <= 0 ) + inRangeFlag = true ; + else if ( rxDist > 0 && lxDist <= 3 ) + inRangeFlag = true ; + else if ( lxDist < 0 && rxDist >= -2 ) + inRangeFlag = true ; + if ( inRangeFlag ) + { + this._ShowResizeBar( FCK.EditorWindow, + FCKTools.GetElementAscensor( this._LeftCell, "table" ), + { "x" : mouseX, "y" : mouseY } ) ; + return ; + } + } + + var tagName = node.tagName.toLowerCase() ; + if ( tagName != "table" && tagName != "td" && tagName != "th" ) + { + if ( this._LeftCell ) + this._LeftCell = this._RightCell = this._TableMap = null ; + this._HideResizeBar() ; + return ; + } + node = FCKTools.GetElementAscensor( node, "table" ) ; + var tableMap = FCKTableHandler._CreateTableMap( node ) ; + var cellTuple = this._GetBorderCells( FCK.EditorWindow, node, tableMap, { "x" : mouseX, "y" : mouseY } ) ; + + if ( cellTuple == null ) + { + if ( this._LeftCell ) + this._LeftCell = this._RightCell = this._TableMap = null ; + this._HideResizeBar() ; + } + else + { + this._LeftCell = cellTuple["leftCell"] ; + this._RightCell = cellTuple["rightCell"] ; + this._TableMap = tableMap ; + this._ShowResizeBar( FCK.EditorWindow, + FCKTools.GetElementAscensor( this._LeftCell, "table" ), + { "x" : mouseX, "y" : mouseY } ) ; + } + }, + "_MouseDragHandler" : function( FCK, evt ) + { + var mouse = { "x" : evt.clientX, "y" : evt.clientY } ; + + // Convert mouse coordinates in reference to the outer iframe. + var node = evt.srcElement || evt.target ; + if ( FCKTools.GetElementDocument( node ) == FCK.EditorDocument ) + { + var offset = this._GetIframeOffset() ; + mouse.x += offset.x ; + mouse.y += offset.y ; + } + + // Calculate the mouse position delta and see if we've gone out of range. + if ( mouse.x >= this._MaximumX - 5 ) + mouse.x = this._MaximumX - 5 ; + if ( mouse.x <= this._MinimumX + 5 ) + mouse.x = this._MinimumX + 5 ; + + var docX = mouse.x + FCKTools.GetScrollPosition( window ).X ; + this._ResizeBar.style.left = ( docX - this._ResizeBar.offsetWidth / 2 ) + "px" ; + this._LastX = mouse.x ; + }, + "_ShowResizeBar" : function( w, table, mouse ) + { + if ( this._ResizeBar == null ) + { + this._ResizeBar = this._doc.createElement( "div" ) ; + var paddingBar = this._ResizeBar ; + var paddingStyles = { 'position' : 'absolute', 'cursor' : 'e-resize' } ; + if ( FCKBrowserInfo.IsIE ) + paddingStyles.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=10,enabled=true)" ; + else + paddingStyles.opacity = 0.10 ; + FCKDomTools.SetElementStyles( paddingBar, paddingStyles ) ; + this._avoidStyles( paddingBar ); + paddingBar.setAttribute('_fcktemp', true); + this._doc.body.appendChild( paddingBar ) ; + FCKTools.AddEventListener( paddingBar, "mousemove", this._ResizeBarMouseMoveListener ) ; + FCKTools.AddEventListener( paddingBar, "mousedown", this._ResizeBarMouseDownListener ) ; + FCKTools.AddEventListener( document, "mouseup", this._ResizeBarMouseUpListener ) ; + FCKTools.AddEventListener( FCK.EditorDocument, "mouseup", this._ResizeBarMouseUpListener ) ; + + // IE doesn't let the tranparent part of the padding block to receive mouse events unless there's something inside. + // So we need to create a spacer image to fill the block up. + var filler = this._doc.createElement( "img" ) ; + filler.setAttribute('_fcktemp', true); + filler.border = 0 ; + filler.src = FCKConfig.BasePath + "images/spacer.gif" ; + filler.style.position = "absolute" ; + paddingBar.appendChild( filler ) ; + + // Disable drag and drop, and selection for the filler image. + var disabledListener = function( evt ) + { + if ( evt.preventDefault ) + evt.preventDefault() ; + else + evt.returnValue = false ; + } + FCKTools.AddEventListener( filler, "dragstart", disabledListener ) ; + FCKTools.AddEventListener( filler, "selectstart", disabledListener ) ; + } + + var paddingBar = this._ResizeBar ; + var offset = this._GetIframeOffset() ; + var tablePos = this._GetTablePosition( w, table ) ; + var barHeight = table.offsetHeight ; + var barTop = offset.y + tablePos.y ; + // Do not let the resize bar intrude into the toolbar area. + if ( tablePos.y < 0 ) + { + barHeight += tablePos.y ; + barTop -= tablePos.y ; + } + var bw = parseInt( table.border, 10 ) ; + if ( isNaN( bw ) ) + bw = 0 ; + var cs = parseInt( table.cellSpacing, 10 ) ; + if ( isNaN( cs ) ) + cs = 0 ; + var barWidth = Math.max( bw+100, cs+100 ) ; + var paddingStyles = + { + 'top' : barTop + 'px', + 'height' : barHeight + 'px', + 'width' : barWidth + 'px', + 'left' : ( offset.x + mouse.x + FCKTools.GetScrollPosition( w ).X - barWidth / 2 ) + 'px' + } ; + if ( FCKBrowserInfo.IsIE ) + paddingBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 10 ; + else + paddingStyles.opacity = 0.1 ; + + FCKDomTools.SetElementStyles( paddingBar, paddingStyles ) ; + var filler = paddingBar.getElementsByTagName( "img" )[0] ; + + FCKDomTools.SetElementStyles( filler, + { + width : paddingBar.offsetWidth + 'px', + height : barHeight + 'px' + } ) ; + + barWidth = Math.max( bw, cs, 3 ) ; + var visibleBar = null ; + if ( paddingBar.getElementsByTagName( "div" ).length < 1 ) + { + visibleBar = this._doc.createElement( "div" ) ; + this._avoidStyles( visibleBar ); + visibleBar.setAttribute('_fcktemp', true); + paddingBar.appendChild( visibleBar ) ; + } + else + visibleBar = paddingBar.getElementsByTagName( "div" )[0] ; + + FCKDomTools.SetElementStyles( visibleBar, + { + position : 'absolute', + backgroundColor : 'blue', + width : barWidth + 'px', + height : barHeight + 'px', + left : '50px', + top : '0px' + } ) ; + }, + "_HideResizeBar" : function() + { + if ( this._ResizeBar ) + // IE bug: display : none does not hide the resize bar for some reason. + // so set the position to somewhere invisible. + FCKDomTools.SetElementStyles( this._ResizeBar, + { + top : '-100000px', + left : '-100000px' + } ) ; + }, + "_GetIframeOffset" : function () + { + return FCKTools.GetDocumentPosition( window, FCK.EditingArea.IFrame ) ; + }, + "_GetTablePosition" : function ( w, table ) + { + return FCKTools.GetWindowPosition( w, table ) ; + }, + "_avoidStyles" : function( element ) + { + FCKDomTools.SetElementStyles( element, + { + padding : '0', + backgroundImage : 'none', + border : '0' + } ) ; + }, + "Reset" : function() + { + FCKDragTableHandler._LeftCell = FCKDragTableHandler._RightCell = FCKDragTableHandler._TableMap = null ; + } + +}; + +FCK.Events.AttachEvent( "OnMouseMove", FCKDragTableHandler.MouseMoveListener ) ; +FCK.Events.AttachEvent( "OnAfterSetHTML", FCKDragTableHandler.Reset ) ; diff --git a/fckeditor/FCKeditor/editor/plugins/nbsp/CHANGELOG.txt b/fckeditor/FCKeditor/editor/plugins/nbsp/CHANGELOG.txt new file mode 100644 index 0000000..e7c36ae --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/nbsp/CHANGELOG.txt @@ -0,0 +1,3 @@ +Version 1.0.1 [13-04-2006] +--------------------------- + Updaded readme.txt files. \ No newline at end of file diff --git a/fckeditor/FCKeditor/editor/plugins/nbsp/fckplugin.js b/fckeditor/FCKeditor/editor/plugins/nbsp/fckplugin.js new file mode 100644 index 0000000..6ecb741 --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/nbsp/fckplugin.js @@ -0,0 +1,48 @@ +/* + * FCKeditor - The text editor for internet + * Copyright (C) 2003-2006 Frederico Caldeira Knabben + * + * Non-breaking Space Plugin + * Copyright (c) 2006 Bartosz Rogozinski [REGE] + * + * Licensed under the terms of the GNU Lesser General Public License: + * http://www.opensource.org/licenses/lgpl-license.php + * + * For further information visit: + * http://www.fckeditor.net/ + * + * "Support Open Source software. What about a donation today?" + * + * File Name: fckplugin.js + * Insert non-breaking space + * + * Version 1.0.1, 13-04-2006 + * + * File Authors: + * Bartosz Rogozinski [REGE] (rege-tech@wsm24.com) - original release + */ + +var My_FCKNbspCommand = function() +{ + +} + +My_FCKNbspCommand.prototype.Execute = function() +{ + FCK.InsertHtml(' '); +} + +My_FCKNbspCommand.prototype.GetState = function() +{ + return FCK_TRISTATE_OFF; +} + +// Register the related command. +FCKCommands.RegisterCommand('nbsp', new My_FCKNbspCommand()); + +// Create the "nbsp" toolbar button. +var nbspItem = new FCKToolbarButton("nbsp", FCKLang.NbspButton); +nbspItem.IconPath = FCKConfig.PluginsPath + 'nbsp/nbsp.gif'; + +// 'nbsp' is the name used in the Toolbar config. +FCKToolbarItems.RegisterItem('nbsp', nbspItem); \ No newline at end of file diff --git a/fckeditor/FCKeditor/editor/plugins/nbsp/lang/de.js b/fckeditor/FCKeditor/editor/plugins/nbsp/lang/de.js new file mode 100644 index 0000000..32e19a4 --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/nbsp/lang/de.js @@ -0,0 +1,20 @@ +/* + * FCKeditor - The text editor for internet + * Copyright (C) 2003-2006 Frederico Caldeira Knabben + * + * Licensed under the terms of the GNU Lesser General Public License: + * http://www.opensource.org/licenses/lgpl-license.php + * + * For further information visit: + * http://www.fckeditor.net/ + * + * "Support Open Source software. What about a donation today?" + * + * File Name: de.js + * Nbsp German language file. + * + * File Authors: + * Bartosz Rogozinski [REGE] (rege-tech@wsm24.com) + * Übersetzung: Connie Müller-Gödecke, webdeerns.de, 2007 ;=) + */ +FCKLang.NbspButton = 'geschütztes Leerzeichen einfügen' ; diff --git a/fckeditor/FCKeditor/editor/plugins/nbsp/lang/en.js b/fckeditor/FCKeditor/editor/plugins/nbsp/lang/en.js new file mode 100644 index 0000000..39844f0 --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/nbsp/lang/en.js @@ -0,0 +1,19 @@ +/* + * FCKeditor - The text editor for internet + * Copyright (C) 2003-2006 Frederico Caldeira Knabben + * + * Licensed under the terms of the GNU Lesser General Public License: + * http://www.opensource.org/licenses/lgpl-license.php + * + * For further information visit: + * http://www.fckeditor.net/ + * + * "Support Open Source software. What about a donation today?" + * + * File Name: en.js + * Nbsp English language file. + * + * File Authors: + * Bartosz Rogozinski [REGE] (rege-tech@wsm24.com) + */ +FCKLang.NbspButton = 'Insert non-breaking space' ; diff --git a/fckeditor/FCKeditor/editor/plugins/nbsp/lang/hu.js b/fckeditor/FCKeditor/editor/plugins/nbsp/lang/hu.js new file mode 100644 index 0000000..1979513 --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/nbsp/lang/hu.js @@ -0,0 +1,21 @@ +/* + * FCKeditor - The text editor for internet + * Copyright (C) 2003-2006 Frederico Caldeira Knabben + * + * Licensed under the terms of the GNU Lesser General Public License: + * http://www.opensource.org/licenses/lgpl-license.php + * + * For further information visit: + * http://www.fckeditor.net/ + * + * "Support Open Source software. What about a donation today?" + * + * File Name: hu.js + * Nbsp Hungarian language file. + * + * File Authors: + * Bartosz Rogozinski [REGE] (rege-tech@wsm24.com) + * Übersetzung: Connie Müller-Gödecke, webdeerns.de, 2007 ;=) + * Fordítás: Tokodi Péter (tokodipeter@freemail.hu, 2010 :oD ) + */ +FCKLang.NbspButton = 'Nem törő szóköz beszúrása' ; diff --git a/fckeditor/FCKeditor/editor/plugins/nbsp/lang/pl.js b/fckeditor/FCKeditor/editor/plugins/nbsp/lang/pl.js new file mode 100644 index 0000000..11d47d5 --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/nbsp/lang/pl.js @@ -0,0 +1,19 @@ +/* + * FCKeditor - The text editor for internet + * Copyright (C) 2003-2006 Frederico Caldeira Knabben + * + * Licensed under the terms of the GNU Lesser General Public License: + * http://www.opensource.org/licenses/lgpl-license.php + * + * For further information visit: + * http://www.fckeditor.net/ + * + * "Support Open Source software. What about a donation today?" + * + * File Name: pl.js + * Nbsp Polish language file. + * + * File Authors: + * Bartosz Rogozinski [REGE] (rege-tech@wsm24.com) + */ +FCKLang.NbspButton = 'Wstaw twardą spację' ; diff --git a/fckeditor/FCKeditor/editor/plugins/nbsp/lang/sk.js b/fckeditor/FCKeditor/editor/plugins/nbsp/lang/sk.js new file mode 100644 index 0000000..4314d8d --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/nbsp/lang/sk.js @@ -0,0 +1,19 @@ +/* + * FCKeditor - The text editor for internet + * Copyright (C) 2003-2006 Frederico Caldeira Knabben + * + * Licensed under the terms of the GNU Lesser General Public License: + * http://www.opensource.org/licenses/lgpl-license.php + * + * For further information visit: + * http://www.fckeditor.net/ + * + * "Support Open Source software. What about a donation today?" + * + * File Name: en.js + * Nbsp English language file. + * + * File Authors: + * Bartosz Rogozinski [REGE] (rege-tech@wsm24.com) + */ +FCKLang.NbspButton = 'Vloi mkk medzeru' ; diff --git a/fckeditor/FCKeditor/editor/plugins/nbsp/nbsp.gif b/fckeditor/FCKeditor/editor/plugins/nbsp/nbsp.gif new file mode 100644 index 0000000..442221e Binary files /dev/null and b/fckeditor/FCKeditor/editor/plugins/nbsp/nbsp.gif differ diff --git a/fckeditor/FCKeditor/editor/plugins/nbsp/readme_de.txt b/fckeditor/FCKeditor/editor/plugins/nbsp/readme_de.txt new file mode 100644 index 0000000..4ff181e --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/nbsp/readme_de.txt @@ -0,0 +1,28 @@ +Non-breaking Space Plugin v1.0.1 +For FCKEditor v2.2 + +Bartosz Rogozinski [REGE] (rege-tech@wsm24.com) +13-04-2006 +License: LGPL + + + +Description: +------------- +Dieses Plugin ermglicht, einen geschtzten Leerschritt in Text einzufgen. + + +Installation: +-------------- +1. Datei entpacken +2. Das entpackte Verzeichnis in den .../editor/plugins Ordner kopieren +3. Das PlugIn hinzufgen: aktivieren Sie es indem Sie die nachstehende Zeile + entweder i fckconfig.js oder in einer anderen Konfigurations-Datei eintragen: + + FCKConfig.Plugins.Add('nbsp', 'de,en'); + +4. Fgen Sie 'nbsp' dem ToolbarSet hinzu, z.B.: + + FCKConfig.ToolbarSets["Basic"] = [ + ['nbsp','Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink','-','About'] + ]; \ No newline at end of file diff --git a/fckeditor/FCKeditor/editor/plugins/nbsp/readme_en.txt b/fckeditor/FCKeditor/editor/plugins/nbsp/readme_en.txt new file mode 100644 index 0000000..ba67061 --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/nbsp/readme_en.txt @@ -0,0 +1,27 @@ +Non-breaking Space Plugin v1.0.1 +For FCKEditor v2.2 + +Bartosz Rogozinski [REGE] (rege-tech@wsm24.com) +13-04-2006 +License: LGPL + + + +Description: +------------- +This plugin allows you to insert a non-breaking space in the editor. + + +Installation: +-------------- +1. Unzip the file +2. Copy the 'nbsp' folder to your .../editor/plugins folder +3. Add the plugin by placing it of the following line in either fckconfig.js or your custom configuration file: + + FCKConfig.Plugins.Add('nbsp', 'en,pl'); + +4. Add 'nbsp' to your ToolbarSet e.g.: + + FCKConfig.ToolbarSets["Basic"] = [ + ['nbsp','Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink','-','About'] + ]; \ No newline at end of file diff --git a/fckeditor/FCKeditor/editor/plugins/nbsp/readme_pl.txt b/fckeditor/FCKeditor/editor/plugins/nbsp/readme_pl.txt new file mode 100644 index 0000000..1bee430 --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/nbsp/readme_pl.txt @@ -0,0 +1,27 @@ +Non-breaking Space Plugin v1.0.1 +For FCKEditor v2.2 + +Bartosz Rogozinski [REGE] (rege-tech@wsm24.com) +13-04-2006 +License: LGPL + + + +Opis: +------ +Wtyczka ta umoliwia wstawianie do edytora tzw. "twardej spacji". + + +Instalacja: +------------ +1. Rozpakuj plik +2. Skopiuj folder 'nbsp' do folderu .../editor/plugins +3. Dodaj wtyczk do edytora wpisujc odpowiedni fragment kodu do pliku fckconfig.js lub Twojego wasnego pliku konfiguracyjnego: + + FCKConfig.Plugins.Add('nbsp', 'en,pl'); + +4. Dodaj wtyczk 'nbsp' do paska narzdzi np.: + + FCKConfig.ToolbarSets["Basic"] = [ + ['nbsp','Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink','-','About'] + ]; \ No newline at end of file diff --git a/fckeditor/FCKeditor/editor/plugins/placeholder/fck_placeholder.html b/fckeditor/FCKeditor/editor/plugins/placeholder/fck_placeholder.html new file mode 100644 index 0000000..df8c563 --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/placeholder/fck_placeholder.html @@ -0,0 +1,105 @@ + + + + + Placeholder Properties + + + + + + + + + + +
    + + + + +
    + Placeholder Name
    + +
    +
    + + diff --git a/fckeditor/FCKeditor/editor/plugins/placeholder/fckplugin.js b/fckeditor/FCKeditor/editor/plugins/placeholder/fckplugin.js new file mode 100644 index 0000000..ec4e1a5 --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/placeholder/fckplugin.js @@ -0,0 +1,187 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Plugin to insert "Placeholders" in the editor. + */ + +// Register the related command. +FCKCommands.RegisterCommand( 'Placeholder', new FCKDialogCommand( 'Placeholder', FCKLang.PlaceholderDlgTitle, FCKPlugins.Items['placeholder'].Path + 'fck_placeholder.html', 340, 160 ) ) ; + +// Create the "Plaholder" toolbar button. +var oPlaceholderItem = new FCKToolbarButton( 'Placeholder', FCKLang.PlaceholderBtn ) ; +oPlaceholderItem.IconPath = FCKPlugins.Items['placeholder'].Path + 'placeholder.gif' ; + +FCKToolbarItems.RegisterItem( 'Placeholder', oPlaceholderItem ) ; + + +// The object used for all Placeholder operations. +var FCKPlaceholders = new Object() ; + +// Add a new placeholder at the actual selection. +FCKPlaceholders.Add = function( name ) +{ + var oSpan = FCK.InsertElement( 'span' ) ; + this.SetupSpan( oSpan, name ) ; +} + +FCKPlaceholders.SetupSpan = function( span, name ) +{ + span.innerHTML = '[[ ' + name + ' ]]' ; + + span.style.backgroundColor = '#ffff00' ; + span.style.color = '#000000' ; + + if ( FCKBrowserInfo.IsGecko ) + span.style.cursor = 'default' ; + + span._fckplaceholder = name ; + span.contentEditable = false ; + + // To avoid it to be resized. + span.onresizestart = function() + { + FCK.EditorWindow.event.returnValue = false ; + return false ; + } +} + +// On Gecko we must do this trick so the user select all the SPAN when clicking on it. +FCKPlaceholders._SetupClickListener = function() +{ + FCKPlaceholders._ClickListener = function( e ) + { + if ( e.target.tagName == 'SPAN' && e.target._fckplaceholder ) + FCKSelection.SelectNode( e.target ) ; + } + + FCK.EditorDocument.addEventListener( 'click', FCKPlaceholders._ClickListener, true ) ; +} + +// Open the Placeholder dialog on double click. +FCKPlaceholders.OnDoubleClick = function( span ) +{ + if ( span.tagName == 'SPAN' && span._fckplaceholder ) + FCKCommands.GetCommand( 'Placeholder' ).Execute() ; +} + +FCK.RegisterDoubleClickHandler( FCKPlaceholders.OnDoubleClick, 'SPAN' ) ; + +// Check if a Placholder name is already in use. +FCKPlaceholders.Exist = function( name ) +{ + var aSpans = FCK.EditorDocument.getElementsByTagName( 'SPAN' ) ; + + for ( var i = 0 ; i < aSpans.length ; i++ ) + { + if ( aSpans[i]._fckplaceholder == name ) + return true ; + } + + return false ; +} + +if ( FCKBrowserInfo.IsIE ) +{ + FCKPlaceholders.Redraw = function() + { + if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG ) + return ; + + var aPlaholders = FCK.EditorDocument.body.innerText.match( /\[\[[^\[\]]+\]\]/g ) ; + if ( !aPlaholders ) + return ; + + var oRange = FCK.EditorDocument.body.createTextRange() ; + + for ( var i = 0 ; i < aPlaholders.length ; i++ ) + { + if ( oRange.findText( aPlaholders[i] ) ) + { + var sName = aPlaholders[i].match( /\[\[\s*([^\]]*?)\s*\]\]/ )[1] ; + oRange.pasteHTML( '' + aPlaholders[i] + '' ) ; + } + } + } +} +else +{ + FCKPlaceholders.Redraw = function() + { + if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG ) + return ; + + var oInteractor = FCK.EditorDocument.createTreeWalker( FCK.EditorDocument.body, NodeFilter.SHOW_TEXT, FCKPlaceholders._AcceptNode, true ) ; + + var aNodes = new Array() ; + + while ( ( oNode = oInteractor.nextNode() ) ) + { + aNodes[ aNodes.length ] = oNode ; + } + + for ( var n = 0 ; n < aNodes.length ; n++ ) + { + var aPieces = aNodes[n].nodeValue.split( /(\[\[[^\[\]]+\]\])/g ) ; + + for ( var i = 0 ; i < aPieces.length ; i++ ) + { + if ( aPieces[i].length > 0 ) + { + if ( aPieces[i].indexOf( '[[' ) == 0 ) + { + var sName = aPieces[i].match( /\[\[\s*([^\]]*?)\s*\]\]/ )[1] ; + + var oSpan = FCK.EditorDocument.createElement( 'span' ) ; + FCKPlaceholders.SetupSpan( oSpan, sName ) ; + + aNodes[n].parentNode.insertBefore( oSpan, aNodes[n] ) ; + } + else + aNodes[n].parentNode.insertBefore( FCK.EditorDocument.createTextNode( aPieces[i] ) , aNodes[n] ) ; + } + } + + aNodes[n].parentNode.removeChild( aNodes[n] ) ; + } + + FCKPlaceholders._SetupClickListener() ; + } + + FCKPlaceholders._AcceptNode = function( node ) + { + if ( /\[\[[^\[\]]+\]\]/.test( node.nodeValue ) ) + return NodeFilter.FILTER_ACCEPT ; + else + return NodeFilter.FILTER_SKIP ; + } +} + +FCK.Events.AttachEvent( 'OnAfterSetHTML', FCKPlaceholders.Redraw ) ; + +// We must process the SPAN tags to replace then with the real resulting value of the placeholder. +FCKXHtml.TagProcessors['span'] = function( node, htmlNode ) +{ + if ( htmlNode._fckplaceholder ) + node = FCKXHtml.XML.createTextNode( '[[' + htmlNode._fckplaceholder + ']]' ) ; + else + FCKXHtml._AppendChildNodes( node, htmlNode, false ) ; + + return node ; +} diff --git a/fckeditor/FCKeditor/editor/plugins/placeholder/lang/de.js b/fckeditor/FCKeditor/editor/plugins/placeholder/lang/de.js new file mode 100644 index 0000000..aad19ba --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/placeholder/lang/de.js @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Placholder German language file. + */ +FCKLang.PlaceholderBtn = 'Einfügen/editieren Platzhalter' ; +FCKLang.PlaceholderDlgTitle = 'Platzhalter Eigenschaften' ; +FCKLang.PlaceholderDlgName = 'Platzhalter Name' ; +FCKLang.PlaceholderErrNoName = 'Bitte den Namen des Platzhalters schreiben' ; +FCKLang.PlaceholderErrNameInUse = 'Der angegebene Namen ist schon in Gebrauch' ; diff --git a/fckeditor/FCKeditor/editor/plugins/placeholder/lang/en.js b/fckeditor/FCKeditor/editor/plugins/placeholder/lang/en.js new file mode 100644 index 0000000..d716718 --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/placeholder/lang/en.js @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Placholder English language file. + */ +FCKLang.PlaceholderBtn = 'Insert/Edit Placeholder' ; +FCKLang.PlaceholderDlgTitle = 'Placeholder Properties' ; +FCKLang.PlaceholderDlgName = 'Placeholder Name' ; +FCKLang.PlaceholderErrNoName = 'Please type the placeholder name' ; +FCKLang.PlaceholderErrNameInUse = 'The specified name is already in use' ; diff --git a/fckeditor/FCKeditor/editor/plugins/placeholder/lang/es.js b/fckeditor/FCKeditor/editor/plugins/placeholder/lang/es.js new file mode 100644 index 0000000..eaf4b72 --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/placeholder/lang/es.js @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Placholder Spanish language file. + */ +FCKLang.PlaceholderBtn = 'Insertar/Editar contenedor' ; +FCKLang.PlaceholderDlgTitle = 'Propiedades del contenedor ' ; +FCKLang.PlaceholderDlgName = 'Nombre de contenedor' ; +FCKLang.PlaceholderErrNoName = 'Por favor escriba el nombre de contenedor' ; +FCKLang.PlaceholderErrNameInUse = 'El nombre especificado ya esta en uso' ; diff --git a/fckeditor/FCKeditor/editor/plugins/placeholder/lang/fr.js b/fckeditor/FCKeditor/editor/plugins/placeholder/lang/fr.js new file mode 100644 index 0000000..558793b --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/placeholder/lang/fr.js @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Placeholder French language file. + */ +FCKLang.PlaceholderBtn = "Insérer/Modifier l'Espace réservé" ; +FCKLang.PlaceholderDlgTitle = "Propriétés de l'Espace réservé" ; +FCKLang.PlaceholderDlgName = "Nom de l'Espace réservé" ; +FCKLang.PlaceholderErrNoName = "Veuillez saisir le nom de l'Espace réservé" ; +FCKLang.PlaceholderErrNameInUse = "Ce nom est déjà utilisé" ; diff --git a/fckeditor/FCKeditor/editor/plugins/placeholder/lang/hu.js b/fckeditor/FCKeditor/editor/plugins/placeholder/lang/hu.js new file mode 100644 index 0000000..e45105f --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/placeholder/lang/hu.js @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2009 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Placholder Hungarian language file. + */ +FCKLang.PlaceholderBtn = 'Helykitöltő hozzáadása/szerkesztése' ; +FCKLang.PlaceholderDlgTitle = 'Helykitöltő tulajdonságai' ; +FCKLang.PlaceholderDlgName = 'Helykitöltő neve' ; +FCKLang.PlaceholderErrNoName = 'Ide írja a helykitöltő nevét' ; +FCKLang.PlaceholderErrNameInUse = 'Ez a név már használatban van' ; diff --git a/fckeditor/FCKeditor/editor/plugins/placeholder/lang/it.js b/fckeditor/FCKeditor/editor/plugins/placeholder/lang/it.js new file mode 100644 index 0000000..ac0df55 --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/placeholder/lang/it.js @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Placholder Italian language file. + */ +FCKLang.PlaceholderBtn = 'Aggiungi/Modifica Placeholder' ; +FCKLang.PlaceholderDlgTitle = 'Proprietà del Placeholder' ; +FCKLang.PlaceholderDlgName = 'Nome del Placeholder' ; +FCKLang.PlaceholderErrNoName = 'Digitare il nome del placeholder' ; +FCKLang.PlaceholderErrNameInUse = 'Il nome inserito è già in uso' ; diff --git a/fckeditor/FCKeditor/editor/plugins/placeholder/lang/pl.js b/fckeditor/FCKeditor/editor/plugins/placeholder/lang/pl.js new file mode 100644 index 0000000..40e221b --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/placeholder/lang/pl.js @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Placholder Polish language file. + */ +FCKLang.PlaceholderBtn = 'Wstaw/Edytuj nagłówek' ; +FCKLang.PlaceholderDlgTitle = 'Właśności nagłówka' ; +FCKLang.PlaceholderDlgName = 'Nazwa nagłówka' ; +FCKLang.PlaceholderErrNoName = 'Proszę wprowadzić nazwę nagłówka' ; +FCKLang.PlaceholderErrNameInUse = 'Podana nazwa jest już w użyciu' ; diff --git a/fckeditor/FCKeditor/editor/plugins/placeholder/lang/sk.js b/fckeditor/FCKeditor/editor/plugins/placeholder/lang/sk.js new file mode 100644 index 0000000..08e8ee7 --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/placeholder/lang/sk.js @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2009 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Placholder English language file. + */ +FCKLang.PlaceholderBtn = 'Vložiť/Upraviť značku' ; +FCKLang.PlaceholderDlgTitle = 'Vlastnosti značky' ; +FCKLang.PlaceholderDlgName = 'Názov značky' ; +FCKLang.PlaceholderErrNoName = 'Napíšte názov značky' ; +FCKLang.PlaceholderErrNameInUse = 'Tento názov sa už používa' ; diff --git a/fckeditor/FCKeditor/editor/plugins/placeholder/placeholder.gif b/fckeditor/FCKeditor/editor/plugins/placeholder/placeholder.gif new file mode 100644 index 0000000..c07078c Binary files /dev/null and b/fckeditor/FCKeditor/editor/plugins/placeholder/placeholder.gif differ diff --git a/fckeditor/FCKeditor/editor/plugins/simplecommands/fckplugin.js b/fckeditor/FCKeditor/editor/plugins/simplecommands/fckplugin.js new file mode 100644 index 0000000..23f5cab --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/simplecommands/fckplugin.js @@ -0,0 +1,29 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This plugin register Toolbar items for the combos modifying the style to + * not show the box. + */ + +FCKToolbarItems.RegisterItem( 'SourceSimple' , new FCKToolbarButton( 'Source', FCKLang.Source, null, FCK_TOOLBARITEM_ONLYICON, true, true, 1 ) ) ; +FCKToolbarItems.RegisterItem( 'StyleSimple' , new FCKToolbarStyleCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ; +FCKToolbarItems.RegisterItem( 'FontNameSimple' , new FCKToolbarFontsCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ; +FCKToolbarItems.RegisterItem( 'FontSizeSimple' , new FCKToolbarFontSizeCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ; +FCKToolbarItems.RegisterItem( 'FontFormatSimple', new FCKToolbarFontFormatCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ; diff --git a/fckeditor/FCKeditor/editor/plugins/sitelink/fck_sitelink.gif b/fckeditor/FCKeditor/editor/plugins/sitelink/fck_sitelink.gif new file mode 100644 index 0000000..b9a712e Binary files /dev/null and b/fckeditor/FCKeditor/editor/plugins/sitelink/fck_sitelink.gif differ diff --git a/fckeditor/FCKeditor/editor/plugins/sitelink/fckplugin.js b/fckeditor/FCKeditor/editor/plugins/sitelink/fckplugin.js new file mode 100644 index 0000000..915bf92 --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/sitelink/fckplugin.js @@ -0,0 +1,17 @@ +/***********************************************/ +/** FCKeditor - Plugin Sitelink for CMSimple **/ +/** by Klaus Treichler © 2008 **/ +/** http://www.treichler.at **/ +/** klaus@treichler.at **/ +/** Scriptversion: 1.0 - 2008-06-16 **/ +/***********************************************/ + +// Register the Sitelink Plugin +var dialogPath = FCKConfig.PluginsPath + 'sitelink/sitelink.php'; +var sitelinkDialogCmd = new FCKDialogCommand( FCKLang["sitelinkTitle"], FCKLang["sitelinkTitle"], dialogPath, 500, 500 ); +FCKCommands.RegisterCommand( 'sitelink', sitelinkDialogCmd ); + +// Creating button in the FCKeditor - Toolbar +var ositelinkItem = new FCKToolbarButton( 'sitelink', FCKLang['sitelinkTitle'] ) ; +ositelinkItem.IconPath = FCKPlugins.Items['sitelink'].Path + 'fck_sitelink.gif' ; +FCKToolbarItems.RegisterItem( 'sitelink', ositelinkItem ) ; \ No newline at end of file diff --git a/fckeditor/FCKeditor/editor/plugins/sitelink/lang/de.js b/fckeditor/FCKeditor/editor/plugins/sitelink/lang/de.js new file mode 100644 index 0000000..89aed2d --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/sitelink/lang/de.js @@ -0,0 +1,2 @@ +FCKLang["sitelinkTitle"] = 'Interner Link'; +FCKLang["sitelinkNotselected"] = 'Keine Auswahl getroffen!'; \ No newline at end of file diff --git a/fckeditor/FCKeditor/editor/plugins/sitelink/lang/en.js b/fckeditor/FCKeditor/editor/plugins/sitelink/lang/en.js new file mode 100644 index 0000000..398ddbe --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/sitelink/lang/en.js @@ -0,0 +1,2 @@ +FCKLang["sitelinkTitle"] = 'Internal link'; +FCKLang["sitelinkNotselected"] = 'Nothing selected!'; \ No newline at end of file diff --git a/fckeditor/FCKeditor/editor/plugins/sitelink/lang/hu.js b/fckeditor/FCKeditor/editor/plugins/sitelink/lang/hu.js new file mode 100644 index 0000000..f1acd1c --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/sitelink/lang/hu.js @@ -0,0 +1,2 @@ +FCKLang["sitelinkTitle"] = 'Belső link'; +FCKLang["sitelinkNotselected"] = 'Kérem, válasszon valamit!'; \ No newline at end of file diff --git a/fckeditor/FCKeditor/editor/plugins/sitelink/lang/sk.js b/fckeditor/FCKeditor/editor/plugins/sitelink/lang/sk.js new file mode 100644 index 0000000..7b1d4f9 --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/sitelink/lang/sk.js @@ -0,0 +1,2 @@ +FCKLang["sitelinkTitle"] = 'Vnútorný odkaz'; +FCKLang["sitelinkNotselected"] = 'Nič nie je označené!'; \ No newline at end of file diff --git a/fckeditor/FCKeditor/editor/plugins/sitelink/sitelink.js b/fckeditor/FCKeditor/editor/plugins/sitelink/sitelink.js new file mode 100644 index 0000000..a45bafe --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/sitelink/sitelink.js @@ -0,0 +1,98 @@ +/***********************************************/ +/** FCKeditor - Plugin Sitelink for CMSimple **/ +/** by Klaus Treichler © 2008 **/ +/** http://www.treichler.at **/ +/** klaus@treichler.at **/ +/** Scriptversion: 1.0 - 2008-06-16 **/ +/***********************************************/ + +var sitelink = function(){ + this.aLinks = new Array(); + this.bDebuggerOn = false; + this.sUri = ''; + this.sTitle = ''; + this.sInnerHtml = ''; + this.bError = false; +} + +sitelink.prototype.showMessage = function(sMessage,bShowAlways){ + if(this.bDebuggerOn || bShowAlways){ + alert(sMessage); + } +} + +sitelink.prototype.setUri = function(uri){ + if ( uri.length == 0 ){ + throw 'no_uri'; + } + + this.sUri = uri; + + this.showMessage('setUri(): ' + this.sUri); +} + +sitelink.prototype.setTitle = function(title){ + this.sTitle = title.replace(/"/,'\''); + this.showMessage('setTitle(): ' + this.sTitle); +} + +sitelink.prototype.checkSelection = function(){ + if(this.sLinks.length < 1){ + throw 'no_selection'; + } + this.showMessage('checkSelection()'); +} + +sitelink.prototype.createLink = function(){ + + this.sLinks = oLink ? [ oLink ] : oEditor.FCK.CreateLink( this.sUri ) ; + this.showMessage('createLink(): ' + this.sLinks[0]); +} + +sitelink.prototype.perform = function(){ + oLink = this.sLinks[0]; + oLink.href = this.sUri ; + SetAttribute( oLink, '_fcksavedurl', this.sUri ) ; + this.showMessage('set HREF' + ' | ' + this.sUri); + this.showMessage('get HREF' + ' | ' + oLink.href); + SetAttribute(oLink , 'title' , this.sTitle ); + this.showMessage('set TITLE'); + oEditor.FCKSelection.SelectNode(oLink); + this.showMessage('replace LINK'); +} + +sitelink.prototype.setLink = function(url,title){ + try{ + this.setUri(url); + this.setTitle(title); + this.createLink(); + this.checkSelection(); + this.perform(); + return true ; + } + catch (e){ + if(e == 'no_selection'){ + this.showMessage(oFCKLang.sitelinkNotselected, true); + return false; + } + } +} + +var LinkObject; +var oEditor = window.parent.InnerDialogLoaded() ; +var oFCK = oEditor.FCK ; +var oFCKLang = oEditor.FCKLang ; +oEditor.FCKLanguageManager.TranslatePage(document) ; +var oLink = oFCK.Selection.MoveToAncestorNode( 'A' ) ; + +if ( oLink ){ + oFCK.Selection.SelectNode( oLink ) ; + } + +window.onload = function(){ + LinkObject = new sitelink(); +} + +function Ok(url,title){ + return LinkObject.setLink(url,title); + } \ No newline at end of file diff --git a/fckeditor/FCKeditor/editor/plugins/sitelink/sitelink.php b/fckeditor/FCKeditor/editor/plugins/sitelink/sitelink.php new file mode 100644 index 0000000..7596222 --- /dev/null +++ b/fckeditor/FCKeditor/editor/plugins/sitelink/sitelink.php @@ -0,0 +1,226 @@ + + + + + Sitelink + + + + + + + + + $value) { + + /* + * .. and now we look for other language folders, + * if so, put them to the array + */ + + if (is_dir("$start_folder/$value") == true && $value != '.' && $value != '..' && strlen($value) == 2 && $value != $first_value || ($value == 'content' && $value != $first_value)) { + $dir_list[] = $value; // Fill the array with all language folders + } + } + + + //Here goes the real thing... + + foreach($dir_list as $key => $value) { + + //get the content file + $value == "content" ? $c = file_get_contents($start_folder . $value . "/content.htm") : + $c = file_get_contents($start_folder . $value . "/content/content.htm"); + + //get the path to the flag image + $value == "content" ? $flag_file = "../../../../images/flags/" . $lang_default . ".gif" : + $flag_file = "../../../../images/flags/" . $value . ".gif"; + + //look for the link prefix + if ($value == "content") $value = $lang_default; + if ($value == $lang_active) { + $lng_pref = "?"; + } elseif ($value != $lang_default && $lang_active == $lang_default) { + $lng_pref = "./" . $value . "/?"; + } elseif ($value == $lang_default && $lang_active != $lang_default) { + $lng_pref = "../?"; + } else { + $lng_pref = "../" . $value . "/?"; + } + + + // write some information where the link goes to, + // if more than one language was found + $count = (count($dir_list)); + if ($count > 1) { + $output .= '    
    '; + } + + + /* + * Most of the following code was written by Klaus Treichler + * http://www.treichler.at + * + * Maybe some day somebody write a smart and compact function for this job... + * ... Maybe! ;-) + */ + + // load some stuff we need from CMSimple configuration + + /* + include '../../../../cmsimple/config.php'; + $ml = $cf['menu']['levels']; + $sep = $cf['uri']['seperator']; + */ + + /* + switch ($ml) { + + case "1" : + preg_match_all("@

    [^<]*

    |

    [^<]*

    @", $c, $header); + break; + + case "2" : + preg_match_all("@

    (.*)

    |

    (.*)

    |

    (.*)

    |

    (.*)

    @", $c, $header); + break; + + case "3" : + preg_match_all("@

    (.*)

    |

    (.*)

    |

    (.*)

    |

    (.*)

    |

    (.*)

    |

    (.*)

    @", $c, $header); + break; + + case "4" : + preg_match_all("@

    (.*)

    |

    (.*)

    |

    (.*)

    |

    (.*)

    |

    (.*)

    |

    (.*)

    |

    (.*)

    |

    (.*)

    @", $c, $header); + break; + + default: + preg_match_all("@

    (.*)

    |

    (.*)

    |

    (.*)

    |

    (.*)

    |

    (.*)

    |

    (.*)

    |

    (.*)

    |

    (.*)

    @", $c, $header); + break; + } + + for($i = 0; $i < count($header[0]); $i++) { + if (strpos($header[0][$i], "

    ") !== false || strpos($header[0][$i], "

    ") !== false) { + $link_length = ((int)strlen($header[0][$i]))-9; + $link_text = substr($header[0][$i], 4, $link_length); + $link1 = rawurlencode(str_replace(" ", "_", $link_text)); + $output .= "".$link_text."
    "; + } + + if (strpos($header[0][$i], "

    ") !== false || strpos($header[0][$i], "

    ") !== false) { + $link_length = ((int)strlen($header[0][$i]))-9; + $link_text = substr($header[0][$i], 4, $link_length); + $link2 = $link1 . $sep . rawurlencode(str_replace(" ", "_", $link_text)); + $output .= "".$link_text."
    "; + } + + if (strpos($header[0][$i], "

    ") !== false || strpos($header[0][$i], "

    ") !== false) { + $link_length = ((int)strlen($header[0][$i]))-9; + $link_text = substr($header[0][$i], 4, $link_length); + $link3 = $link2 . $sep . rawurlencode(str_replace(" ", "_", $link_text)); + $output .= "".$link_text."
    "; + } + + if (strpos($header[0][$i], "

    ") !== false || strpos($header[0][$i], "

    ") !== false) { + $link_length = ((int)strlen($header[0][$i]))-9; + $link_text = substr($header[0][$i], 4, $link_length); + $link4 = $link3 . $sep . rawurlencode(str_replace(" ", "_", $link_text)); + $output .= "".$link_text."
    "; + } + } + */ + + + preg_match_all("/]*>(.*)<\/h[1-".$ml."]>/isU", $c, $headings); + $sl_ancestors = array(); + $sl_levels = $headings[1]; + $sl_link_texts = $headings[2]; + $i = 0; + foreach($sl_link_texts as $heading){ + $sl_margin = (int)$sl_levels[$i] * 20 - 20; + $sl_link_text = trim(strip_tags($heading)); + $sl_url = rawurlencode(str_replace(" ", "_", $sl_link_text)); + $sl_ancestors[$sl_levels[$i]] = $sl_url; + $sl_myself = array_slice($sl_ancestors, 0, $sl_levels[$i]); + $sl_link = $lng_pref . implode($sep, $sl_myself); + $output .= "" + .$sl_link_text."
    "; + $i++; + } + + $output .= "
    "; + } + + echo $output; + +?> + + + + diff --git a/fckeditor/FCKeditor/editor/skins/_fckviewstrips.html b/fckeditor/FCKeditor/editor/skins/_fckviewstrips.html new file mode 100644 index 0000000..fe3dc0a --- /dev/null +++ b/fckeditor/FCKeditor/editor/skins/_fckviewstrips.html @@ -0,0 +1,121 @@ + + + + + FCKeditor - View Icons Strips + + + + + + + + + + + + + + +
    + Index + Skins
    + default + office2003 + silver
    + + diff --git a/fckeditor/FCKeditor/editor/skins/default/fck_dialog.css b/fckeditor/FCKeditor/editor/skins/default/fck_dialog.css new file mode 100644 index 0000000..7e68ef3 --- /dev/null +++ b/fckeditor/FCKeditor/editor/skins/default/fck_dialog.css @@ -0,0 +1,402 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Styles used by the dialog boxes. + */ + +html, body +{ + background-color: transparent; + margin: 0px; + padding: 0px; +} + +body +{ + padding: 10px; +} + +body, td, input, select, textarea +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; +} + +body, .BackColor +{ + background-color: #f1f1e3; +} + +.PopupBody +{ + height: 100%; + width: 100%; + overflow: hidden; + background-color: transparent; + padding: 0px; +} + +#header +{ + cursor: move; +} + +.PopupTitle +{ + font-weight: bold; + font-size: 14pt; + color: #737357; + background-color: #e3e3c7; + padding: 3px 10px 3px 10px; +} + +.PopupButtons +{ + position: absolute; + right: 0px; + left: 0px; + bottom: 0px; + border-top: #d5d59d 1px solid; + background-color: #e3e3c7; + padding: 7px 10px 7px 10px; +} + +.Button +{ + border: #737357 1px solid; + color: #3b3b1f; + background-color: #c7c78f; +} + +#btnOk +{ + width: 100px; +} + +.DarkBackground +{ + background-color: #eaead1; +} + +.LightBackground +{ + background-color: #ffffbe; +} + +.PopupTitleBorder +{ + border-bottom: #d5d59d 1px solid; +} + +.PopupTabArea +{ + color: #737357; + background-color: #e3e3c7; +} + +.PopupTabEmptyArea +{ + padding-left: 10px; + border-bottom: #d5d59d 1px solid; +} + +.PopupTab, .PopupTabSelected +{ + border-right: #d5d59d 1px solid; + border-top: #d5d59d 1px solid; + border-left: #d5d59d 1px solid; + padding: 3px 5px 3px 5px; + color: #737357; +} + +.PopupTab +{ + margin-top: 1px; + border-bottom: #d5d59d 1px solid; + cursor: pointer; + cursor: hand; +} + +.PopupTabSelected +{ + font-weight: bold; + cursor: default; + padding-top: 4px; + border-bottom: #f1f1e3 1px solid; + background-color: #f1f1e3; +} + +.PopupSelectionBox +{ + border: #ff9933 1px solid !important; + background-color: #fffacd !important; + cursor: pointer; + cursor: hand; +} + +#tdBrowse +{ + vertical-align: bottom; +} + +/** + * Dialog frame related styles. + */ + +.contents +{ + position: absolute; + top: 2px; + left: 16px; + right: 16px; + bottom: 20px; + background-color: #f1f1e3; + overflow: hidden; + z-index: 1; +} + +.tl, .tr, .tc, .bl, .br, .bc +{ + position: absolute; + background-image: url(images/sprites.png); + background-repeat: no-repeat; +} + +* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc +{ + background-image: url(images/sprites.gif); +} + +.ml, .mr +{ + position: absolute; + background-image: url(images/dialog.sides.png); + background-repeat: repeat-y; +} + +* html .ml, * html .mr +{ + background-image: url(images/dialog.sides.gif); +} + +.rtl .ml, .rtl .mr +{ + position: absolute; + background-image: url(images/dialog.sides.rtl.png); + background-repeat: repeat-y; +} + +* html .rtl .ml, * html .rtl .mr +{ + background-image: url(images/dialog.sides.gif); +} + +.tl +{ + top: 0px; + left: 0px; + width: 16px; + height: 16px; + background-position: -16px -16px; +} + +.rtl .tl +{ + background-position: -16px -397px; +} + +.tr +{ + top: 0px; + right: 0px; + width: 16px; + height: 16px; + background-position: -16px -76px; +} + +.rtl .tr +{ + background-position: -16px -457px; +} + +.tc +{ + top: 0px; + right: 16px; + left: 16px; + height: 16px; + background-position: 0px -136px; + background-repeat: repeat-x; +} + +.ml +{ + top: 16px; + left: 0px; + width: 16px; + bottom: 51px; + background-position: 0px 0px; +} + +.mr +{ + top: 16px; + right: 0px; + width: 16px; + bottom: 51px; + background-position: -16px 0px; +} + +.bl +{ + bottom: 0px; + left: 0px; + width: 30px; + height: 51px; + background-position: -16px -196px; +} + +.rtl .bl +{ + background-position: -16px -517px; +} + +.br +{ + bottom: 0px; + right: 0px; + width: 30px; + height: 51px; + background-position: -16px -263px; +} + +.rtl .br +{ + background-position: -16px -584px; +} + +.bc +{ + bottom: 0px; + right: 30px; + left: 30px; + height: 51px; + background-position: 0px -330px; + background-repeat: repeat-x; +} + +/* For IE6. Do not change it. */ +* html .blocker +{ + position: absolute; + width: 100%; + height: 100%; + z-index: 12; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0); +} + +/* The layer used to cover the dialog when opening a child dialog. */ +.cover +{ + position: absolute; + top: 0px; + left: 14px; + right: 14px; + bottom: 18px; + z-index: 11; +} + +#closeButton +{ + position: absolute; + right: 0px; + top: 0px; + margin-top: 5px; + margin-right: 10px; + width: 20px; + height: 20px; + cursor: pointer; + background-image: url(images/sprites.png); + background-repeat: no-repeat; + background-position: -16px -651px; +} + +* html #closeButton +{ + cursor: hand; + background-image: url(images/sprites.gif); +} + +.rtl #closeButton +{ + right: auto; + left: 10px; + margin-right: 0px; +} + +#closeButton:hover +{ + background-position: -16px -687px; +} + +#throbberBlock +{ + z-index: 10; +} + +#throbberBlock div +{ + float: left; + width: 8px; + height: 9px; + margin-left: 2px; + margin-right: 2px; + font-size: 1px; /* IE6 */ +} + +/* + Color Gradient Generator: + http://www.herethere.net/~samson/php/color_gradient/?cbegin=737357&cend=E3E3C7&steps=4 +*/ + +.throbber_1 +{ + background-color: #737357; +} + +.throbber_2 +{ + background-color: #8f8f73; +} + +.throbber_3 +{ + background-color: #abab8f; +} + +.throbber_4 +{ + background-color: #c7c7ab; +} + +.throbber_5 +{ + background-color: #e3e3c7; +} diff --git a/fckeditor/FCKeditor/editor/skins/default/fck_dialog_ie6.js b/fckeditor/FCKeditor/editor/skins/default/fck_dialog_ie6.js new file mode 100644 index 0000000..93dd674 --- /dev/null +++ b/fckeditor/FCKeditor/editor/skins/default/fck_dialog_ie6.js @@ -0,0 +1,110 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ + +(function() +{ + // IE6 doens't handle absolute positioning properly (it is always in quirks + // mode). This function fixes the sizes and positions of many elements that + // compose the skin (this is skin specific). + var fixSizes = window.DoResizeFixes = function() + { + var fckDlg = window.document.body ; + + for ( var i = 0 ; i < fckDlg.childNodes.length ; i++ ) + { + var child = fckDlg.childNodes[i] ; + switch ( child.className ) + { + case 'contents' : + child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 ) ; // -left -right + child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 ) ; // -bottom -top + break ; + + case 'blocker' : + case 'cover' : + child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 + 4 ) ; // -left -right + 4 + child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 + 4 ) ; // -bottom -top + 4 + break ; + + case 'tr' : + child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ; + break ; + + case 'tc' : + child.style.width = Math.max( 0, fckDlg.clientWidth - 16 - 16 ) ; + break ; + + case 'ml' : + child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ; + break ; + + case 'mr' : + child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ; + child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ; + break ; + + case 'bl' : + child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ; + break ; + + case 'br' : + child.style.left = Math.max( 0, fckDlg.clientWidth - 30 ) ; + child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ; + break ; + + case 'bc' : + child.style.width = Math.max( 0, fckDlg.clientWidth - 30 - 30 ) ; + child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ; + break ; + } + } + } + + var closeButtonOver = function() + { + this.style.backgroundPosition = '-16px -687px' ; + } ; + + var closeButtonOut = function() + { + this.style.backgroundPosition = '-16px -651px' ; + } ; + + var fixCloseButton = function() + { + var closeButton = document.getElementById ( 'closeButton' ) ; + + closeButton.onmouseover = closeButtonOver ; + closeButton.onmouseout = closeButtonOut ; + } + + var onLoad = function() + { + fixSizes() ; + fixCloseButton() ; + + window.attachEvent( 'onresize', fixSizes ) ; + window.detachEvent( 'onload', onLoad ) ; + } + + window.attachEvent( 'onload', onLoad ) ; + +})() ; diff --git a/fckeditor/FCKeditor/editor/skins/default/fck_editor.css b/fckeditor/FCKeditor/editor/skins/default/fck_editor.css new file mode 100644 index 0000000..41d5a4a --- /dev/null +++ b/fckeditor/FCKeditor/editor/skins/default/fck_editor.css @@ -0,0 +1,465 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Styles used by the editor IFRAME and Toolbar. + */ + +/* + ### Basic Editor IFRAME Styles. +*/ + +body +{ + padding: 1px; + margin: 0; + background-color: #ffffff; +} + +#xEditingArea +{ + border: #696969 1px solid; + /*padding-left:60px;*/ +} + +.SourceField +{ + padding: 5px; + margin: 0px; + font-family: Monospace; +} + +/* + Toolbar +*/ + +.TB_ToolbarSet, .TB_Expand, .TB_Collapse +{ + cursor: default; + background-color: #efefde; +} + +.TB_ToolbarSet +{ + border-top: #efefde 1px outset; + border-bottom: #efefde 1px outset; +} + +.TB_ToolbarSet TD +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; +} + +.TB_Toolbar +{ + height: 24px; + display: inline-table; /* inline = Opera jumping buttons bug */ +} + +.TB_Separator +{ + width: 1px; + height: 16px; + margin: 2px; + background-color: #999966; +} + +.TB_Start +{ + background-image: url(images/toolbar.start.gif); + margin: 2px; + width: 3px; + background-repeat: no-repeat; + height: 16px; +} + +.TB_End +{ + display: none; +} + +.TB_ExpandImg +{ + background-image: url(images/toolbar.expand.gif); + background-repeat: no-repeat; +} + +.TB_CollapseImg +{ + background-image: url(images/toolbar.collapse.gif); + background-repeat: no-repeat; +} + +.TB_SideBorder +{ + background-color: #696969; +} + +.TB_Expand, .TB_Collapse +{ + padding: 2px 2px 2px 2px; + border: #efefde 1px outset; +} + +.TB_Collapse +{ + width: 5px; +} + +.TB_Break +{ + height: 24px; /* IE needs the height to be set, otherwise no break */ +} + +/* + Toolbar Button +*/ + +.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled +{ + border: #efefde 1px solid; /* This is the default border */ + height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */ +} + +.TB_Button_On +{ + border: #316ac5 1px solid; + background-color: #c1d2ee; +} + +.TB_Button_On_Over, .TB_Button_Off_Over +{ + border: #316ac5 1px solid; + background-color: #dff1ff; +} + +.TB_Button_Off +{ + filter: alpha(opacity=70); /* IE */ + opacity: 0.70; /* Safari, Opera and Mozilla */ +} + +.TB_Button_Disabled +{ + filter: gray() alpha(opacity=30); /* IE */ + opacity: 0.30; /* Safari, Opera and Mozilla */ +} + +.TB_Button_Padding +{ + visibility: hidden; + width: 3px; + height: 22px; +} + +.TB_Button_Image +{ + overflow: hidden; + width: 16px; + height: 16px; + margin: 3px; + background-repeat: no-repeat; +} + +.TB_Button_Image img +{ + position: relative; +} + +.TB_Button_Off .TB_Button_Text +{ + background-color: #efefde; /* Needed because of a bug on Clear Type */ +} + +.TB_ConnectionLine +{ + background-color: #ffffff; + height: 1px; + margin-left: 1px; /* ltr */ + margin-right: 1px; /* rtl */ +} + +.TB_Text +{ + height: 22px; +} + +.TB_Button_Off .TB_Text +{ + background-color: #efefde ; /* Needed because of a bug on ClearType */ +} + +.TB_Button_On_Over .TB_Text +{ + background-color: #dff1ff ; /* Needed because of a bug on ClearType */ +} + +/* + Menu +*/ + +.MN_Menu +{ + border: 1px solid #8f8f73; + padding: 2px; + background-color: #ffffff; + cursor: default; +} + +.MN_Menu, .MN_Menu .MN_Label +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; +} + +.MN_Item_Padding +{ + visibility: hidden; + width: 3px; + height: 20px; +} + +.MN_Icon +{ + background-color: #e3e3c7; + text-align: center; + height: 20px; +} + +.MN_Label +{ + padding-left: 3px; + padding-right: 3px; +} + +.MN_Separator +{ + height: 3px; +} + +.MN_Separator_Line +{ + border-top: #b9b99d 1px solid; +} + +.MN_Item .MN_Icon IMG +{ + filter: alpha(opacity=70); + opacity: 0.70; +} + +.MN_Item_Over +{ + color: #ffffff; + background-color: #8f8f73; +} + +.MN_Item_Over .MN_Icon +{ + background-color: #737357; +} + +.MN_Item_Disabled IMG +{ + filter: gray() alpha(opacity=30); /* IE */ + opacity: 0.30; /* Safari, Opera and Mozilla */ +} + +.MN_Item_Disabled .MN_Label +{ + color: #b7b7b7; +} + +.MN_Arrow +{ + padding-right: 3px; + padding-left: 3px; +} + +.MN_ConnectionLine +{ + background-color: #ffffff; +} + +.Menu .TB_Button_On, .Menu .TB_Button_On_Over +{ + border: #8f8f73 1px solid; + background-color: #ffffff; +} + +/* + ### Panel Styles +*/ + +.FCK_Panel +{ + border: #8f8f73 1px solid; + padding: 2px; + background-color: #ffffff; +} + +.FCK_Panel, .FCK_Panel TD +{ + font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; + font-size: 11px; +} + +/* + ### Special Combos +*/ + +.SC_Panel +{ + overflow: auto; + white-space: nowrap; + cursor: default; + border: 1px solid #8f8f73; + padding-left: 2px; + padding-right: 2px; +} + +.SC_Panel, .SC_Panel TD +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; +} + +.SC_Item, .SC_ItemSelected +{ + margin-top: 2px; + margin-bottom: 2px; + background-position: left center; + padding-left: 11px; + padding-right: 3px; + padding-top: 2px; + padding-bottom: 2px; + text-overflow: ellipsis; + overflow: hidden; + background-repeat: no-repeat; + border: #dddddd 1px solid; +} + +.SC_Item *, .SC_ItemSelected * +{ + margin-top: 0px; + margin-bottom: 0px; +} + +.SC_ItemSelected +{ + border: #9a9afb 1px solid; + background-image: url(images/toolbar.arrowright.gif); +} + +.SC_ItemOver +{ + border: #316ac5 1px solid; +} + +.SC_Field +{ + border: #b7b7a6 1px solid; + cursor: default; +} + +.SC_FieldCaption +{ + overflow: visible; + padding-right: 5px; + padding-left: 5px; + opacity: 0.75; /* Safari, Opera and Mozilla */ + filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */ + height: 23px; + background-color: #efefde; +} + +.SC_FieldLabel +{ + white-space: nowrap; + padding: 2px; + width: 100%; + cursor: default; + background-color: #ffffff; + text-overflow: ellipsis; + overflow: hidden; +} + +.SC_FieldButton +{ + background-position: center center; + background-image: url(images/toolbar.buttonarrow.gif); + border-left: #b7b7a6 1px solid; + width: 14px; + background-repeat: no-repeat; +} + +.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption, .SC_FieldDisabled .TB_ButtonType_Text +{ + opacity: 0.30; /* Safari, Opera and Mozilla */ + filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */ +} + +.SC_FieldOver +{ + border: #316ac5 1px solid; +} + +.SC_FieldOver .SC_FieldButton +{ + border-left: #316ac5 1px solid; +} + +/* + ### Color Selector Panel +*/ + +.ColorBoxBorder +{ + border: #808080 1px solid; + position: static; +} + +.ColorBox +{ + font-size: 1px; + width: 10px; + position: static; + height: 10px; +} + +.ColorDeselected, .ColorSelected +{ + cursor: default; +} + +.ColorDeselected +{ + border: #ffffff 1px solid; + padding: 2px; + float: left; +} + +.ColorSelected +{ + border: #330066 1px solid; + padding: 2px; + float: left; + background-color: #c4cdd6; +} diff --git a/fckeditor/FCKeditor/editor/skins/default/fck_strip.gif b/fckeditor/FCKeditor/editor/skins/default/fck_strip.gif new file mode 100644 index 0000000..a6ca532 Binary files /dev/null and b/fckeditor/FCKeditor/editor/skins/default/fck_strip.gif differ diff --git a/fckeditor/FCKeditor/editor/skins/default/images/dialog.sides.gif b/fckeditor/FCKeditor/editor/skins/default/images/dialog.sides.gif new file mode 100644 index 0000000..8f91b47 Binary files /dev/null and b/fckeditor/FCKeditor/editor/skins/default/images/dialog.sides.gif differ diff --git a/fckeditor/FCKeditor/editor/skins/default/images/dialog.sides.png b/fckeditor/FCKeditor/editor/skins/default/images/dialog.sides.png new file mode 100644 index 0000000..1042a61 Binary files /dev/null and b/fckeditor/FCKeditor/editor/skins/default/images/dialog.sides.png differ diff --git a/fckeditor/FCKeditor/editor/skins/default/images/dialog.sides.rtl.png b/fckeditor/FCKeditor/editor/skins/default/images/dialog.sides.rtl.png new file mode 100644 index 0000000..d7f7b49 Binary files /dev/null and b/fckeditor/FCKeditor/editor/skins/default/images/dialog.sides.rtl.png differ diff --git a/fckeditor/FCKeditor/editor/skins/default/images/sprites.gif b/fckeditor/FCKeditor/editor/skins/default/images/sprites.gif new file mode 100644 index 0000000..2f57d93 Binary files /dev/null and b/fckeditor/FCKeditor/editor/skins/default/images/sprites.gif differ diff --git a/fckeditor/FCKeditor/editor/skins/default/images/sprites.png b/fckeditor/FCKeditor/editor/skins/default/images/sprites.png new file mode 100644 index 0000000..5be90ed Binary files /dev/null and b/fckeditor/FCKeditor/editor/skins/default/images/sprites.png differ diff --git a/fckeditor/FCKeditor/editor/skins/default/images/toolbar.arrowright.gif b/fckeditor/FCKeditor/editor/skins/default/images/toolbar.arrowright.gif new file mode 100644 index 0000000..6843c8d Binary files /dev/null and b/fckeditor/FCKeditor/editor/skins/default/images/toolbar.arrowright.gif differ diff --git a/fckeditor/FCKeditor/editor/skins/default/images/toolbar.buttonarrow.gif b/fckeditor/FCKeditor/editor/skins/default/images/toolbar.buttonarrow.gif new file mode 100644 index 0000000..ea60995 Binary files /dev/null and b/fckeditor/FCKeditor/editor/skins/default/images/toolbar.buttonarrow.gif differ diff --git a/fckeditor/FCKeditor/editor/skins/default/images/toolbar.collapse.gif b/fckeditor/FCKeditor/editor/skins/default/images/toolbar.collapse.gif new file mode 100644 index 0000000..87aa56d Binary files /dev/null and b/fckeditor/FCKeditor/editor/skins/default/images/toolbar.collapse.gif differ diff --git a/fckeditor/FCKeditor/editor/skins/default/images/toolbar.end.gif b/fckeditor/FCKeditor/editor/skins/default/images/toolbar.end.gif new file mode 100644 index 0000000..5bfd67a Binary files /dev/null and b/fckeditor/FCKeditor/editor/skins/default/images/toolbar.end.gif differ diff --git a/fckeditor/FCKeditor/editor/skins/default/images/toolbar.expand.gif b/fckeditor/FCKeditor/editor/skins/default/images/toolbar.expand.gif new file mode 100644 index 0000000..79075e7 Binary files /dev/null and b/fckeditor/FCKeditor/editor/skins/default/images/toolbar.expand.gif differ diff --git a/fckeditor/FCKeditor/editor/skins/default/images/toolbar.separator.gif b/fckeditor/FCKeditor/editor/skins/default/images/toolbar.separator.gif new file mode 100644 index 0000000..eaed04a Binary files /dev/null and b/fckeditor/FCKeditor/editor/skins/default/images/toolbar.separator.gif differ diff --git a/fckeditor/FCKeditor/editor/skins/default/images/toolbar.start.gif b/fckeditor/FCKeditor/editor/skins/default/images/toolbar.start.gif new file mode 100644 index 0000000..1774246 Binary files /dev/null and b/fckeditor/FCKeditor/editor/skins/default/images/toolbar.start.gif differ diff --git a/fckeditor/FCKeditor/fckconfig.js b/fckeditor/FCKeditor/fckconfig.js new file mode 100644 index 0000000..714095e --- /dev/null +++ b/fckeditor/FCKeditor/fckconfig.js @@ -0,0 +1,325 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2009 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Editor configuration settings. + * + * Follow this link for more information: + * http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/Configuration/Configuration_Options + */ + +FCKConfig.CustomConfigurationsPath = '' ; + +FCKConfig.EditorAreaCSS = FCKConfig.BasePath + 'css/fck_editorarea.css' ; +FCKConfig.EditorAreaStyles = '' ; +FCKConfig.ToolbarComboPreviewCSS = '' ; + +FCKConfig.DocType = '' ; + +FCKConfig.BaseHref = '' ; + +FCKConfig.FullPage = false ; + +// The following option determines whether the "Show Blocks" feature is enabled or not at startup. +FCKConfig.StartupShowBlocks = false ; + +FCKConfig.Debug = false ; +FCKConfig.AllowQueryStringDebug = true ; + +FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/default/' ; +FCKConfig.SkinEditorCSS = '' ; // FCKConfig.SkinPath + "|" ; +FCKConfig.SkinDialogCSS = '' ; // FCKConfig.SkinPath + "|" ; + +FCKConfig.PreloadImages = [ FCKConfig.SkinPath + 'images/toolbar.start.gif', FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif' ] ; + +FCKConfig.PluginsPath = FCKConfig.BasePath + 'plugins/' ; + +// FCKConfig.Plugins.Add( 'autogrow' ) ; +// FCKConfig.Plugins.Add( 'dragresizetable' ); +FCKConfig.AutoGrowMax = 400 ; + +// FCKConfig.ProtectedSource.Add( /<%[\s\S]*?%>/g ) ; // ASP style server side code <%...%> +// FCKConfig.ProtectedSource.Add( /<\?[\s\S]*?\?>/g ) ; // PHP style server side code +// FCKConfig.ProtectedSource.Add( /(]+>[\s|\S]*?<\/asp:[^\>]+>)|(]+\/>)/gi ) ; // ASP.Net style tags + +FCKConfig.AutoDetectLanguage = true ; +FCKConfig.DefaultLanguage = 'en' ; +FCKConfig.ContentLangDirection = 'ltr' ; + +FCKConfig.ProcessHTMLEntities = true ; +FCKConfig.IncludeLatinEntities = true ; +FCKConfig.IncludeGreekEntities = true ; + +FCKConfig.ProcessNumericEntities = false ; + +FCKConfig.AdditionalNumericEntities = '' ; // Single Quote: "'" + +FCKConfig.FillEmptyBlocks = true ; + +FCKConfig.FormatSource = true ; +FCKConfig.FormatOutput = true ; +FCKConfig.FormatIndentator = ' ' ; + +FCKConfig.EMailProtection = 'none' ; // none | encode | function +FCKConfig.EMailProtectionFunction = 'mt(NAME,DOMAIN,SUBJECT,BODY)' ; + +FCKConfig.StartupFocus = false ; +FCKConfig.ForcePasteAsPlainText = false ; +FCKConfig.AutoDetectPasteFromWord = true ; // IE only. +FCKConfig.ShowDropDialog = true ; +FCKConfig.ForceSimpleAmpersand = false ; +FCKConfig.TabSpaces = 0 ; +FCKConfig.ShowBorders = true ; +FCKConfig.SourcePopup = false ; +FCKConfig.ToolbarStartExpanded = true ; +FCKConfig.ToolbarCanCollapse = true ; +FCKConfig.IgnoreEmptyParagraphValue = true ; +FCKConfig.FloatingPanelsZIndex = 10000 ; +FCKConfig.HtmlEncodeOutput = false ; + +FCKConfig.TemplateReplaceAll = true ; +FCKConfig.TemplateReplaceCheckbox = true ; + +FCKConfig.ToolbarLocation = 'In' ; + +FCKConfig.ToolbarSets["Default"] = [ + ['Source','DocProps','-','Save','NewPage','Preview','-','Templates'], + ['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'], + ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'], + ['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'], + '/', + ['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'], + ['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote','CreateDiv'], + ['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'], + ['Link','Unlink','Anchor'], + ['Image','Flash','Table','Rule','Smiley','SpecialChar','PageBreak'], + '/', + ['Style','FontFormat','FontName','FontSize'], + ['TextColor','BGColor'], + ['FitWindow','ShowBlocks','-','About'] // No comma for the last row. +] ; + +FCKConfig.ToolbarSets["Basic"] = [ + ['Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink','-','About'] +] ; + +FCKConfig.EnterMode = 'p' ; // p | div | br +FCKConfig.ShiftEnterMode = 'br' ; // p | div | br + +FCKConfig.Keystrokes = [ + [ CTRL + 65 /*A*/, true ], + [ CTRL + 67 /*C*/, true ], + [ CTRL + 70 /*F*/, true ], + [ CTRL + 83 /*S*/, true ], + [ CTRL + 84 /*T*/, true ], + [ CTRL + 88 /*X*/, true ], + [ CTRL + 86 /*V*/, 'Paste' ], + [ CTRL + 45 /*INS*/, true ], + [ SHIFT + 45 /*INS*/, 'Paste' ], + [ CTRL + 88 /*X*/, 'Cut' ], + [ SHIFT + 46 /*DEL*/, 'Cut' ], + [ CTRL + 90 /*Z*/, 'Undo' ], + [ CTRL + 89 /*Y*/, 'Redo' ], + [ CTRL + SHIFT + 90 /*Z*/, 'Redo' ], + [ CTRL + 76 /*L*/, 'Link' ], + [ CTRL + 66 /*B*/, 'Bold' ], + [ CTRL + 73 /*I*/, 'Italic' ], + [ CTRL + 85 /*U*/, 'Underline' ], + [ CTRL + SHIFT + 83 /*S*/, 'Save' ], + [ CTRL + ALT + 13 /*ENTER*/, 'FitWindow' ], + [ SHIFT + 32 /*SPACE*/, 'Nbsp' ] +] ; + +FCKConfig.ContextMenu = ['Generic','Link','Anchor','Image','Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField','ImageButton','Button','BulletedList','NumberedList','Table','Form','DivContainer'] ; +FCKConfig.BrowserContextMenuOnCtrl = false ; +FCKConfig.BrowserContextMenu = false ; + +FCKConfig.EnableMoreFontColors = true ; +FCKConfig.FontColors = '000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,808080,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF' ; + +FCKConfig.FontFormats = 'p;h1;h2;h3;h4;h5;h6;pre;address;div' ; +FCKConfig.FontNames = 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ; +FCKConfig.FontSizes = 'smaller;larger;xx-small;x-small;small;medium;large;x-large;xx-large' ; + +FCKConfig.StylesXmlPath = FCKConfig.EditorPath + 'fckstyles.xml' ; +FCKConfig.TemplatesXmlPath = FCKConfig.EditorPath + 'fcktemplates.xml' ; + +FCKConfig.SpellChecker = 'WSC' ; // 'WSC' | 'SpellerPages' | 'ieSpell' +FCKConfig.IeSpellDownloadUrl = 'http://www.iespell.com/download.php' ; +FCKConfig.SpellerPagesServerScript = 'server-scripts/spellchecker.php' ; // Available extension: .php .cfm .pl +FCKConfig.FirefoxSpellChecker = false ; + +FCKConfig.MaxUndoLevels = 15 ; + +FCKConfig.DisableObjectResizing = false ; +FCKConfig.DisableFFTableHandles = true ; + +FCKConfig.LinkDlgHideTarget = false ; +FCKConfig.LinkDlgHideAdvanced = false ; + +FCKConfig.ImageDlgHideLink = false ; +FCKConfig.ImageDlgHideAdvanced = false ; + +FCKConfig.FlashDlgHideAdvanced = false ; + +FCKConfig.ProtectedTags = '' ; + +// This will be applied to the body element of the editor +FCKConfig.BodyId = '' ; +FCKConfig.BodyClass = '' ; + +FCKConfig.DefaultStyleLabel = '' ; +FCKConfig.DefaultFontFormatLabel = '' ; +FCKConfig.DefaultFontLabel = '' ; +FCKConfig.DefaultFontSizeLabel = '' ; + +FCKConfig.DefaultLinkTarget = '' ; + +// The option switches between trying to keep the html structure or do the changes so the content looks like it was in Word +FCKConfig.CleanWordKeepsStructure = false ; + +// Only inline elements are valid. +FCKConfig.RemoveFormatTags = 'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var' ; + +// Attributes that will be removed +FCKConfig.RemoveAttributes = 'class,style,lang,width,height,align,hspace,valign' ; + +FCKConfig.CustomStyles = +{ + 'Red Title' : { Element : 'h3', Styles : { 'color' : 'Red' } } +}; + +// Do not add, rename or remove styles here. Only apply definition changes. +FCKConfig.CoreStyles = +{ + // Basic Inline Styles. + 'Bold' : { Element : 'strong', Overrides : 'b' }, + 'Italic' : { Element : 'em', Overrides : 'i' }, + 'Underline' : { Element : 'u' }, + 'StrikeThrough' : { Element : 'strike' }, + 'Subscript' : { Element : 'sub' }, + 'Superscript' : { Element : 'sup' }, + + // Basic Block Styles (Font Format Combo). + 'p' : { Element : 'p' }, + 'div' : { Element : 'div' }, + 'pre' : { Element : 'pre' }, + 'address' : { Element : 'address' }, + 'h1' : { Element : 'h1' }, + 'h2' : { Element : 'h2' }, + 'h3' : { Element : 'h3' }, + 'h4' : { Element : 'h4' }, + 'h5' : { Element : 'h5' }, + 'h6' : { Element : 'h6' }, + + // Other formatting features. + 'FontFace' : + { + Element : 'span', + Styles : { 'font-family' : '#("Font")' }, + Overrides : [ { Element : 'font', Attributes : { 'face' : null } } ] + }, + + 'Size' : + { + Element : 'span', + Styles : { 'font-size' : '#("Size","fontSize")' }, + Overrides : [ { Element : 'font', Attributes : { 'size' : null } } ] + }, + + 'Color' : + { + Element : 'span', + Styles : { 'color' : '#("Color","color")' }, + Overrides : [ { Element : 'font', Attributes : { 'color' : null } } ] + }, + + 'BackColor' : { Element : 'span', Styles : { 'background-color' : '#("Color","color")' } }, + + 'SelectionHighlight' : { Element : 'span', Styles : { 'background-color' : 'navy', 'color' : 'white' } } +}; + +// The distance of an indentation step. +FCKConfig.IndentLength = 40 ; +FCKConfig.IndentUnit = 'px' ; + +// Alternatively, FCKeditor allows the use of CSS classes for block indentation. +// This overrides the IndentLength/IndentUnit settings. +FCKConfig.IndentClasses = [] ; + +// [ Left, Center, Right, Justified ] +FCKConfig.JustifyClasses = [] ; + +// The following value defines which File Browser connector and Quick Upload +// "uploader" to use. It is valid for the default implementaion and it is here +// just to make this configuration file cleaner. +// It is not possible to change this value using an external file or even +// inline when creating the editor instance. In that cases you must set the +// values of LinkBrowserURL, ImageBrowserURL and so on. +// Custom implementations should just ignore it. +var _FileBrowserLanguage = 'php' ; // asp | aspx | cfm | lasso | perl | php | py +var _QuickUploadLanguage = 'php' ; // asp | aspx | cfm | lasso | perl | php | py + +// Don't care about the following two lines. It just calculates the correct connector +// extension to use for the default File Browser (Perl uses "cgi"). +var _FileBrowserExtension = _FileBrowserLanguage == 'perl' ? 'cgi' : _FileBrowserLanguage ; +var _QuickUploadExtension = _QuickUploadLanguage == 'perl' ? 'cgi' : _QuickUploadLanguage ; + +FCKConfig.LinkBrowser = true ; +FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector=' + encodeURIComponent( FCKConfig.BasePath + 'filemanager/connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ) ; +FCKConfig.LinkBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; // 70% +FCKConfig.LinkBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; // 70% + +FCKConfig.ImageBrowser = true ; +FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=' + encodeURIComponent( FCKConfig.BasePath + 'filemanager/connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ) ; +FCKConfig.ImageBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; // 70% ; +FCKConfig.ImageBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; // 70% ; + +FCKConfig.FlashBrowser = true ; +FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Flash&Connector=' + encodeURIComponent( FCKConfig.BasePath + 'filemanager/connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ) ; +FCKConfig.FlashBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; //70% ; +FCKConfig.FlashBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; //70% ; + +FCKConfig.LinkUpload = true ; +FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.' + _QuickUploadExtension ; +FCKConfig.LinkUploadAllowedExtensions = ".(7z|aiff|asf|avi|bmp|csv|doc|fla|flv|gif|gz|gzip|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|ods|odt|pdf|png|ppt|pxd|qt|ram|rar|rm|rmi|rmvb|rtf|sdc|sitd|swf|sxc|sxw|tar|tgz|tif|tiff|txt|vsd|wav|wma|wmv|xls|xml|zip)$" ; // empty for all +FCKConfig.LinkUploadDeniedExtensions = "" ; // empty for no one + +FCKConfig.ImageUpload = true ; +FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.' + _QuickUploadExtension + '?Type=Image' ; +FCKConfig.ImageUploadAllowedExtensions = ".(jpg|gif|jpeg|png|bmp)$" ; // empty for all +FCKConfig.ImageUploadDeniedExtensions = "" ; // empty for no one + +FCKConfig.FlashUpload = true ; +FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.' + _QuickUploadExtension + '?Type=Flash' ; +FCKConfig.FlashUploadAllowedExtensions = ".(swf|flv)$" ; // empty for all +FCKConfig.FlashUploadDeniedExtensions = "" ; // empty for no one + +FCKConfig.SmileyPath = FCKConfig.BasePath + 'images/smiley/msn/' ; +FCKConfig.SmileyImages = ['regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'] ; +FCKConfig.SmileyColumns = 8 ; +FCKConfig.SmileyWindowWidth = 320 ; +FCKConfig.SmileyWindowHeight = 210 ; + +FCKConfig.BackgroundBlockerColor = '#ffffff' ; +FCKConfig.BackgroundBlockerOpacity = 0.50 ; + +FCKConfig.MsWebBrowserControlCompat = false ; + +FCKConfig.PreventSubmitHandler = false ; diff --git a/fckeditor/FCKeditor/fckeditor.js b/fckeditor/FCKeditor/fckeditor.js new file mode 100644 index 0000000..cfc0263 --- /dev/null +++ b/fckeditor/FCKeditor/fckeditor.js @@ -0,0 +1,330 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2009 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This is the integration file for JavaScript. + * + * It defines the FCKeditor class that can be used to create editor + * instances in a HTML page in the client side. For server side + * operations, use the specific integration system. + */ + +// FCKeditor Class +var FCKeditor = function( instanceName, width, height, toolbarSet, value ) +{ + // Properties + this.InstanceName = instanceName ; + this.Width = width || '100%' ; + this.Height = height || '200' ; + this.ToolbarSet = toolbarSet || 'Default' ; + this.Value = value || '' ; + this.BasePath = FCKeditor.BasePath ; + this.CheckBrowser = true ; + this.DisplayErrors = true ; + + this.Config = new Object() ; + + // Events + this.OnError = null ; // function( source, errorNumber, errorDescription ) +} + +/** + * This is the default BasePath used by all editor instances. + */ +FCKeditor.BasePath = '/fckeditor/' ; + +/** + * The minimum height used when replacing textareas. + */ +FCKeditor.MinHeight = 200 ; + +/** + * The minimum width used when replacing textareas. + */ +FCKeditor.MinWidth = 750 ; + +FCKeditor.prototype.Version = '2.6.4.1' ; +FCKeditor.prototype.VersionBuild = '23187' ; + +FCKeditor.prototype.Create = function() +{ + document.write( this.CreateHtml() ) ; +} + +FCKeditor.prototype.CreateHtml = function() +{ + // Check for errors + if ( !this.InstanceName || this.InstanceName.length == 0 ) + { + this._ThrowError( 701, 'You must specify an instance name.' ) ; + return '' ; + } + + var sHtml = '' ; + + if ( !this.CheckBrowser || this._IsCompatibleBrowser() ) + { + sHtml += '' ; + sHtml += this._GetConfigHtml() ; + sHtml += this._GetIFrameHtml() ; + } + else + { + var sWidth = this.Width.toString().indexOf('%') > 0 ? this.Width : this.Width + 'px' ; + var sHeight = this.Height.toString().indexOf('%') > 0 ? this.Height : this.Height + 'px' ; + + sHtml += '" ; + } + + return $Html ; + } + + /** + * Returns true if browser is compatible with FCKeditor. + * + * @return boolean + */ + function IsCompatible() + { + return FCKeditor_IsCompatibleBrowser() ; + } + + /** + * Get settings from Config array as a single string. + * + * @access protected + * @return string + */ + function GetConfigFieldString() + { + $sParams = '' ; + $bFirst = true ; + + foreach ( $this->Config as $sKey => $sValue ) + { + if ( $bFirst == false ) + $sParams .= '&' ; + else + $bFirst = false ; + + if ( $sValue === true ) + $sParams .= $this->EncodeConfig( $sKey ) . '=true' ; + else if ( $sValue === false ) + $sParams .= $this->EncodeConfig( $sKey ) . '=false' ; + else + $sParams .= $this->EncodeConfig( $sKey ) . '=' . $this->EncodeConfig( $sValue ) ; + } + + return $sParams ; + } + + /** + * Encode characters that may break the configuration string + * generated by GetConfigFieldString(). + * + * @access protected + * @param string $valueToEncode + * @return string + */ + function EncodeConfig( $valueToEncode ) + { + $chars = array( + '&' => '%26', + '=' => '%3D', + '"' => '%22' ) ; + + return strtr( $valueToEncode, $chars ) ; + } +} diff --git a/fckeditor/FCKeditor/fckeditor_php5.php b/fckeditor/FCKeditor/fckeditor_php5.php new file mode 100644 index 0000000..074b340 --- /dev/null +++ b/fckeditor/FCKeditor/fckeditor_php5.php @@ -0,0 +1,258 @@ += 5.5) ; + } + else if ( strpos($sAgent, 'Gecko/') !== false ) + { + $iVersion = (int)substr($sAgent, strpos($sAgent, 'Gecko/') + 6, 8) ; + return ($iVersion >= 20030210) ; + } + else if ( strpos($sAgent, 'Opera/') !== false ) + { + $fVersion = (float)substr($sAgent, strpos($sAgent, 'Opera/') + 6, 4) ; + return ($fVersion >= 9.5) ; + } + else if ( preg_match( "|AppleWebKit/(\d+)|i", $sAgent, $matches ) ) + { + $iVersion = $matches[1] ; + return ( $matches[1] >= 522 ) ; + } + else + return false ; +} + +class FCKeditor +{ + /** + * Name of the FCKeditor instance. + * + * @access protected + * @var string + */ + public $InstanceName ; + /** + * Path to FCKeditor relative to the document root. + * + * @var string + */ + public $BasePath ; + /** + * Width of the FCKeditor. + * Examples: 100%, 600 + * + * @var mixed + */ + public $Width ; + /** + * Height of the FCKeditor. + * Examples: 400, 50% + * + * @var mixed + */ + public $Height ; + /** + * Name of the toolbar to load. + * + * @var string + */ + public $ToolbarSet ; + /** + * Initial value. + * + * @var string + */ + public $Value ; + /** + * This is where additional configuration can be passed. + * Example: + * $oFCKeditor->Config['EnterMode'] = 'br'; + * + * @var array + */ + public $Config ; + + /** + * Main Constructor. + * Refer to the _samples/php directory for examples. + * + * @param string $instanceName + */ + public function __construct( $instanceName ) + { + $this->InstanceName = $instanceName ; + $this->BasePath = '/fckeditor/' ; + $this->Width = '100%' ; + $this->Height = '200' ; + $this->ToolbarSet = 'Default' ; + $this->Value = '' ; + + $this->Config = array() ; + } + + /** + * Display FCKeditor. + * + */ + public function Create() + { + echo $this->CreateHtml() ; + } + + /** + * Return the HTML code required to run FCKeditor. + * + * @return string + */ + public function CreateHtml() + { + $HtmlValue = htmlspecialchars( $this->Value ) ; + + $Html = '' ; + + if ( $this->IsCompatible() ) + { + if ( isset( $_GET['fcksource'] ) && $_GET['fcksource'] == "true" ) + $File = 'fckeditor.original.html' ; + else + $File = 'fckeditor.html' ; + + $Link = "{$this->BasePath}editor/{$File}?InstanceName={$this->InstanceName}" ; + + if ( $this->ToolbarSet != '' ) + $Link .= "&Toolbar={$this->ToolbarSet}" ; + + // Render the linked hidden field. + $Html .= "InstanceName}\" name=\"{$this->InstanceName}\" value=\"{$HtmlValue}\" style=\"display:none\" />" ; + + // Render the configurations hidden field. + $Html .= "InstanceName}___Config\" value=\"" . $this->GetConfigFieldString() . "\" style=\"display:none\" />" ; + + // Render the editor IFRAME. + $Html .= "" ; + } + else + { + if ( strpos( $this->Width, '%' ) === false ) + $WidthCSS = $this->Width . 'px' ; + else + $WidthCSS = $this->Width ; + + if ( strpos( $this->Height, '%' ) === false ) + $HeightCSS = $this->Height . 'px' ; + else + $HeightCSS = $this->Height ; + + $Html .= "" ; + } + + return $Html ; + } + + /** + * Returns true if browser is compatible with FCKeditor. + * + * @return boolean + */ + public function IsCompatible() + { + return FCKeditor_IsCompatibleBrowser() ; + } + + /** + * Get settings from Config array as a single string. + * + * @access protected + * @return string + */ + public function GetConfigFieldString() + { + $sParams = '' ; + $bFirst = true ; + + foreach ( $this->Config as $sKey => $sValue ) + { + if ( $bFirst == false ) + $sParams .= '&' ; + else + $bFirst = false ; + + if ( $sValue === true ) + $sParams .= $this->EncodeConfig( $sKey ) . '=true' ; + else if ( $sValue === false ) + $sParams .= $this->EncodeConfig( $sKey ) . '=false' ; + else + $sParams .= $this->EncodeConfig( $sKey ) . '=' . $this->EncodeConfig( $sValue ) ; + } + + return $sParams ; + } + + /** + * Encode characters that may break the configuration string + * generated by GetConfigFieldString(). + * + * @access protected + * @param string $valueToEncode + * @return string + */ + public function EncodeConfig( $valueToEncode ) + { + $chars = array( + '&' => '%26', + '=' => '%3D', + '"' => '%22' ) ; + + return strtr( $valueToEncode, $chars ) ; + } +} diff --git a/fckeditor/FCKeditor/license.txt b/fckeditor/FCKeditor/license.txt new file mode 100644 index 0000000..9d0fd6d --- /dev/null +++ b/fckeditor/FCKeditor/license.txt @@ -0,0 +1,1246 @@ +FCKeditor - The text editor for Internet - http://www.fckeditor.net +Copyright (C) 2003-2009 Frederico Caldeira Knabben + +Licensed under the terms of any of the following licenses at your +choice: + + - GNU General Public License Version 2 or later (the "GPL") + http://www.gnu.org/licenses/gpl.html + (See Appendix A) + + - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + http://www.gnu.org/licenses/lgpl.html + (See Appendix B) + + - Mozilla Public License Version 1.1 or later (the "MPL") + http://www.mozilla.org/MPL/MPL-1.1.html + (See Appendix C) + +You are not required to, but if you want to explicitly declare the +license you have chosen to be bound to when using, reproducing, +modifying and distributing this software, just include a text file +titled "legal.txt" in your version of this software, indicating your +license choice. In any case, your choice will not restrict any +recipient of your version of this software to use, reproduce, modify +and distribute this software under any of the above licenses. + +Appendix A: The GPL License +=========================== + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + +Appendix B: The LGPL License +============================ + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + +Appendix C: The MPL License +=========================== + + MOZILLA PUBLIC LICENSE + Version 1.1 + + --------------- + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (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.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] diff --git a/fckeditor/fckconfig_calendar.js b/fckeditor/fckconfig_calendar.js new file mode 100644 index 0000000..9ed4668 --- /dev/null +++ b/fckeditor/fckconfig_calendar.js @@ -0,0 +1,207 @@ +/******************************************************************************************* +FCKeditor-Integration for Calendar-Plugin for CMSimple_XH by svasti (www.svasti.de) + +based on work of +© 2007-2009 Connie Müller-Gödecke, Holger Irmler, Klaus Treichler, especially +Version 1.6 bei Holger Irmler supplied with CMSImple_XM 1.4 +This work is licensed under GNU General Public License Version 2 or later (GPL), +********************************************************************************************/ + +// Name and path to your custom EditorAreaCSS file +// Here you can precisely simulate the output of your site inside FCKeditor, including background colors, +// font styles, sizes and your custom CSS definitions +// Remember to comment out / remove the line with the include of your template-stylesheet css in ./cmsimple/fckeditor.php! +// FCKConfig.EditorAreaCSS = '' ; + +//You can precisely simulate the output of your site inside FCKeditor, including background colors, font styles and +//sizes. The EditorAreaStyles option is similar to EditorAreaCSS. The difference is that you define your custom style +//inside the configuration file or inline in the page when creating the editor instance. +//For example: FCKConfig.EditorAreaStyles = 'body { color: Grey } h1 { color: Orange }'; +//FCKConfig.EditorAreaStyles = 'body {margin:0;padding:0;font:normal normal 11px/1.4 Verdana} p,li {margin:0; padding:0;} ul,ol {margin-top:0;margin-bottom:0;} i {color:#006;letter-spacing:0.05em;} b {font-size:13px;color:#447}'; + +// ToolbarComboPreviewCSS makes it possible to point the Style and Format toolbar combos to +// a different CSS, avoiding conflicts with the editor area CSS. +// Example: +// FCKConfig.ToolbarComboPreviewCSS = '/mycssstyles/toolbar.css' ; +// FCKConfig.ToolbarComboPreviewCSS = '../custom_configurations/toolbar.css' ; + +// This option sets the DOCTYPE to be used in the editable area. The actual rendering depends on the value set here. +// For example, to make the editor rendering engine work under the XHTML 1.0 Transitional: +// FCKConfig.DocType = '' ; +// As of FCKeditor 2.6.1, if the DocType setting is explicetlly set to the HTML4 doctype, the editor will not produce tags like
    but
    instead. +// FCKConfig.DocType = '' ; + +// Name and path to your custom fckstyles.xml file for the "Style" toolbar: +// Here you can offer a complete set of predefined formatting definitions to the end-user (writer) +// so the text can be well designed without messing up the HTML +// FCKConfig.StylesXmlPath = '../custom_configurations/custom_fckstyles.xml' ; +// Or you can define a list of custom styles like below +// +// FCKConfig.CustomStyles = +// { +// 'Red Title' : { Element : 'h3', Styles : { 'color' : 'Red' } } +// }; +FCKConfig.CustomStyles = '' ; + + +// FCKConfig.TemplatesXmlPath = '' ; + +//FCKConfig.EnableMoreFontColors = true ; +//FCKConfig.FontColors = '000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,808080,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF' ; + +FCKConfig.FontFormats = 'p;h3;h4;h5;h6' ; +//FCKConfig.FontNames = 'Arial;Arial Black;Comic Sans MS;Courier New;Georgia;Tahoma;Times New Roman;Trebuchet MS;Verdana' ; +//FCKConfig.FontSizes = '8px;9px;10px;11px;12px;13px;14px;15px;16px;17px;18px;19px;20px;22px;24px;26px;28px;30px;32px;34px;36px;38px;40px' ; + +// define which Skin you want to use, more skins can be downloaded at: +// http://sourceforge.net/tracker/?group_id=75348&atid=740153 +// FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/silver/' ; +FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/default/' ; +// FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/office2003/' ; + +FCKConfig.ProcessHTMLEntities = false ; +FCKConfig.IncludeLatinEntities = false ; +FCKConfig.IncludeGreekEntities = false ; + +FCKConfig.ProcessNumericEntities = false ; + +FCKConfig.AdditionalNumericEntities = '' ; // Single Quote: "'" + +FCKConfig.FillEmptyBlocks = true ; + +FCKConfig.FormatSource = false ; +FCKConfig.FormatOutput = false ; +FCKConfig.FormatIndentator = ' ' ; + + +FCKConfig.ForcePasteAsPlainText = true ; +FCKConfig.IgnoreEmptyParagraphValue = true ; + + +FCKConfig.PluginsPath = FCKConfig.BasePath + 'plugins/' ; +// PlugIns can be activated by commenting / uncommenting them +FCKConfig.Plugins.Add('nbsp','de,en'); +FCKConfig.Plugins.Add('sitelink','de,en'); + +FCKConfig.TemplateReplaceAll = false ; + +FCKConfig.ToolbarSets["calendar"] = [ + ['Bold','Italic','Underline'], + ['OrderedList','UnorderedList'],['Undo'], + ['FitWindow','Image'], + ['JustifyLeft','JustifyCenter','JustifyRight'], + ['Outdent','Indent'], + ['Link','Unlink','sitelink'], + ['Style'],['FontFormat'],['RemoveFormat'],['Source'] +] ; + +FCKConfig.ProtectedSource.Add( /<\?[\s\S]*?\?>/g ) ; // PHP style server side code +// FCKConfig.ProtectedSource.Add( /#CMSimple[\s\S]*?#/g ) ; // CMSimple scripting + +FCKConfig.EnterMode = 'p' ; // p | div | br +FCKConfig.ShiftEnterMode = 'br' ; // p | div | br + +FCKConfig.Keystrokes = [ + [ CTRL + 65 /*A*/, true ], + [ CTRL + 67 /*C*/, true ], + [ CTRL + 70 /*F*/, true ], + [ CTRL + 83 /*S*/, true ], + [ CTRL + 84 /*T*/, true ], + [ CTRL + 88 /*X*/, true ], + [ CTRL + 86 /*V*/, 'Paste' ], + [ CTRL + 45 /*INS*/, true ], + [ SHIFT + 45 /*INS*/, 'Paste' ], + [ CTRL + 88 /*X*/, 'Cut' ], + [ SHIFT + 46 /*DEL*/, 'Cut' ], + [ CTRL + 90 /*Z*/, 'Undo' ], + [ CTRL + 89 /*Y*/, 'Redo' ], + [ CTRL + SHIFT + 90 /*Z*/, 'Redo' ], + [ CTRL + 76 /*L*/, 'Link' ], + [ CTRL + 66 /*B*/, 'Bold' ], + [ CTRL + 73 /*I*/, 'Italic' ], + [ CTRL + 85 /*U*/, 'Underline' ], + [ CTRL + ALT + 13 /*ENTER*/, 'FitWindow' ], + [ SHIFT + 32 /*SPACE*/, 'Nbsp' ], + [ CTRL + ALT + 83 /*S*/, 'Source' ], +] ; + +FCKConfig.AutoDetectLanguage = true ; +FCKConfig.DefaultLanguage = 'de' ; +FCKConfig.ContentLangDirection = 'ltr' ; + +FCKConfig.CoreStyles = +{ + // Basic Inline Styles. + 'Bold' : { Element : 'b', Overrides : 'strong' }, + 'Italic' : { Element : 'i', Overrides : 'em' }, + 'Underline' : { Element : 'u' }, + 'StrikeThrough' : { Element : 'strike' }, + 'Subscript' : { Element : 'sub' }, + 'Superscript' : { Element : 'sup' }, + + // Basic Block Styles (Font Format Combo). + 'p' : { Element : 'p' }, + 'div' : { Element : 'div' }, + 'pre' : { Element : 'pre' }, + 'address' : { Element : 'address' }, + 'h1' : { Element : 'h1' }, + 'h2' : { Element : 'h2' }, + 'h3' : { Element : 'h3' }, + 'h4' : { Element : 'h4' }, + 'h5' : { Element : 'h5' }, + 'h6' : { Element : 'h6' }, + + // Other formatting features. + 'FontFace' : + { + Element : 'span', + Styles : { 'font-family' : '#("Font")' }, + Overrides : [ { Element : 'font', Attributes : { 'face' : null } } ] + }, + + 'Size' : + { + Element : 'span', + Styles : { 'font-size' : '#("Size","fontSize")' }, + Overrides : [ { Element : 'font', Attributes : { 'size' : null } } ] + }, + + 'Color' : + { + Element : 'span', + Styles : { 'color' : '#("Color","color")' }, + Overrides : [ { Element : 'font', Attributes : { 'color' : null } } ] + }, + + 'BackColor' : { Element : 'span', Styles : { 'background-color' : '#("Color","color")' } }, + + 'SelectionHighlight' : { Element : 'span', Styles : { 'background-color' : 'navy', 'color' : 'white' } } +}; + +// The following value defines which File Browser connector and Quick Upload +// "uploader" to use. It is valid for the default implementaion and it is here +// just to make this configuration file cleaner. +// It is not possible to change this value using an external file or even +// inline when creating the editor instance. In that cases you must set the +// values of LinkBrowserURL, ImageBrowserURL and so on. +// Custom implementations should just ignore it. +var _FileBrowserLanguage = 'php' ; // asp | aspx | cfm | lasso | perl | php | py +var _QuickUploadLanguage = 'php' ; // asp | aspx | cfm | lasso | perl | php | py + +// HI: FileBrowser-Settings moved to FCKeditor.php with Version 2.4.0 + +FCKConfig.LinkUpload = false ; //Deactivate QuickUpload-Tab +FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.' + _QuickUploadExtension ; +FCKConfig.LinkUploadAllowedExtensions = ".(7z|aiff|asf|avi|bmp|csv|doc|fla|flv|gif|gz|gzip|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|ods|odt|pdf|png|ppt|pxd|qt|ram|rar|rm|rmi|rmvb|rtf|sdc|sitd|swf|sxc|sxw|tar|tgz|tif|tiff|txt|vsd|wav|wma|wmv|xls|xml|zip)$" ; // empty for all +FCKConfig.LinkUploadDeniedExtensions = "" ; // empty for no one + +FCKConfig.ImageUpload = false ; //Deactivate QuickUpload-Tab +FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.' + _QuickUploadExtension + '?Type=Image' ; +FCKConfig.ImageUploadAllowedExtensions = ".(jpg|gif|jpeg|png)$" ; // empty for all +FCKConfig.ImageUploadDeniedExtensions = "" ; // empty for no one + +FCKConfig.SmileyPath = FCKConfig.BasePath + 'images/smiley/msn/' ; +FCKConfig.SmileyImages = ['regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'] ; +FCKConfig.SmileyColumns = 8 ; +FCKConfig.SmileyWindowWidth = 320 ; +FCKConfig.SmileyWindowHeight = 240 ; diff --git a/fckeditor/fckeditor_for_calendar.php b/fckeditor/fckeditor_for_calendar.php new file mode 100644 index 0000000..c77cbfb --- /dev/null +++ b/fckeditor/fckeditor_for_calendar.php @@ -0,0 +1,126 @@ +'."\n"; +//} else { +// $hjs.=''."\n"; +//} +//initialising the connector to the filemanager in case the filemanager hasn't been called already by other actions of the user +if(session_id() == ''){ + session_start(); +} + +//puts the FCKEditor Html Editor into a chosen textarea +function fckeditor() +{ + global $plugin_cf,$plugin_tx,$pth,$sl,$plugin,$sn,$su,$cf,$adm; + + + if ($adm) { + $_SESSION["_VALID_FCKeditor"] = "enabled"; + } + + //for multi language sites, if you are not in main language pages + $sl != $cf['language']['default'] ? $repl = $sl . "/index.php" : $repl = "index.php"; + $CMSimple_root_folder = str_replace($repl, "", $_SERVER['SCRIPT_NAME']); + + //for bugfixing -- looking for the values of the variables + //$x="

    cf['language']['default']: ".$cf['language']['default']."

    $sl

    $repl

    ".$_SERVER['SCRIPT_NAME']."

    .$CMSimple_root_folder.

    "; + + $upload_folder = $CMSimple_root_folder; + $_SESSION["upload_folder"] = $upload_folder; + + $isInSubfolder = substr_count($upload_folder, '/'); + + $_SESSION["lang_active"] = $sl; + + if($sl == $cf['language']['default']) { + $isDefaultLanguage = 1; + } else {$isDefaultLanguage = 0; } + + if(isset($cf['fckeditor']['folder']) && $cf['fckeditor']['folder']=='')$cf['fckeditor']['folder']='FCKeditor'; + + + + // Decide if html or Xhtml should be used + $DocType = ''; + if ($cf['xhtml']['endtags'] != 'true') { + $DocType = '' ; + } + // Look for the custom configuration file with tool bar + $ccp = $CMSimple_root_folder + .'plugins/calendar/fckeditor/fckconfig_calendar.js'; + + // Look for the ccs-file in the editor window + $css = $CMSimple_root_folder + .'plugins/calendar/css/editor.css,'; + $css .= $pth['folder']['template']."stylesheet.css"; + + // Look for the xml-style file + $fckstyles = $CMSimple_root_folder + .'plugins/calendar/fckeditor/fckstyles_calendar.xml'; + + // Look for the template file + $templatepath = $CMSimple_root_folder + .'plugins/calendar/fckeditor/fcktemplate_calendar.xml'; + + // Give the path to FCKeditor in the CMSimple installation + $fckpath = $CMSimple_root_folder . 'plugins/calendar/fckeditor/FCKeditor/'; + $connector = $CMSimple_root_folder . 'plugins/calendar/fckeditor/FCKeditor/editor/filemanager/connectors/php/connector.php'; + $browserPath = $CMSimple_root_folder . 'plugins/calendar/fckeditor/FCKeditor/editor/filemanager/browser/cmsimple/browser.html?'; + + // Editor height + $height = $plugin_cf['calendar']['editor_height']; + + // Now call FCKEditor via java script + $o = ''; + return $o; +} +?> diff --git a/fckeditor/fckstyles_calendar.xml b/fckeditor/fckstyles_calendar.xml new file mode 100644 index 0000000..6bc957c --- /dev/null +++ b/fckeditor/fckstyles_calendar.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + +

    Calendar Plugin 1.4.5 for CMSimple_XH

    +

    Originally developed by Michael Svarrer in 2005, modified by Tory and Bob, revised and enlarged by Svasti and Holger and again by Svasti


    + +

    Calendar produces calendars with marked event days, which are linked to an event list.

    +

    +New in Version 1.4.3: Up to version 1.4.2 for saving the complete event list was send to the server. Unfortunately some users reported data loss in long lists. In version 1.4.3 now only the one actually changed event is sent to the server to prevent data loss. Don't edit more than one event before saving, as only one event can be saved at a time.
    +Version 1.4.4 & 1.4.5: Bug fixes

    + + +
      +
    1. Installation
    2. +
    3. Basic Usage
    4. +
    5. Putting Calendar on your page
    6. +
    7. Configuration
    8. +
    9. Events
    10. +
    11. Coloring the Calendar Days
    12. +
    13. Entering New Events
    14. +
    15. Exceptions and Additional Dates
    16. +
    17. Editors
    18. +
    19. Event Page = Page with the Event-List
    20. +
    21. Event-List Style
    22. +
    23. Holidays
    24. +
    25. Display of Next Coming Event via Marquee
    26. +
    27. Adjusting Your Page Template
    28. +
    29. Icons, background images, birthday symbols
    30. +
    31. Creating an Event-Archive
    32. +
    33. Second Calendar with Different Events
    34. +
    35. Input of Events in Protected Member Pages
    36. +
    37. Calendar on Subsites or Multi Language Sites
    38. +
    39. Conflicts with other Plugins
    40. +
    41. Installing Calendar Plugin in CMSimple 3.4 or CMSimple LE
    42. +
    43. List of Function Calls
    44. + +
    + +
      +

      Updating 1.4.4 –> 1.4.5

      +
    • Exchange: admin.php, additionally version.nfo, changelog.txt, the help folder, readme.txt
    • + +

      1.4.0 –> 1.4.5

      +
    • Exchange: admin.php, index.php, the editorconfigs, includes and language folders, additionally version.nfo, changelog.txt, the help folder, readme.txt
    • + +

      1.4 beta –> 1.4.5

      + +
    • Save old settings through Presets>backup for both Event-list and also Calendar.
    • +
    • Keep calendar/content folder + calendar/templates/ folder, and calendar/config/config.php in case you have changed config settings. Replace all other files.
    • +
    • Activate your old presets by choosing Presets>backupname for both event-list and calendar. If you have kept your old config file, you need to add the line:
      + $plugin_cf['calendar']['eventlist_start_moves_with_clicked_event']="1"; +
    • + + +

      1.1 –> 1.4.5

      + +
    • Re-use old content files
    • +
    • Old function calls usually still work (except calls which include the event page; the way to enter the event page has been changed).
    • +
    • The method of entering links and birthdays has changed.
    • +
    + + +

    Installation

    +
      +
    • Extract zip-file and put the calendar folder into your CMSimple plugins folder. Websites on shared hosting servers may require writing permissions (646 usually works) for config.php, config2.php, stylesheet.php, templates and content folders with all files, and language file.
    • +
    • You can change some paths (but don't have to!): +
        +
      • You may want to put your calendar event data in a subfolder under userfiles. In config > filepath data enter ./userfiles/calendar/ and move all content files to that folder.
      • +
      • You may want to put the calendar background images in a subfolder under images. In config > filepath calendar background images enter ../../../images/calendar/ and move the provided backgrounds to that folder.
      • +
      +
    • +
    • Choose your Date Delimiter before you start entering events. Enter in config if you want "." or "-" or "/" to deliminate the numerals in dates, i.e. 01.01.2011 or 01-01-2011 or 01/01/2011. If you change this setting later, exceptions, additional days and provisional dates will be erased and your event list will not show anything. After saving the event file, the event list will work again, however the above mentioned date entries will be lost.
      American style date month/day/year is not possible, only day/month/year is supported.
    • + + +
    + +
    + +Basic Usage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Function CallResultUsed for
    editevents()event input tablepassword protected pages
    calendar()one month small calendartemplate
    multicalendar()2 or more months calendartemplate + pages
    year()year calendarpages
    bigcalendar()big one month calendarpages
    events()list of eventspages
    nextevent()marquee of next coming eventstemplate + pages
    + + +

    P.S. No need to use all functions, one may be sufficient for your site.


    + +

    Putting calendar on your page

    +
      +
    • {{{PLUGIN:bigcalendar();}}}
      puts a big one-month calendar on your page.
      + You can customize the looks of this big calendar in calendar config above the calendar view. Presets are also available. +

    • +
    • {{{PLUGIN:multicalendar([number of months],[number of columns next to each other]);}}}
      puts a multi-months calendar with months displayed in columns on your page. + +
        +
      • multicalendar(3,3) will show 3 months, starting from present month, in 3 columns.
        +multicalendar_3-3.jpg, 18kB


      • + +
      • multicalendar(3) has no value for columns, so no columns are created and no frame line. Months are displayed one under another, first month with weekday names.
        +multicalendar_3.jpg, 15kB
      • +
      +
    • +
    • {{{PLUGIN:year();}}}produces a year calendar
      + You can specify the year, e.g.: {{{PLUGIN:year(2021);}}}
      + and the number of columns, e.g.: {{{PLUGIN:year('',4);}}}. 3 columns is the default value.
      + Here an example with 4 columns:
      +year_-4.jpg, 61kB

    • + +
    • {{{PLUGIN:events();}}} puts the event list on your page.
      + In former versions of calendar you always needed an event list. In this version event information can be shown in calendar pop-ups, so that a separate event list is no must any more. Only when the page with the event list is specified, event days in calendar are linked to the event list.
    • +
    + +

    Configuration

    +
      +
    • Next to the normal CMSimple plug-in config file Calendar has direct configuration possibilities in "Edit Events", "Calendar" and "Marquee".
    • +
    • A click on [+] behind presets let's you select presets. You can save your own settings as presets by entering a name and clicking backup. Presets can be edited and deleted in main plugin menu Backup > Delete.
    • +
    • A click on [+] behind Event-list config, Big Calendar, Small Calendar, Pop-up, opens self-explanatory menus. On saving changes can be seen right away. If you see only partial changes, try reloading the page, or empty your browser cache.
    • +
    • Color fields: click opens small frame with color choices. Alternatively you can enter a standard color name into the field, like: black, blue, gray, green, purple, red, silver, white, yellow, or enter a 3-digit color code like #555 or #F00. If you leave the field empty (by deleting the color number) no color will be applied.
    • +
    • Font selection lets you choose font family, font size and sometimes line height. Possible values are listed in config.
    • +
    • HINT: The configuration utility manipulates the css-file. Usually browsers store this file on the first loading of a page for faster future loading. If you change some css-values and your browser doesn't reloaded the css-file, you won't see the changes. The plugin tries to force the browser to reload the css-file in the configuration-page. However when you go to some page of your site to see the final result, your browser may not reload the css-file. Before thinking the program doesn't work, just reload your page in the browser.
    • +
    + +

    Events

    +
      +
    • Events are organized as: DATE, TIME, ENTRY1, MAIN-ENTRY, ENTRY3, INFO/LINKS, additional DESCRIPTION.
    • +
    • You can deselect unwanted fields; minimum selection is DATE and MAIN-ENTRY.
    • +
    + +

    Coloring the Days in Calendar

    +
      +
    • Coloring of calendar days is organized in 8 consecutive layers: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      1simple day numbersbasic colornormal weightno background
      2weekendsweekend colorboldno background
      3public holidaysholiday colorboldno background
      4single day events + 1st day of long eventscolor possible
      not recommanded, as it obscures holiday and weekend markings
      bold possible
      but not recommanded
      event day background
      5specially marked events for border markingcolored borderweight can not be setno background
      62nd and following days of long events
      (not in big calendar)
      underliningweight can not be setno background
      7birthdays
      (not in big calendar)
      color can not be setweight can not be setpartly transparent background image
      8today
      (not in big calendar)
      color possible
      not recommanded, as it obsures events, holidays and weekends
      bold possible
      but not recommanded
      background possible
    • +
    • Not using color or bold for events means that weekends or public holidays are still clearly visible.
    • +
    + +

    Entering New Events

    +
      +
    • + save = save this event
      + add.png, 733B = create new event
      + copy.png = copy event
      + delete.png, 715B = delete event
    • +
    • cal-grey.gif, 170B = opens a datepicker and lets you choose the Date of an event. Dates can also be entered directly. For uncertain events you may enter as day "--","-" (will be sorted at the start of a month) or "?","??" (sorted at the end of a month). Month and year have always to be specified. Events with such uncertain dates will appear in the event list but not in the calendar. You can enter events (e.g. for anniversaries) from the year 100 (yes!) up to the year 999999. Entering only 2 digits makes the datepicker add "20" before your entry.
    • + +
    • Time: Enter the start time (hh:mm, 24 hour mode only) in the first field, the ending time in the second. Different events on the same day will be sorted according to start time in the calendar displays. Events without start time will be sorted after events with start time. Instead of time a short text can also be entered there (e.g. "evening"). For events lasting more than a day the first time will be taken as start time on start day and the second time as end time on end day. If your event has the same start and end times every day (e.g. an exposition) check daily times. This will be shown in the calendar and different events on the same day will be sorted accordingly.
    • +
    • Entering links:
      +
        +
      • Choose internal page links via the options list
      • +
      • External links can be entered in the next line with or without "http://", e.g. www.cmsimple-xh.com. For more than 1 link separate the links by "|"
      • +
      • Links can be attached to text. If there is more than 1 link (including the internal link), the texts to the different links are also separated by "|"
      • +
      • For links to pdf- or word-files in download-folder: enter the exact file name with spaces and accents (case-sensitive), e.g. my word äöü file.docx, in case you use a subfolder of the downloads folder, enter that foldername also, e.g. subfolder/my pdf äöü file.pdf
      • +
      • Links to external pdfs: enter the full address, e.g. www.website.xx/xx/.../my pdf äöü file.pdf
      • + +
      • Special cases:
          +
        • Additional internal links can be entered as simple page name. e.g. + Start if there is no second page with the same name. Some glyph-combinations may be problematic. In case of problems error messages are returned.
          + Alternatively enter the pagename starting with ? followed by the pagename with all upper level pages, separated by your URI separator (as set in CMS config), e.g.: ?Welcome:New here?:Get going!
        • + +
        • For links to CMSimpleRealBlog entries or anchors enter the URL as it appears in the browser address line starting with "?", e.g. + ?Start&realblogaction=view&realblogID=1&page=1
        • + +
        • For links to subsite pages, enter the URL starting with "/" followed by the subsite code, e.g. + /de/?Willkommen
          + + Example: you want to link to the page Dětské letní tábory 2012 on a subsite in Czech. It is sufficient to enter: /cs/?Dětské letní tábory 2012 with all accents and spaces. If the page is on a secondary menu level, the higher level page names have to be added like in former Calendar versions. The easiest way is to simply copy the relevant part of the address line as it appears in the browser. +
        • +
        +
      • +
      +
    • + +
    • For yearly events like anniversaries check yearly with or without age calculation, enter date of birth or commemoration date in the date field and the name of the person or event in the main event entry field. Some text like "anniversary" or "commemoration" can be entered, etc. in the next field. If you checked yearly + age cal. Calendar will calculate the age of the person and display it with birthday special color as background. If you checked only yearly, the birthday special color will not be applied.
    • + +
    • For weekly events enter the date of the first of these events and check weekly. The last planned event can also be entered. If no last event is specified a period of 10 years is supposed. All longer periods will be cut to 10 years maximum.
    • +
    • Formatting:
      + Text of main event entries can be formatted via a simple markup method. +
        +
      • Soft hyphen: Enter \- at the place where you wish to have a soft hyphen. Long words can mess up narrow fields in the event table and in big calendar. Usage of "\-" is strongly recommended to enable hyphenation of long words.
      • +
      • * _ ~ # + = provide further markup, details are shown in formatting at the top of the input table. Examples: *text* results in italic text, **text** results in bold text, ++text++ in red text, ==text== in big text, _text_ in underlined text, __text__ in small text. Combinations are possible.
      • +
      +
    • +
    • Larger entry fields: The size of several entry fields is set in config: without entry the fields will be 1 line entry fields, by entering a height value, e.g. 2.6em, a field will become a textarea with that height, entering "1" will produce the default height.
    • +
    • Extra field: Entry1 has the option in config input-field entry1 show in input always. Thus, even when not used in event list, the field is still available and could be used for marquee for instance.
    • +
    + +

    Exceptions and Additonal Dates

    +
      +
    • Long events and weekly event can have exceptions, where no event takes place. Enter exceptions to these weekly events as comma separated dates. (Same delimiter as your other dates, year will be converted to 2 digits even if you enter 4 digits.)
    • +
    • Weekly events can have additional dates (e.g. if an event gets shifted, use an exception and an addition).
    • +
    • Events (lasting not longer than a day) can be given additional dates, so that repetitions of an event require only one entry. (This feature is not implemented for long events.)
    • +
    + +

    Editors

    +
      +
    • For the field "additional description" Calendar automatically selects either Tinymce or CKeditor as set in your CMS. For CMSimple versions prior to 1.5 FCKeditor will be chosen.
      +In plugin config under editor you can enter html (for plain html) or fckeditor. If you don't use FCKeditor, you can delete the folder calendar/fckeditor (1.4 MB).
    • + +
    • The height of the editor field is set in px under editor height (only a number, not px). The editors come with a special list of styles (= css classes), i.e. left, left2, right for images, so that you can set images to the left or right with fitting margins to the text, and Big, Small, Red to get the same text formatting as in simple markup in the other fields.
    • + +
    • While entering images it is generally faster, easier and gets you better looking results, if you use style-classes and not the other possibilities offered in the image entering dialog. +
      +
      +The included FCKeditor has been modified so that you can select the image style class right away:
      +(Unfortunately this is not so easy in the other non modified editors)

      +fckeditor_image_insert.jpg, 38kB
      +
      + +In TinyMCE you can select a style class after selecting appearance

      +tinymce_image_class.jpg, 56kB

      + +However it is easier in TinyMCE and CKeditor to first enter the image without any styling, and to click on the image in a second step and select a fitting css-style:

      +tinymce_image_style.jpg, 41kB + +
    + + + +
    + + +

    Further Settings

    + + +

    Event Page = Page with the Event-List

    +
      +
    • If you have selected this page in the event-list config, clicking on any event-day in the calendar will lead to this page. The page should contain the function call {{{PLUGIN:events();}}} to show the event-list. If you don't want an event-list, select no event-list page in event-list config.
    • +
    • The time period for events to be shown in the event list is set in event-list config. Present month is minimum. Past events can also be shown, either normal or in gray. You can choose that no past events, not even from the present month, will be shown. If past events in gray is selected, the "additional descriptions" of past event will also not be shown (this is a setting of the css-file and could easily be changed).
    • +
    • Clicking on an event-day which is not in the present month, may have some effect to the period of shown events in the list: +
        +
      • In default setting the event-list displays the standard period of events, which will be enlarged to the future or past if the clicked event is outside the standard period
      • +
      • Entering "1" in the config field eventlist start moves with clicked event makes the shown period shift to the month of the clicked event instead of getting enlarged. The advantage is that the clicked event is usually at the beginning of the list. A link to reset the event list is added at the beginning. (As the list may also shift to the past, settings "show no past events" and "past events in gray" are overridden in the shifted list.)
      • +
    • +
    • The event-list page can also directly be entered in the plugin language settings under event page. You can enter just the name of the event page or the relative URL-address starting with "?" or the relative URL-address of a page of a subsite starting with "./".
    • +
    + + +

    Event-List Style: Spreadsheet or Template?

    +
      +
    • The event list shows your events in chronological order, either in spreadsheet table style or in template driven style. Spreadsheet table style is preset. Effect of templates can be tested in Event List.
    • +
    • If you enter in Plugin Config under eventlist template the name of the template file, this template will be used as standard in your event-list.
    • +
    • Templates can be edited via Backup > Presets. They are written in HTML with placeholders between %…% in place of variables. The templates contain 12 output cases, separated by "===". If cases are empty, there will be no output for that case.
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      casevariables
      1 - headline announcing the time period shown%period% %start% %till% %end%
      2 - headline weekly section%weekly%
      3 - weekday header%longweekday% %shortweekday%
      4 - weekly events%bookedout% %longweekday% %shortweekday% %time% %date% %field1% %mainfield% %field3% %infolink% %description%
      5 - past weekly events%ended% %longweekday% %shortweekday% %time% %date% %field1% %mainfield% %field3% %infolink% %description%
      6 - headline single events section%single%
      7 - month header%month% %year%
      8 - yearly events with age calculation%bookedout% %date% %time% %field1% %mainfield% %age% %field3% %infolink% %description%
      9 - yearly events%bookedout% %date% %time% %field1% %mainfield% %field3% %infolink% %description%
      10 - past yearly events%ended% %date% %time% %field1% %mainfield% %field3% %infolink% %description%
      11 - single events%bookedout% %date% %time% %field1% %mainfield% %field3% %infolink% %description%
      12 - past single events%ended% %date% %time% %field1% %mainfield% %field3% %infolink% %description%
      +
    • All variables are simple unstyled texts, except %description%, which is fully formatted html-text (by the editor). So don't use <p>%description%</p>, but rather <div>%description%</div>.
    • +
    • The desired template of an event list can also directly be set in the event list function call, making differently styled event lists on the same site possible:
      + {{{PLUGIN:events('','','','','','','Name of the template file');}}}
      +(Template file name = 7th place in the function call. If you put 1 instead of a file name the spreadsheet table style is used, without value the standard as set in config is used.)
    • + +
    + + +

    Holidays

    +
      +
    • Set holidays via the Holiday menu. Holidays are saved in the language file. Each holiday entry consist of date description and holiday-name. You can enter fixed holidays as day.month, movable holidays depending on the Easter date as easter +/- x day (x = number of days before or after Easter) and movable holidays occuring on a fixed weekday following or preceding a fixed date as n days m Weekday day.month, meaning n days before or after the mth weekday before or after the fixed date. Weekday names must be entered in English, the words "day" or "days" work both, negative numbers mean "before".
    • +
    + + +

    Display of Next Coming Event via Marquee

    +
      +
    • Marquee is run either by the jQuery plugin or uses the Microsoft marquee function and does not validate.
    • +
    • To display next coming event inside a page enter: {{{PLUGIN:nextevent();}}}
    • +
    • To display next coming event via the template use: <?php echo nextevent();?>.
    • +
    • If you want the marquee in the template to be activated on certain pages only, use: <?php echo calendar(); if ($nextevent) echo nextevent(); ?>. The marquee will be shown under the calendar. To activate the marquee, write into the page #CMSimple $nextevent="show";#.
    • +
    + + +

    Adjusting Your Page Template

    +
      +
    • Often it is practical to have the event list more space than for usual text. You may use for this page a special template. The backend has the possibility to select different templates just for backend testing.
    • +
    + + +

    Icons, Background Images, Birthday Symbols

    +
      +
    • Available icons for links and "info" are shown on mouse over help_icon.png, 899B in front of the icon setting options. You can add your own icons (gif or png) and put them in a new folder under plugins>calendar>images>. The icon sets go in pairs; the set for past events is in another folder with the same name and "past" added. Added sets will automatically be listed in the setting options.
    • +
    • Background images for big month calendar are jpg-images in the folder given in config > filepath calendar background images, which in the delivery state of the plugin is ../backgroundimages. All jpg-images of that folder are selectable in the option list for calendar background images.
    • +
    • The same folder also contains the gif-symbols used for marking birthdays in small calendars. You can freely add your own symbols. All gif-images of that folder are selectable in the small calendar birthday option list.
    • +
    + + +

    Creating an Event-Archive

    +
      +
    • In Backup you can copy your event list under a new name, e.g. the name "archive". If you delete afterwards in your normal event file some event entries, they will still be there in your "archive". You can add to this archived list from time to time your standard list with the merge function (which has automatic duplicate avoidance), thus building up a list of past events.
    • +
    • This archived list can be shown on a page with the function call: {{{PLUGIN:events('starting month','starting year','duration in months','0','name of archive file','','',1);}}}
      + (The last "1" prevents that past events will be shown in gray).
    • +
    + + +

    Second Calendar with Different Events

    +
      +
    • You can use two independent calendars! To activate a second calendar enter a name as filename (i.e. "extracalendar") for the events of this second calendar in config under second-calendar filename (no spaces, only english letters). If the file doesn't exist, the plugin will create it. This second calendar can have its own event page. Enter the pagename where you put this list under second-calendar_eventpage. (Either just the pagename or starting with ?
    • +
    • If you have thus activated a second Calendar, the backend menu gets enlarged (after clicking on a menu item) with new items for editing and viewing this second calendar, and the following additional function calls will become available:
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Function CallResultUsed for
      editevents2()event input table for second calendarpassword protected pages
      calendar2()one month small second calendartemplate
      calendar12()one month small combined calendar of standard and second calendar"
      multicalendar2()2 or more months second calendartemplate + pages
      multicalendar12()2 or more months combined calendar of standard and second calendar"
      year2()year view of second calendarpages
      year12()year view of combined calendar of standard and second calendar"
      bigcalendar2()big one month of second calendarpages
      bigcalendar12()big one month of combined calendar of standard and second calendar"
      events2()list of events of second calendarpages
      events12()list of events of combined calendar of standard and second calendar"
      nextevent12()marquee of next coming events based on the standard and second calendartemplate
      +
        +
      • In these function calls the same variables (mostly) can be added as in the standard function calls (e.g. {{{PLUGIN:multicalendar2(3,4);}}} etc.)
      • +
      • All calendars based on the second calendar will link to the second event-page set in plugin config.
      • +
      • All combined calendars however will link to the standard event-page set in event-list config. When using a combined calendar it is recommanded to use a combined event-list on the standard event-list page.
      • +
      • More complex setups are possible, e.g. two different calendars with separate event-lists plus a combined calendar with combined event-list. However to force the calendar to link to a different list than the standard list, you have to take advantage of the full function call. Calls like calendar12() are only shortcuts based on the full calls.
      • +
      + +
    • +
    + + +

    Input of Events in Protected Member Pages

    +
      +
    • You may want to offer selected visitors to your site the possibility to enter events. Just put {{{PLUGIN:editevents();}}} on the page. For security reasons the filebrowser is disabled so that visitors are prevented from deleting or uploading files.
      + +If you want only a special event file to be edited by visitors, use the function call:
      + {{{PLUGIN:editevents('extraevents');}}}
      +If you want your secondary calendar to be edited by visitors, the function call would be:
      {{{PLUGIN:editevents2();}}} +
    • +
    + +

    Calendar on Subsites or Multi Language Sites

    +
      +
    • A different calendar for each language or subsite is the standard setting. If you want to have the same calendar for different languages or subsites, you can enable same-event-calendar_for_all_subsites.
    • +
    • With this setting calendar will not use language-related event files, e.g. eventcalendar_en.txt, but create new eventfiles without a language suffix, namely eventcalendar.txt. (You can change file names in Backup menu.)
    • +
    • As relative links have different paths from subsites than from the main site, you should enter images in this case only from your main site. Calendar adjusts the image path when viewed from a subsite, but not otherwise. If images are entered from the subsite, they will not show on the main site.
    • +
    • Internal Links only work, when entered from the main site, and they can only direct to pages of the main site.
    • +
    • If you want to use calendar2 with links to an event list in subsites, create an event list page with the same name as the secondary event list page in the main page.
    • +
    + + +

    Conflicts with other Plugins

    +
      +
    • Other Plugins may lay their pop-ups on top of calendar's pop-ups. This can be prevented by giving calendar a higher z-index value in config. You have to experiment to find a fitting value. There seems to be no upper limit to z-index, so you may start with 10 and if this doesn't give the wanted result, try 100, 1000, 10000.
    • +
    • If you don't need it, don't use z-index.
    • + +
    • There can be a small problem with year or months in columns and using z-index. In the case of pop-ups, which extend to the right above the next month to the right, the event days of that month shine through the pop-up. This happens because the following month is created later and if z-index is used this month is strangely automatically regarded as being on top of the preceding month. By programming one could give a lower z-index to that month on the right, but then a similar problem would occur with pop-ups to the left, because then the month to the left will have a higher z-index, which makes its event days shine through. The easy solution is to set in config > calendar popup class to left so that pop-ups always open to the left side.
    • +
    + + +

    Installing Calendar Plugin in CMSimple 3.4

    +
      +
    • Install a Plugin Loader.
    • +
    • Be sure to have no index.htm in your image folder, as this prevents image selection with Fckeditor.
    • +
    • Use for function calls (inside pages) the old method #CMSimple $output.=[function call];# instead of {{{…}}}.
    • +
    • Switch off jQuery in marquee if you use marquee.
    • +
    + + +

    List of Function Calls

    +[ ] means some entry specified in the brackets. The square brackets are not to be entered. +
        +
      • Template calls: <?php echo [function call];?>
      • +
      • Old method to call a function inside a page: #CMSimple $output.=[function call];#
      • +
      • New method to call a function inside a page: {{{PLUGIN:[function call];}}}

      • +
      +
    • editevents(["filename"]) + creates the event editing table
      + (without filename => standard event file is taken)
    • +
    • editevents2() the same for the 2nd calendar.

    • + +
    • calendar ([year],[month],["special_eventpage"],["size"].[number],[columns],
      + ["file"],["additional_file"],[use_eventpage_of_calendar2])

      + creates the calendar
      +
        +
      • without year/month => present year/month is used
      • +
      • without special eventpage => eventpage as set in language file is used
        + The "special eventpage" can be entered as +
          +
        • simple pagename (must not occur more than once!) exactly as the pagename is, e.g.: Dětské letní tábory 2012
        • +
        • urlencoded pagename with all pagenames of superior level separated by your URI-separator (set in CMS-config), preceeded by "?", with all spaces replace by "_", e.g.: ?Start:Latest_News:Hot or ?Anfang:Neu_hier%3F
        • +
        • using urlencoded pagenames you can even link to a page on a subsite. Than start with ./ followed by the subsite abbreviation, e.g.: ./de/?Willkomen:Neu_hier%3F:Weiter
        • +
      • +
      • size can be set to "big" and creates a big calendar
      • +
      • number gives the number of months to be displayed, preset to 1
      • +
      • columns give the number of columns to display
      • +
      • file name of the eventfile which you want to show in the calendar, if not set, the standard file will be used
      • +
      • additional file name of an additional event file to be used
      • +
      • use eventpage of calendar2, value 1 or 0, this setting is used for the second calendar
      • +
      +
    • +
    • calendar2 ([year],[month],["special_eventpage"],["size"].[number],[columns])
      + The same for the 2nd calendar.
    • +
    • calendar12 ([year],[month],["special_eventpage"],["size"].[number],[columns])
      + The same for the combination of standard and 2nd calendar.

    • + +
    • multicalendar([number],[columns],["file"],["additional_file"])
      + creates calendars with several months.
      + This is a shortcut function to avoid complicated entries in calendar()
      +
    • function multicalendar2([number],[columns])
      + The same for the 2nd calendar.
    • +
    • function multicalendar12([number],[columns])
      + The same for the combination of standard and 2nd calendar.

    • + +
    • year([year],[columns],["file"],["special_eventpage"])
      + Another shortcut to avoid complicated entries in calendar()
      +
        + +
      • In year you can enter the year which you want to show. Left empty the present year is shown.
      • +
      • columns left empty will produce a 3 column layout.
      • +
      • file takes the name of the eventfile which you want to show in the calendar, if empty, the standard eventfile will be used.
      • +
      • special eventpage is useful, if you want a different eventpage from the standard event page.
      • +
      +
    • +
    • year2([year],[columns])
      + The same for the 2nd calendar.
    • +
    • year12([year],[columns])
      + The same for the combination of standard and 2nd calendar.

    • + +
    • bigcalendar()
      + creates a big monthly calendar useful for a whole page
      + Also a short cut for complicated entries in calendar() +
    • +
    • bigcalendar2()
      + The same for the 2nd calendar.
    • +
    • bigcalendar12()
      + The same for the combination of standard and 2nd calendar.

    • + +
    • events([month],[year],[future_months],[past_months],["filename"],["additional_file"],[style],[past_events])
      + creates the event list
      +
        +
      • without month/year => present month/year used
      • +
      • without future/past month => setting taken from event-list config
      • +
      • without filename => standard event file is used
      • + +
      • additional file name of an additional event file to be used
      • +
      • style takes 3 settings:
        + empty or 0 -> style as set in config,
        + 1 -> spreadsheet table style,
        + filename -> template driven style with this file
      • +
      • past events decides how to handle past events:
        + empty or
        + 0 -> standard treatment of past events as set in event-list config,
        + 1 -> past events are neither marked nor shown in gray,
        + 2 -> past events are shown in gray,
        + 3 -> no past events are shown
      • +
      +
    • +
    • events2([month],[year],[future_months],[past_months])
      + The same for the 2nd calendar.
    • +
    • events12([month],[year],[future_months],[past_months])
      + The same for the combination of standard and 2nd calendar.

    • + +
    • nextevent([number],["file"],["additional_file"])
      + creates marquee of next coming event
      + ([number] = number of events to be announced,
      + without number, number is taken from config)
      + file –> name of the eventfile which you want to use as source, if not set, the standard event-file will be used
      + additional file –> name of an additional event file to be used as source
    • + +
    • nextevent12()
      + creates marquee of next coming event(s) based on the combination of standard and 2nd calendar
      +
    • +
    + + +

    Limitations

    +
      +
    • The marquee element doesn't validate
    • +
    • Birthdays can last only one day.
    • +
    • Multiple events can (at present) only be single day events each
    • +
    • Long events are limited to 90 days.
    • +
    • Weekly events are limited to 10 years.
    • +
    + + +



    Written by Svasti Nov 2011 - June 2013

    + + + diff --git a/help/multicalendar_3-3.jpg b/help/multicalendar_3-3.jpg new file mode 100644 index 0000000..35a8277 Binary files /dev/null and b/help/multicalendar_3-3.jpg differ diff --git a/help/multicalendar_3.jpg b/help/multicalendar_3.jpg new file mode 100644 index 0000000..0a9c53b Binary files /dev/null and b/help/multicalendar_3.jpg differ diff --git a/help/tinymce_image_class.jpg b/help/tinymce_image_class.jpg new file mode 100644 index 0000000..5797d2c Binary files /dev/null and b/help/tinymce_image_class.jpg differ diff --git a/help/tinymce_image_style.jpg b/help/tinymce_image_style.jpg new file mode 100644 index 0000000..2644ae2 Binary files /dev/null and b/help/tinymce_image_style.jpg differ diff --git a/help/year_-4.jpg b/help/year_-4.jpg new file mode 100644 index 0000000..1d41ed4 Binary files /dev/null and b/help/year_-4.jpg differ diff --git a/images/1/external_link.gif b/images/1/external_link.gif new file mode 100644 index 0000000..0693245 Binary files /dev/null and b/images/1/external_link.gif differ diff --git a/images/1/info.gif b/images/1/info.gif new file mode 100644 index 0000000..455c037 Binary files /dev/null and b/images/1/info.gif differ diff --git a/images/1/internal_link.gif b/images/1/internal_link.gif new file mode 100644 index 0000000..96caf30 Binary files /dev/null and b/images/1/internal_link.gif differ diff --git a/images/1past/external_link.gif b/images/1past/external_link.gif new file mode 100644 index 0000000..ef7e585 Binary files /dev/null and b/images/1past/external_link.gif differ diff --git a/images/1past/info.gif b/images/1past/info.gif new file mode 100644 index 0000000..6c8739b Binary files /dev/null and b/images/1past/info.gif differ diff --git a/images/1past/internal_link.gif b/images/1past/internal_link.gif new file mode 100644 index 0000000..945534e Binary files /dev/null and b/images/1past/internal_link.gif differ diff --git a/images/2/external_link.gif b/images/2/external_link.gif new file mode 100644 index 0000000..af66363 Binary files /dev/null and b/images/2/external_link.gif differ diff --git a/images/2/info.gif b/images/2/info.gif new file mode 100644 index 0000000..6a42759 Binary files /dev/null and b/images/2/info.gif differ diff --git a/images/2/internal_link.gif b/images/2/internal_link.gif new file mode 100644 index 0000000..78a39e8 Binary files /dev/null and b/images/2/internal_link.gif differ diff --git a/images/2past/external_link.gif b/images/2past/external_link.gif new file mode 100644 index 0000000..7204ec6 Binary files /dev/null and b/images/2past/external_link.gif differ diff --git a/images/2past/info.gif b/images/2past/info.gif new file mode 100644 index 0000000..f2fe5e1 Binary files /dev/null and b/images/2past/info.gif differ diff --git a/images/2past/internal_link.gif b/images/2past/internal_link.gif new file mode 100644 index 0000000..00b9f22 Binary files /dev/null and b/images/2past/internal_link.gif differ diff --git a/images/3/external_link.gif b/images/3/external_link.gif new file mode 100644 index 0000000..cb80334 Binary files /dev/null and b/images/3/external_link.gif differ diff --git a/images/3/info.gif b/images/3/info.gif new file mode 100644 index 0000000..2beb651 Binary files /dev/null and b/images/3/info.gif differ diff --git a/images/3/internal_link.gif b/images/3/internal_link.gif new file mode 100644 index 0000000..b29cb35 Binary files /dev/null and b/images/3/internal_link.gif differ diff --git a/images/3past/external_link.gif b/images/3past/external_link.gif new file mode 100644 index 0000000..2e5e213 Binary files /dev/null and b/images/3past/external_link.gif differ diff --git a/images/3past/info.gif b/images/3past/info.gif new file mode 100644 index 0000000..8e06a29 Binary files /dev/null and b/images/3past/info.gif differ diff --git a/images/3past/internal_link.gif b/images/3past/internal_link.gif new file mode 100644 index 0000000..05338d3 Binary files /dev/null and b/images/3past/internal_link.gif differ diff --git a/images/4/external_link.gif b/images/4/external_link.gif new file mode 100644 index 0000000..415a826 Binary files /dev/null and b/images/4/external_link.gif differ diff --git a/images/4/info.gif b/images/4/info.gif new file mode 100644 index 0000000..29474b2 Binary files /dev/null and b/images/4/info.gif differ diff --git a/images/4/internal_link.gif b/images/4/internal_link.gif new file mode 100644 index 0000000..8aeebee Binary files /dev/null and b/images/4/internal_link.gif differ diff --git a/images/4past/external_link.gif b/images/4past/external_link.gif new file mode 100644 index 0000000..82205b1 Binary files /dev/null and b/images/4past/external_link.gif differ diff --git a/images/4past/info.gif b/images/4past/info.gif new file mode 100644 index 0000000..29441ed Binary files /dev/null and b/images/4past/info.gif differ diff --git a/images/4past/internal_link.gif b/images/4past/internal_link.gif new file mode 100644 index 0000000..70aa7b6 Binary files /dev/null and b/images/4past/internal_link.gif differ diff --git a/images/5/external_link.gif b/images/5/external_link.gif new file mode 100644 index 0000000..c78fc4d Binary files /dev/null and b/images/5/external_link.gif differ diff --git a/images/5/info.gif b/images/5/info.gif new file mode 100644 index 0000000..5427f77 Binary files /dev/null and b/images/5/info.gif differ diff --git a/images/5/internal_link.gif b/images/5/internal_link.gif new file mode 100644 index 0000000..d04f75f Binary files /dev/null and b/images/5/internal_link.gif differ diff --git a/images/5past/external_link.gif b/images/5past/external_link.gif new file mode 100644 index 0000000..cdb4b66 Binary files /dev/null and b/images/5past/external_link.gif differ diff --git a/images/5past/info.gif b/images/5past/info.gif new file mode 100644 index 0000000..f2fe5e1 Binary files /dev/null and b/images/5past/info.gif differ diff --git a/images/5past/internal_link.gif b/images/5past/internal_link.gif new file mode 100644 index 0000000..ca42ef0 Binary files /dev/null and b/images/5past/internal_link.gif differ diff --git a/images/6/external_link.png b/images/6/external_link.png new file mode 100644 index 0000000..e25c7ad Binary files /dev/null and b/images/6/external_link.png differ diff --git a/images/6/info.png b/images/6/info.png new file mode 100644 index 0000000..edcc490 Binary files /dev/null and b/images/6/info.png differ diff --git a/images/6/internal_link.png b/images/6/internal_link.png new file mode 100644 index 0000000..f7ce7fa Binary files /dev/null and b/images/6/internal_link.png differ diff --git a/images/6past/external_link.png b/images/6past/external_link.png new file mode 100644 index 0000000..c906176 Binary files /dev/null and b/images/6past/external_link.png differ diff --git a/images/6past/info.png b/images/6past/info.png new file mode 100644 index 0000000..687c5b3 Binary files /dev/null and b/images/6past/info.png differ diff --git a/images/6past/internal_link.png b/images/6past/internal_link.png new file mode 100644 index 0000000..fc4f230 Binary files /dev/null and b/images/6past/internal_link.png differ diff --git a/images/7/external_link.gif b/images/7/external_link.gif new file mode 100644 index 0000000..32f0729 Binary files /dev/null and b/images/7/external_link.gif differ diff --git a/images/7/info.png b/images/7/info.png new file mode 100644 index 0000000..edcc490 Binary files /dev/null and b/images/7/info.png differ diff --git a/images/7/internal_link.gif b/images/7/internal_link.gif new file mode 100644 index 0000000..7e45af7 Binary files /dev/null and b/images/7/internal_link.gif differ diff --git a/images/7past/external_link.gif b/images/7past/external_link.gif new file mode 100644 index 0000000..c68b69f Binary files /dev/null and b/images/7past/external_link.gif differ diff --git a/images/7past/info.png b/images/7past/info.png new file mode 100644 index 0000000..687c5b3 Binary files /dev/null and b/images/7past/info.png differ diff --git a/images/7past/internal_link.gif b/images/7past/internal_link.gif new file mode 100644 index 0000000..5f94a79 Binary files /dev/null and b/images/7past/internal_link.gif differ diff --git a/images/Juri_Gagarin_thumb.jpg b/images/Juri_Gagarin_thumb.jpg new file mode 100644 index 0000000..5fc5dd9 Binary files /dev/null and b/images/Juri_Gagarin_thumb.jpg differ diff --git a/images/add.png b/images/add.png new file mode 100644 index 0000000..b4a6f77 Binary files /dev/null and b/images/add.png differ diff --git a/images/copy.png b/images/copy.png new file mode 100644 index 0000000..7f64a44 Binary files /dev/null and b/images/copy.png differ diff --git a/images/delete.png b/images/delete.png new file mode 100644 index 0000000..08f2493 Binary files /dev/null and b/images/delete.png differ diff --git a/images/help_icon.png b/images/help_icon.png new file mode 100644 index 0000000..84284f2 Binary files /dev/null and b/images/help_icon.png differ diff --git a/images/minus_icon.gif b/images/minus_icon.gif new file mode 100644 index 0000000..362b592 Binary files /dev/null and b/images/minus_icon.gif differ diff --git a/images/ok.png b/images/ok.png new file mode 100644 index 0000000..d63c1a3 Binary files /dev/null and b/images/ok.png differ diff --git a/images/pdf.gif b/images/pdf.gif new file mode 100644 index 0000000..0a0f9c8 Binary files /dev/null and b/images/pdf.gif differ diff --git a/images/pdf_past.gif b/images/pdf_past.gif new file mode 100644 index 0000000..3fd8067 Binary files /dev/null and b/images/pdf_past.gif differ diff --git a/images/plus_icon.gif b/images/plus_icon.gif new file mode 100644 index 0000000..7a9c101 Binary files /dev/null and b/images/plus_icon.gif differ diff --git a/images/template_icon.gif b/images/template_icon.gif new file mode 100644 index 0000000..f0411f1 Binary files /dev/null and b/images/template_icon.gif differ diff --git a/images/ul-list-button.gif b/images/ul-list-button.gif new file mode 100644 index 0000000..9284abd Binary files /dev/null and b/images/ul-list-button.gif differ diff --git a/images/up.gif b/images/up.gif new file mode 100644 index 0000000..a111b81 Binary files /dev/null and b/images/up.gif differ diff --git a/images/word.gif b/images/word.gif new file mode 100644 index 0000000..c9c9a94 Binary files /dev/null and b/images/word.gif differ diff --git a/images/word_past.gif b/images/word_past.gif new file mode 100644 index 0000000..bcd3f27 Binary files /dev/null and b/images/word_past.gif differ diff --git a/includes/calendar.php b/includes/calendar.php new file mode 100644 index 0000000..bc7d182 --- /dev/null +++ b/includes/calendar.php @@ -0,0 +1,1081 @@ +%s'; + } else $head = '

    %s

    '; +} else $head = '

    %s

    '; + +//choosing the event data file +if ($file) { + $eventfile = $datapath . $file; +}else { + $eventfile = $datapath . "eventcalendar$lang.txt"; +} + +//should the week start on Mondays? +$startmon = $plugin_cf[$plugin]['calendar_week_starts_monday']; + +//determine with which month to start +//==================================== +if(!$month) $month = date("n",time()); +if(!$year) $year = date("Y",time()); + +// to prevent XSS injection htmlspecialchars is used by advice of cmb +if(isset($_GET['month'])) $month = htmlspecialchars($_GET['month']); +if(isset($_GET['year'])) $year = htmlspecialchars($_GET['year']); + + +// determine period on display to prevent useless calculation of events outside this period +$calendarstart = mktime(NULL,NULL,NULL,$month,1,$year); +$calendarend = strtotime("+$number months -1 day",$calendarstart); + +// if months of different years are to be shown holiday list has to be looped twice +$years = ($month + $number - 1 > 12)? $year.'/'.($year + 1) : $year; +$one_year_only = $years==$year? TRUE : FALSE; + + + +$event_day_array = array(); +$event_month_array = array(); +$event_year_array = array(); +$event_yearmonth_array = array(); +$event_array = array(); +$yearly_array = array(); +$yearly2_array = array(); +$event_type_array = array(); +$event_popup_array = array(); +$holiday_array = array(); +$big_array = array(); //for entries for the big calendar +$timesort_array = array(); //used to sort different events on the same day according to starting time + +$eventdates = ''; +$event_date_start = ''; +$event_date_end = ''; +$event_time = ''; +$event_end_time = ''; +$event_day = ''; +$event_end_day = ''; +$event_month = ''; +$event_end_month = ''; +$event_year = ''; +$event_end_year = ''; +$event_yearmonth = ''; +$event = ''; +$event_entry3 = ''; +$event_entry1 = ''; +$event_today = ''; +$event_title = ''; + + +if(is_file($eventfile)) +{ + $file_array = file($eventfile); + + // checking the version of the data file + //========================================= + if (isset($file_array[0]) && substr($file_array[0],0,19)=="Calendar eventfile ") { + $version = array_shift($file_array); + $version = substr($version,19,3); + } else { + $version = FALSE; + } + + // in case a second data file is added to the calendar + if($addfile && is_file($datapath.$addfile)) { + $addfile_array = file($datapath.$addfile); + //checking the version + if (isset($addfile_array[0]) && substr($addfile_array[0],0,19)=="Calendar eventfile ") { + $addversion = array_shift($addfile_array); + $addversion = substr($addversion,19,3); + } else { + $addversion = FALSE; + } + // if of the same version, merger can go ahead + if($version==$addversion) { + $file_array = array_merge($file_array,$addfile_array); + } else $o .= '

    '.$plugin_tx['calendar']['error_cant_combine_eventfiles_of_different_versions']."

    \n"; + } + + + // processing the data file line by line + //========================================== + foreach ( $file_array as $line) { + + //process only lines containing data + if(strpos($line,';')) + { + list($eventdates,$event,$event_entry3,,$event_time) = explode( ";", $line); + + $timesort = $event_time? str_replace(':','',$event_time) : 2400 ; + + //eliminate possible "*"-markings meaning "don't show event on marquee" + if (substr($eventdates,0,1)=="*") $eventdates = substr($eventdates,1); + + if(stristr($eventdates, ',')){ + list($event_date_start,$event_date_end,$event_end_time,$event_entry1) = explode(",",$eventdates,4); + + + // checking if there is an * before the endtime, meaning given times of multi day events are daily times + if (substr($event_end_time,0,1)=="*") { + $event_end_time = substr($event_end_time,1); // eliminating any * + $daily = TRUE; + } else $daily = FALSE; + + // checking if there is an * before the enddate, which means event is overbooked + if (substr($event_date_end,0,1)=="*") { + $event_date_end = substr($event_date_end,1); // eliminating any * + } + // checking if there is an * before the event_entry1, which means alternative marking in calendar + if (substr($event_entry1,0,1)=="*") { + $event_entry1 = substr($event_entry1,1); // eliminating any * + $alt = '3'; + } else $alt = ''; + + + if($event_date_start){ + list($event_day,$event_month,$event_year) = explode( dpSeperator(), $event_date_start); + $event_start = mktime(0,0,0,$event_month,(int)$event_day,$event_year); + } else { + $event_day = ''; + $event_month = ''; + $event_year = ''; + } + + if($event_date_end){ + list($event_end_day,$event_end_month,$event_end_year) = explode( dpSeperator(), $event_date_end); + $event_end = mktime(0,0,0,$event_end_month,(int)$event_end_day,$event_end_year); + $short_event_date_end = $event_end_day . dpSeperator() . $event_end_month . dpSeperator() . substr($event_end_year,2,2); + } else { + $event_end_day = ''; + $event_end_month = ''; + $event_end_year = ''; + $event_end = ''; + $short_event_date_end = ''; + } + + } else { + $event_date_start = $eventdates; + list($event_day,$event_month,$event_year) = explode( dpSeperator(), $event_date_start); + $event_start = mktime(0,0,0,$event_month,(int)$event_day,$event_year); + $event_date_end = ''; + $event_end_time = ''; + list($event_day,$event_month,$event_year) = explode( dpSeperator(), $event_date_start); + } + + //checking for yearly or weekly events (coded in such a way as to keep the original file structure) + $yearly = FALSE; + $yearly2 = FALSE; + $weekly = FALSE; + $exceptions = ''; + $additional = ''; + $exceptionsarray = array(); + $additionaldatesarray = array(); + + if (substr($event_entry3,0,3)=="###") { + $event_entry3 = substr($event_entry3,3); // eliminating any ### + $yearly = TRUE; + } + if (substr($event_entry3,0,3)=="#*#") { + $event_entry3 = substr($event_entry3,3); // eliminating any #*# + $yearly2 = TRUE; + } + //legacy code (checking for multievents), not used any more + if (substr($event_entry3,0,3)=="*#*") { + $event_entry3 = substr($event_entry3,3); // eliminating any #*# + } + if (substr($event_entry3,0,3)=="***") { + $event_entry3 = substr($event_entry3,3); // eliminating any *** + $weekly = TRUE; + + //only recent data will be considered to save memory + if($event_start < strtotime("-10 years")) $weekly = FALSE; + } + + if(strpos($event,'|')){ + $additional = substr($event,0,strpos($event,'|')); + $dates = explode(",",$additional); + foreach ($dates as $value) { + $trimmeddates = trim($value); + list($d,$m,$y) = explode(dpSeperator(),$trimmeddates); + $y = rtrim($y,'*'); + $timestamp = mktime(null,null,null,$m,$d,$y); + $additionaldatesarray[] = $timestamp; + } + // eliminating additional dates from $event + $event = substr($event,(strpos($event,'|')+1)); + } + if(strpos($event_entry3,'|')){ + $exceptions = substr($event_entry3,0,strpos($event_entry3,'|')); + $dates = explode(",",$exceptions); + foreach ($dates as $value) { + $trimmeddates = trim($value); + list($d,$m,$y) = explode(dpSeperator(),$trimmeddates); + $timestamp = mktime(null,null,null,$m,$d,$y); + $exceptionsarray[] = $timestamp; + } + // eliminating exception dates from entry3 + $event_entry3 = substr($event_entry3,(strpos($event_entry3,'|')+1)); + } + if($size) { +// $event = strip_tags($event,'

    '); +// $event_entry3 = strip_tags($event_entry3,'

    '); + } + + + } + //========================================================= + // case 1: long events = events lasting longer than 1 day + //========================================================= + if($event_date_end && !$weekly) + { + //first day of long events + //============================= + + //give the start and end date a nice form, e.g.: 5.5.-6.6.1930 + $date_txt = $event_day; + if ($event_month!=$event_end_month || $event_year!=$event_end_year) $date_txt .= dpSeperator().$event_month ; + if ($event_year!=$event_end_year) $date_txt .= dpSeperator().$event_year ; + if ($event_year==$event_end_year && dpSeperator()=='.') $date_txt.= "."; + $date_txt .= " ".$plugin_tx['calendar']['event_date_till_date'] . " "; + $date_txt .= $event_end_day.dpSeperator().$event_end_month.dpSeperator().$event_end_year; + + // small title attribute popup text + $title_txt = $event ; + if($event_entry3 && $calendar_cf['titleattributepopup_entry3']) $title_txt .= ' ' . $event_entry3; + $title_txt .= ' ' . $date_txt; + if($daily) { + $title_txt .= ' ' . $plugin_tx['calendar']['event_daily'] . ' ' . $event_time; + if($event_end_time) { + $title_txt .= $plugin_tx['calendar']['event_time_till_time'] . $event_end_time ; + } + } + if($exceptions) $title_txt .= ' ' . $plugin_tx['calendar']['event_except'] . ' ' . $exceptions; + + // big popup text + $popup_txt = ''; + if($daily) { + $popup_txt .= "" . $event_time; + if($event_end_time) { + $popup_txt .= $plugin_tx['calendar']['event_time_till_time'] . $event_end_time ; + } + $popup_txt .= ' (' . $plugin_tx['calendar']['event_daily'] . ")\n"; + } elseif ($event_time) { + $popup_txt = "\n" . $event_time . ' ' . $plugin_tx['calendar']['event_start'] . "\n"; + } + $popup_txt .= "\n$date_txt"; + if($exceptions) $popup_txt .= ' ' . $plugin_tx['calendar']['event_except'] . ' ' . $exceptions; + $popup_txt .= "\n"; + if($event_entry1) $popup_txt .= "\n$event_entry1\n"; + $popup_txt .= '' . $event . "\n"; + if($event_entry3) $popup_txt .= '' . $event_entry3 . "\n"; + + // text for big calendar + $big_txt = '
    '; + if ($calendar_cf['bigcalendar_write_time']){ + if($event_time) { + $big_txt .= '' . $event_time . ' '; + } else { + $big_txt .= '' . $calendar_cf['bigcalendar_symbol_if_no_time_given'] . ' '; + } + } + $big_txt .= $calendar_cf['bigcalendar_write_entry1']? '' . $event_entry1 . ' ' : ''; + $big_txt .= $calendar_cf['bigcalendar_write_event']? '' . $event . ' ' : ''; + $big_txt .= $calendar_cf['bigcalendar_write_entry3']? '' . $event_entry3 . '' : ''; + $big_txt .= '
    '; + + //enter first day of long events into array + array_push($event_year_array, $event_year); + array_push($event_month_array, $event_month); + array_push($event_day_array, $event_day); + array_push($event_array, $title_txt); + array_push($event_type_array, 'startevent'.$alt); + array_push($event_popup_array, $popup_txt); + array_push($yearly_array, $yearly); + array_push($yearly2_array, $yearly2); + array_push($holiday_array, ''); + array_push($big_array, $big_txt); + array_push($timesort_array, $timesort); + + // last day of long events + //============================= + // big popup text for last day + if (!$daily) { + $popup_txt = "\n" . $date_txt; + if($exceptions) $popup_txt .= ' ' . $plugin_tx['calendar']['event_except'] . ' ' . $exceptions; + $popup_txt .= "\n"; + if($event_entry1) $popup_txt .= "\n$event_entry1\n"; + $popup_txt .= "\n" . $event . "\n"; + if($event_entry3) $popup_txt .= "\n$event_entry3\n"; + if($event_end_time) $popup_txt .= "\n" . $event_end_time . ' ' . $plugin_tx['calendar']['event_end'] . "\n"; + + // text for big calendar + $big_txt = '
    '; + if ($calendar_cf['bigcalendar_write_time']){ + $big_txt .= '' . $calendar_cf['bigcalendar_symbol_if_no_time_given'] . ' '; + } + $big_txt .= $calendar_cf['bigcalendar_write_entry1']? '' . $event_entry1 . ' ' : ''; + $big_txt .= $calendar_cf['bigcalendar_write_event']? '' . $event . ' ' : ''; + $big_txt .= $calendar_cf['bigcalendar_write_entry3']? '' . $event_entry3 . '' : ''; + $big_txt .= '
    '; + } + + //enter last day of long events into array + array_push($event_year_array, date('Y',$event_end)); + array_push($event_month_array, date('m',$event_end)); + array_push($event_day_array, date('d',$event_end)); + array_push($event_array, $title_txt); + array_push($event_type_array, 'endevent'.$alt); + array_push($event_popup_array, $popup_txt); + array_push($yearly_array, $yearly); + array_push($yearly2_array, $yearly2); + array_push($holiday_array, ''); + array_push($big_array, $big_txt); + if($daily){ + array_push($timesort_array, $timesort); + } else { + array_push($timesort_array, 2400); + } + + // middle days of long events + //================================ + + // big-popup text for mid event days + if (!$daily) { + $popup_txt = "\n$date_txt"; + if($exceptions) $popup_txt .= ' ' . $plugin_tx['calendar']['event_except'] . ' ' . $exceptions; + $popup_txt .= "\n"; + if($event_entry1) $popup_txt .= "\n$event_entry1\n"; + $popup_txt .= '' . $event . "\n"; + if($event_entry3) $popup_txt .= '' . $event_entry3 . "\n"; + } + + // enter mid event day into array, limit number of mid event days to 90 days + // php memory limit may pose problems + if($event_end - $event_start < 7776000) { + $i = 1; + $date = strtotime("+".$i." day",$event_start); + while($date < $event_end) { + $exception = FALSE; + if($exceptions){ + foreach ($exceptionsarray as $value) { + if($value==$date) {$exception = TRUE;break;} + } + } + if(!$exception){ + array_push($event_year_array, date('Y',$date)); + array_push($event_month_array, date('m',$date)); + array_push($event_day_array, date('d',$date)); + array_push($event_array, $title_txt ); + array_push($event_type_array, 'midevent'.$alt); + array_push($event_popup_array, $popup_txt); + array_push($yearly_array, $yearly); + array_push($yearly2_array, $yearly2); + array_push($holiday_array, ''); + array_push($big_array, $big_txt); + if($daily){ + array_push($timesort_array, $timesort); + } else { + array_push($timesort_array, 2400); + } + } + $i++; + $date = strtotime("+".$i." day",$event_start); + } + } + $date_txt = ''; + + + //========================= + // case 2: weekly events + //========================= + } elseif($weekly) { + + //in case no end is given or end is too far in future, 10 years planning maximum for weekly events + $twoyearsahead = strtotime("+10 years", $event_start); + if(!$event_end) $event_end = $twoyearsahead; + if($event_end - $event_start > 63072000) $event_end = $twoyearsahead; + + // small title attribute popup text + $title_txt = $event; + if($event_entry3 && $calendar_cf['titleattributepopup_entry3']) {$title_txt .= ': ' . $event_entry3;} + if($event_time) {$title_txt .= ' ' . $event_time;} + if($event_end_time) {$title_txt .= $plugin_tx['calendar']['event_time_till_time'].$event_end_time;} + $title_txt .= ' (' . $plugin_tx['calendar']['event_weekly']; + if($event_date_end) {$title_txt .= ' ' . $plugin_tx['calendar']['event_date_till_date'] . ' ' . $short_event_date_end;} + if($exceptions) $title_txt .= ' ' . $plugin_tx['calendar']['event_except'] . ' ' . $exceptions; + $title_txt .= ')'; + + // text for big calendar + $big_txt = '
    '; + if ($calendar_cf['bigcalendar_write_time']){ + if($event_time) { + $big_txt .= '' . $event_time . ' '; + } else { + $big_txt .= '' . $calendar_cf['bigcalendar_symbol_if_no_time_given'] . ' '; + } + } + $big_txt .= $calendar_cf['bigcalendar_write_entry1']? '' . $event_entry1 . ' ' : ''; + $big_txt .= $calendar_cf['bigcalendar_write_event']? '' . $event . ' ' : ''; + $big_txt .= $calendar_cf['bigcalendar_write_entry3']? '' . $event_entry3 . '' : ''; + $big_txt .= '
    '; + + // big popup text + if($event_time) $popup_txt = "\n" . $event_time . $plugin_tx['calendar']['event_time_till_time'] . $event_end_time . "\n"; + if($event_entry1) $popup_txt .= '' . $event_entry1 . "\n"; + $popup_txt .= '' . $event . "\n"; + if($event_entry3) $popup_txt .= '' . $event_entry3 . "\n"; + $popup_txt .= '' .' (' . $plugin_tx['calendar']['event_weekly']; + if($event_date_end) {$popup_txt .= ' ' . $plugin_tx['calendar']['event_date_till_date'] . ' ' . $short_event_date_end;} + if($exceptions) $popup_txt .= ' ' . $plugin_tx['calendar']['event_except'] . ' ' . $exceptions; + if($additional) $popup_txt .= ' ' . $plugin_tx['calendar']['event_additional'] . ' ' . $additional; + $popup_txt .= ')' . "\n"; + + //determining the dates of the weekly event + $weekly_event = $event_start; + while($weekly_event < $event_end) { + $exception = FALSE; + if($exceptions){ + foreach ($exceptionsarray as $value) { + if($value==$weekly_event) {$exception = TRUE;break;} + } + } + if( !$exception + && $weekly_event >= $calendarstart + && $weekly_event <= $calendarend) { + array_push($event_year_array, date('Y',$weekly_event)); + array_push($event_month_array, date('m',$weekly_event)); + array_push($event_day_array, date('d',$weekly_event)); + array_push($event_array, $title_txt ); + array_push($event_type_array, 'shortevent'.$alt); + array_push($event_popup_array, $popup_txt); + array_push($yearly_array, ''); + array_push($yearly2_array, ''); + array_push($holiday_array, ''); + array_push($big_array, $big_txt); + array_push($timesort_array, $timesort); + } + $weekly_event = strtotime("+1 week",$weekly_event); + } + if($additional){ + foreach ($additionaldatesarray as $value) { + array_push($event_year_array, date('Y',$value)); + array_push($event_month_array, date('m',$value)); + array_push($event_day_array, date('d',$value)); + array_push($event_array, $title_txt); + array_push($event_type_array, 'shortevent'.$alt); + array_push($event_popup_array, $popup_txt); + array_push($yearly_array, ''); + array_push($yearly2_array, ''); + array_push($holiday_array, ''); + array_push($big_array, $big_txt); + array_push($timesort_array, $timesort); + } + } + + + + //===================================================================================== + // case 3 single day events (can have same event on additional days), yearly events + //===================================================================================== + } else { + + //time styling + $time_txt = ''; + if($event_time) $time_txt .= $event_time; + if($event_end_time) $time_txt .= $plugin_tx['calendar']['event_time_till_time'] . $event_end_time ; + + // small title attribute popup text + $title_txt = ''; + if($time_txt) $title_txt = $time_txt . ' '; + $title_txt .= $event; + if($event_entry3 && $calendar_cf['titleattributepopup_entry3']) $title_txt .= ' ' . $event_entry3; + + // big calendar text + if ($yearly) { + $big_txt = '
    '; + if ($calendar_cf['bigcalendar_write_time']){ + if($event_time) { + $big_txt .= '' . $event_time . ' '; + } else { + $big_txt .= '' . $calendar_cf['bigcalendar_symbol_if_no_time_given'] . ' '; + } + } + $big_txt .= $calendar_cf['bigcalendar_write_entry1']? '' . $event_entry1 . ' ' : ''; + $big_txt .= $event . ' '; + $big_txt .= $calendar_cf['bigcalendar_anniversary_write_entry3']? $event_entry3.' ' : ''; + } else { + $big_txt = '
    '; + if ($calendar_cf['bigcalendar_write_time']){ + if($event_time) { + $big_txt .= '' . $event_time . ' '; + } else { + $big_txt .= '' . $calendar_cf['bigcalendar_symbol_if_no_time_given'] . ' '; + } + } + $big_txt .= $calendar_cf['bigcalendar_write_entry1']? '' . $event_entry1 . ' ' : ''; + $big_txt .= $calendar_cf['bigcalendar_write_event']? '' . $event . ' ' : ''; + $big_txt .= $calendar_cf['bigcalendar_write_entry3']? '' . $event_entry3 . '' : ''; + $big_txt .= '
    '; + } + + + // popup text + $popup_txt = ''; + $y = $yearly? ' anniversary' : ''; + if($time_txt) $popup_txt .= "\n" . $time_txt . "\n"; + if($event_entry1) $popup_txt .= "" . $event_entry1 . "\n"; + $popup_txt .= "" . $event . "\n"; + if($event_entry3) $popup_txt .= "" . $event_entry3 . "\n"; + + + array_push($event_year_array, $event_year); + array_push($event_month_array, $event_month); + array_push($event_day_array, $event_day); + array_push($event_array, $title_txt); + if($yearly) { + array_push($event_type_array, 'birthday'); + } else { + array_push($event_type_array, 'shortevent'.$alt); + } + array_push($event_popup_array, $popup_txt); + array_push($yearly_array, $yearly); + array_push($yearly2_array, $yearly2); + array_push($holiday_array, ''); + array_push($big_array, $big_txt); + $birthdaytime = ($yearly && !$event_time)? 0 : $timesort; //if no time is given, birthday will be announced first + array_push($timesort_array, $birthdaytime); + + if($additional){ + foreach ($additionaldatesarray as $value) { + array_push($event_year_array, date('Y',$value)); + array_push($event_month_array, date('m',$value)); + array_push($event_day_array, date('d',$value)); + array_push($event_array, $title_txt); + array_push($event_type_array, 'shortevent'.$alt); + array_push($event_popup_array, $popup_txt); + array_push($yearly_array, ''); + array_push($yearly2_array, ''); + array_push($holiday_array, ''); + array_push($big_array, $big_txt); + array_push($timesort_array, $timesort); + } + } + + } + } +} + + + +//========================== +// processing holyday list +//========================== +// first check if function exists (thanx to cmb!) +if (!function_exists('easter_date')) { + function easter_date($year) { + $g = $year % 19 + 1; + $s = (11 * $g - 6) % 30; + $s = $s == 0 ? $s - 1 : ($s == 1 && $g >= 12 ? $s - 2 : $s); + $fm = mktime(0, 0, 0, 4, 19 - $s, $year); + $w = date('w', $fm); + $e = mktime(0, 0, 0, 4, 19 - $s + 7 - $w, $year); + return $e; + } +} +// now start processiong holyday list +// list has to be looped twice in case display extends over Dec-Jan +for($i=0 ;$i<2 ;$i++){ + $displayyear = $year + $i; + $easter = date("m/d/Y",easter_date($displayyear)); + + $holidayarray = explode(";",$plugin_tx['calendar']['holydays']); + foreach ($holidayarray as $value) { + list($holiday_date,$holiday_name) = explode(",",$value); + // holidays depending on the easter date + if(strpos($holiday_date,'easter')!==FALSE){ + $easter_add = str_replace('easter','',$holiday_date); + $holiday_day = date("d",strtotime("$easter $easter_add")); + $holiday_month = date("m",strtotime("$easter $easter_add")); + // holidays on a certain weekday depending on another fixed date + } elseif (strpos($holiday_date,'day')!==FALSE) { + $complex_array = explode(" ",$holiday_date); + $complex_starting_date = array_pop($complex_array); + list($complex_day,$complex_month) = explode(dpSeperator(),$complex_starting_date); + $complex_add = implode(' ',$complex_array); + $holiday_day = date("d",strtotime("$complex_add", mktime(0,0,0,$complex_month,$complex_day,$displayyear))); + $holiday_month = date("m",strtotime("$complex_add", mktime(0,0,0,$complex_month,$complex_day,$displayyear))); + // fixed holidays + } else { + list($holiday_day,$holiday_month) = explode(dpSeperator(),$holiday_date); + } + array_push($event_year_array, $displayyear); + array_push($event_month_array, $holiday_month); + array_push($event_day_array, $holiday_day); + array_push($event_array, ''); + array_push($event_type_array, 'holiday'); + array_push($event_popup_array, ''); + array_push($yearly_array, ''); + array_push($yearly2_array, ''); + array_push($holiday_array, $holiday_name); + } + if($one_year_only) break; +} +// end of entering holidays +//·························· + + +$event_popup_with_time = ''; +$event_popup = ''; +$showtoday = ''; +$shortevent = ''; +$startevent = ''; +$midevent = ''; +$endevent = ''; +$shortevent3 = ''; +$startevent3 = ''; +$midevent3 = ''; +$endevent3 = ''; +$birthday = ''; +$borderstartevent = ''; +$bordermidevent = ''; +$borderendevent = ''; +$linkstart = ''; +$linkend = ''; +$holiday = ''; +$dayname = ''; +$day_name = ''; +$popup_divider = ''; +$bigcal_txt = ''; +$zcalculation = ''; +$event_titles = array(); +$bigcal_txts = array(); +$event_popups = array(); +$timesorting = array(); + + +$o .= "\n\n\n\n"; + + +//writing a headline for multi months and year calendars in columns +if($columns) { + if($yeardisplay){ + $year_prev = $year - 1; + $year_next = $year + 1; + if($navigation) { + // provide correct href in case calendar is called via admin + $hrefpart = $admxx ? "&calendar&admxx=$admxx" : "$su"; + + $calhead = $year_prev + 3 > date("Y") + ? "\n‹‹  " + . "\n" + : "\n".'    '; + $calhead .= "\n $year \n"; + $calhead .= $year_next - 3 < date("Y") + ? "  ››" + . "\n" + : "\n".'    '; + } else { + $calhead = $year; + } + + } elseif($navigation) { + + if($month <= 1){$month_prev = 12; $year_prev = $year - 1;} + else {$month_prev = $month - 1; $year_prev = $year;} + if($month >= 12){$month_next=1; $year_next = $year + 1;} + else {$month_next = $month + 1; $year_next = $year;} + + $calhead = $year_prev + 2 > date("Y") + ? "\n‹‹  " + . "\n" + : "\n".'    '; + $calhead .= "\n $years \n"; + $calhead .= $year_next - 2 < date("Y") + ? "  ››" + . "\n" + : "\n".'    '; + + } else { + $calhead = $years; + } + + $o .= '
    ' + . "\n
    \n" + . sprintf($head, $calhead) + . "\n
    \n\n" + . "\n\n"; +} + + +$extramonths=0; +while ($extramonths < $number) { + + $month = $extramonths? ($month + 1) : $month; + if($month > 12) {$month-=12;$year++;} + + $monthnames = explode(",", $plugin_tx['calendar']['names_of_months']); + $textmonth = $monthnames[$month - 1]; + + $today = date("j", time()); + // highlight today but only for current month & year + $today = ($month == date("n",time()) && $year == date("Y",time())) ? $today : 32; + + // find number of days in a given month + $days = date("t",mktime(1,1,1,$month,1,$year)); + $dayone = date("w",mktime(1,1,1,$month,1,$year)); + $daylast = date("w",mktime(1,1,1,$month,$days,$year)); + $dayarray = explode(",", $plugin_tx['calendar']['names_of_days']); + + //start new row depending on number of columns wanted + if($columns && ($extramonths % $columns == 0) && $extramonths > 0) { + $o .= "\n\n"; + $zcalculation++; + } + if(!$columns && $extramonths>0) $zcalculation++; + + //============================ + // building the calendar + //============================ + + //z-index calculation + if($plugin_cf['calendar']['z-index'] > 0) { + $z = $plugin_cf['calendar']['z-index'] - $zcalculation; + $zindex = " style='position:relative;z-index:$z;'"; + } else $zindex = ''; + + if($columns) $o .= '\n"; + + $extramonths++; +} + +if($columns) $o .= "
    '."\n"; + $o .= "\n"; + + // 1st row: headline with month and year (year only if needed) + //============================================================ + $o .= "\n\n\n"; + + + // 2nd row: weekday names + //=================== + if(!$extramonths && !$columns) { + $o .="\n"; + + for($i=0; $i <= 6; $i++) { + if($startmon){$j = $i+1;} else {$j = $i;} + if($j==7)$j=0; + if($j==date('w') && $month==date('n') && $year==date('Y')) { + $o .= "\n"; + } else { + $o .= "\n"; + } + } + $o .= "\n"; + } + + + // starting the numbered day fields + //================================== + + if($startmon){$span1 = $dayone-1;}else{$span1 = $dayone;} + if($span1 == -1)$span1 = 6; + + if($startmon){$span2 = 7 - $daylast;}else{$span2 = 6 - $daylast;} + if($span2 == 7)$span2 = 0; + + //$o .= print_r($event_year_array); + //$o .= print_r($event_array); + + + + // going through all the days of the month + for($i = 1; $i <= $days; $i++): + $dayofweek = date("w",mktime(1,1,1,$month,$i,$year)); + + if($startmon)$dayofweek = $dayofweek - 1; + if($dayofweek == -1)$dayofweek = 6; + + + // going through all the events and selecting the ones that occur on the day + foreach($event_year_array as $keys=>$temp) + { + + if( ($event_year_array[$keys] == $year + && $event_month_array[$keys] == $month + && $event_day_array[$keys] == $i + && !$yearly_array[$keys]) + || + ($yearly2_array[$keys] + and $event_month_array[$keys] == $month + and $event_day_array[$keys] == $i) + ) + { + //producing variables ($shortevent, $startevent, $midevent, $endevent. $holiday) that can be filled with a date + $$event_type_array[$keys]=$i; + // extracting the holiday name + $day_name = $holiday_array[$keys]; + + //writing all occuring events of the day into arrays + If($event_array[$keys]) { + $event_titles[] = strip_tags($event_array[$keys]); + $bigcal_txts[] = $big_array[$keys]; + $event_popups[] = $event_popup_array[$keys]; + $timesorting[] = $timesort_array[$keys]; + } + } + + //Birthday case + if($yearly_array[$keys] + and $event_month_array[$keys] == $month + and $event_day_array[$keys] == $i) + { + $birthday=$i; + $age = $year - $event_year_array[$keys]; + if ($age >= 5){ + $age .= " " . $plugin_tx['calendar']['age_5_and_more_years_old']; + } + elseif ($age >= 2 and $age < 5){ + $age .= " " . $plugin_tx['calendar']['age_2-4_years_old']; + } + else { + $age .= " " . $plugin_tx['calendar']['age_1_year_old']; + } + $event_titles[] = strip_tags($event_array[$keys]); + $event_popups[] = $event_popup_array[$keys] + . '' . $age . "\n"; + $age = $calendar_cf['bigcalendar_anniversary_write_age']? $age : ''; + $bigcal_txts[] = $big_array[$keys] . $age. "\n";; + $timesorting[] = $timesort_array[$keys]; + } + } + + //sorting the events of the day according to time + array_multisort($timesorting,$event_titles,$bigcal_txts,$event_popups); + $event_title = implode('  |  ',$event_titles); + $bigcal_separator = $calendar_cf['bigcalendar_line_between_entries']? tag('hr') : ''; + $bigcal_txt = implode($bigcal_separator,$bigcal_txts); + $event_popup = implode('',$event_popups); + + + $tableday = $i; + if($i == 1 || $dayofweek == 0) { + $o .= "\n"; + if($span1 > 0 && $i == 1) $o .= "\n"; + } + + //Coloring the weekend days + $weekend_day_1 = $plugin_cf['calendar']['calendar_weekend_day_1'] -1; + $weekend_day_2 = $plugin_cf['calendar']['calendar_weekend_day_2'] -1; + if ($dayofweek == $weekend_day_1 || $dayofweek == $weekend_day_2) { + $daytype = "calendar_weekend"; + } else { + $daytype = "calendar_workday"; + } + + $x = $calendar_cf['dont_underline_longevents']? '2':''; + + $showtoday = $i == $today ? " ${size}calendar_today" : ''; + $shortevent = $i == $shortevent ? " calendar_shortevent" : ''; + $startevent = $i == $startevent ? " calendar_startevent$x" : ''; + $midevent = $i == $midevent ? " calendar_midevent$x" : ''; + $endevent = $i == $endevent ? " calendar_endevent$x" : ''; + $shortevent3 = $i == $shortevent3 ? " calendar_shortevent3" : ''; + $startevent3 = $i == $startevent3 ? " calendar_startevent3" : ''; + $midevent3 = $i == $midevent3 ? " calendar_midevent3" : ''; + $endevent3 = $i == $endevent3 ? " calendar_endevent3" : ''; + $birthday = $i == $birthday ? " ${size}calendar_birthday" : ''; + $holiday = $i == $holiday ? " calendar_holiday" : ''; + + + //setting the popup class, can be different for every weekday + if($size) { + $popup_class = $plugin_cf['calendar']['popup_direction_big_calendar']? $plugin_cf['calendar']['popup_direction_big_calendar'] : 'left'; + } else { + $popup_class = $plugin_cf['calendar']['popup_direction_small_calendar']? $plugin_cf['calendar']['popup_direction_small_calendar'] : 'left'; + } + if($popup_class == 'down') $popup_class = $popup_class.$dayofweek; + $popup_class = " class='$popup_class'"; + + $eventday = ( $startevent + || $midevent + || $endevent + || $shortevent + || $startevent3 + || $midevent3 + || $endevent3 + || $shortevent3 + || $birthday + || $holiday)? ' eventday':''; + + if($eventday){ + if(!$size && !$calendar_cf['calendar-popup_big']) { + //default setting: title-style info in calendar + $divider = ($holiday && ($event_title || $birthday))? '  |  ' : ''; + $linkstart = $eventpage ? "" + : + "\n"; + $divider = ''; + $linkend = ""; + } else { + //popups in calendar + if($holiday) $dayname = "\n$day_name"; + $linkstart = $eventpage ? "\n" + : + "\n".''; + $linkend = "$dayname$event_popup"; + } + } + //If no event occurs, the day number of bigcalendar can be treated by css via + if($size && !$linkstart) {$linkstart = ''; $linkend ='';} + + if($size) { + $bigcalendar = '
    ' . $day_name . '
    '; + $bigcalendar .= $bigcal_txt; + } else $bigcalendar = ''; + + $headnotice = ($i == $today && $size)? ' '. $plugin_tx['calendar']['notice_today'] : ''; + + + $o .= '
    \n"; + + if($i == $days && $span2 > 0) $o .= "\n"; + if($dayofweek == 6 || $i == $days) $o .= "\n"; + + //resetting all variables + $calendar_eventday = ''; + $calendar_birthday = ''; + $linkstart = ''; + $linkend = ''; + $event_title = ''; + $event_popup_with_time = ''; + $event_popup = ''; + $border = ''; + $borderstartevent = ''; + $bordermidevent = ''; + $borderendevent = ''; + $popup_class = ''; + $birthday = ''; + $age = ''; + $holiday = ''; + $dayname = ''; + $day_name = ''; + $bigcal_txt = ''; + $shortevent3 = ''; + $startevent3 = ''; + $midevent3 = ''; + $endevent3 = ''; + $event_titles = array(); + $bigcal_txts = array(); + $event_popups = array(); + $timesorting = array(); + + endfor; + + $o .= "
    \n"; + $display_year = (!$one_year_only || $year != date("Y"))? true : false; + if($columns) $display_year = !$one_year_only; + $monthyear = $display_year? $textmonth.' '.$year : $textmonth; + + if($navigation && !$extramonths && !$columns) { + if($month <= 1){$month_prev = 12; $year_prev = $year - 1;} + else {$month_prev = $month - 1; $year_prev = $year;} + if($month >= 12){$month_next=1; $year_next = $year + 1;} + else {$month_next = $month + 1; $year_next = $year;} + // provide correct href in case calendar is called via admin + $hrefpart = $admxx ? "&calendar&admxx=$admxx" : "$su"; + + if($year_prev + 2 > date("Y")) { + $calhead = "\n" + . "‹‹  " : "'><<"; + $calhead .= ''; + } else { + $calhead = "\n".'    '; + } + + $calhead .= " $monthyear "; + + if($year_prev - 2 < date("Y")) { + $calhead .= "  ››" : "'>>>"; + $calhead .= ''; + } else { + $calhead .= "\n".'    '; + } + + } else { + // adding an empty line when months are displayed one under another without columns + $calhead = (!$columns && $extramonths)? tag('br').$monthyear:$monthyear; + } + + if($size && $j=$calendar_cf['bigcalendar_month_year_headline_style']) { + $o .= "
    <$j class='bigcalendar_monthyear_color'>$calhead
    \n"; + } elseif ($size) { + $o .= "
    $calhead
    \n"; + } else $o .= "
    $calhead
    \n"; + + $o .="
    $dayarray[$j]$dayarray[$j]
     ' + . $linkstart + . $tableday + . $headnotice + . $linkend + . $bigcalendar + . " 
    \n"; + if($columns) $o .= "
    \n"; +$o .= $size? '

    ' . $plugin_tx['calendar']['hint_mouseover_in_calendar'] . "

    \n" : ''; + +$o .= "\n\n\n\n"; diff --git a/includes/calendarconfig.php b/includes/calendarconfig.php new file mode 100644 index 0000000..9c68d26 --- /dev/null +++ b/includes/calendarconfig.php @@ -0,0 +1,872 @@ + $calendartemplate, + 'bigcalendar_write_time' => $writetime, + 'bigcalendar_write_event' => $writeevent, + 'bigcalendar_write_entry3' => $writeentry3, + 'bigcalendar_write_entry1' => $writeentry1, + 'bigcalendar_anniversary_write_entry3' => $birthdayentry3, + 'bigcalendar_anniversary_write_age' => $birthdayage, + 'bigcalendar_line_between_entries' => $linebetween, + 'bigcalendar_symbol_if_no_time_given' => $notimesymbol, + 'calendar-popup_big' => $smallcalpopup, + 'titleattributepopup_entry3' => $entry3popup, + 'bigcalendar_month_year_headline_style' => $headline, + 'dont_underline_longevents' => $underlongevent, + ), + $configfile,1); + //save the values + $config_ok = file_put_contents($pth['folder']['plugins'] . $plugin . '/config/config2.php',$configfile); + $error .= $config_ok? '': $plugin_tx['calendar']['error_could_not_change_config_file'].', '; + //and get the changed config values again + include ($pth['folder']['plugins'] . $plugin .'/config/config2.php'); + + + // language file + //================ + $languagefile = file_get_contents($pth['folder']['plugins'] . $plugin . "/languages/$sl.php"); + $languagefile = changevalue( + array( + 'hint_mouseover_in_calendar' => $hintmouseover, + ), + $languagefile,2); + $lang_ok = file_put_contents($pth['folder']['plugins'] . $plugin . "/languages/$sl.php",$languagefile); + $error .= $lang_ok? '' : $plugin_tx['calendar']['error_could_not_change_language_file'].', '; + + include ($pth['folder']['plugins'] . $plugin ."/languages/$sl.php"); + + // css-values + //============= + $nowrapdata = $nowrap? 'nowrap' : 'normal'; + if(get_magic_quotes_gpc()) { + $headlineconfig = "\n" . trim(stripslashes($headlineconfig)) . "\n"; + $daynameconfig = "\n" . trim(stripslashes($daynameconfig)) . "\n"; + $todaynameconfig = "\n" . trim(stripslashes($todaynameconfig)) . "\n"; + } + $csseventdaybold = $eventdaybold? 'bold' :''; + $csstodaybold = $todaybold? 'bold' :''; + $bordercollapse = $dayspacing=='0px'? 'collapse':'separate'; + $dayfieldborder = $dfbwidth .' '.$dfbstyle.' '.$dfbcolor; + + $cssfile = changevalue(array( + 'a1' => $normaldaycolor, + 'a2' => $weekendcolor, + 'a3' => $holidaycolor, + 'a4' => $eventdaycolor, + 'a5,!im' => $eventdaybgcolor, + 'a6' => $underlongcolor, + 'a7' => $underlongwidth, + 'a8' => $mark2color, + 'a9' => $mark2width, + 'a10' => $csseventdaybold, + + 'c1' => $headlinecolor, + 'c2' => $backgroundcolor, + 'c3,url' => $backgroundimage, + 'c4' => $bordercolor, + 'c5' => $borderwidth, + 'c6' => $dayspacing, + 'c7' => $nowrapdata, + 'c10' => $daynamespadtop, + 'c11' => $daynamespadbot, + 'c13' => $dayheight, + 'c14' => $topmargin, + 'c18' => $daynames, + 'c19,!im' => $birthdayfield, + 'c20' => $roundcorners, + 'c21' => $shadow, + 'c22' => $opacitynoevent, + 'c31,sU' => $headlineconfig, + 'c32,sU' => $daynameconfig, + 'c33,sU' => $todaynameconfig, + 'c34' => $bigcalfont, + 'c35' => $bigcalfontsize, + 'c36' => $dayfieldborder, + 'c37' => $bordercollapse, + 'c38' => $dayfieldpadding, + + 'sc1' => $smallcallineheight, + 'sc2' => $smallcalfont, + 'sc3' => $smallcalfontsize, + 'sc4,url!' => $birthdayimage, + 'sc5' => $todaycolor, + 'sc6,!im' => $todaybgcolor, + 'sc7' => $csstodaybold, + + 'p1' => $popupbordercolor, + 'p2' => $popupborderwidth, + 'p3' => $popupbackground, + 'p4' => $popupfont, + 'p5' => $popupfontsize, + ),$cssfile); + + if(strlen($cssfile) > ($cssfilelength - 500)) //to prevent accidental erasure of css-file + { + $css_ok = file_put_contents($pth['folder']['plugins'] . '/calendar/css/stylesheet.css',$cssfile); + + //trying to make the browser read the file without caching + $x = rand (1,100); + $hjs .= ''."\n" + . ''."\n"; + } else $css_ok = FALSE; + + $error .= $css_ok===FALSE? $plugin_tx['calendar']['error_could_not_change_css_file'].', ' : ''; + $error = trim($error, ', '); + if (!$css_ok || !$lang_ok || !$config_ok) { + $notice .= '

    ' . $plugin_tx['calendar']['error_occured'] . ': ' . $error . "

    \n"; + } + +} + +$nowrapchecked = $nowrap ? 'checked="checked"' : ''; +$writetimechecked = $calendar_cf['bigcalendar_write_time'] ? 'checked="checked"' : ''; +$writeeventchecked = $calendar_cf['bigcalendar_write_event'] ? 'checked="checked"' : ''; +$writeentry3checked = $calendar_cf['bigcalendar_write_entry3'] ? 'checked="checked"' : ''; +$writeentry1checked = $calendar_cf['bigcalendar_write_entry1'] ? 'checked="checked"' : ''; +$birthdayentry3checked = $calendar_cf['bigcalendar_anniversary_write_entry3'] ? 'checked="checked"' : ''; +$birthdayagechecked = $calendar_cf['bigcalendar_anniversary_write_age']? 'checked="checked"' : ''; +$linebetweenchecked = $calendar_cf['bigcalendar_line_between_entries']? 'checked="checked"' : ''; +$smallcalpopupchecked = $calendar_cf['calendar-popup_big']? 'checked="checked"' : ''; +$entry3popupchecked = $calendar_cf['titleattributepopup_entry3']? 'checked="checked"' : ''; +$underlongeventchecked = $calendar_cf['dont_underline_longevents']? 'checked="checked"' : ''; +$eventdayboldchecked = $eventdaybold? 'checked="checked"' : ''; +$todayboldchecked = $todaybold? 'checked="checked"' : ''; + + +// set choosen template for bigcalendar view +if ($calendar_cf['test_calendar_template']) { + $cf['site']['template'] = $calendar_cf['test_calendar_template']; + $pth['folder']['template'] = $pth['folder']['templates'].$cf['site']['template'].'/'; + $pth['file']['template'] = $pth['folder']['template'].'template.htm'; + $pth['file']['stylesheet'] = $pth['folder']['template'].'stylesheet.css'; + $pth['folder']['menubuttons'] = $pth['folder']['template'].'menu/'; + $pth['folder']['templateimages'] = $pth['folder']['template'].'images/'; +} else { + include ($pth['file']['config']); +} + +//============================= +// start producing html data +//============================= + +// js file for color picker +$hjs .= ''; + +//calling toggle function +$hjs .= ''."\n"; + +$o .= $notice; + +$o .= "
    \n"; +$o .= tag('input type="hidden" value="calendarconfig" name="calendarconfig"') . "\n"; + + + +//==================================== +//************************************ +// +// big calendar settings +// +//************************************ +//==================================== + +$hide = $calendar_cf['show_bigcalendar_config']? '':' style="display:none;"'; +$o .= '
    '; +$o .= '
    '; + +$o .= '

    ' + . $plugin_tx['calendar']['config_bigcalendar'] + . '

    '."\n"; + + +//select a template +$o .= '
    ' + . templateSelect($calendar_cf['test_calendar_template'],'calendartemplate') + . $plugin_tx['calendar']['config_template'] + . "
    \n"; + + +//background +//================== +//find the path (code from php.net/manual/en/function.realpath.php User Contributions) +$relativePath = $pth['folder']['plugins'].'calendar/css/'.$plugin_cf['calendar']['filepath_calendar_background_images']; +$pattern = '/\w+\/\.\.\//'; +while(preg_match($pattern,$relativePath)){ + $relativePath = preg_replace($pattern, '', $relativePath); +} + +$handle=opendir($relativePath); +$images = array(); +while (false !== ($file = readdir($handle))) { + if($file != "." && $file != ".." && substr($file,-3)!='gif') { + $images[] = $file; + } + } +closedir($handle); +natcasesort($images); +$images_select = ''; +foreach($images as $file){ + $selected = ''; + if($backgroundimage == $file) {$selected = ' selected';} + $images_select .= "\n"; +} +$o .= '
    ' + . "' + . tag('input type="text" class="color {pickerPosition:\'left\'}" value="' + . $backgroundcolor . '" name="backgroundcolor"') + . $plugin_tx['calendar']['config_background_or_color'] + . "
    \n"; + + + +//border +$j=0; +$values_select = ''; +for ($i = 0;$i <=15 ;$i++ ) { + $selected = ''; + if($i.'px' == $borderwidth) {$selected = ' selected'; $j = 1;} + $values_select .= "\n".''; +} +// in case the css file contains a value outside the given range, this value will be shown +$preselect = $j? '' : ''; + +$o .= '
    ' + . tag('input type="text" class="color {pickerPosition:\'left\'}" value="' + . $bordercolor . '" name="bordercolor"') + . '' + . $plugin_tx['calendar']['config_border_color_width'] + . "
    \n"; + + + +$o .= '
    '; + + +// month-year headline styling + color +$j=0; +$values_select = ''; +for ($i = 1;$i <=6 ;$i++ ) { + $selected = ''; + if('h'.$i == $headline) {$selected = ' selected'; $j = 1;} + $values_select .= "\n"; +} +$preselect = ''; +if(!$j) $preselect .= ''; +if($headline) $preselect .= ''; +$o .= '
    ' + . tag('input type="text" class="color {pickerPosition:\'left\'}" value="' + . $headlinecolor . '" name="headlinecolor"') + . '' + . $plugin_tx['calendar']['config_headline_style'] + . "
    \n"; + +// margin top +$o .= '
    ' + . tag('input type="text" value="' + . $topmargin . '" name="topmargin" style="width:4em"') + . '' + . $plugin_tx['calendar']['config_margin-top'] + . '' + . "
    \n"; + +// more headline css +$o .= '
    ' + . $plugin_tx['calendar']['config_headline_more_css']; +$o .= tag('input type="button" value="+" class="calendar_edit_off" id="headlineconfig_button" style="margin-left:0;" + onclick=\'openedit("headlineconfig_button","headlineconfig","–","+","block");\''); +$o .= "
    \n"; + +$o .= '
    '; +$o .= ''; +$o .= "
    \n"; + + + +$o .= '
    '; + + + +//color of weekday names +$o .= '
    ' + . tag('input type="text" class="color {pickerPosition:\'left\'}" value="' + . $daynames . '" name="daynames"') + . $plugin_tx['calendar']['config_day_name_color'] + . "
    \n"; + +//padding around weekend names +$o .= '
    ' + . tag('input type="text" value="' + . $daynamespadtop . '" name="daynamespadtop" style="width:3em"') + . tag('input type="text" value="' + . $daynamespadbot . '" name="daynamespadbot" style="width:3em"') + . '' + . $plugin_tx['calendar']['config_weekdaynames_padding'] + . '' + . "
    \n"; + + +// more weekday names css +$o .= '
    ' + . $plugin_tx['calendar']['config_day_names_more_css']; +$o .= tag('input type="button" value="+" class="calendar_edit_off" id="daynameconfig_button" style="margin-left:0;" + onclick=\'openedit("daynameconfig_button","daynameconfig","–","+","block");\''); +$o .= "
    \n"; + +$o .= '
    '; +$o .= '' +// . '
    ' . $plugin_tx['calendar']['config_more'] . '
    ' + . ''; +$o .= "
    \n"; + + + +$o .= '
    '; + + + +// day box height +$o .= '
    ' + . tag('input type="text" value="' + . $dayheight . '" name="dayheight" style="width:4em"') + . $plugin_tx['calendar']['config_day_field_height'] + . "
    \n" ; + + + +// day field border +list($dfbwidth,$dfbstyle,$dfbcolor)=explode(' ',$dayfieldborder); + +$j=0; +$values_select = ''; +for ($i = 0;$i <=4 ;$i++ ) { + $selected = ''; + if($i.'px' == $dfbwidth) {$selected = ' selected'; $j = 1;} + $values_select .= "\n".''; +} +$preselect = $j? '' : ''; + +$o .= '
    ' + . ''; + +$dottedselect = $dfbstyle=='dotted'? ' selected':''; +$solidselect = $dfbstyle=='solid'? ' selected':''; +$dashedselect = $dfbstyle=='dashed'? ' selected':''; + +$o .= '' + . $preselect . $values_select + . '' + . $plugin_tx['calendar']['config_dayfield_padding'] + . "
    \n"; + + +//day border spacing + day border collapse Combination +$j=0; +$spacingvalues_select = ''; +for ($i = 0;$i <=50 ;$i++ ) { + $selected = ''; + if($i.'px' == $dayspacing) {$selected = ' selected'; $j = 1;} + $spacingvalues_select .= "\n"; +} +$preselect = $j? '' : ''; +if($bordercollapse=='collapse' || !$dayspacing) $preselect = "\n"; +$o .= '
    ' + . "\n" . '' + . $plugin_tx['calendar']['config_day_border_spacing'] + . "
    \n"; + + +//round corners of day boxes +$o .= '
    ' + . tag('input type="text" value="' + . $roundcorners . '" name="roundcorners" style="width:8em"') + . ''.$plugin_tx['calendar']['config_roundcorners'] .'' + . "
    \n"; + +//shadow of day boxes +$o .= '
    ' + . tag('input type="text" value="' + . $shadow . '" name="shadow" style="width:10em"') + . ''.$plugin_tx['calendar']['config_shadow'] .'' + . "
    \n"; + +//opacity for day without event +$j=0; +$opacity_select = ''; +for ($i = 0;$i < 1 ;$i = $i + 0.1 ) { + $selected = ''; + if($i == $opacitynoevent) {$selected = ' selected'; $j = 1;} + $opacity_select .= "\n\t".''; +} +// in case the css file contains a value outside the given range, this value will be shown +$preselect = $j? '' : ''; + +$o .= '
    ' + . "\n" . '' + . $plugin_tx['calendar']['config_opacity_no_event'] + . "
    \n"; + + +//birthday background +$o .= '
    ' + . tag('input type="text" class="color {pickerPosition:\'left\'}" value="' + . $birthdayfield . '" name="birthdayfield"') + . $plugin_tx['calendar']['config_birthday_in_dayfield'] + . "
    \n"; + + + + +$o .= '
    '; + + +// nowrap of event entry text in date fields +$o .= '
    ' + . tag('input type="checkbox" '.$nowrapchecked.' value="1" name="nowrap"') + . $plugin_tx['calendar']['config_one_line_per_entry'] + . "
    \n"; + +// details to be displayed in the calendar +$o .= '
    ' + . tag('input type="checkbox" '.$linebetweenchecked.' value="1" name="linebetween"') + . $plugin_tx['calendar']['config_line_between_events_in_bigcalendar'] + . "
    \n"; + +$o .= '
    ' + . tag('input type="checkbox" '.$writetimechecked.' value="1" name="writetime"') + . $plugin_tx['calendar']['event_time'] + . "
    \n"; + +// symbol for entries without time when time is supposed to be displayed +$j=0; +$values_select = ''; +foreach (array('','@','–','—','•','·','♠','♣','♥','♦') as $keys=>$value ) { + $selected = ''; + if($value == $calendar_cf['bigcalendar_symbol_if_no_time_given']) {$selected = ' selected'; $j = 1;} + $values_select .= "\n".''; +} +$o .= '
    ' + . '' + . $plugin_tx['calendar']['config_symbol_when_no_time_is_given'] + . "
    \n"; + + +$o .= '
    ' + . tag('input type="checkbox" '.$writeentry1checked.' value="1" name="writeentry1"') + . $plugin_tx['calendar']['event_entry1'] + . "
    \n"; + +$o .= '
    ' + . tag('input type="checkbox" '.$writeeventchecked.' value="1" name="writeevent"') + . $plugin_tx['calendar']['event_main_entry'] + . "
    \n"; + +$o .= '
    ' + . tag('input type="checkbox" '.$writeentry3checked.' value="1" name="writeentry3"') + . $plugin_tx['calendar']['event_entry3'] + . "
    \n"; + +$o .= '
    ' + . tag('input type="checkbox" '.$birthdayentry3checked.' value="1" name="birthdayentry3"') + . $plugin_tx['calendar']['event_entry3'] . ' ('. $plugin_tx['calendar']['config_birthday'] . ')' + . "
    \n"; + +$o .= '
    ' + . tag('input type="checkbox" '.$birthdayagechecked.' value="1" name="birthdayage"') + . $plugin_tx['calendar']['config_birthday_age'] + . "
    \n"; + +// font +$o .= '
    '.selectFont('bigcalfont',$bigcalfont,'bigcalfontsize',$bigcalfontsize)."
    \n";; + +// mouse over hint +$o .= '
    ' + . $plugin_tx['calendar']['config_hint'] . ': ' + . tag('input type="text" value="' + . $plugin_tx['calendar']['hint_mouseover_in_calendar'] . '" name="hintmouseover" style="width:28em"') + . "
    \n"; + +$o .= '
    '; + + +//==================================== +//************************************ +// +// small calendar settings +// +//************************************ +//==================================== + +$hide = $calendar_cf['show_smallcalendar_config']? '':' style="display:none;"'; +$o .= "
    \n"; +$o .= '
    '; + +// headline "small calendar" +$o .= '

    ' + . $plugin_tx['calendar']['config_small_calendar'] + . '

    '; + +// font +$o .= '
    '.selectFont('smallcalfont',$smallcalfont,'smallcalfontsize',$smallcalfontsize,'smallcallineheight',$smallcallineheight) + . $plugin_tx['calendar']['config_lineheight'] . "
    \n";; + +// normal day +$o .= '
    1) ' + . tag('input type="text" class="color {pickerPosition:\'left\'}" value="' + . $normaldaycolor . '" name="normaldaycolor"') + . $plugin_tx['calendar']['config_normalday'] + . "
    \n"; + +// weekend +$o .= '
    2) ' + . tag('input type="text" class="color {pickerPosition:\'left\'}" value="' + . $weekendcolor . '" name="weekendcolor"') + . $plugin_tx['calendar']['config_weekend'] + . "
    \n"; + +// holiday +$o .= '
    3) ' + . tag('input type="text" class="color {pickerPosition:\'left\'}" value="' + . $holidaycolor . '" name="holidaycolor"') + . $plugin_tx['calendar']['config_holiday'] + . "
    \n"; + + +// event day +$o .= '
    4) ' + . tag('input type="text" class="color {pickerPosition:\'left\'}" value="' + . $eventdaycolor . '" name="eventdaycolor"') + . tag('input type="text" class="color {pickerPosition:\'left\'}" value="' + . $eventdaybgcolor . '" name="eventdaybgcolor"') + . $plugin_tx['calendar']['config_eventday'] + . ' ' + . tag('input type="checkbox" '.$eventdayboldchecked.' value="1" name="eventdaybold"') + . $plugin_tx['calendar']['config_bold'] . ' ' + . "
    \n"; + + +// longevent underline +$j=0; +$values_select = ''; +for ($i = 0;$i <=4 ;$i++ ) { + $selected = ''; + if($i.'px' == $underlongwidth) {$selected = ' selected'; $j = 1;} + $values_select .= "\n\t".''; +} +// in case the css file contains a value outside the given range, this value will be shown +$preselect = $j? '' : ''; + +$o .= '
    6) ' + . tag('input type="text" class="color {pickerPosition:\'left\'}" value="' + . $underlongcolor . '" name="underlongcolor"') + . '' + . sprintf($plugin_tx['calendar']['config_underline_longevent'] + , tag('input type="checkbox" '.$underlongeventchecked.' value="1" name="underlongevent"')) + . "
    \n"; + + +// alternative marking "mark2" +$j=0; +$values_select = ''; +for ($i = 0;$i <=4 ;$i++ ) { + $selected = ''; + if($i.'px' == $mark2width) {$selected = ' selected'; $j = 1;} + $values_select .= "\n\t".''; +} +// in case the css file contains a value outside the given range, this value will be shown +$preselect = $j? '' : ''; + +$o .= '
    5) ' + . tag('input type="text" class="color {pickerPosition:\'left\'}" value="' + . $mark2color . '" name="mark2color"') + . '' + . $plugin_tx['calendar']['config_mark2'] + . "
    \n"; + + +// birthday +$handle=opendir($relativePath); +$images = array(); +while (false !== ($file = readdir($handle))) { + if(substr($file,-3) == 'gif') { + $images[] = $file; + } + } +closedir($handle); +natcasesort($images); +$images_select = ''; +foreach($images as $file){ + $selected = ''; + if($birthdayimage == $file) {$selected = ' selected';} + $images_select .= "\n"; +} +$o .= '
    7) ' + . "' + . $plugin_tx['calendar']['config_birthday_image'] + . "
    \n"; + + + +// today +$o .= '
    8) ' + . tag('input type="text" class="color {pickerPosition:\'left\'}" value="' + . $todaycolor . '" name="todaycolor"') + . tag('input type="text" class="color {pickerPosition:\'left\'}" value="' + . $todaybgcolor . '" name="todaybgcolor"') + . $plugin_tx['calendar']['config_today_background'] + . ' ' + . tag('input type="checkbox" '.$todayboldchecked.' value="1" name="todaybold"') + . $plugin_tx['calendar']['config_bold'] . ' ' + . "
    \n"; + + + + + + + +$o .= '
    '; + + + +//==================================== +//************************************ +// +// pop-up settings +// +//************************************ +//==================================== + +$hide = $calendar_cf['show_popup_config']? '':' style="display:none;"'; +$o .= "'; + + + + +//============== +// save +//============== +if($calendar_cf['show_popup_config'] || $calendar_cf['show_smallcalendar_config'] || $calendar_cf['show_bigcalendar_config']) { + $o .= '
    ' + . tag('input type="submit" value="'.$plugin_tx['calendar']['menu_save_config'].'"') + . "
    \n"; +} + + +$o .= "
    "; diff --git a/includes/editevents.php b/includes/editevents.php new file mode 100644 index 0000000..578439b --- /dev/null +++ b/includes/editevents.php @@ -0,0 +1,380 @@ +" + . $plugin_tx['calendar']['error_file_name_wrong'] + . ''; + } else { + $saving_notice = saveEventFile($events,$file,$standardmode); + } + $o .= listFiles() + . closeFileViewButton() + . eventForm($events,$saving_notice,$file,$standardmode,$calendar2); + +} elseif($delete) { + array_splice($events,($dataset-1),1); + $saving_notice = '' + . $plugin_tx['calendar']['notice_deleted'] + . '' + . saveEventFile($events,$file,$standardmode); + + $o .= eventForm($events,$saving_notice,$file,$standardmode,$calendar2); + +} elseif($add) { + + $entry = array( + 'no_marquee' => FALSE, + 'datestart' => '', + 'starttime' => '', + 'dateend' => '', + 'endtime' => '', + 'dailytimes' => FALSE, + 'event' => '', + 'event_entry3'=> '', + 'event_entry1'=> '', + 'multievent' => FALSE, + 'additional' => '', + 'weekly' => FALSE, + 'weekday' => 0, + 'exceptions' => '', + 'yearly' => FALSE, + 'yearly2' => FALSE, + 'linkicon' => TRUE, + 'linkint' => '', + 'linkadd' => '', + 'linktxt' => '', + 'infoicon' => 1, + 'infotxt' => '', + 'description' => '', + 'bookedout' => FALSE, + 'mark2' => FALSE + ); + array_splice($events,$dataset,0,array($entry)); + $saving_notice = '' + . $plugin_tx['calendar']['notice_added'] + . '' + . saveEventFile($events,$file,$standardmode); + + $o .= eventForm($events,$saving_notice,$file,$standardmode,$calendar2); + +} elseif($change || $add || $copy) { + + $newevent = array(); + $weekday = array(); + $linkadd = array(); + + $j = $dataset; + + // filling missing indices + if (!isset($no_marquee[$j])) $no_marquee[$j] = ''; + if (!isset($datestart[$j])) $datestart[$j] = ''; + if (!isset($dateend[$j])) $dateend[$j] = ''; + if (!isset($starttime[$j])) $starttime[$j] = ''; + if (!isset($endtime[$j])) $endtime[$j] = ''; + if (!isset($dailytimes[$j])) $dailytimes[$j] = ''; + if (!isset($event[$j])) $event[$j] = ''; + if (!isset($event_entry3[$j])) $event_entry3[$j] = ''; + if (!isset($event_entry1[$j])) $event_entry1[$j] = ''; + if (!isset($weekly[$j])) $weekly[$j] = ''; + if (!isset($exceptions[$j])) $exceptions[$j] = ''; + if (!isset($additional[$j])) $additional[$j] = ''; + if (!isset($yearly[$j])) $yearly[$j] = ''; + if (!isset($yearly2[$j])) $yearly2[$j] = ''; + if (!isset($linkicon[$j])) $linkicon[$j] = ''; + if (!isset($linkint[$j])) $linkint[$j] = ''; + if (!isset($linkadr[$j])) $linkadr[$j] = ''; + if (!isset($linktxt[$j])) $linktxt[$j] = ''; + if (!isset($infoicon[$j])) $infoicon[$j] = ''; + if (!isset($infotxt[$j])) $infotxt[$i] = ''; + if (!isset($description[$j])) $description[$j] = ''; + if (!isset($bookedout[$j])) $bookedout[$j] = ''; + if (!isset($mark2[$j])) $mark2[$j] = ''; + if (!isset($test[$j])) $test[$j] = ''; + + + //expanding single digit day, months and double digit years (in case datepicker is off) + $datestart[$j] = preg_replace(array( + '/([\.|\-|\/])(\d)[\.|\-|\/]/e', //single digit months + '/([\.|\-|\/])(\d\d)$/e', //double digit years + '/^(\d)([\.|\-|\/])/e' //single digit days + ), + array( + "dpSeperator().'0$2'. dpSeperator()", + "dpSeperator().'20$2'", + "'0$1'.dpSeperator()" + ), + $datestart[$j]); + $dateend[$j] = preg_replace(array( + '/([\.|\-|\/])(\d)[\.|\-|\/]/e', //single digit months + '/([\.|\-|\/])(\d\d)$/e', //double digit years + '/^(\d)([\.|\-|\/])/e' //single digit days + ), + array( + "dpSeperator().'0$2'. dpSeperator()", + "dpSeperator().'20$2'", + "'0$1'.dpSeperator()" + ), + $dateend[$j]); + //Checking the date format. Entering ?, ??, -, -- is permitted. Some impossible dates can be given, but don't crash the plugin. + $pattern = '/[\d\d\|\?{1-2}|\-{1-2}]\\'.dpSeperator().'\d\d\\'.dpSeperator().'\d*$/'; + if (!preg_match($pattern,$datestart[$j])) $datestart[$j] = ""; + if (!preg_match($pattern,$dateend[$j])) $dateend[$j] = ""; + + + // check exception dates + if($exceptions[$j]) { + $dates = explode(",",$exceptions[$j]); + foreach ($dates as $key => $value) { + $dates[$key] = trim($value); + list($day,$month,$year) = explode(dpSeperator(),$dates[$key]); + $timestamp = mktime(null,null,null,$month,$day,$year); + //exceptions must be later than the event start + if($timestamp > $event_start_timestamp) { + $dates[$key] = date('d' .dpSeperator(). 'm' .dpSeperator() . 'y', $timestamp) ; + } else $dates[$key] =false; + } + //taking out not accepted values + $dates = array_filter($dates); + $exceptions[$j] = implode(", ",$dates); + //$exceptions = 'test'; + } + + // check additional dates + if($additional[$j]) { + $dates = explode(",",$additional[$j]); + foreach ($dates as $key => $value) { + $addeventfull = ''; + $dates[$key] = trim($value); + list($day,$month,$year) = explode(dpSeperator(),$dates[$key]); + if (substr($year,-1)=='*') { + $addeventfull = '*'; + $year = trim($year,'*'); + } + $timestamp = mktime(null,null,null,$month,$day,$year); + //exceptions must be later than the event start + if($timestamp > $event_start_timestamp) { + $dates[$key] = date('d' .dpSeperator(). 'm' .dpSeperator() . 'y', $timestamp).$addeventfull ; + } else $dates[$key] =false; + } + //taking out not accepted values + $dates = array_filter($dates); + $additional[$j] = implode(", ",$dates); + //$exceptions = 'test'; + } + + + + //If the same date is entered as beginning and as end, the end date is superfluous and will be erased + if ($datestart[$j]==$dateend[$j]) $dateend[$j] = ""; + + //events are limited to 10 years in order to make a stop somewhere + if ((substr($dateend[$j],-4,4) - substr($datestart[$j],-4,4))>10) $dateend[$j] = ''; + + //if weekly and yearly are both checked, one has to be unchecked + if ($weekly[$j] && ($yearly[$j] || $yearly2[$j]) && $dateend[$j]) {$yearly[$j] = FALSE; $yearly2[$j] = FALSE;} + if ($weekly[$j] && ($yearly[$j] || $yearly2[$j]) && !$dateend[$j]) $weekly[$j] = FALSE; + + //dailytimes allowed only in multiday events + if ($dailytimes[$j] && $weekly[$j]) $dailytimes[$j] = FALSE; + if ($dailytimes[$j] && ($yearly[$j] || $yearly2[$j])) $dailytimes[$j] = FALSE; + + // yearly events can last only 1 day (could be changed but needs more changes elsewhere) + if (($yearly[$j] || $yearly2[$j]) && $dateend[$j]) $dateend[$j] = ''; + // yearly either with age calculation or without, file encoding doesn't allow both + if ($yearly[$j] && $yearly2[$j]) $yearly2[$j] = ''; + + + //in case the user gave a link without link text nor icon, icon will be set as "on" + if ($linkadr[$j] && !$linktxt[$j]) $linkicon[$j]= TRUE; + + //eliminating superfluous http:// + $linkadr[$j] = str_replace ('http://','',$linkadr[$j]); + + // converting $linkadr, which may be just page names or file names to $linkadd ready for saving + $linkadd[$j] = ''; + if ($linkadr[$j]) { + $links = explode('|', $linkadr[$j]); + foreach ($links as $key=>$value) { + $linkadd[$j] .= $linkadd[$j]? '|':''; + $linktype = findLinkType($value); + if($linktype=='in?:' || $linktype=='int:') $value = pagenameToUrl($value); + // urlencode only the filename, not the address + if($linktype=='pdf:' || $linktype=='pfx:' || $linktype=='doc:') { + if(strpos($value,'/')) { + $value = substr($value, 0, strrpos($value,'/')+1) . rawurlencode(substr($value,strrpos($value,'/')+1)); + } else $value = rawurlencode($value); + } + $linkadd[$j] .= $linktype . $value; + } + } + + + //Converting time data xx.xx to xx:xx and x:xx to 0x:00 + $starttime[$j] = preg_replace('#(\d?\d)\.(\d{2})#','\1:\2',$starttime[$j]); + $starttime[$j] = preg_replace('#^(\d)\:(\d{2})#','0\1:\2', $starttime[$j]); + $endtime[$j] = preg_replace('#(\d?\d)\.(\d{2})#','\1:\2',$endtime[$j]); + $endtime[$j] = preg_replace('#^(\d)\:(\d{2})#','0\1:\2', $endtime[$j]); + + // deleating linebreaks + $description[$j] = str_replace(array(chr(10),chr(13)),'',$description[$j]); + // cleaning a bit the output of ckeditor + $description[$j] = preg_replace('#>\s+#','> ',$description[$j]); + + //deleating empty lines at the end of an entry (spaces in the regex are  ) + if($plugin_cf['calendar']['editor_deletes_empty_lines_at_the_end']) { + $description[$j] = preg_replace( + array( + '!( )*

    $!', + '!(

     <\/p>)*$!', + '!(( )?)*(

    ( )?<\/p>)*(( )?)*$!', + '!(\s*

     <\/p>\s*)+$!', + '! *$!', + ), + array( + '

    ', + '', + '', + '', + '', + ), + $description[$j] + ); + } + + //filling the array, deleting "," and ";" which would break the file structure + $entry = array( + 'no_marquee' => $no_marquee[$j], + 'datestart' => str_replace(';',' ',$datestart[$j]), + 'starttime' => str_replace(array(';',','),' ',$starttime[$j]), + 'dateend' => str_replace(';',' ',$dateend[$j]), + 'endtime' => str_replace(array(';',','),' ',$endtime[$j]), + 'dailytimes' => $dailytimes[$j], + 'event_entry1'=> stsl(str_replace(';',' ',$event_entry1[$j])), + 'event' => stsl(str_replace(';',' ',$event[$j])), + 'event_entry3'=> stsl(str_replace(';',' ',$event_entry3[$j])), + 'weekly' => $weekly[$j], + 'exceptions' => str_replace(';',' ',$exceptions[$j]), + 'additional' => str_replace(';',' ',$additional[$j]), + 'yearly' => $yearly[$j], + 'yearly2' => $yearly2[$j], + 'linkicon' => $linkicon[$j], + 'linkint' => $linkint[$j], + 'linkadd' => str_replace(array(';',','),' ',$linkadd[$j]), + 'linktxt' => stsl(str_replace(array(';',','),' ',$linktxt[$j])), + 'infoicon' => $infoicon[$j], + 'infotxt' => stsl(str_replace(';',' ',$infotxt[$j])), + 'description' => stsl($description[$j]), + 'bookedout' => $bookedout[$j], + 'mark2' => $mark2[$j] + ); + + array_splice($events,($dataset-1),1,array($entry)); + if($copy) array_splice($events,$dataset,0,array($entry)); + + foreach($events as $j => $i){ + + // finding out on which day of the week a weekly event starts + // used for SORTING ALL events according to $weekday + + if (!isset($events[$j]['datestart'])) $events[$j]['datestart'] = ''.dpSeperator().''.dpSeperator().''; + if (!isset($events[$j]['weekly'])) $events[$j]['weekly'] = ''; + if (!isset($events[$j]['additional'])) $events[$j]['additional'] = ''; + if (!isset($events[$j]['yearly'])) $events[$j]['yearly'] = ''; + if (!isset($events[$j]['yearly2'])) $events[$j]['yearly2'] = ''; + + @list($day,$month,$year) = explode( dpSeperator(), $events[$j]['datestart']); + $event_start_timestamp = mktime(null,null,null,(int)$month,(int)$day,(int)$year); + if ($events[$j]['weekly']) { + $events[$j]['weekday'] = date('w',$event_start_timestamp); + //sort first weekly events on sundays + + } elseif ($events[$j]['yearly'] || $events[$j]['yearly2']) { + $events[$j]['weekday']=7; + // sort next yearly events + + } elseif ($events[$j]['additional']) { + $events[$j]['weekday']=8; + // sort next multiple events + + } else $events[$j]['weekday']=9; + // sort last single one off events according to start time + + } + + + // sorting new event inputs, an idea of manu, communicated in the CMSimple forum + // sorting will be done only on saving the event file + + usort($events,'dateSort'); + + $change_notice = $copy? $plugin_tx['calendar']['notice_copied']:$plugin_tx['calendar']['notice_changed']; + $saving_notice = '' + . $change_notice + . '' + . saveEventFile($events,$file,$standardmode); + + $o .= eventForm($events,$saving_notice,$file,$standardmode,$calendar2); +} + diff --git a/includes/eventform.php b/includes/eventform.php new file mode 100644 index 0000000..528f619 --- /dev/null +++ b/includes/eventform.php @@ -0,0 +1,1041 @@ +\n\n"; + +// Security check +if ((!function_exists('sv')))die('Access denied'); + + +// which editor? +//if html is set in plugin config, don't use any editor +$calendareditor = $plugin_cf['calendar']['editor']=='html'? '':$calendareditor; +//otherwise prepare the use of either fckeditor, ckeditor, tinymce +if ($calendareditor == 'fckeditor'){ + include_once ($pth['folder']['plugins'].'calendar/fckeditor/fckeditor_for_calendar.php'); + // is called at the end of this file just after the "description"-field +} elseif ($calendareditor == 'ckeditor') { + include_once($pth['folder']['plugins'].'calendar/editorconfigs/ckeditorconfig_for_calendar.php'); + init_editor(array('description'),$ckconfig); +// this is for any other editor except tinymce. Depending on the editor it may not work, therefore plugin config can override this +} elseif ($calendareditor && $calendareditor != 'tinymce') { + init_editor(array('description'),'minimal'); +} + +// calling tinyMCE, if set. (coding idea from cmb) +// Part of the initialization already done in index.php outside this function +if ($calendareditor == 'tinymce'){ + include_tinymce(); + include_once($pth['folder']['plugins'].'calendar/editorconfigs/tinymceconfig_for_calendar.php'); + $hjs .= ''."\n"; + +// calling the date picker, if set in config +if ($plugin_cf['calendar']['date_picker']){ + $hjs .= ''."\n"; + $hjs .= tag('link rel="stylesheet" type="text/css" href="' . $pth['folder']['plugins'] . $plugin . '/dp/datepicker.css"')."\n"; +} + +// getting the button-images +$imageFolder = $pth['folder']['plugins'] . $plugin . "/images"; + +// links to downloads folder from secondary language: filepaths must start from the main language +$root = $sl!=$cf['language']['default']? 'http://'.$_SERVER['SERVER_NAME'].CMSIMPLE_ROOT : '' ; + + + +// now information is prepared for the user +//================================================= + +// number of events not necessary when $saving_notice is given as this also gives the number of events +$number_of_events = $saving_notice? '' : count($events) . ' ' .$plugin_tx['calendar']['notice_event_entries']; + +// Informing the user in which fields simple markup works +$formatfields = "\n" + . $plugin_tx['calendar']['hint_formattable_fields'] + . "\n". tag('br') + . $plugin_tx['calendar']['event_entry1'] . ', ' + . $plugin_tx['calendar']['event_main_entry'] . ', ' + . $plugin_tx['calendar']['event_entry3'] . ', ' + . $plugin_tx['calendar']['event_info_text'] . ', ' + . $plugin_tx['calendar']['event_link_text'] . tag('br') . tag('br') ; + +//writing this informtion using a pop-up icon +$formatting_help_button = "   " + . $plugin_tx['calendar']['hint_event_formatting'] + . "" + . tag('img src="' + . $imageFolder + . '/help_icon.png" width="16" height="16" alt="Help"') . "\n" + . $formatfields . $formatting_hints . "\n"; + +// instructions on how to enter links +$link_help = $link_help_button = ''; +if($standardmode){ + $link_help = "\n" + . $plugin_tx['calendar']['hint_how_to_enter_links'] + . '' + . tag('br') . tag('br') + . $plugin_tx['calendar']['hint_internal_links'] + . tag('br') . tag('br') + . $plugin_tx['calendar']['hint_external_links']. tag('br') + . icon('ext') . ' www.cmsimple-xh.com' + . tag('br') . tag('br') + . $plugin_tx['calendar']['hint_blog_links']. tag('br') + . icon('int') . ' ?Start&action=view' + . tag('br') . tag('br') + . $plugin_tx['calendar']['hint_subsite_links']. tag('br') + . icon('int') . ' /nl/?Start:Page ... etc.' + . tag('br') . tag('br') + . $plugin_tx['calendar']['hint_file_links']. tag('br') + . icon('pdf'). '   Abcdefg.pdf'. tag('br') + . icon('doc'). '   Abcdefg.doc(x)'. tag('br'). tag('br') + . $plugin_tx['calendar']['hint_external_pdf_links']; + + $link_help_button = '   ' + . $plugin_tx['calendar']['hint_links'] + . '' + . tag('input type="image" src="' + . $imageFolder + . '/help_icon.png" style="width:16;height:16;vertical-align:baseline;" alt="Help"') . "\n" + . $link_help + . "\n"; +} + +// informing the user about event page setting +$eventpage_error_notice = $eventpage_notice = ''; +$eventpage = $calendar2? $plugin_cf['calendar']['second-calendar_eventpage'] : $plugin_tx['calendar']['_event_page']; +if($standardmode){ + // event page not set/not found + if(!$eventpage) { + $eventpage_notice = $calendar2? + '  ' . $plugin_tx['calendar']['notice_no_eventlist2_page']: + '  ' . $plugin_tx['calendar']['notice_no_eventlist_page']; + } elseif(pagenameToUrl($eventpage)===0) { + $eventpage_notice = '   "' . $eventpage . '" ' + . $plugin_tx['calendar']['error_event_page_not_found'] . ''; + + // event page set, but more than one page with the same name exists + } elseif(pagenameToUrl($eventpage)===FALSE) { + $eventpage_notice = '   "' + . $eventpage . '" ' + . $plugin_tx['calendar']['error_event_page_occurs_more_than_once'] + . ''; + } +} + +// link errors +$link_error_notice = ''; +$unclear = 0; +$name_double = 0; +foreach($events as $entry) { + if(strpos($entry['linkadd'],'err:')!==FALSE) $unclear++; + if(strpos($entry['linkadd'],'er2:')!==FALSE) $name_double++; +} +if($unclear==1) $link_error_notice .= $unclear . " " . $plugin_tx['calendar']['error_link_unclear']; +if($unclear>1) $link_error_notice .= $unclear . " " . $plugin_tx['calendar']['error_links_unclear']; +if($unclear>0 && $name_double>0) $link_error_notice .= ", "; +if($name_double==1) $link_error_notice .= $name_double . " " . $plugin_tx['calendar']['error_pagename_double']; +if($name_double>1) $link_error_notice .= $name_double . " " . $plugin_tx['calendar']['error_pagenames_double']; +if($link_error_notice) $link_error_notice = "   " . $link_error_notice . "\n"; + + +// giving out all the info +$notice = $saving_notice + . $number_of_events + . $formatting_help_button + . $link_help_button + . $eventpage_notice + . $link_error_notice; + +// same event calendar for all subsites means relative addresses won't work when entered from a subsite +if($plugin_cf['calendar']['same-event-calendar_for_all_subsites'] && $cf['language']['default']!=$sl) { + $notice .= '   ' . $plugin_tx['calendar']['error_do_not_edit_from_subsite'] . "\n"; +} + +// end of preparing information =============================================================== +//print_r($events); + + + +// begin with a general information field +//======================================= +$o .= "\n\n"; +if (!$standardmode) { + $o .= '' + . "\n"; +} + +$o .= "\n"; +$o .= '\n\n"; +$o .= '
    ' + . '
    ' + . tag('input type="text" class="filename" value="'.$file.'" name="file"') + . tag('input type="image" src="' + . $imageFolder + . '/ok.png" style="width:16;height:16" name="newfilename[0]" title="' + . $plugin_tx['calendar']['hint_icon_save_new_name'] . '"') + . '
    ' + . '
    ' + . '$notice' + +// FORM: add new event on top of list +//===================================== + . '
    '."\n" + . tag('input type="image" src="'.$imageFolder + . '/add.png" style="width:16;height:16;" name="add[0]" title="' + . $plugin_tx['calendar']['hint_icon_add'] . '"') . "\n" + . tag('input type="hidden" value="0" name="dataset"') . "\n" + . '
    ' +// end form +//================ + + . "\n
    '; + + +// headline at the beginning of the event list, giving the period of events displayed +$past_month = ($calendar_cf['show_past_months'] && !$calendar_cf['show_no_past_event'])? $calendar_cf['show_past_months'] : '0'; +$future_month = $calendar_cf['show_future_months']? $calendar_cf['show_future_months']: '1'; +$future_month--; //subtraction necessary so that present month is also taken into account +$display_start_month = date("m",strtotime("-$past_month month")); +$display_start_year = date("Y",strtotime("-$past_month month")); +$display_end_month = date("m",strtotime("+$future_month month")); +$display_end_year = date("Y",strtotime("+$future_month month")); + +$monthnames = explode(",", $plugin_tx['calendar']['names_of_months']); + +if ($calendar_cf['show_period_of_events'] && $standardmode){ + $o .= "

    " + . $plugin_tx['calendar']['notice_telling_period_of_events'] + . " " + . $monthnames[$display_start_month - 1]." ".$display_start_year + . " " + . $plugin_tx['calendar']['event_date_till_date'] + . " " + . $monthnames[$display_end_month - 1]." ".$display_end_year + . "

    \n"; +} + + + +// the number of tablecolumns is calculated +// starting with minimum number of columns (date + main entry) +$tablecols = 2; +// adding columns according to config settings +if ($calendar_cf['show_event_time']) $tablecols++; +if ($calendar_cf['show_event_entry3']) $tablecols++; +if ($calendar_cf['show_event_entry1']) $tablecols++; +if ($calendar_cf['show_event_link']) $tablecols++; + + +// preparing eventdata display +$oldheading = ''; +$event_day = ''; +$event_month = ''; +$event_year = ''; +$make_headline_weeklyevents = 0; +$make_headline_yearlyevents = 0; +$make_headline_multievents = 0; +$make_headline_singleevents = 0; +$extrasubhead = 0; +$i = 1; + + +$subhead = "\n"; +$subhead .= "".$plugin_tx['calendar']['event_date']."\n"; +if ($calendar_cf['show_event_time']){ + $subhead .= "".$plugin_tx['calendar']['event_time']."\n"; +} +if ($calendar_cf['show_event_entry1']){ + $subhead .= "".$plugin_tx['calendar']['event_entry1']."\n"; +} +$subhead .= "".$plugin_tx['calendar']['event_main_entry']."\n"; +if ($calendar_cf['show_event_entry3']){ + $subhead .= "".$plugin_tx['calendar']['event_entry3']."\n"; +} +if ($calendar_cf['show_event_link']){ + $subhead .= "".$plugin_tx['calendar']['event_link_etc']."\n"; +} +$subhead .= "\n"; + + +// processing all event entries +foreach($events as $entry) { + + //Headlines to separate different entry types from one another + if($entry['weekly']){ + $make_headline_weeklyevents++; + $make_headline_yearlyevents = 0; + $make_headline_multievents = 0; + $make_headline_singleevents = 0; + } elseif ($entry['yearly'] || $entry['yearly2']) { + $make_headline_yearlyevents++; + $make_headline_multievents = 0; + $make_headline_singleevents = 0; + } elseif ($entry['additional']) { + $make_headline_multievents++; + $make_headline_singleevents = 0; + } else { + $make_headline_singleevents++; + } + + if($make_headline_weeklyevents == 1) { + $o .= sprintf($plugin_cf['calendar']['style_headline_eventtype'],$plugin_tx['calendar']['headline_weekly_events']) ."\n"; + $make_headline_weeklyevents++; + } + if($make_headline_yearlyevents == 1) { + $o .= sprintf($plugin_cf['calendar']['style_headline_eventtype'],$plugin_tx['calendar']['headline_yearly_events']) ."\n"; + $make_headline_yearlyevents++; + } + if($make_headline_multievents == 1) { + $o .= sprintf($plugin_cf['calendar']['style_headline_eventtype'],$plugin_tx['calendar']['headline_multiple_events']) ."\n"; + $make_headline_multievents++; + } + if($make_headline_singleevents == 1 && ($make_headline_weeklyevents+$make_headline_yearlyevents+$make_headline_multievents)) { + $o .= sprintf($plugin_cf['calendar']['style_headline_eventtype'],$plugin_tx['calendar']['headline_single_events']) ."\n"; + $make_headline_singleevents++; + $oldheading = 'x'; //comparision with possible heading decides if heading is necessary + } + + + //finding day of the week and month of an event + if($entry['datestart']) list($event_day,$event_month,$event_year) = explode( dpSeperator(), $entry['datestart']); + $timestamp = mktime(null,null,null,(int)$event_month,(int)$event_day,(int)$event_year); + $longdayname_array = explode(",", $plugin_tx['calendar']['names_of_days_longform']); + $longdayname[$i] = $longdayname_array[date('w',$timestamp)]; + $shortdayname_array = explode(",", $plugin_tx['calendar']['names_of_days']); + $shortdayname = $shortdayname_array[date('w',$timestamp)]; + $monthname_array = explode(",", $plugin_tx['calendar']['names_of_months']); + if($event_month)$monthname[$i] = $monthname_array[ltrim($event_month,0)-1]; else $monthname[$i]=''; + + + +//=========================================================== +//*********************************************************** +// +// building a table visually similar to the event list +// no entries here, J U S T for S H O W :-) +// +//*********************************************************** +//=========================================================== + + //start the table + $o .="\n"; + + //headlines for weekly events in form of daynames, avoiding repetitive headings + if($entry['weekly'] && ($i == 1 || $longdayname[$i] != $longdayname[$i-1])){ + $o .= "\n"; + $o .= "\n"; + $o .= "\n"; + $o .= $subhead; + $oldheading = $longdayname[$i]; + $extrasubhead = 0; + } + + //headlines for all other events in form of monthnames, avoiding repetitive headings + if(!$entry['weekly'] && ($i == 1 || $monthname[$i] != $oldheading)){ + $o .="\n"; + $o .="\n"; + $o .="\n"; + $o .= $subhead; + $oldheading = $monthname[$i]; + $extrasubhead = 0; + } + + $o .= $extrasubhead? $subhead : ''; + + if($entry['bookedout']) { + $eventfull = ' eventfull'; + $noticefull = ''; + } else $eventfull = $noticefull = ''; + + //data row + if($entry['yearly']) { + $o .="$noticefull\n"; + } else { + $o .="$noticefull\n"; + } + //date field + $o .="\n"; + + //time field + // find the weekdays of start and end of an event + $startday = ''; + $endday = ''; + if ($entry['dateend'] && $entry['endtime'] && !$entry['dailytimes'] && !$entry['weekly']) { + + $startdaynr = date('w',mktime(0,0,0,$event_month,(int)$event_day,$event_year)); + $startday = ' ' . $shortdayname_array[$startdaynr]; + $enddaynr = date('w',mktime(0,0,0,$event_end_month,(int)$event_end_day,$event_end_year)); + $endday = ' ' . $shortdayname_array[$enddaynr]; + } + + if ($calendar_cf['show_event_time']){ + $o .='\n"; + } + + $event_entry1 = simpleMarkupToHtml ($entry['event_entry1']); + $event = simpleMarkupToHtml ($entry['event']); + $event_entry3 = simpleMarkupToHtml ($entry['event_entry3']); + + /*event_entry1 field*/ + if ($calendar_cf['show_event_entry1']){ + $o .="\n"; + } + + //event field + $o .="\n"; + + /*event_entry3 field*/ + if ($calendar_cf['show_event_entry3']){ + $o .="\n"; + } + + /*link, link-text and info-text field*/ + if ($calendar_cf['show_event_link']){ + $o .= "\n\n"; + } + + // description field + if ($calendar_cf['show_event_description']) { + + $event_description = $entry['description']; + + // how much indented is the description going to start? + $indentation = $calendar_cf['show_description_nr_of_cells_indented']; + if(!$indentation) $indentation=0; + // preventing that $indentation gets too big + if ($indentation >= $tablecols) $indentation = $tablecols - 1; + + if (strlen($event_description) > 1) { + $extrasubhead = 1; + $o .= "\n"; + // if indentation is wanted, here it comes + if ($indentation) $o .= "\n"; + $o .= "\n\n"; + } else $extrasubhead = 0; + } + //end the event list table + $o .= '
    $longdayname[$i]
    $monthname[$i] $event_year

    ' + . $plugin_tx['calendar']['event_booked_out'] + . '

    "; + + + //button to open the editing table + //================================ + // mark link errors by coloring the background of the button as well as the link field in the input table + $link_error_marking = ''; + if (strpos($entry['linkadd'],'err:')!==FALSE) $link_error_marking = 'style="background:#faa;"'; + if (strpos($entry['linkadd'],'er2:')!==FALSE) $link_error_marking = 'style="background:#faf;"'; + //make a button + $o .= ""; + + + // if beginning and end dates are there, these should be put nicely one under another as in the event list + if ($entry['dateend'] ) { + + list($event_day,$event_month,$event_year) = explode( dpSeperator(), $entry['datestart']); + list($event_end_day,$event_end_month,$event_end_year) = explode( dpSeperator(), $entry['dateend']); + + $o .= $event_day; + if ($event_month!=$event_end_month || $event_year!=$event_end_year) {$o .= dpSeperator().$event_month ;} + if ($event_year!=$event_end_year) {$o .= dpSeperator().$event_year ;} + if ($event_year==$event_end_year && dpSeperator()=='.') {$o.= '.';} + $o .= ' ' . $plugin_tx['calendar']['event_date_till_date'] . ' '; + $o .= $event_end_day.dpSeperator().$event_end_month.dpSeperator().$event_end_year; + + } elseif ($entry['weekly']){ + $o .= $plugin_tx['calendar']['event_weekly_starting_on'] . ' ' . $entry['datestart']; + + } else { + $o .= $entry['datestart']; + } + if ($entry['exceptions']) { + $o .= ' ' . $plugin_tx['calendar']['event_except'] . ' ' + . $entry['exceptions']; + } + if ($entry['additional']) { + $o .= ' ' . $plugin_tx['calendar']['event_additional'] . ' ' + . $entry['additional']; + } + $o .= "'; + $o .= $entry['dailytimes']? $plugin_tx['calendar']['event_daily'].' ' : ''; + $o .= $entry['starttime'] . $startday; + if ($entry['endtime']) { + $o .= ' ' . $plugin_tx['calendar']['event_time_till_time'] . ' ' . $entry['endtime'] . $endday; + } + $o .="$event_entry1$event$event_entry3
     " . $event_description . "
    '; + + + +//=================================================== +//*************************************************** +// +// start the input table for the same event +// (which can be switched on or off) +// -- here the input takes place +// +//*************************************************** +//=================================================== + + $no_marqueechecked = $entry['no_marquee'] ? 'checked="checked"' : ''; + $bookedoutchecked = $entry['bookedout'] ? 'checked="checked"' : ''; + $dailytimes_checked = $entry['dailytimes'] ? 'checked="checked"' : ''; + $linkiconchecked = $entry['linkicon'] ? 'checked="checked"' : ''; + $weeklychecked = $entry['weekly'] ? 'checked="checked"' : ''; + $yearlychecked = $entry['yearly'] ? 'checked="checked"' : ''; + $yearly2checked = $entry['yearly2'] ? 'checked="checked"' : ''; + $infoiconchecked = $entry['infoicon']==1 ? 'checked="checked"' : ''; + $widepopupchecked = $entry['infoicon']==2 ? 'checked="checked"' : ''; + $mark2checked = $entry['mark2'] ? 'checked="checked"' : ''; + + +// Start FORM +//=================== + $o .= '
    '."\n" + . ''."\n"; + + //first row (just labels + buttons) + //============================= + $o .= ''."\n" + . '\n"; + if($calendar_cf['show_event_time']){ + $o .= '\n" + . '\n"; + } else { + $o .= ''."\n" + . ''."\n"; + } + $o .= '\n"; + + $o .= '\n"; + + //delete, copy, add and save buttons + //=================================== + $o .= '\n" + . "\n"; + + //2nd row; here data input starts + //================================ + //column 1 + $o .= "\n" + . '\n" ; + + //column 2+3 + if ($calendar_cf['show_event_time']){ + $o .= '\n\n"; + } else { + $o .= tag('input type="hidden" value="'.$entry['starttime'].'"') + . '' + . tag('input type="hidden" value="'.$entry['endtime'].'"') + . ''; + } + + //column 4 + $o .= '\n"; + + //column 5 -- main entry can be textarea or input line + if($plugin_cf['calendar']['input-field_mainentry_as_textarea']) { + $o .= '\n\n"; + $o .= "\n"; + + } else { + $o .= '\n\n"; + } + + + // 3rd row L E F T S I D E + //=========================== + $o .= "\n"; + //determine the rowspan + $height_3rd_row = 6; + if(!$calendar_cf['show_event_link']) $height_3rd_row -=4; + if(!$calendar_cf['show_event_entry3']) $height_3rd_row--; + if(!($calendar_cf['show_event_entry1'] || + $plugin_cf['calendar']['input-field_entry1_show_in_input_always'])) $height_3rd_row--; + $height_3rd_row = $height_3rd_row? "rowspan='$height_3rd_row'" : ''; + + $o .= "\n"; + + + + + // 3 row R I G H T S I D E + //========================== + // field entry1 (could be used as location) + if ($calendar_cf['show_event_entry1'] || $plugin_cf['calendar']['input-field_entry1_show_in_input_always']) { + $o .= '\n" + . '\n\n"; + } else { + $o .= tag('input type="hidden" value="'.$entry['event_entry1'] . '" name="event_entry1[' . $i.']"'); + } + + // field entry3 (was location in former versions) + if ($calendar_cf['show_event_entry3']) { + $o .= '\n" + . '\n\n"; + } else { + $o .= tag('input type="hidden" value="'.$entry['event_entry3'] . '" name="event_entry3[' . $i.']"'); + } + + + // converting the linkdata which has been saved as $linkadd to the simplified form $linkadr + // which may be just pagenames or filenames + $links = explode('|', $entry['linkadd']); + $link = ''; + $linkadr = ''; + foreach ($links as $key=>$value) { + $linkadr .= $link? '|':''; + $link = substr($value, 4); + $linktype = substr($value, 0, 4); + if($linktype == 'in?:' || $linktype == 'int:') $link = urlToPagename($link); + // urlencode only the filename, not the address + if($linktype=='pdf:' || $linktype=='pfx:' || $linktype=='doc:') $link = rawurldecode($link); + $linkadr .= $link; + } + + // link field turned on + if ($calendar_cf['show_event_link']) { + + //link icon checkbox + $o .= '\n"; + + $pages_select = ''; + for ($x=0;$x<$cl;$x++) { + $levelindicator = ''; + for ($y = 1; $y < $l[$x]; $y++) {$levelindicator .= '–   ';} + $page = $levelindicator.$h[$x]; + $selected = ''; + if($entry['linkint'] == $u[$x]) {$selected = ' selected';} + $pages_select .= "\n".''; + } + //internal link field + $o .= "\n\n"; + + // other link caption + $o .= '\n" + // other link field + . "\n\n"; + + // "link-text" label + $o .= '\n" + // "link-text" field + . '\n\n"; + + //checkbox info icon + info text label + $o .= "\n" + . '\n"; + // info text field + $o .= "\n" + . "\n"; + } else { + //hidden fields to save link and info data + $o .= tag('input type="hidden" value="'.$entry['linkicon'] .'" name="linkicon['.$i.']"') + . tag('input type="hidden" value="'.$entry['linkint'] .'" name="linkint['. $i.']"') + . tag('input type="hidden" value="'.$linkadr .'" name="linkadr['. $i.']"') + . tag('input type="hidden" value="'.$entry['linktxt'] .'" name="linktxt['. $i.']"') + . tag('input type="hidden" value="'.$entry['infoicon'] .'" name="infoicon['.$i.']"') + . tag('input type="hidden" value="'.$entry['infotxt'] .'" name="infotxt['. $i.']"'); + } + + //make event description field + if ($calendar_cf['show_event_description']) { + + if(!$calendareditor) { + $description = preg_replace(array('!(<\/[h|p|li|ul|ol]?\d?>)!U','!()!U'),"$1\n", $entry['description']); + $o .= "\n" + . '\n\n\n" + . '\n" + . "\n"; + } elseif($calendareditor == 'fckeditor') { + $o .= "\n" + . '\n\n\n" + . '\n" + . "\n"; + $o .= fckeditor(); + } else { + $o .= "\n" + . '\n\n\n" + . "\n" + . "\n"; + } + } else { + //hidden field to save description data. Hm, hidden field seems not to work here. So a work around: + $o .= '
    ' + . "
    \n"; + } + + //end input table + $o .= ''."\n" + +// end FORM +//=================== + . '
    '."\n"; + + $i++; +} + +//prevent wrong alert from ckeditor on save via calendar save button +if ($calendareditor == 'ckeditor') { + $o .= ''; +} diff --git a/includes/eventlist.php b/includes/eventlist.php new file mode 100644 index 0000000..25bfd91 --- /dev/null +++ b/includes/eventlist.php @@ -0,0 +1,1282 @@ +\n\n"; +$today = date("Ymd"); +$day = substr($today, 6); +$presentmonth = substr($today, 4,2); +$presentyear = substr($today, 0,4); +if($month == '') $month = $presentmonth; +if($year == '') $year = $presentyear; + +//decide how to treat past events +$show_no_past_event = FALSE; +$markpast = TRUE; +if(!$pastevents && !$calendar_cf['show_grey_past_events']) $markpast = FALSE; +if(!$pastevents && $calendar_cf['show_no_past_event']) $show_no_past_event = $markpast = TRUE; +if($pastevents==3) $show_no_past_event= $markpast = TRUE; +if($pastevents==1) $markpast = FALSE; + +// links to downloads folder from secondary language: filepaths must start from the main language +$root = $sl!=$cf['language']['default']? 'http://'.$_SERVER['SERVER_NAME'].CMSIMPLE_ROOT : '' ; + +// spreadsheet table style or template driven style? +if($style == 1) { + $tablestyle = true; + $templatefile = ''; +} +elseif($style) { + $tablestyle = false; + $templatefile = $style; +} +else { + $tablestyle = $plugin_cf['calendar']['eventlist_template']? false : true; + $templatefile = $plugin_cf['calendar']['eventlist_template']; + $templatefile = strpos($templatefile,'.tpl')? $templatefile : $templatefile.'.tpl'; +} +if(!$tablestyle && is_file($pth['folder']['plugins'].'calendar/templates/'.$templatefile)) { + $template = file_get_contents($pth['folder']['plugins'].'calendar/templates/'.$templatefile); + $template = explode('===',$template); +} else { + $template = array('','','','','','','','','','','','',''); + $tablestyle = true; + $templatefile = ''; +} + + + +//find out the period to display +//=============================== +// first the start +if($past_month == '') {$past_month = $calendar_cf['show_past_months'];} +if(!$past_month || $show_no_past_event) {$past_month = 0;} +$month = $month - $past_month; +while ($month < 1) { + $year = $year - 1; + $month = 12 + $month; +} +// Now $month and $year give the dates for the start of the event list + +// in case events are clicked in a calendar that is not the present month, +// the event list either is (1) adjusted to that month or, (2) is enlarged if necessary +// to prevent XSS injection htmlspecialchars is used by advice of cmb +$new_start = FALSE; +$new_end_month = 0; +$showlinktopresentmonth = FALSE; +if(!$file) { + $month_input = isset($_GET['month']) ? htmlspecialchars($_GET['month']) : ''; + $month_input .= isset($_POST['month']) ? htmlspecialchars($_POST['month']) : ''; + $year_input = isset($_GET['year']) ? htmlspecialchars($_GET['year']) : ''; + $year_input .= isset($_POST['year']) ? htmlspecialchars($_POST['year']) : ''; + $date_input = $year_input * 100 + $month_input; + + if ( $plugin_cf['calendar']['eventlist_start_moves_with_clicked_event'] + && ($month_input || $year_input)) { + $year = $year_input; + $month = $month_input; + $show_no_past_events = FALSE; + $markpast = FALSE; + $showlinktopresentmonth = TRUE; + } + if( !$plugin_cf['calendar']['eventlist_start_moves_with_clicked_event'] + && $month_input && $year_input && $date_input < $year * 100 + $month) { + $new_end_month = $month + ($year-$year_input)*12 - $month_input; + $year = $year_input; + $month = $month_input; + $show_no_past_events = FALSE; + $markpast = FALSE; + $new_start = TRUE; + } +} + +//find out the end month of the displayed event list +if($end_month == ''){ + if($calendar_cf['show_future_months']){ + $end_month = $calendar_cf['show_future_months']; + } else $end_month = "1"; +} +// in case earlier events are requested the displqaed period is enlarged to the past +If($new_start) $end_month = $new_end_month + $end_month; + +$display_end_month = $month + $end_month -1 + $past_month; +$display_end_year = $year; +while ($display_end_month > 12){ + $display_end_year = $display_end_year + 1; + $display_end_month = $display_end_month - 12; +} +$end_month = $end_month + $past_month; + + +//in case events later are clicked the displayed period is enlarged to the future +if( !$plugin_cf['calendar']['eventlist_start_moves_with_clicked_event'] + && !$file && $month_input && $year_input && $date_input > $display_end_year * 100 + $display_end_month) { + $end_month = ($year_input-$year)*12 - $month + 1 + $month_input; + $display_end_year = $year_input; + $display_end_month = $month_input; +} + + + +$event_time_array = array(); +$event_end_time_array = array(); +$event_dailytimes_array = array(); +$event_day_array = array(); +$event_day_time_array = array(); +$event_end_day_array = array(); +$event_month_array = array(); +$event_end_month_array = array(); +$event_year_array = array(); +$event_end_year_array = array(); +$event_yearmonth_array = array(); +$event_notpast_array = array(); +$event_time2_array = array(); +$event_weekly_array = array(); +$event_exceptions_array = array(); +$event_weekday_array = array(); +$event_yearly_array = array(); +$event_yearly2_array = array(); +$event_entry1_array = array(); +$event_array = array(); +$event_entry3_array = array(); +$event_link_icon_array = array(); +$event_link_adr_array = array(); +$event_link_txt_array = array(); +$event_info_icon_array = array(); +$event_info_txt_array = array(); +$event_description_array = array(); +$event_bookedout_array = array(); +$oldlong_array = array(); +$exceptions = ''; + + +// determining which file to read +if ($file) { + $eventfile = $datapath.$file; +}else { + $eventfile = $datapath."eventcalendar$lang.txt"; +} + +if(is_file($eventfile)){ + + $file_array = file($eventfile); + if($addfile && is_file($datapath.$addfile)) { + $addfile_array = file($datapath.$addfile); + $file_array = array_merge($file_array,$addfile_array); + } + + // processing the data file line by line + //========================================== + foreach ( $file_array as $line) { + + $oldlongevent = 0; + + if (strpos($line,';')) { + // var_dump($line); + + // dividing the lines into fields (explode limit necessary to make ";" in description possible) + list($eventdates,$event,$event_entry3,$link,$event_time,$description) = explode( ";", $line,6); + + //for sorting + $event_time2 = $event_time? str_pad(substr($event_time,0,5),5,'0',STR_PAD_LEFT):'20:00'; + + // dividing the remaining data + list($event_date_start,$event_date_end,$event_end_time,$event_entry1) = explode(",",$eventdates,4); + + // eliminating any * before the date (this being the mark of "don't show on marquee") + if (substr($event_date_start,0,1)=="*") $event_date_start = substr($event_date_start,1); + + // eliminating any * before the end date (this being the mark of "event booked out") + if (substr($event_date_end,0,1)=="*") { + $event_date_end = substr($event_date_end,1); + $bookedout = TRUE; + } else $bookedout = FALSE; + + // checking if there is an * before the endtime, meaning given times of multi day events are daily times + if (substr($event_end_time,0,1)=="*") { + $event_end_time = substr($event_end_time,1); // eliminating any * + $dailytimes = TRUE; + } else $dailytimes = FALSE; + + // checking if there is an * before the event_entry1, which means alternative marking in calendar + if (substr($event_entry1,0,1)=="*") { + $event_entry1 = substr($event_entry1,1); // eliminating any * + } + + if($event_date_start) { + list($event_day,$event_month,$event_year) = explode( dpSeperator(), $event_date_start); + $event_year = str_pad($event_year,4,'0',STR_PAD_LEFT); // for dates bevore the year 1000 + $notpast = $event_year.$event_month.$event_day < $today ? 0 : 1; + } else { + $event_day = ''; + $event_month = ''; + $event_year = ''; + $notpast = 0; + } + + if($event_date_end) { + list($event_end_day,$event_end_month,$event_end_year) = explode( dpSeperator(), $event_date_end); + + $notpast = $event_end_year.$event_end_month.$event_end_day < $today ? 0 : 1; + $not_outside_period = $event_end_year*100 + $event_end_month < $year*100 + $month ? 0 : 1; + + //old long lasting events which started before the considered period and reach into it are marked + $condition = $show_no_past_event? $notpast : $not_outside_period; + $oldlongevent = ($event_year*100 + $event_month < $year*100 + $month && $condition)? 1 : 0; + + + } else { + $event_end_day = ''; + $event_end_month = ''; + $event_end_year = ''; + } + + $yearly = FALSE; + $yearly2 = FALSE; + $weekly = FALSE; + $exceptions = ''; + $additional = ''; + $additionaldatesarray = array(); + + //checking for birthday events + if (substr($event_entry3,0,3)=='###') { + $event_entry3 = substr($event_entry3,3); // eliminating any ### + $yearly = TRUE; + } + //checking for other yearly events where age shout not be calculated + if (substr($event_entry3,0,3)=='#*#') { + $event_entry3 = substr($event_entry3,3); // eliminating any ### + $yearly2 = TRUE; + } + + // legacy code, checking for multiple events, not used any more + if (substr($event_entry3,0,3)=="*#*") { + $event_entry3 = substr($event_entry3,3); // eliminating any #*# + } + + //checking for weekly events (coded in such a way as to keep the old file structure) + if (substr($event_entry3,0,3)=="***") { + $event_entry3 = substr($event_entry3,3); // eliminating any *** + $oldlongevent = 0; //only one off oldlongevents are considered + + //in case no end date has been given, 10 years duration is supposed. It must fall within the display period + if (!$event_date_end) { + $supposed_end = ($event_year + 10) . str_pad($event_month,2,"0",STR_PAD_LEFT); + if($supposed_end > $presentyear . str_pad($presentmonth,2,"0",STR_PAD_LEFT)) { + $endofweeklyevents = $supposed_end; + } else $endofweeklyevents = ''; + } + else { + $endofweeklyevents=$event_end_year . str_pad($event_end_month,2,"0",STR_PAD_LEFT); + } + $startofweeklyevents = $event_year . str_pad($event_month,2,"0",STR_PAD_LEFT); + if ( $endofweeklyevents >= $year . str_pad($month,2,"0",STR_PAD_LEFT) + && $startofweeklyevents <= $display_end_year . str_pad($display_end_month,2,"0",STR_PAD_LEFT)) + { + $weekly = TRUE; + } + else + //eleminating all weekly events not fitting in the time window + { + $event_day = $event_month = $event_year = ''; + } + if($show_no_past_event && $weekly + && $endofweeklyevents.str_pad($event_end_day,2,"0",STR_PAD_LEFT) < $today) { + $weekly = FALSE; + $event_day = $event_month = $event_year = ''; + } + } + + // exceptions + if(strpos($event_entry3,'|')){ + $exceptions = substr($event_entry3,0,strpos($event_entry3,'|')); + $event_entry3 = substr($event_entry3,(strpos($event_entry3,'|')+1)); // eliminating exception data + } + + // additions + if(strpos($event,'|')){ + $additional = substr($event,0,strpos($event,'|')); + $additionaldates = explode(",",$additional); + foreach ($additionaldates as $value) { + //deleting empty spaces + $value = ltrim($value); + $additionaldatesarray[] = explode(dpSeperator(),$value); + } + // eliminating additional dates from entry1 + $event = substr($event,(strpos($event,'|')+1)); + } + + // dividing the new subfunctions of $link into its elements + list($event_link_adr,$event_link_txt,$event_info_txt) = explode(",",$link,3); + + // Now further refining the subfunctions... keeping compatibility to the age old event file structure + + // detecting icon for links + if (substr($event_link_adr,0,1)=="*") { + $event_link_icon = TRUE; + $event_link_adr = substr($event_link_adr,1); + } else $event_link_icon = FALSE; + + // detecting icon for info text + if (substr($event_info_txt,0,1)=="*") { + $event_info_icon = 1; + } elseif (substr($event_info_txt,0,1)=="+") { + $event_info_icon = 2; + } else $event_info_icon = 0; + + // deleting icon marking + if ($event_info_icon) $event_info_txt = substr($event_info_txt,1); + + // for sorting algorithm that puts weekly events orderd by weekday first + $event_time_stamp = mktime(null,null,null,(int)$event_month,(int)$event_day,(int)$event_year); + if($weekly) $weekday = 1 + date('w',$event_time_stamp); else $weekday = ''; + // 1 was added to avoid "0" + + // special case: same event calendar for all languages = on, plus list is shown on secondary language page + // now image addresses have to be adjusted + if($plugin_cf['calendar']['same-event-calendar_for_all_subsites'] && $cf['language']['default']!=$sl) { + $description = str_replace('src="./images','src="../images', $description); + } + + array_push($event_year_array, $event_year); + array_push($event_end_year_array, $event_end_year); + array_push($event_month_array, $event_month); + array_push($event_end_month_array, $event_end_month); + if (!$weekly) { + array_push($event_yearmonth_array,($event_month.".".$event_year)); + } else { + array_push($event_yearmonth_array,''); + } + array_push($event_notpast_array, $event_year.$event_month.$notpast); + array_push($event_weekday_array, $weekday); + array_push($event_day_array, $event_day); + array_push($event_day_time_array, $event_day.$event_time); + array_push($event_end_day_array, $event_end_day); + array_push($event_entry1_array, $event_entry1); + array_push($event_array, $event); + array_push($event_entry3_array, $event_entry3); + array_push($event_weekly_array, $weekly); + array_push($event_exceptions_array, $exceptions); + array_push($event_yearly_array, $yearly); + array_push($event_yearly2_array, $yearly2); + array_push($event_link_icon_array, $event_link_icon); + array_push($event_link_adr_array, $event_link_adr); + array_push($event_link_txt_array, $event_link_txt); + array_push($event_info_icon_array, $event_info_icon); + array_push($event_info_txt_array, $event_info_txt); + array_push($event_time_array, $event_time); + array_push($event_end_time_array, $event_end_time); + array_push($event_dailytimes_array, $dailytimes); + array_push($event_time2_array, $event_time2); + array_push($event_description_array,$description); + array_push($event_bookedout_array, $bookedout); + array_push($oldlong_array, $oldlongevent); + + if($additional) { + foreach ($additionaldatesarray as $value) { + $addbookedout = substr($value[2],-1)=='*'? TRUE : FALSE; + $value[2] = rtrim($value[2],'*'); + $notpast = 20 . $value[2].$value[1].$value[0] < $today ? 0 : 1; + + array_push($event_year_array, 20 . $value[2]); + array_push($event_end_year_array, ''); + array_push($event_month_array, $value[1]); + array_push($event_end_month_array, ''); + array_push($event_yearmonth_array, ($value[1] .'.20' . $value[2])); + array_push($event_notpast_array, $value[2].$value[1].$notpast); + array_push($event_weekday_array, ''); + array_push($event_day_array, $value[0]); + array_push($event_day_time_array, $event_day.$event_time); + array_push($event_end_day_array, ''); + array_push($event_entry1_array, $event_entry1); + array_push($event_array, $event); + array_push($event_entry3_array, $event_entry3); + array_push($event_weekly_array, ''); + array_push($event_exceptions_array, ''); + array_push($event_yearly_array, ''); + array_push($event_yearly2_array, ''); + array_push($event_link_icon_array, $event_link_icon); + array_push($event_link_adr_array, $event_link_adr); + array_push($event_link_txt_array, $event_link_txt); + array_push($event_info_icon_array, $event_info_icon); + array_push($event_info_txt_array, $event_info_txt); + array_push($event_time_array, $event_time); + array_push($event_end_time_array, $event_end_time); + array_push($event_dailytimes_array, ''); + array_push($event_time2_array, $event_time2); + array_push($event_description_array,$description); + array_push($event_bookedout_array, $addbookedout); + array_push($oldlong_array, ''); + } + } + + } + } +} + +// print_r($oldlong_array); +// print_r($event_array); + + +// headline at the beginning of the event list, giving the period of events displayed +// =================================================================================== +$textmonth = date("F",mktime(1,1,1,$month,1,$year)); +$monthnames = explode(",", $plugin_tx['calendar']['names_of_months']); + +//text annoucing the shown period +if(!$calendar_cf['show_future_months'] && !$calendar_cf['show_past_months']) { + $periodtext1 = $plugin_tx['calendar']['notice_telling_month_of_events']; + $startperiod = $monthnames[$month - 1]." ".$year; + $periodtext2 = ''; + $endperiod = ''; +} else { + $periodtext1 = $plugin_tx['calendar']['notice_telling_period_of_events']; + $startperiod = $monthnames[$month - 1]." ".$year; + $periodtext2 = $plugin_tx['calendar']['event_date_till_date']; + $endperiod = $monthnames[$display_end_month-1]." ".$display_end_year; +} +$gotopresentmonth = $showlinktopresentmonth ? + ''.$plugin_tx['calendar']['link_to_present_month'].'' : ''; + +if(!$tablestyle) { + //template driven display + $o .=$gotopresentmonth? '

    '.$gotopresentmonth."

    \n" : ''; + $o .= str_replace( + array( + '%start%', + '%end%', + '%till%', + '%period%' + ), + array( + $startperiod, + $endperiod, + $periodtext2, + $periodtext1, + ),$template[1]); +} elseif ($calendar_cf['show_period_of_events']){ + // spreadsheet table style + $o .="

    $periodtext1 $startperiod $periodtext2 $endperiod".tag('br')."$gotopresentmonth

    \n"; +} else $o .=$gotopresentmonth? '

    '.$gotopresentmonth."

    \n" : ''; + +// the number of table columns is calculated +// starting with minimum number of columns (date + main entry) +$tablecols = 2; +// adding columns according to config settings +if ($calendar_cf['show_event_time']) $tablecols++; +if ($calendar_cf['show_event_entry3']) $tablecols++; +if ($calendar_cf['show_event_entry1']) $tablecols++; +if ($calendar_cf['show_event_link']) $tablecols++; + + + +//======================================================== +// +// making the table for weekly events ordered by weekdays +// +//======================================================== +if($tablestyle) {$o .="\n";} else {$o .= "
    \n";} + +$longdayname_array = explode(",", $plugin_tx['calendar']['names_of_days_longform']); +$shortdayname_array = explode(",", $plugin_tx['calendar']['names_of_days']); + +// if description has extra text, the subhead (= Date, Time, Event etc.) is repeated again, +// normally it appears only after the month of the events is displayed +$extrasubhead = 0; + +// subhead (= Date, Time, Event etc.) comes after the month/weekday as headline +$subhead = "
    \n"; +$subhead .= "\n"; +if ($calendar_cf['show_event_time']){ + $subhead .= "\n"; +} +if ($calendar_cf['show_event_entry1']){ + $subhead .= "\n"; +} +$subhead .= "\n"; +if ($calendar_cf['show_event_entry3']){ + $subhead .= "\n"; +} +if ($calendar_cf['show_event_link']){ + $subhead .= "\n"; +} +$subhead .= "\n"; + + +//preparing headline single events +$headline_singleevents = ''; +$print_headline_singleevents = 0; //counter to make sure this headline is printed only once, when counter == 1 + +//headline annoncing weekly section, will be shown always when there are weekly events, even if no other events are there +if(in_array(TRUE,$event_weekly_array)) { + if($tablestyle) { + $o .= sprintf($plugin_cf['calendar']['style_headline_eventtype'],$plugin_tx['calendar']['headline_weekly_events']); + } else { + //template driven display + $o .= str_replace('%weekly%',$plugin_tx['calendar']['headline_weekly_events'],$template[2]); + } +} else $print_headline_singleevents = 2; //2 meaning, the headline for singleevents will not be printed, as no weekly events are there + +$x = 1; +while($x<=7){ + + $longweekday = ''; + $shortweekday = ''; + $weekdayheader = $template[3]; + + // false is default value, as there may be no weekly event on the considered weekday + $table=false; + + // checking if weekly events happen on the considered day + // the decision, if a weekly event is past or not, has already been taken + if (in_array($x,$event_weekday_array)){ + $table=true; + } + // building headings starting with dayname + $y = $x-1; //subtraction to get [0] for sundays + if($table && $tablestyle){ + $o .="\n"; + $o .="\n"; + $o .="\n"; + $o .= $subhead; + $extrasubhead = 0; + } elseif($table) { + // template driven display + $longweekday = $longdayname_array[$y]; + $shortweekday = $shortdayname_array[$y]; + $weekdayheader = str_replace(array('%longweekday%','%shortweekday%'), + array($longweekday,$shortweekday), $weekdayheader); + $o .= $weekdayheader; + } + + + + foreach($event_weekday_array as $keys=>$temp){ + + // template driven display + $date = ''; + $time = ''; + $field1 = ''; + $mainfield = ''; + $field3 = ''; + $field4 = ''; + $weeklyevents = $template[4]; + $pastweeklyevents = $template[5]; + + if($event_weekday_array[$keys]==$x){ + + // enddate determines if an event is past or not + If($event_end_day_array[$keys]) { + $eventenddate = $event_end_year_array[$keys].$event_end_month_array[$keys].$event_end_day_array[$keys]; + $past = ($eventenddate < $today && $markpast)? ' past_event' : ''; + } else $past = ''; + + + if($extrasubhead) { + $o .= $subhead; + $extrasubhead = 0; + } + + // separate Data and design, 1st: create the Data + // ============================================== + // if beginning and end dates are there, these are put one under the other + if ($event_end_day_array[$keys]) { + $date .= $event_day_array[$keys]; + if ( $event_month_array[$keys] != $event_end_month_array[$keys] + || $event_year_array[$keys] != $event_end_year_array[$keys]) $date .= dpSeperator().$event_month_array[$keys] ; + if ($event_year_array[$keys]!=$event_end_year_array[$keys]) $date .= dpSeperator().$event_year_array[$keys] ; + if ($event_year_array[$keys]==$event_end_year_array[$keys] && dpSeperator()=='.') $date.= "."; + $date .= " ".$plugin_tx['calendar']['event_date_till_date'] . ' '; + $date .= $event_end_day_array[$keys].dpSeperator().$event_end_month_array[$keys].dpSeperator().$event_end_year_array[$keys]; + } elseif ($today < $event_year_array[$keys].$event_month_array[$keys].$event_day_array[$keys]) { + $date .= $plugin_tx['calendar']['event_weekly_starting_on'] + . ' ' . $event_day_array[$keys].dpSeperator().$event_month_array[$keys].dpSeperator().$event_year_array[$keys]; + } else { + $date .= $plugin_tx['calendar']['event_weekly_ongoing']; + } + if ($event_exceptions_array[$keys]) { + $date .= ' ' . $plugin_tx['calendar']['event_except'] . ' ' + . $event_exceptions_array[$keys]; + } + + // create time field + $time = $event_time_array[$keys]; + if ($event_end_time_array[$keys]) { + $time .= ' ' . $plugin_tx['calendar']['event_time_till_time'] . ' ' . $event_end_time_array[$keys]; + } + + // create field1 = event_entry1 field + $field1 = $event_entry1_array[$keys]; + + + // create $mainfield = event field + $mainfield = $event_array[$keys]; + + // create $field3 = event_entry3 field + $field3 = $event_entry3_array[$keys]; + + // create $field4 = link and link-text or info-text field + $spacer = ($event_link_txt_array[$keys]) ? ' ' : ''; + + // if a link address has been given, there are different cases + $field4 = ''; + if ($event_link_adr_array[$keys]) { + $links = explode('|', $event_link_adr_array[$keys]); + $linktexts = explode('|', $event_link_txt_array[$keys]); + foreach ($links as $key=>$value) { + $addr = substr($value,4); + $type = substr($value, 0,4); + $icon = $event_link_icon_array[$keys]? icon($type,$past) . $spacer : ''; + if(!isset($linktexts[$key])) $linktexts[$key] = ''; + + switch ($type) { + case 'pfx:': + case 'ext:': $field4 .= "". $icon . $linktexts[$key] .''; + break; + + case 'int:': $field4 .= ''. $icon . $linktexts[$key] . "\n"; + break; + + case 'in?:': $field4 .= ''. $icon . $linktexts[$key] . "\n"; + break; + + case 'doc:': + case 'pdf:': $field4 .= ''. $icon . $linktexts[$key] ."\n"; + break; + } + } + } + $spacer = ($event_link_icon_array[$keys]) ? ' ' : $spacer; + if($event_info_icon_array[$keys] && $event_info_txt_array[$keys]) { + $wider = $event_info_icon_array[$keys]==2? ' wider':''; + $field4 .= "$spacer" + . icon("info",$past) . "" . $event_info_txt_array[$keys] . ""; + } + if(!$event_info_icon_array[$keys] && $event_info_txt_array[$keys]) { + $field4 .= $spacer . $event_info_txt_array[$keys]; + } + + + $field5 = $event_description_array[$keys]; + + if($event_bookedout_array[$keys] && !$past) { + $eventfull = ' eventfull'; + $noticefull = ''; + $noticefull2 = $plugin_tx['calendar']['event_booked_out']; + } else $eventfull = $noticefull = $noticefull2 = ''; + + + // Now put the data into the design, i.e. the table or the template + // ================================================================ + if($tablestyle) { + + // use date field data + $o .="$noticefull\n"; + $o .="\n"; + + // use time field + if ($calendar_cf['show_event_time'] && $tablestyle){ + $o .="\n"; + } + + // field 1, the extra field + if ($calendar_cf['show_event_entry1']) { + $o .="\n"; + } + + // main entry field + $o .="\n"; + + // $field3 secondary entry field + if ($calendar_cf['show_event_entry3']) { + $o .="\n"; + } + + // use $field4, the event link etc field + if ($calendar_cf['show_event_link']) { + $o .="\n\n"; + } + + // use $field 5, the additional description field + if ($calendar_cf['show_event_description']) { + // how much indented is the description going to start? + $indentation = $calendar_cf['show_description_nr_of_cells_indented']; + if(!$indentation) $indentation=0; + // preventing that $indentation gets too big + if ($indentation >= $tablecols) $indentation = $tablecols - 1; + + if (strlen($event_description_array[$keys]) > 1) { + if(!$past) $extrasubhead = 1; + $o .= "\n"; + // if indentation is wanted, here it comes + if ($indentation) $o .= "\n"; + $o .= "\n\n"; + } + } + + //template driven display + } elseif($past) { + $o .= str_replace(array('%longweekday%','%shortweekday%','%date%','%time%','%field1%', + '%mainfield%','%field3%','%infolink%','%description%','%ended%'), + array($longweekday,$shortweekday,$date,$time,$field1, + $mainfield,$field3,$field4,$field5,$plugin_tx['calendar']['event_has_ended']), + $pastweeklyevents); + } else { + $o .= str_replace(array('%bookedout%','%longweekday%','%shortweekday%','%date%','%time%','%field1%','%mainfield%','%field3%','%infolink%','%description%'), + array($noticefull2,$longweekday,$shortweekday,$date,$time,$field1,$mainfield,$field3,$field4,$field5), $weeklyevents); + } + } + } + $x++; +} + +if($tablestyle) {$o .="
    ".$plugin_tx['calendar']['event_date']."".$plugin_tx['calendar']['event_time']."".$plugin_tx['calendar']['event_entry1']."".$plugin_tx['calendar']['event_main_entry']."".$plugin_tx['calendar']['event_entry3']."
    $longdayname_array[$y]

    ' + . $plugin_tx['calendar']['event_booked_out'] + . '

    "; + $o .= $date; + $o .= "$time$field1$mainfield$field3
     $field5
    \n";} else {$o .= "
    \n";} + + +//============================================================== +// +// making the table for single one-off events listed by month +// +//============================================================== + +// sorting all events according to date and time +asort($event_day_time_array); + +//print_r($event_time2_array); +//print_r($event_array); + + +// headline single events section +// to separate these events from weekly events, in case there are weekly and also other events +if(in_array(TRUE,$event_weekly_array) && in_array(FALSE,$event_weekly_array)) { + if($tablestyle) { + $headline_singleevents = sprintf($plugin_cf['calendar']['style_headline_eventtype'],$plugin_tx['calendar']['headline_single_events']); + } else { + //template driven display + $headline_singleevents = str_replace('%single%',$plugin_tx['calendar']['headline_single_events'],$template[6]); + } +} + +if($tablestyle) {$o .="\n";} else {$o .= "
    \n";} + +// Now all months of the considered period will be gone through one by one +// first run ($x=0) is for old long lasting events started before the considered period and still going on +$x=0; +while($x<=$end_month){ + + // initializing template values + $monthheader = $template[7]; + + $textmonth = $monthnames[$month - 1]; + + // false is default value, as there may be no event in the considered month + $table=false; + + // checking if an event is in the considered month + // 1st case no past events. Past event will be eliminated later, now the headlines + // have to be checked. Special care is taken for the present month, here the array with + // comparision of the event day against the present day is used + if($x && $show_no_past_event) { + if($month == $presentmonth && in_array($year.$month.'1',$event_notpast_array)) { + $table=true; + } elseif($month != $presentmonth && in_array(($month.".".$year),$event_yearmonth_array)) { + $table=true; + } + } + // 2nd case, all events, even if past, of the month in calculation will tigger the header + if ($x && !$show_no_past_event && in_array(($month.".".$year),$event_yearmonth_array)){ + $table=true; + } + if (!$x && in_array('1',$oldlong_array)) $table=true; + + // headline single events? + if($table) { + $print_headline_singleevents++; + $o .= $print_headline_singleevents==1? $headline_singleevents : ''; + } + + // month header + // ------------ + $printtextmonth = $x? $textmonth:$plugin_tx['calendar']['headline_started_earlier']; + $printyear = $x? $year:''; + + if($table && $tablestyle){ + $o .= "
    \n"; + $o .= "\n"; + $o .= "\n"; + $o .= $subhead; + $extrasubhead = 0; + + } elseif($table && !$tablestyle) { + // for template driven display + $monthheader = str_replace(array('%month%','%year%'), + array($printtextmonth,$printyear), $monthheader); + $o .= $monthheader; + } + + + foreach($event_day_array as $keys=>$temp){ + + // initializing values for template driven display + $date = ''; + $time = ''; + $field1 = ''; + $mainfield = ''; + $field3 = ''; + $field4 = ''; + $yearlyevents = $template[8]; + $yearly2events = $template[9]; + $pastyearlyevents = $template[10]; + $singleevents = $template[11]; + $pastsingleevents = $template[12]; + + + //=====================================================================================// + // Y E A R L Y E V E N T S with (=yearly) or without (=yearly2) ) age calculation // + //=====================================================================================// + $extracondition = ($show_no_past_event && $year.$event_month_array[$keys].$event_day_array[$keys]<$today)? FALSE:TRUE; + if( $x + && ($event_yearly_array[$keys] || $event_yearly2_array[$keys]) + && ($event_month_array[$keys] == $month) + && $extracondition) { + + $month = str_pad($month,2,'0',STR_PAD_LEFT); + + $age = $year - $event_year_array[$keys]; + if ($age >= 0){ + + // headline single events? + if($table) { + $print_headline_singleevents++; + $o .= $print_headline_singleevents==1? $headline_singleevents : ''; + } + + + if (!$table && $tablestyle){ + + // headline with month has to be generated in case it has not yet been done + $table=true; + $print_headline_singleevents++; + $o .= $print_headline_singleevents==1? $headline_singleevents : ''; + + $o .= "\n"; + $o .= "\n"; + $o .= "\n"; + $o .= $subhead; + $extrasubhead = 0; + + } elseif (!$table && !$tablestyle) { + // same for template driven display + $o .= str_replace(array('%month%','%year%'),array($textmonth,$year), $monthheader); + } + + // checking if the birthday-event to be shown is in the past + $eventdate = $year.$event_month_array[$keys].$event_day_array[$keys]; + + $pastbirthday = ($eventdate < $today && $markpast)? " past_event" : ''; + + + $date = $event_day_array[$keys].dpSeperator().$month.dpSeperator().$year; + + $time = $event_time_array[$keys]; + if ($event_end_time_array[$keys]) { + $time .= ' '.$plugin_tx['calendar']['event_time_till_time'].' '. $event_end_time_array[$keys]; + } + + $field1 = $event_entry1_array[$keys]; + + $mainfield = $event_array[$keys]; + + //preparing the age output + if($event_yearly_array[$keys]) { + $agefield = ''; + if ($age >= 5){ + $agefield .= "$age ".$plugin_tx['calendar']['age_5_and_more_years_old']; + } + elseif ($age >= 2 and $age < 5){ + $agefield .= "$age ".$plugin_tx['calendar']['age_2-4_years_old']; + } + else { + $agefield .= "$age ".$plugin_tx['calendar']['age_1_year_old']; + } + $agefield .= ''; + } else $agefield = ''; + + $field3 = $event_entry3_array[$keys]; + + // link and link-text or info-text field + + $spacer = ($event_link_txt_array[$keys]) ? ' ' : ''; + + // if a link address has been given, there are different cases + $field4 = ''; + if ($event_link_adr_array[$keys]) { + $links = explode('|', $event_link_adr_array[$keys]); + $linktexts = explode('|', $event_link_txt_array[$keys]); + foreach ($links as $key=>$value) { + $addr = substr($value,4); + $type = substr($value, 0,4); + $icon = $event_link_icon_array[$keys]? icon($type,$pastbirthday) . $spacer : ''; + if(!isset($linktexts[$key])) $linktexts[$key] = ''; + + switch ($type) { + case 'pfx:': + case 'ext:': $field4 .= "". $icon . $linktexts[$key] .''; + break; + + case 'int:': $field4 .= ''. $icon . $linktexts[$key] . "\n"; + break; + + case 'in?:': $field4 .= ''. $icon . $linktexts[$key] . "\n"; + break; + + case 'doc:': + case 'pdf:': $field4 .= ''. $icon . $linktexts[$key] ."\n"; + break; + } + } + } + + $spacer = ($event_link_icon_array[$keys]) ? ' ' : $spacer; + if($event_info_icon_array[$keys] && $event_info_txt_array[$keys]) { + $wider = $event_info_icon_array[$keys]==2? ' wider':''; + $field4 .= "$spacer" + . icon("info",$pastbirthday) . "" . $event_info_txt_array[$keys] . ""; + } + if(!$event_info_icon_array[$keys] && $event_info_txt_array[$keys]) { + $field4 .= $spacer . $event_info_txt_array[$keys]; + } + + $field5 = $event_description_array[$keys] ; + + if($event_bookedout_array[$keys] && !$pastbirthday) { + $eventfull = ' eventfull'; + $noticefull = ''; + $noticefull2 = $plugin_tx['calendar']['event_booked_out']; + } else $eventfull = $noticefull = $noticefull2 = ''; + + + // Now put the data into the design, i.e. the table or the template + // ================================================================ + if($tablestyle) { + + if($extrasubhead) { + $o .= $subhead; + $extrasubhead = 0; + } + + // use date field data + if($event_yearly_array[$keys]) {$o .= "$noticefull\n";} + else {$o .= "$noticefull\n";} + + $o .= '\n"; + + // use time field + if ($calendar_cf['show_event_time']){ + $o .= "\n"; + } + + // field 1, the extra field + if ($calendar_cf['show_event_entry1']) { + $o .= "\n"; + } + + // main entry field + $o .= "\n"; + + // $field3 secondary entry field + if ($calendar_cf['show_event_entry3']) { + $o .="\n"; + } + + // use $field4, the event link etc field + if ($calendar_cf['show_event_link']) { + $o .="\n\n"; + } + + // use $field 5, the additional description field + if ($calendar_cf['show_event_description']) { + // how much indented is the description going to start? + $indentation = $calendar_cf['show_description_nr_of_cells_indented']; + if(!$indentation) $indentation=0; + // preventing that $indentation gets too big + if ($indentation >= $tablecols) $indentation = $tablecols - 1; + + if (strlen($event_description_array[$keys]) > 2) { + if(!$pastbirthday) $extrasubhead = 1; + $o .= "\n"; + // if indentation is wanted, here it comes + if ($indentation) $o .= "\n"; + $o .= "\n\n"; + } + } + + + //template driven display + } elseif($pastbirthday) { + $o .= str_replace(array('%date%','%time%','%field1%','%mainfield%','%field3%','%infolink%','%description%','%age%','%ended%'), + array($date,$time,$field1,$mainfield,$field3,$field4,$field5,$agefield,$plugin_tx['calendar']['event_has_ended']), $pastyearlyevents); + } elseif($event_yearly_array[$keys]) { + $o .= str_replace(array('%bookedout%','%date%','%time%','%field1%','%mainfield%','%field3%','%infolink%','%description%','%age%'), + array($noticefull2,$date,$time,$field1,$mainfield,$field3,$field4,$field5,$agefield), $yearlyevents); + } else { + $o .= str_replace(array('%bookedout%','%date%','%time%','%field1%','%mainfield%','%field3%','%infolink%','%description%'), + array($noticefull2,$date,$time,$field1,$mainfield,$field3,$field4,$field5), $yearly2events); + } + + } // end of at least 0 years age conditon + } // end of yearly events condition + + //===============================// + // now N O R M A L events // + //===============================// + + // checking if the event is past to display it in gray + // in long events the enddate is considered + If($event_end_day_array[$keys] && !$event_yearly_array[$keys]) { + $eventdate = $event_end_year_array[$keys].$event_end_month_array[$keys].$event_end_day_array[$keys]; + } else { + $eventdate = $event_year_array[$keys].$event_month_array[$keys].$event_day_array[$keys]; + } + $reallypast = ($eventdate < $today)? " past_event" : ''; + $past = $markpast? $reallypast : ''; + + // checking if a long event started before the shown period and continues into the shown period (would be forgotten if not specially considered!) + //if($x == 0 && $event_year_array[$keys] * 100 + $event_month_array[$keys] < $year * 100 + $month && !$reallypast) $oldlonglastingevent = 1; + + // define the conditions for an event to be selected under a specific month heading + //---------------------------------------------------------------------------------- + $addcondition = $show_no_past_event? !$past : TRUE; + if(!$event_yearly_array[$keys] + && !$event_yearly2_array[$keys] + && !$event_weekly_array[$keys] + && ( + ($x && $event_year_array[$keys] == $year && $event_month_array[$keys] == $month && $addcondition) + || (!$x && $oldlong_array[$keys]) + ) + ) + + { + $month = str_pad($month,2,'0',STR_PAD_LEFT); + + // separate Data and design, 1st: create the Data + // ============================================== + + //date field + $date = $event_day_array[$keys]; + // if beginning and end dates are there, these are put one under the other + if ($event_end_day_array[$keys]) { + + if ($month!=$event_end_month_array[$keys] + || $year!=$event_end_year_array[$keys] + || $oldlong_array[$keys]) $date .= dpSeperator().$event_month_array[$keys] ; + if ($year!=$event_end_year_array[$keys] + || ($oldlong_array[$keys] + && $event_year_array[$keys]!=$event_end_year_array[$keys])) { + $date .= dpSeperator().$event_year_array[$keys] ; + } elseif (dpSeperator()=='.') $date.= "."; + $date .= ' '.$plugin_tx['calendar']['event_date_till_date'] . ' '; + $date .= $event_end_day_array[$keys].dpSeperator().$event_end_month_array[$keys].dpSeperator().$event_end_year_array[$keys]; + + } else $date .= dpSeperator()."$month".dpSeperator().$year; + if ($event_exceptions_array[$keys]) { + $date .= ' ' . $plugin_tx['calendar']['event_except'] . ' ' + . $event_exceptions_array[$keys]; + } + + + //time field + $startday = ''; + $endday = ''; + if ($event_end_day_array[$keys] && $event_end_time_array[$keys] && !$event_dailytimes_array[$keys]) { + + $startdaynr = date('w',mktime(0,0,0,$event_month_array[$keys],(int)$event_day_array[$keys],$event_year_array[$keys])); + $startday = ' ' . $shortdayname_array[$startdaynr]; + $enddaynr = date('w',mktime(0,0,0,$event_end_month_array[$keys],(int)$event_end_day_array[$keys],$event_end_year_array[$keys])); + $endday = ' ' . $shortdayname_array[$enddaynr]; + } + if ($calendar_cf['show_event_time']){ + $time .= $event_dailytimes_array[$keys]? $plugin_tx['calendar']['event_daily'].' ' : ''; + $time .= $event_time_array[$keys]; + $time .= $startday; + if ($event_end_time_array[$keys]) { + $time .= ' ' . $plugin_tx['calendar']['event_time_till_time'] . ' ' . $event_end_time_array[$keys] . $endday; + } + } + + // create field1 = event_entry1 field + $field1 = $event_entry1_array[$keys]; + + // create $mainfield = event field + $mainfield = $event_array[$keys]; + + // create $field3 = event_entry3 field + $field3 = $event_entry3_array[$keys]; + + // create $field4 = link and link-text or info-text field + $spacer = ($event_link_txt_array[$keys]) ? ' ' : ''; + + // if a link address has been given, there are different cases + $field4 = ''; + if ($event_link_adr_array[$keys]) { + $links = explode('|', $event_link_adr_array[$keys]); + $linktexts = explode('|', $event_link_txt_array[$keys]); + foreach ($links as $key=>$value) { + $addr = substr($value,4); + $type = substr($value, 0,4); + $icon = $event_link_icon_array[$keys]? icon($type,$past) . $spacer : ''; + if(!isset($linktexts[$key])) $linktexts[$key] = ''; + + + switch ($type) { + case 'pfx:': + case 'ext:': $field4 .= "". $icon . $linktexts[$key] .''; + break; + + case 'int:': $field4 .= ''. $icon . $linktexts[$key] . "\n"; + break; + + case 'in?:': $field4 .= ''. $icon . $linktexts[$key] . "\n"; + break; + + case 'doc:': + case 'pdf:': $field4 .= ''. $icon . $linktexts[$key] ."\n"; + break; + } + } + } + $spacer = ($event_link_icon_array[$keys]) ? " " : $spacer; + if($event_info_icon_array[$keys] && $event_info_txt_array[$keys]) { + $wider = $event_info_icon_array[$keys]==2? ' wider':''; + $field4 .= "$spacer" + . icon("info",$past) . "" . $event_info_txt_array[$keys] . ""; + } + if(!$event_info_icon_array[$keys] && $event_info_txt_array[$keys]) { + $field4 .= $spacer . $event_info_txt_array[$keys]; + } + + + $field5 = $event_description_array[$keys]; + + if($event_bookedout_array[$keys] && !$past) { + $eventfull = ' eventfull'; + $noticefull = ''; + $noticefull2 = $plugin_tx['calendar']['event_booked_out']; + } else $eventfull = $noticefull = $noticefull2 = ''; + + + // Now put the data into the design, i.e. the table or the template + // ================================================================ + if($tablestyle) { + + if($extrasubhead) { + $o .= $subhead; + $extrasubhead = 0; + } + + // use date field data + $o .="$noticefull\n"; + $o .="\n"; + + // use time field + if ($calendar_cf['show_event_time'] && $tablestyle){ + $o .="\n"; + } + + // field 1, the extra field + if ($calendar_cf['show_event_entry1']) { + $o .="\n"; + } + + // main entry field + $o .="\n"; + + // $field3 secondary entry field + if ($calendar_cf['show_event_entry3']) { + $o .="\n"; + } + + // use $field4, the event link etc field + if ($calendar_cf['show_event_link']) { + $o .="\n\n"; + } + + // use $field 5, the additional description field + if ($calendar_cf['show_event_description']) { + // how much indented is the description going to start? + $indentation = $calendar_cf['show_description_nr_of_cells_indented']; + if(!$indentation) $indentation=0; + // preventing that $indentation gets too big + if ($indentation >= $tablecols) $indentation = $tablecols - 1; + + if (strlen($event_description_array[$keys]) > 2) { + if(!$past) $extrasubhead = 1; + $o .= "\n"; + // if indentation is wanted, here it comes + if ($indentation) $o .= "\n"; + $o .= "\n\n"; + } + } + + //template driven display + } elseif($past) { + $o .= str_replace(array('%date%','%time%','%field1%','%mainfield%','%field3%','%infolink%','%description%','%ended%'), + array($date,$time,$field1,$mainfield,$field3,$field4,$field5,$plugin_tx['calendar']['event_has_ended']), $pastsingleevents); + } else { + $o .= str_replace(array('%bookedout%','%date%','%time%','%field1%','%mainfield%','%field3%','%infolink%','%description%'), + array($noticefull2,$date,$time,$field1,$mainfield,$field3,$field4,$field5), $singleevents); + } + + } // end of conditions to use an event under a specific month + } // end of foreach loop, looping through all event and selecting the ones from the currend month + + if($x) { + if($month==12) { + $year++;$month=1; + } else { + $month++; + } + } + $x++; + +} // end of while loop, looping through the months +if($tablestyle) {$o .= "
    $printtextmonth $printyear".tag('br')."
    $textmonth $year".tag('br')."

    ' + . $plugin_tx['calendar']['event_booked_out'] + . '

    '; + $o .= $date; + $o .= "$time$field1$mainfield $agefield$field3
     $field5

    ' + . $plugin_tx['calendar']['event_booked_out'] + . '

    "; + $o .= $date; + $o .= "$time$field1$mainfield$field3
     $field5
    \n";} else {$o .= "\n";} diff --git a/includes/eventlistconfig.php b/includes/eventlistconfig.php new file mode 100644 index 0000000..452cdf3 --- /dev/null +++ b/includes/eventlistconfig.php @@ -0,0 +1,549 @@ + $iconset, + 'show_event_time' => $time, + 'show_event_entry3' => $entry3, + 'show_event_entry1' => $entry1, + 'show_event_link' => $link, + 'show_event_description' => $description, + 'nr_of_cells_indented' => $indented, + 'show_field_no_marquee' => $nomarquee, + 'show_field_booked_out' => $showbookedout, + 'show_future_months' => $futuremonths, + 'show_past_months' => $pastmonths, + 'show_period_of_events' => $showperiod, + 'show_field_daily_times' => $showdailytimes, + 'show_field_weekly' => $showweekly, + 'show_field_yearly' => $showyearly, + 'test_event_list_template' => $listtemplate, + 'mastercolor' => $mastercolor, + 'show_field_exceptions' => $showexceptions, + 'show_field_multievent' => $showmultievent, + 'show_no_past_event' => $nopastevent, + 'show_grey_past_events' => $greypastevents, + 'show_field_mark2' => $showmark2, + ), + $configfile,1); + //save the values + file_put_contents($pth['folder']['plugins'] . $plugin . '/config/config2.php',$configfile); + //and get the changed config values again + include ($pth['folder']['plugins'] . $plugin .'/config/config2.php'); + + //same with language file + $languagefile = file_get_contents($pth['folder']['plugins'] . $plugin . "/languages/$sl.php"); + $languagefile = changevalue( + array( + '_event_page' => $eventlistpage, + 'event_date' => $datename, + 'event_time' => $timename, + 'event_main_entry' => $eventname, + 'event_entry3' => $entry3name, + 'event_entry1' => $entry1name, + 'event_link_etc' => $linkname, + ), + $languagefile,2); + file_put_contents($pth['folder']['plugins'] . $plugin . "/languages/$sl.php",$languagefile); + include ($pth['folder']['plugins'] . $plugin ."/languages/$sl.php"); + + //prepare some css values + $csseventfontweight = $eventfontweight? 'bold':'normal'; + + //change the css-values + $cssfile = changevalue(array( + 'b1' => $datewidth, + 'b2' => $timewidth, + 'b3' => $eventwidth, + 'b4' => $eventcolor, + 'b5' => $entry3width, + 'b6' => $entry3color, + 'b7' => $linkwidth, + 'b8' => $linkcolor, + 'b9' => $datecolor, + 'b10' => $timecolor, + 'b11' => $birthdaycolor, + 'b12' => $csseventfontweight, + 'b13' => $entry1width, + 'b14' => $entry1color, + 'b15' => $listfont, + 'b16' => $listfontsize, + 'b17' => $subheadfontsize, + 'b18' => $monthfontsize, + ),$cssfile); + + if(strlen($cssfile) > ($cssfilelength - 150)) //to prevent accidental erasure of css-file + { + file_put_contents($pth['folder']['plugins'] . '/calendar/css/stylesheet.css',$cssfile); + $hjs .= ''."\n"; + } +} + +// change the template +if ($calendar_cf['test_event_list_template']) { + $cf['site']['template'] = $calendar_cf['test_event_list_template']; + $pth['folder']['template'] = $pth['folder']['templates'].$cf['site']['template'].'/'; + $pth['file']['template'] = $pth['folder']['template'].'template.htm'; + $pth['file']['stylesheet'] = $pth['folder']['template'].'stylesheet.css'; + $pth['folder']['menubuttons'] = $pth['folder']['template'].'menu/'; + $pth['folder']['templateimages'] = $pth['folder']['template'].'images/'; +} + + +$timechecked = $calendar_cf['show_event_time'] ? 'checked="checked"' : ''; +$entry3checked = $calendar_cf['show_event_entry3'] ? 'checked="checked"' : ''; +$entry1checked = $calendar_cf['show_event_entry1'] ? 'checked="checked"' : ''; +$linkchecked = $calendar_cf['show_event_link'] ? 'checked="checked"' : ''; +$descriptionchecked = $calendar_cf['show_event_description'] ? 'checked="checked"' : ''; +$nomarqueechecked = $calendar_cf['show_field_no_marquee'] ? 'checked="checked"' : ''; +$showmark2checked = $calendar_cf['show_field_mark2'] ? 'checked="checked"' : ''; +$showbookedoutchecked = $calendar_cf['show_field_booked_out'] ? 'checked="checked"' : ''; +$nopasteventchecked = $calendar_cf['show_no_past_event'] ? 'checked="checked"' : ''; +$greypasteventschecked = $calendar_cf['show_grey_past_events'] ? 'checked="checked"' : ''; +$showperiodchecked = $calendar_cf['show_period_of_events'] ? 'checked="checked"' : ''; +$showdailytimeschecked = $calendar_cf['show_field_daily_times'] ? 'checked="checked"' : ''; +$showweeklychecked = $calendar_cf['show_field_weekly'] ? 'checked="checked"' : ''; +$showyearlychecked = $calendar_cf['show_field_yearly'] ? 'checked="checked"' : ''; +$showexceptionschecked = $calendar_cf['show_field_exceptions'] ? 'checked="checked"' : ''; +$showmultieventchecked = $calendar_cf['show_field_multievent'] ? 'checked="checked"' : ''; +$eventfontweightchecked = $eventfontweight ? 'checked="checked"' : ''; + +// js file for color picker +$hjs .= ''; + +$o .= "\n\n\n\n"; +$o .= "
    \n"; +$o .= tag('input type="hidden" value="config" name="config"') . "\n"; + + + +// icon set +$handle = opendir($pth['folder']['plugins'].'calendar/images/'); +$iconfolders = array(); +while(false !== ($folder = readdir($handle))) { + if(strpos($folder,'past')===FALSE && strpos($folder,'.')===FALSE){ + $iconfolders[] = $folder; + } +} +natcasesort($iconfolders); +$iconlist = ''; +$iconfolder_select = ''; +foreach($iconfolders as $folder){ + $selected = ''; + if($folder == $calendar_cf['icon-set']) {$selected = ' selected';} + $iconfolder_select .= "\n\t".''; +} +$o .= '
    '; + +$o .= '' + . tag('input type="image" src="' + . $imageFolder + . '/help_icon.png" style="width:16;height:16;" alt="Help"') + . ''.showIcons().' Icon set nº: '; + +$o .= ""; + +$o .= " \n" . icon("int") . " \n" . icon("info") . " \n" . icon("ext") ."\n\n"; + + +/* +// select event-list style template +$handle=opendir($datapath); +$templates = array(); +while (false !== ($file = readdir($handle))) { + if(strpos($file, '.tpl')) { + $templates[$file] = $file; + } +} +closedir($handle); +natcasesort($templates); +$styles_select = ''; +foreach($templates as $file=>$eventliststyle){ + $selected = ''; + if($eventliststyle == $plugin_cf['calendar']['eventlist_style']) {$selected = ' selected';} + $styles_select .= "\n"; +} +$o .= '   ' . $plugin_tx['calendar']['config_eventlist_style'] . ': ' + . "\n\n"; +*/ + + +// font +$o .= '   ' . $plugin_tx['calendar']['config_fontfamily'] . ': '; +$o .= selectFont('listfont',$listfont,'listfontsize',$listfontsize)."\n\n"; + +// font-size subhead +$o .= '' . $plugin_tx['calendar']['config_subhead_fontsize'] . ': '; +$o .= selectFont('','','subheadfontsize',$subheadfontsize)."\n\n"; + +// font-size month etc +$o .= '' . $plugin_tx['calendar']['config_month_fontsize'] . ': '; +$o .= selectFont('','','monthfontsize',$monthfontsize)."\n\n"; + +$o .= "
    \n"; + + + + +$o .= '
    '; + +// date +$o .= '
    ' + . $plugin_tx['calendar']['config_date'] + . '
    ' + . $plugin_tx['calendar']['config_name'] . ': ' + . tag('input type="text" value="' + . $plugin_tx['calendar']['event_date'] . '" name="datename" style="width:9em"') + . ' ' + . $plugin_tx['calendar']['config_width'] . ': ' + . tag('input type="text" value="' + . $datewidth . '" name="datewidth" style="width:4em"') + . ' ' + . $plugin_tx['calendar']['config_color'] . ': ' + . tag('input type="text" class="color" id="date" value="' + . $datecolor . '" name="datecolor" id="datecolor"') + . "
    \n"; + +// time +$o .= '
    ' + . $plugin_tx['calendar']['config_time_on'] . ' ' + . tag('input type="checkbox" '.$timechecked.' value="1" name="time"') + . '
    ' + . $plugin_tx['calendar']['config_name'] . ': ' + . tag('input type="text" value="' + . $plugin_tx['calendar']['event_time'] . '" name="timename" style="width:9em"') + . ' ' + . $plugin_tx['calendar']['config_width'] . ': ' + . tag('input type="text" value="' + . $timewidth . '" name="timewidth" style="width:4em"') + . ' ' + . $plugin_tx['calendar']['config_color'] . ': ' + . tag('input type="text" class="color" id="time" value="' + . $timecolor . '" name="timecolor" id="timecolor"') + . "
    \n"; + +// entry 1 +$o .= '
    ' + . $plugin_tx['calendar']['config_on'] . ' ' + . tag('input type="checkbox" '.$entry1checked.' value="1" name="entry1"') + . '
    ' + . $plugin_tx['calendar']['config_name'] . ': ' + . tag('input type="text" value="' + . $plugin_tx['calendar']['event_entry1'] . '" name="entry1name" style="width:9em"') + . ' ' + . $plugin_tx['calendar']['config_width'] . ': ' + . tag('input type="text" value="' + . $entry1width . '" name="entry1width" style="width:4em"') + . ' ' + . $plugin_tx['calendar']['config_color'] . ': ' + . tag('input type="text" class="color" id="entry1" value="' + . $entry1color . '" name="entry1color" id="entry1color"') + . "
    \n"; + +// main event entry +$o .= '
    ' + . $plugin_tx['calendar']['config_event'] + . '
    ' + . $plugin_tx['calendar']['config_name'] . ': ' + . tag('input type="text" value="' + . $plugin_tx['calendar']['event_main_entry'] . '" name="eventname" style="width:9em"') + . ' ' + . $plugin_tx['calendar']['config_width'] . ': ' + . tag('input type="text" value="' + . $eventwidth . '" name="eventwidth" style="width:4em"') + . ' ' + . $plugin_tx['calendar']['config_color'] . ': ' + . tag('input type="text" class="color" id="mainentry" value="' + . $eventcolor . '" name="eventcolor" id="eventcolor"') + . ' ' + . tag('input type="checkbox" '.$eventfontweightchecked.' value="1" name="eventfontweight"') + . $plugin_tx['calendar']['config_bold'] . ' ' + + . "
    \n"; + +// entry 3 +$o .= '
    ' + . $plugin_tx['calendar']['config_on'] . ' ' + . tag('input type="checkbox" '.$entry3checked.' value="1" name="entry3"') + . '
    ' + . $plugin_tx['calendar']['config_name'] . ': ' + . tag('input type="text" value="' + . $plugin_tx['calendar']['event_entry3'] . '" name="entry3name" style="width:9em"') + . ' ' + . $plugin_tx['calendar']['config_width'] . ': ' + . tag('input type="text" value="' + . $entry3width . '" name="entry3width" style="width:4em"') + . ' ' + . $plugin_tx['calendar']['config_color'] . ': ' + . tag('input type="text" class="color" id="entry3" value="' + . $entry3color . '" name="entry3color" id="entry3color"') + . "
    \n"; + +// link etc +$o .= '
    ' + . $plugin_tx['calendar']['config_on'] . ' ' + . tag('input type="checkbox" '.$linkchecked.' value="1" name="link"') + . '
    ' + . $plugin_tx['calendar']['config_name'] . ': ' + . tag('input type="text" value="' + . $plugin_tx['calendar']['event_link_etc'] . '" name="linkname" style="width:9em"') + . ' ' + . $plugin_tx['calendar']['config_width'] . ': ' + . tag('input type="text" value="' + . $linkwidth . '" name="linkwidth" style="width:4em"') + . ' ' + . $plugin_tx['calendar']['config_color'] . ': ' + . tag('input type="text" class="color" id="link" value="' + . $linkcolor . '" name="linkcolor" id="linkcolor"') + . "
    \n"; + +// additional description +$j=0; +$values_select = ''; +for ($i = 0;$i <=3 ;$i++ ) { + $selected = ''; + if($i == $indented) {$selected = ' selected'; $j = 1;} + $values_select .= "\n\t"; +} + +$o .= '
    ' + . $plugin_tx['calendar']['config_on'] . ' ' + . tag('input type="checkbox" '.$descriptionchecked.' value="1" name="description"') + . '
    ' + . '"' . $plugin_tx['calendar']['event_description'] . '"' + . '    ' + . sprintf($plugin_tx['calendar']['config_indented'], + + + "\n") + . "
    \n"; + +$o .= '
    '; + + + +// birthday special color +$o .= '
    ' + . '
    ' + . ' 
    ' + . $plugin_tx['calendar']['config_birthday_color'] + . ': ' + . tag('input type="text" class="color" value="' + . $birthdaycolor . '" name="birthdaycolor"'); +$o .= "
    \n"; + + +// give all fields the same color through a master color picker +// this code was specially made by Jan Odvarko jscolor.com on request, many thanx, Jan +$o .= '
    ' + . '
    ' + . ' 
    ' + . $plugin_tx['calendar']['config_all_same_color'] + . ': ' + . tag('input id="master-picker" value="'.$mastercolor.'" name="mastercolor" ') + . ''; + + +$o .= "
    \n"; + + +$o .= '
    '; + + +// number of future and past months in event list and treatment of past events +$o .= '
    ' + . sprintf($plugin_tx['calendar']['config_event_list_period'] + , tag('input type="checkbox" '.$showperiodchecked.' value="1" name="showperiod"') + , tag('input type="text" value="' + . $calendar_cf['show_future_months'] . '" name="futuremonths" style="width:1.5em"') + , tag('input type="text" value="' + . $calendar_cf['show_past_months'] . '" name="pastmonths" style="width:1.5em"') + , tag('input type="checkbox" '.$greypasteventschecked.' value="1" name="greypastevents"') + , tag('input type="checkbox" '.$nopasteventchecked.' value="1" name="nopastevent"')) + . "
    \n"; + + +$o .= '
    '; + + +// input fields +$o .= '
    ' + . ''.$plugin_tx['calendar']['config_input_fields'] . ':  ' + . tag('input type="checkbox" '.$showmark2checked.' value="1" name="showmark2"') + . $plugin_tx['calendar']['event_mark2'] + . '   ' + . tag('input type="checkbox" '.$nomarqueechecked.' value="1" name="nomarquee"') + . $plugin_tx['calendar']['event_not_on_marquee'] + . '   ' + . tag('input type="checkbox" '.$showbookedoutchecked.' value="1" name="showbookedout"') + . $plugin_tx['calendar']['event_booked_out'] . '' + . '   ' + . tag('input type="checkbox" '.$showdailytimeschecked.' value="1" name="showdailytimes"') + . $plugin_tx['calendar']['event_times_are_daily'] . '' + . '   ' + . tag('input type="checkbox" '.$showweeklychecked.' value="1" name="showweekly"') + . $plugin_tx['calendar']['event_weekly'] . '' + . '   ' + . tag('input type="checkbox" '.$showyearlychecked.' value="1" name="showyearly"') + . $plugin_tx['calendar']['event_yearly'] . '' + . '   ' + . tag('input type="checkbox" '.$showexceptionschecked.' value="1" name="showexceptions"') + . $plugin_tx['calendar']['config_exceptions'] . '' + . '   ' + . tag('input type="checkbox" '.$showmultieventchecked.' value="1" name="showmultievent"') + . $plugin_tx['calendar']['config_additional'] . '' +// . '   ' +// . '"' . $plugin_tx['calendar']['event_entry3'] . '"= ' +// . tag('input type="checkbox" '.$entry3areachecked.' value="1" name="entry3area"') +// . $plugin_tx['calendar']['config_textarea'] . '' + . "
    \n"; + + +// event list page +$pages_select = ''; +$x = 0; +for ($i=0;$i<$cl;$i++) { + + $levelindicator = ''; + for ($j=1;$j<$l[$i];$j++) {$levelindicator .= '– ';} + $page = $levelindicator.$h[$i]; + $selected = ''; + if($plugin_tx['calendar']['_event_page'] == '?'.$u[$i]) {$selected = ' selected'; $x++;} + $pages_select .= "\n".''; +} +// in case just the name of a page was entered in the language-file +$preselect = (!$x && $plugin_tx['calendar']['_event_page'])? '' : ''; + +$o .= '
    ' + . $plugin_tx['calendar']['config_list_page'] . ': ' + . "\n" . '"; + +$o .= templateSelect($calendar_cf['test_event_list_template'],'listtemplate') + . $plugin_tx['calendar']['config_template'] . "
    \n"; + + + + +// save basic config +$o .= '
    ' + . tag('input type="submit" value="'.$plugin_tx['calendar']['menu_save_config'].'"') + . "
    \n"; + +$o .= "
    "; + diff --git a/includes/holidayconfig.php b/includes/holidayconfig.php new file mode 100644 index 0000000..a2b7d4c --- /dev/null +++ b/includes/holidayconfig.php @@ -0,0 +1,106 @@ +$value) { + if(!isset($holiday_delete[$key])) { + $newkey = $key; + if(isset($holiday_up[$key+1])) $newkey = $key + 1; + if(isset($holiday_up[$key])) $newkey = $key - 1; + $holidayarray[$newkey] = $holiday_date[$key] . ',' .$holiday_name[$key]; + } + } + if(isset($holiday_add[0])) $holidayarray[] = ','; + ksort($holidayarray); + $holidays = implode(';',$holidayarray); + + $languagefile = file_get_contents($pth['folder']['plugins'] . $plugin . "/languages/$sl.php"); + + // create language file entries if not there + if(!preg_match('!holydays\'\]="(.*)";!' ,$languagefile)) { + $languagefile = str_replace('?>',"\t".'$plugin_tx[\'calendar\'][\'holydays\']="";'."\n?>" ,$languagefile); + } + + $pattern = '!holydays\'\]="(.*)";!'; + $replacement = "holydays']=\"$holidays\";"; + $languagefile = preg_replace($pattern,$replacement,$languagefile); + + file_put_contents($pth['folder']['plugins'] . $plugin . "/languages/$sl.php",$languagefile); + include ($pth['folder']['plugins'] . $plugin ."/languages/$sl.php"); + +} + +$o .= "
    "; +$o .= ''; +// headline +$o .= ''; + +$o .= '\n"; + +$holidayarray = explode(';',$plugin_tx['calendar']['holydays']); + +foreach ($holidayarray as $key=>$value) { + list($holiday_date,$holiday_name) = explode(",",$value); + + $o .= "\n" + + // up-button + . '' + + // Holiday name + . '' + // Holiday date calculation + . '' + + // delete button + . '' + + // end of line + . "\n"; + +} + +$o .= "
    ' + . $plugin_tx['calendar']['holiday_name'] + . '' + . $plugin_tx['calendar']['holiday_date_calculation'] + . '' + . tag("input type='image' src='".$imageFolder + . "/add.png' style='width:16;height:16' name='holiday_add[0]' value=TRUE alt='+'") + . "
    ' . tag("input type='image' src='" . $imageFolder + . "/up.gif' style='width:16;height:16' name='holiday_up[$key]' value=TRUE alt='^'") + . '' . tag("input type='text' style='width: 96%;' value='".$holiday_name."' name='holiday_name[$key]'") . '' . tag("input type='text' style='width: 96%;' value='".$holiday_date."' name='holiday_date[$key]'") . '' . tag("input type='image' src='" . $imageFolder + . "/delete.png' style='width:16;height:16' name='holiday_delete[$key]' value='delete' alt='-'") + . '
    \n" + . tag("input type='hidden' value=TRUE name='holidaylist'") + . tag('input type="submit" class="submit" value="'.ucfirst($tx['action']['save']).'"') + . "
    \n"; + +$o .= '

    '.$plugin_tx['calendar']['holiday_date_calculation'].'

    ' + . $plugin_tx['calendar']['help_holiday_date_calculation']; + + +?> diff --git a/includes/jquery.marquee.js b/includes/jquery.marquee.js new file mode 100644 index 0000000..d214d58 --- /dev/null +++ b/includes/jquery.marquee.js @@ -0,0 +1,168 @@ +/** +* author Remy Sharp +* url http://remysharp.com/tag/marquee +* edited for Calendar-Plugin for CMSimple (right/left marquee disabled, var timingfactor added) +*/ + +(function ($) { +$(function () { + //added for Calendar-Plugin to stop the marquee on mouse over, code also by Remy Sharp + $('div.calendar_marquee marquee').marquee('pointer').mouseover(function () { + $(this).trigger('stop'); + }).mouseout(function () { + $(this).trigger('start'); + }); +}); + $.fn.marquee = function (klass) { + var newMarquee = [], + last = this.length; + + var $marquee = $(this), + timingfactor = $marquee.attr('scrollamount'); + timing = 90 / timingfactor; + + // works out the left or right hand reset position, based on scroll + // behavior, current direction and new direction + function getReset(newDir, marqueeRedux, marqueeState) { + var behavior = marqueeState.behavior, width = marqueeState.width, dir = marqueeState.dir; + var r = 0; + if (behavior == 'alternate') { + r = newDir == 1 ? marqueeRedux[marqueeState.widthAxis] - (width*2) : width; + } else if (behavior == 'slide') { + if (newDir == -1) { + r = dir == -1 ? marqueeRedux[marqueeState.widthAxis] : width; + } else { + r = dir == -1 ? marqueeRedux[marqueeState.widthAxis] - (width*2) : 0; + } + } else { + r = newDir == -1 ? marqueeRedux[marqueeState.widthAxis] : 0; + } + return r; + } + + // single "thread" animation + function animateMarquee() { + var i = newMarquee.length, + marqueeRedux = null, + $marqueeRedux = null, + marqueeState = {}, + newMarqueeList = [], + hitedge = false; + + while (i--) { + marqueeRedux = newMarquee[i]; + $marqueeRedux = $(marqueeRedux); + marqueeState = $marqueeRedux.data('marqueeState'); + + if ($marqueeRedux.data('paused') !== true) { + // TODO read scrollamount, dir, behavior, loops and last from data + marqueeRedux[marqueeState.axis] += (marqueeState.scrollamount * marqueeState.dir); + + // only true if it's hit the end + hitedge = marqueeState.dir == -1 ? marqueeRedux[marqueeState.axis] <= getReset(marqueeState.dir * -1, marqueeRedux, marqueeState) : marqueeRedux[marqueeState.axis] >= getReset(marqueeState.dir * -1, marqueeRedux, marqueeState); + + if ((marqueeState.behavior == 'scroll' && marqueeState.last == marqueeRedux[marqueeState.axis]) || (marqueeState.behavior == 'alternate' && hitedge && marqueeState.last != -1) || (marqueeState.behavior == 'slide' && hitedge && marqueeState.last != -1)) { + if (marqueeState.behavior == 'alternate') { + marqueeState.dir *= -1; // flip + } + marqueeState.last = -1; + + $marqueeRedux.trigger('stop'); + + marqueeState.loops--; + if (marqueeState.loops === 0) { + if (marqueeState.behavior != 'slide') { + marqueeRedux[marqueeState.axis] = getReset(marqueeState.dir, marqueeRedux, marqueeState); + } else { + // corrects the position + marqueeRedux[marqueeState.axis] = getReset(marqueeState.dir * -1, marqueeRedux, marqueeState); + } + + $marqueeRedux.trigger('end'); + } else { + // keep this marquee going + newMarqueeList.push(marqueeRedux); + $marqueeRedux.trigger('start'); + marqueeRedux[marqueeState.axis] = getReset(marqueeState.dir, marqueeRedux, marqueeState); + } + } else { + newMarqueeList.push(marqueeRedux); + } + marqueeState.last = marqueeRedux[marqueeState.axis]; + + // store updated state only if we ran an animation + $marqueeRedux.data('marqueeState', marqueeState); + } else { + // even though it's paused, keep it in the list + newMarqueeList.push(marqueeRedux); + } + } + + newMarquee = newMarqueeList; + + if (newMarquee.length) { + setTimeout(animateMarquee, timing); + } + } + + // TODO consider whether using .html() in the wrapping process could lead to loosing predefined events... + this.each(function (i) { + var $marquee = $(this), + width = $marquee.attr('width') || $marquee.width(), + height = $marquee.attr('height') || $marquee.height(), + $marqueeRedux = $marquee.after('
    ' + $marquee.html() + '
    ').next(), + marqueeRedux = $marqueeRedux.get(0), + hitedge = 0, + direction = ($marquee.attr('direction') || 'left').toLowerCase(), + marqueeState = { + dir : /down|right/.test(direction) ? -1 : 1, + axis : /left|right/.test(direction) ? 'scrollLeft' : 'scrollTop', + widthAxis : /left|right/.test(direction) ? 'scrollWidth' : 'scrollHeight', + last : -1, + loops : $marquee.attr('loop') || -1, + scrollamount : $marquee.attr('scrollamount') || this.scrollAmount || 2, + behavior : ($marquee.attr('behavior') || 'scroll').toLowerCase(), + width : /left|right/.test(direction) ? width : height + }; + + // corrects a bug in Firefox - the default loops for slide is -1 + if ($marquee.attr('loop') == -1 && marqueeState.behavior == 'slide') { + marqueeState.loops = 1; + } + + $marquee.remove(); + + // add padding + if (/left|right/.test(direction)) { + $marqueeRedux.find('> div').css('padding', '0 ' + width + 'px'); + } else { + $marqueeRedux.find('> div').css('padding', height + 'px 0'); + } + + // events + $marqueeRedux.bind('stop', function () { + $marqueeRedux.data('paused', true); + }).bind('pause', function () { + $marqueeRedux.data('paused', true); + }).bind('start', function () { + $marqueeRedux.data('paused', false); + }).bind('unpause', function () { + $marqueeRedux.data('paused', false); + }).data('marqueeState', marqueeState); // finally: store the state + + // todo - rerender event allowing us to do an ajax hit and redraw the marquee + + newMarquee.push(marqueeRedux); + + marqueeRedux[marqueeState.axis] = getReset(marqueeState.dir, marqueeRedux, marqueeState); + $marqueeRedux.trigger('start'); + + // on the very last marquee, trigger the animation + if (i+1 == last) { + animateMarquee(); + } + }); + + return $(newMarquee); + }; +}(jQuery)); diff --git a/includes/loadeventfile.php b/includes/loadeventfile.php new file mode 100644 index 0000000..d9507a4 --- /dev/null +++ b/includes/loadeventfile.php @@ -0,0 +1,183 @@ + $no_marquee, + 'datestart' => $event_date_start, + 'dateend' => $event_end_date, + 'starttime' => $event_time_start, + 'endtime' => $event_end_time, + 'dailytimes' => $dailytimes, + 'event_entry1' => $event_entry1, + 'event' => $event, + 'event_entry3' => $event_entry3, + 'weekly' => $weekly, + 'exceptions' => $exceptions, + 'additional' => $additional, + 'yearly' => $yearly, + 'yearly2' => $yearly2, + 'linkicon' => $event_link_icon, + 'linkint' => $event_link_int, + 'linkadd' => $event_link_adr, + 'linktxt' => $event_link_txt, + 'infoicon' => $event_info_icon, + 'infotxt' => $event_info_txt, + 'description' => $description, + 'bookedout' => $bookedout, + 'mark2' => $mark2); + $event_array[] = $entry; + } +} + diff --git a/includes/marqueeconfig.php b/includes/marqueeconfig.php new file mode 100644 index 0000000..d36100b --- /dev/null +++ b/includes/marqueeconfig.php @@ -0,0 +1,225 @@ +' . $plugin_tx['calendar']['error_occured'] . ': ' . $error . "

    \n"; + } +} + + +//============================= +// start producing html data +//============================= + +$o .= $notice; +$marquee_jquerychecked = $calendar_cf['marquee_in_jquery'] ? 'checked="checked"' : ''; + +$o .= "
    \n"; +$o .= tag('input type="hidden" value="marquee_config" name="marquee_config"') . "\n"; + + +$o .= ''; + +// marquee with jQuery? +$o .= '\n"; + + +$event_1stline = $calendar_cf['marquee_1stline']=='event'? ' selected':''; +$entry1_1stline = $calendar_cf['marquee_1stline']=='event_entry1'? ' selected':''; +$entry3_1stline = $calendar_cf['marquee_1stline']=='event_entry3'? ' selected':''; +$event_2ndline = $calendar_cf['marquee_2ndline']=='event'? ' selected':''; +$entry1_2ndline = $calendar_cf['marquee_2ndline']=='event_entry1'? ' selected':''; +$entry3_2ndline = $calendar_cf['marquee_2ndline']=='event_entry3'? ' selected':''; +$empty_2ndline = $calendar_cf['marquee_2ndline']=='empty'? ' selected':''; +$age_date = $calendar_cf['marquee_age'] =='date'? ' selected':''; +$age_1 = $calendar_cf['marquee_age'] =='1'? ' selected':''; +$age_2 = $calendar_cf['marquee_age'] =='2'? ' selected':''; +$age_not = $calendar_cf['marquee_age'] =='not'? ' selected':''; + +$o .= '\n"; + + +// number of events in marquee +$j=0; +$number_select = ''; +for ($i = 1;$i <=10 ;$i++ ) { + $selected = ''; + if($i == $calendar_cf['marquee_number_of_events_shown']) {$selected = ' selected'; $j = 1;} + $number_select .= "\n"; +} +$o .= "\n" . '\n"; + + +// speed of marquee +$j=0; +$number_select = ''; +for ($i = 1;$i <=4 ;$i += .2 ) { + $selected = ''; + if("$i" == $calendar_cf['marquee_speed']) {$selected = ' selected'; $j = 1;} + $number_select .= "\n'; +} +$o .= "\n" . '\n"; + + +// height of marquee +$o .= "\n" . '\n"; + + +// height of headline with date +$o .= "\n" . '\n"; + + +// units of the heights +$values = array('px','pt','em','%'); +$values_select = ''; +$j = 0; +foreach ($values as $option) { + $selected = ''; + if($option == $calendar_cf['marquee_height_unit']) {$selected = ' selected'; $j = 1;} + $values_select .= "\n"; +} +$o .= "\n" . '\n"; + +$o .= '
    ' + . $plugin_tx['calendar']['marquee_use_jquery'] . ': ' + . '' + . tag('input type="checkbox" '.$marquee_jquerychecked.' value="1" name="marquee_jquery"') + . '  ' + . tag('input type="image" src="' + . $pth['folder']['plugins'] . $plugin . '/images' + . '/help_icon.png" style="width:16;height:16;"') . '' + . $plugin_tx['calendar']['help_config_jquery_marquee'] + . '' + . "' + + . $plugin_tx['calendar']['marquee_1stline'] . tag('br') + . "\n" . '". tag('br') + + . $plugin_tx['calendar']['marquee_2ndline'] . tag('br') + . "\n" . '". tag('br'). tag('br') + + . $plugin_tx['calendar']['marquee_age'] . tag('br') + . "\n" . '" + + . "
    ' + . $plugin_tx['calendar']['marquee_number_of_events_shown'] . ':   ' + . '' + . "\n" . '" + . "
    ' + . $plugin_tx['calendar']['marquee_speed'] . ':   ' + . '' + . "\n" . '" + . "
    ' + . $plugin_tx['calendar']['marquee_height'] . ':   ' + . '' + . tag('input type="text" value="' + . $calendar_cf['marquee_height'] . '" name="marquee_height" style="width:3em"') + . "
    ' + . $plugin_tx['calendar']['marquee_dateline_height'] . ': ' + . '' + . tag('input type="text" value="' + . $calendar_cf['marquee_headline_height'] . '" name="marquee_headline_height" style="width:3em"') + . "
    ' + . $plugin_tx['calendar']['marquee_height_unit'] . ': ' + . '' + . "\n" + . "
    '; + + +//============== +// save +//============== +$o .= '
    ' + . tag('input type="submit" value="'.$plugin_tx['calendar']['menu_save_config'].'"') + . "
    \n"; + +$o .= "
    "; diff --git a/includes/nextevent.php b/includes/nextevent.php new file mode 100644 index 0000000..d525f53 --- /dev/null +++ b/includes/nextevent.php @@ -0,0 +1,351 @@ +\n\n"; +$remember_event = ''; + +// determining which file to read +if ($file) { + $eventfile = $datapath.$file; +}else { + $eventfile = $datapath."eventcalendar$lang.txt"; +} + +if(is_file($eventfile)) +{ + $file_array = file($eventfile); + if($addfile && is_file($datapath.$addfile)) { + $addfile_array = file($datapath.$addfile); + $file_array = array_merge($file_array,$addfile_array); + } + + // processing the data file line by line + //========================================== + foreach ( $file_array as $line) { + + if (strpos($line,';') && substr($line,0,1)!="*") { + + $yearly = FALSE; + $yearly2 = FALSE; + $weekly = FALSE; + $exceptions = ''; + $additional = ''; + $exceptionsarray = array(); + $additionaldatesarray = array(); + $txt = ''; + + $line = str_replace(array('
    ','
    '),', ',$line); + $line = strip_tags($line); + list($eventdates,$event,$event_entry3,,$eventtime) = explode( ";", $line); + list($event_date_start,$event_end_date,$event_end_time,$event_entry1) = explode(",",$eventdates,4); + + // checking if there is an * before the endtime, meaning given times of multi day events are daily times + if (substr($event_end_time,0,1)=="*") { + $event_end_time = substr($event_end_time,1); // eliminating any * + $dailytimes = TRUE; + } else $dailytimes = FALSE; + + // checking if there is an * before the enddate, which means event is overbooked + if (substr($event_end_date,0,1)=="*") { + $event_end_date = substr($event_end_date,1); // eliminating any * + } + // checking if there is an * before the event_entry1, which means alternative marking in calendar + if (substr($event_entry1,0,1)=="*") { + $event_entry1 = substr($event_entry1,1); // eliminating any * + } + + //extracting the dates + list($event_day,$event_month,$event_year) = explode( dpSeperator(), $event_date_start); + if($event_end_date) { + list($event_end_day,$event_end_month,$event_end_year) = explode( dpSeperator(), $event_end_date); + } else { + $event_end_day = $event_end_month = $event_end_year = ''; + } + + if(strpos($event,'|')){ + $additional = substr($event,0,strpos($event,'|')); + $dates = explode(",",$additional); + foreach ($dates as $value) { + $trimmeddates = trim($value); + list($d,$m,$y) = explode(dpSeperator(),$trimmeddates); + $y = rtrim($y,'*'); + $timestamp = mktime(null,null,null,$m,$d,$y); + $additionaldatesarray[] = $timestamp; + } + // eliminating additional dates from $event + $event = substr($event,(strpos($event,'|')+1)); + } + + //getting the timestamps + $time = $eventtime; + if(!preg_match('![012]\d:[0-5]\d!',$time)) $time = '20:00'; + $startmidnight = strtotime("$event_month/$event_day/$event_year"); + $start = strtotime("$event_month/$event_day/$event_year $time"); + + $time = $event_end_time; + if(!preg_match('![012]\d:[0-5]\d!',$time)) $time = '20:00'; + $end = strtotime("$event_end_month/$event_end_day/$event_end_year $time"); + + //checking for yearly or weekly events (coded in such a way as to keep the old file structure) + if (substr($event_entry3,0,3)=="###") { + $event_entry3 = substr($event_entry3,3); // erasing the ### + $yearly = TRUE; + } + if (substr($event_entry3,0,3)=="#*#") { + $event_entry3 = substr($event_entry3,3); // erasing the #*# + $yearly2 = TRUE; + } + if (substr($event_entry3,0,3)=="***") { + $event_entry3 = substr($event_entry3,3); // erasing the *** + $weekly = TRUE; + } + //legacy code (was used to indicate that there are additional days) + if (substr($event_entry3,0,3)=="*#*") { + $event_entry3 = substr($event_entry3,3); // eliminating any #*# + } + + //checking for exceptions + if(strpos($event_entry3,'|')){ + $exceptions = substr($event_entry3,0,strpos($event_entry3,'|')); + $dates = explode(",",$exceptions); + foreach ($dates as $value) { + $trimmed_dates = trim($value); + list($d,$m,$y) = explode(dpSeperator(),$trimmed_dates); + $timestamp = mktime(null,null,null,$m,$d,$y); + $exceptionsarray[] = $timestamp; + } + // eliminating exception dates from entry3 + $event_entry3 = substr($event_entry3,(strpos($event_entry3,'|')+1)); + } + + //yearly events + //============= + if ($yearly || $yearly2) { + + $anniversary = $thisyear = date("Y"); + $age = $thisyear - $event_year; + + // check present and following year + while ($anniversary < ($thisyear + 2)) { + if ($age < 2) {$age_txt = ' ' . $age . ' ' . $plugin_tx['calendar']['age_1_year_old'];} + elseif($age > 1 && $age < 5) {$age_txt = ' ' . $age . ' ' . $plugin_tx['calendar']['age_2-4_years_old'];} + else {$age_txt = ' ' . $age . ' ' . $plugin_tx['calendar']['age_5_and_more_years_old'];} + + //in which line to put the date + $age_txt_date = $calendar_cf['marquee_age']=='date'? ' —'.$age_txt:''; + $age_txt_1 = $calendar_cf['marquee_age']=='1' ? $age_txt:''; + $age_txt_2 = $calendar_cf['marquee_age']=='2' ? $age_txt:''; + + array_push($event_sorting_array, strtotime("$event_month/$event_day/$anniversary 23:59")); + array_push($event_1stline_array, $$calendar_cf['marquee_1stline'] . $age_txt_1); + array_push($event_headline_array, $event_day . dpSeperator() . $event_month . dpSeperator() . $anniversary . $age_txt_date); + if($yearly) { + array_push($event_2ndline_array, $$calendar_cf['marquee_2ndline'] . ' ' . $age_txt_2); + } else { + array_push($event_2ndline_array, $$calendar_cf['marquee_2ndline']); + } + $anniversary++; + $age++; + } + + + //weekly events + //============= + } elseif ($weekly) { + + if(!$event_end_date) $end = strtotime("+10 years", $startmidnight); + $weekly_event = $startmidnight; + + //don't calculate, if events are over + if ($end > $now) { + + //look only 2 month ahead + while($weekly_event < $end && $weekly_event < strtotime("+2 month")) { + $exception = FALSE; + if($exceptions){ + foreach ($exceptionsarray as $value) { + if($value == $weekly_event) {$exception = TRUE; break;} + } + } + if(!$exception){ + $headline = date("d",$weekly_event) . dpSeperator() . date("m",$weekly_event) . dpSeperator() . date("Y",$weekly_event); + if($eventtime) {$headline .= " — " . $eventtime;} + + array_push($event_sorting_array, $weekly_event); + array_push($event_1stline_array, $$calendar_cf['marquee_1stline']); + array_push($event_headline_array, $headline); + array_push($event_2ndline_array, $$calendar_cf['marquee_2ndline']); + } + $weekly_event = strtotime("+1 week", $weekly_event); + } + if($additional) { + foreach ($additionaldatesarray as $value) { + $headline = date("d",$value) . dpSeperator() . date("m",$value) . dpSeperator() . date("Y",$value); + if($eventtime) {$headline .= " — " . $eventtime;} + + array_push($event_sorting_array, $value); + array_push($event_1stline_array, $$calendar_cf['marquee_1stline']); + array_push($event_headline_array, $headline); + array_push($event_2ndline_array, $$calendar_cf['marquee_2ndline']); + } + } + } + + //Normal events + //============= + } elseif (!$weekly && !$yearly && !$yearly2) { + + if($event_end_date) { + $txt = $event_day; + if ($event_month!=$event_end_month || $event_year!=$event_end_year) $txt .= dpSeperator(). $event_month; + if ($event_year!=$event_end_year) $txt .= dpSeperator(). $event_year; + if (dpSeperator()=='.' && $event_year==$event_end_year) $txt .= "."; + $txt .= " ". $plugin_tx['calendar']['event_date_till_date'] . " " .$event_end_date ; + }else{ + $txt = $event_date_start; + if($eventtime) $txt .= " — " . $eventtime ; + } + + if($event_end_date && $start < $now && $end > $now) { + array_push($event_sorting_array, ($now + $spacer)); + } else { + array_push($event_sorting_array, $start); + } + array_push($event_1stline_array, $$calendar_cf['marquee_1stline']); + array_push($event_headline_array, /*'normal' .*/ $txt); + array_push($event_2ndline_array, $$calendar_cf['marquee_2ndline']); + + if($additional) { + foreach ($additionaldatesarray as $value) { + $headline = date("d",$value) . dpSeperator() . date("m",$value) . dpSeperator() . date("Y",$value); + if($eventtime) {$headline .= " — " . $eventtime;} + + array_push($event_sorting_array, $value); + array_push($event_1stline_array, $$calendar_cf['marquee_1stline']); + array_push($event_headline_array, $headline); + array_push($event_2ndline_array, $$calendar_cf['marquee_2ndline']); + } + } + + $spacer += 60; + } + } + } +} + +//suggestion from cmb +array_multisort($event_sorting_array,$event_headline_array,$event_1stline_array,$event_2ndline_array); + +foreach($event_sorting_array as $event_date){ + if($event_date > $now){ + if($remember_event == '') $remember_event = $event_date; + } +} + +//test +//$o .= '
    $remember_event: ' . $remember_event . ' ' . date("d.m.Y, H:i", $remember_event) . '
    '; + + +if($remember_event > $now){ + + //check how many events should be shown + if(!$number) $number = $calendar_cf['marquee_number_of_events_shown']; + + //if nothing is specified, default is 1 event. However 0 can be specified in config + if($number==="") $number = 1; + + //find the array number of the first event to be shown + $i = array_search($remember_event, $event_sorting_array); + + //limit the number of events to be on marquee to events that are available. + $max_next_events = (count($event_sorting_array)) - $i; + If($max_next_events < $number) $number = $max_next_events; + + //height unit default is px + $height_unit = ($calendar_cf['marquee_height_unit'])? $calendar_cf['marquee_height_unit'] : "px"; + + + if ($number == 1) { + $height = $calendar_cf['marquee_height'] - $calendar_cf['marquee_headline_height']; + $o .= "
    \n"; + $o .= "\n"; + if(!$checkcontents) { + $o .= "\n"; + } + $o .= "

    ".$event_1stline_array[$i]."

    \n"; + $o .= "

    ".$event_2ndline_array[$i]."

    \n"; + $o .= "
    \n
    "; + } + elseif ($number > 1) { + $height = $calendar_cf['marquee_height']; + + $o .= "
    "; + if(!$checkcontents) { + $o .= "\n"; + } + + //substract "1" as in the end one event will be added anyway + $number --; + + for ( $count = 0 ; $count < $number ; $count++) { + $o .= "\n"; + $o .= "

    " . $event_1stline_array[$i + $count]."

    \n"; + $o .= "

    " . $event_2ndline_array[$i + $count]."

    \n"; + + //add space betwenn the different event announcements + $o .= "
     
    \n"; + } + //last line without added space (the marquee function adds space) + $o .= "\n"; + $o .= "

    " . $event_1stline_array[$i + $number]."

    \n"; + $o .= "

    " . $event_2ndline_array[$i + $number]."

    \n"; + //now the marquee row is finished. The marquee function adds space automatically + //betwenn the event announcements + $o .= "
    \n
    \n"; + } +} + +// if there are no events planned, one can give a notice to that effect (bug correction by cmb) +elseif ($plugin_tx['calendar']['notice_no_next_event_scheduled']) { + $o .= "
    \n" + . "\n
    \n"; +} + diff --git a/includes/presets.php b/includes/presets.php new file mode 100644 index 0000000..319a460 --- /dev/null +++ b/includes/presets.php @@ -0,0 +1,382 @@ + 'writetime', + 'bigcalendar_write_event' => 'writeevent', + 'bigcalendar_write_entry3' => 'writeentry3', + 'bigcalendar_write_entry1' => 'writeentry1', + 'bigcalendar_anniversary_write_entry3' => 'birthdayentry3', + 'bigcalendar_anniversary_write_age' => 'birthdayage', + 'bigcalendar_month_year_headline_style' => 'headline', + 'bigcalendar_line_between_entries' => 'linebetween', + 'bigcalendar_symbol_if_no_time_given' => 'notimesymbol', + + 'calendar-popup_big' => 'smallcalpopup', + + 'dont_underline_longevents' => 'underlongevent', + + 'icon-set' => 'iconset', + + 'show_description_nr_of_cells_indented' => 'indented', + 'show_event_description' => 'description', + 'show_event_entry3' => 'entry3', + 'show_event_entry1' => 'entry1', + 'show_event_link' => 'link', + 'show_event_time' => 'time', + 'show_field_booked_out' => 'showbookedout', + 'show_field_daily_times' => 'showdailytimes', + 'show_field_exceptions' => 'showexceptions', + 'show_field_multievent' => 'showmultievent', + 'show_field_no_marquee' => 'nomarquee', + 'show_field_weekly' => 'showweekly', + 'show_field_yearly' => 'showyearly', + 'show_future_months' => 'futuremonths', + 'show_past_months' => 'pastmonths', + 'show_grey_past_events' => 'greypastevents', + 'show_no_past_event' => 'nopastevent', + 'show_field_mark2' => 'showmark2', + 'show_period_of_events' => 'showperiod', + + 'test_event_list_template' => 'listtemplate', + 'test_calendar_template' => 'calendartemplate', + + 'titleattributepopup_entry3' => 'entry3popup', + ); + //delete variables not used + foreach ($values as $key=>$value) if(isset($$value)) $values[$key] = $$value; else unset($values[$key]); + //change values + $configfile = changevalue($values,$configfile,1); + + //save the changed values + $config_ok = file_put_contents($pth['folder']['plugins'] . $plugin . '/config/config2.php',$configfile); + $error .= $config_ok? '' : $plugin_tx['calendar']['error_could_not_change_config_file'].', '; + //and let the changed config values take effect + include ($pth['folder']['plugins'] . $plugin .'/config/config2.php'); + + + //read the language file + //====================== + $languagefile = file_get_contents($pth['folder']['plugins'] . $plugin . "/languages/$sl.php"); + + //collect possible language variables + $values=array( + '_event_page' => 'eventlistpage', + 'event_date' => 'datename', + 'event_time' => 'timename', + 'event_main_entry' => 'eventname', + 'event_entry3' => 'entry3name', + 'event_entry1' => 'entry1name', + 'event_link_etc' => 'linkname', + 'hint_mouseover_in_calendar' => 'hintmouseover', + ); + //delete variables not used + foreach ($values as $key=>$value) if(isset($$value)) $values[$key] = $$value; else unset($values[$key]); + //change values + $languagefile = changevalue($values,$languagefile,1); + + $lang_ok = file_put_contents($pth['folder']['plugins'] . $plugin . "/languages/$sl.php",$languagefile); + $error .= $lang_ok? '' : $plugin_tx['calendar']['error_could_not_change_language_file'].', '; + + include ($pth['folder']['plugins'] . $plugin ."/languages/$sl.php"); + + //get the css-data + //================ + $cssfile = file_get_contents($pth['folder']['plugins'] . $plugin . '/css/stylesheet.css'); + $cssfilelength = strlen($cssfile); //just for security, to prevent accidential deletion of the file later + + //collect possible language variables + $values=array( + 'a1' => 'normaldaycolor', + 'a2' => 'weekendcolor', + 'a3' => 'holidaycolor', + 'a4' => 'eventdaycolor', + 'a5,!im' => 'eventdaybgcolor', + 'a6' => 'underlongcolor', + 'a7' => 'underlongwidth', + 'a8' => 'mark2color', + 'a9' => 'mark2width', + 'a10' => 'eventdaybold', + + 'c1' => 'headlinecolor', + 'c2' => 'backgroundcolor', + 'c3,url' => 'backgroundimage', + 'c4' => 'bordercolor', + 'c5' => 'borderwidth', + 'c6' => 'dayspacing', + 'c7' => 'nowrapdata', + 'c10' => 'daynamespadtop', + 'c11' => 'daynamespadbot', + 'c13' => 'dayheight', + 'c14' => 'topmargin', + 'c18' => 'daynames', + 'c19,!im' => 'cssbirthdayfield', + 'c20' => 'roundcorners', + 'c21' => 'shadow', + 'c22' => 'opacitynoevent', + 'c31,sU' => 'headlineconfig', + 'c32,sU' => 'daynameconfig', + 'c33,sU' => 'todaynameconfig', + 'c34' => 'bigcalfont', + 'c35' => 'bigcalfontsize', + 'c36' => 'dayfieldborder', + 'c37' => 'bordercollapse', + 'c38' => 'dayfieldpadding', + + 'sc1' => 'smallcallineheight', + 'sc2' => 'smallcalfont', + 'sc3' => 'smallcalfontsize', + 'sc4,url!' => 'birthdayimage', + 'sc5' => 'todaycolor', + 'sc6,!im' => 'csstodaybgcolor', + 'sc7' => 'csstodaybold', + + 'p1' => 'popupbordercolor', + 'p2' => 'popupborderwidth', + 'p3' => 'popupbackground', + 'p4' => 'popupfont', + 'p5' => 'popupfontsize', + + 'b1' => 'datewidth', + 'b2' => 'timewidth', + 'b3' => 'eventwidth', + 'b4' => 'eventcolor', + 'b5' => 'entry3width', + 'b6' => 'entry3color', + 'b7' => 'linkwidth', + 'b8' => 'linkcolor', + 'b9' => 'datecolor', + 'b10' => 'timecolor', + 'b11' => 'birthdaycolor', + 'b12' => 'eventfontweight', + 'b13' => 'entry1width', + 'b14' => 'entry1color', + 'b15' => 'listfont', + 'b16' => 'listfontsize', + 'b17' => 'subheadfontsize', + 'b18' => 'monthfontsize', + ); + //delete variables not used + foreach ($values as $key=>$value) if(isset($$value)) $values[$key] = $$value; else unset($values[$key]); + //change values + $cssfile = changevalue($values,$cssfile); + + if(strlen($cssfile) > ($cssfilelength - 500)) //to prevent accidental deletion of css-file + { + $css_ok = file_put_contents($pth['folder']['plugins'] . '/calendar/css/stylesheet.css',$cssfile); + //to ensure the browser of the user is reading the changed file + $hjs .= ''; + } else $error .= 'Too many css-changes,';//$css_ok = FALSE; + + $error .= $css_ok===FALSE? $plugin_tx['calendar']['error_could_not_change_css_file'].', ' : ''; + $error = trim($error, ', '); + + //trying to force reloading of the css-file + $x = rand (1,100); + $hjs .= ''."\n" + . ''."\n"; + + if ($css_ok && $lang_ok && $config_ok) { + $notice .= sprintf('

    ' . $plugin_tx['calendar']['notice_preset_applied'] + . "

    \n",substr($preset, 0, strpos($preset,'.'))); + } else { + $notice .= '

    ' . $plugin_tx['calendar']['error_occured'] . ': ' . $error . "

    \n"; + } +} + + +if ($backup) { + + if(preg_match('/[^(\w)]/',$settingsname)) { + $notice = '

    ' . $plugin_tx['calendar']['error_settings_name_wrong'] . "

    \n"; + } else { + + include($pth['folder']['plugins'].'calendar/includes/readcss.php'); + + $settingsfile = '$value) { + $settingsfile .= "\t$key = '$value';\n"; + } + + // config2 data + include ($pth['folder']['plugins'] . $plugin .'/config/config2.php'); + if($filetype=='calendar') { + + $values = array( + 'bigcalendar_write_time' => 'writetime', + 'bigcalendar_write_event' => 'writeevent', + 'bigcalendar_write_entry3' => 'writeentry3', + 'bigcalendar_write_entry1' => 'writeentry1', + 'bigcalendar_anniversary_write_entry3' => 'birthdayentry3', + 'bigcalendar_anniversary_write_age' => 'birthdayage', + 'bigcalendar_month_year_headline_style' => 'headline', + 'bigcalendar_line_between_entries' => 'linebetween', + 'bigcalendar_symbol_if_no_time_given' => 'notimesymbol', + + 'calendar-popup_big' => 'smallcalpopup', + + 'dont_underline_longevents' => 'underlongevent', + + 'test_calendar_template' => 'calendartemplate', + + 'titleattributepopup_entry3' => 'entry3popup', + ); + + $settingsfile .= "\n" + . '//Config2 Calendar Settings'."\n" + . '//========================='."\n"; + + foreach ($values as $key=>$value) { + $settingsfile .= "\t".'$'.$value.' = \''.$calendar_cf[$key]."';\n"; + } + $settingsfile .= "\n" + . '//Language-Values of Big Calendar'."\n" + . '//==============================='."\n" + . "\t".'$hintmouseover = \'' .$plugin_tx['calendar']['hint_mouseover_in_calendar']."';\n" + ; + } else { + + $settingsfile .= "\n" + . '//Config2 Event-List Settings'."\n" + . '//==========================='."\n"; + $values = array( + 'icon-set' => 'iconset', + + 'show_description_nr_of_cells_indented' => 'indented', + 'show_event_description' => 'description', + 'show_event_entry3' => 'entry3', + 'show_event_entry1' => 'entry1', + 'show_event_link' => 'link', + 'show_event_time' => 'time', + 'show_field_booked_out' => 'showbookedout', + 'show_field_daily_times' => 'showdailytimes', + 'show_field_exceptions' => 'showexceptions', + 'show_field_multievent' => 'showmultievent', + 'show_field_no_marquee' => 'nomarquee', + 'show_field_weekly' => 'showweekly', + 'show_field_yearly' => 'showyearly', + 'show_future_months' => 'futuremonths', + 'show_past_months' => 'pastmonths', + 'show_grey_past_events' => 'greypastevents', + 'show_no_past_event' => 'nopastevent', + 'show_field_mark2' => 'showmark2', + 'show_period_of_events' => 'showperiod', + + 'test_event_list_template' => 'listtemplate', + ); + + foreach ($values as $key=>$value) { + $settingsfile .= "\t".'$'.$value.' = \''.$calendar_cf[$key]."';\n"; + } + + + $settingsfile .= "\n" + . '//Language-Values of Event-List'."\n" + . '//============================='."\n"; + $values=array( + '_event_page' => 'eventlistpage', + 'event_date' => 'datename', + 'event_time' => 'timename', + 'event_main_entry' => 'eventname', + 'event_entry3' => 'entry3name', + 'event_entry1' => 'entry1name', + 'event_link_etc' => 'linkname', + ); + + foreach ($values as $key=>$value) { + $settingsfile .= "\t".'$'.$value.' = \''.$plugin_tx['calendar'][$key]."';\n"; + } + } + + $settingsfile .= "\n?>\n"; + + if(file_put_contents($pth['folder']['plugins'].'/calendar/templates/' .$settingsname . '.' . $filetype . '.php', $settingsfile)) { + $notice = sprintf('

    ' . $plugin_tx['calendar']['notice_settings_data_saved'] + . "

    \n", $settingsname); + } else { + $notice = '

    \n"; + } + } +} + +$o .= '

    ' . "\n"; +$o .= tag('input type="hidden" value="preset" name="preset"') . "\n"; + + +$handle=opendir($pth['folder']['plugins'].'/calendar/templates/'); +$settings = array(); +while (false !== ($file = readdir($handle))) { + if(strpos($file, $filetype.'.php')) { + $settings[$file] = substr($file, 0, (strlen($file)-strlen($filetype)-5)); + } +} +closedir($handle); +natcasesort($settings); +$preset_select = ''; +foreach($settings as $file=>$settingsname){ + $preset_select .= "\n'; +} + + +$o .= ''.$plugin_tx['calendar']['config_presets'] .': ' + . ""; + +//============== +// apply presets +//============== +//$o .= tag('input type="submit" value="'.$plugin_tx['calendar']['menu_apply_preset'].'"'); + +$o .= "
    "; + + +//========================== +// create settings back up +//========================== +$o .= '
    ' . "\n"; +$o .= tag('input type="hidden" value="backup" name="backup"') . "\n"; + +$o .= tag('input type="submit" value="'.$plugin_tx['calendar']['menu_preset_backup'].'"') + . tag('input type="text" value="'.$plugin_tx['calendar']['menu_settings_backupname'].'" name="settingsname" style="width:9em"'); + +//$o .= "\n"; + + +$o .= "
    "; + +//if($notice) +$o .= $notice; + +$o .= '
    '; + diff --git a/includes/readcss.php b/includes/readcss.php new file mode 100644 index 0000000..2ce5dfb --- /dev/null +++ b/includes/readcss.php @@ -0,0 +1,235 @@ +0 ; $i-- ) { + if(is_file($eventfile. ".bak".$i)) rename($eventfile. ".bak".$i , $eventfile. ".bak" . ($i+1)); + } + if(is_file($eventfile)) { + if($backups>0) rename($eventfile, $eventfile. ".bak1"); + } +} + +// only for backup admin file handling +if(!$standardmode) { + if(preg_match('/[^(\w|.)]/',$file)) { + $notice = "" . $plugin_tx['calendar']['error_file_name_wrong'] . ""; + } +} + +if(!$notice) { + // no obstacle encountered, so proceed with saving the file + + // now convert the event entries to usable format and enter them line by line into the eventfile + $newfile = array(); + foreach($array as $entry) { + + $no_marquee = $entry['no_marquee']? '*' : ''; + $dailytimes = $entry['dailytimes']? '*' : ''; + $bookedout = $entry['bookedout']? '*' : ''; + $mark2 = $entry['mark2']? '*' : ''; + + // Converting text marked up with "Simple Formatting" + $event_entry1 = simpleMarkupToHtml ($entry['event_entry1']); + $event = simpleMarkupToHtml ($entry['event']); + $event_entry3 = simpleMarkupToHtml ($entry['event_entry3']); + $infotxt = simpleMarkupToHtml ($entry['infotxt']); + $linktxt = simpleMarkupToHtml ($entry['linktxt']); + + $eventdates = $entry['datestart'] . "," . $bookedout . $entry['dateend'] . "," . $dailytimes . $entry['endtime']; + $event_time_start = $entry['starttime']; + + $repeating_event = ''; + if($entry['yearly2']) $repeating_event = '#*#'; + if($entry['yearly']) $repeating_event = '###'; + if($entry['weekly']) $repeating_event = "***"; + + $exceptions = $entry['exceptions'] ? $entry['exceptions'] . '|' : ''; + $additional = $entry['additional'] ? $entry['additional'] . '|' : ''; + + if ($entry['linkint'] || $entry['linkadd']) { + $linkicon = $entry['linkicon']? '*' : ''; + } else { + $linkicon = ''; + } + $linkadd = $entry['linkadd']; + $linkint = $entry['linkint']? 'int:'.$entry['linkint'] : ''; + $linkint = ($linkint && $linkadd)? $linkint.'|' : $linkint; + + if($entry['infotxt'] && $entry['infoicon']==1) {$infoicon = '*';} + elseif ($entry['infotxt'] && $entry['infoicon']==2) {$infoicon = '+';} + else $infoicon = ''; + + $description = $entry['description']; + $line = $no_marquee + . $eventdates + . ',' + . $mark2 + . $event_entry1 + . ';' + . $additional + . $event + . ';' + . $repeating_event + . $exceptions + . $event_entry3 + . ';' + . $linkicon + . $linkint + . $linkadd + . ',' + . $linktxt + . ',' + . $infoicon + . $infotxt + . ';' + . $event_time_start + . ';' + . $description + . "\n"; + array_push($newfile,$line); + } + + // write the version nr at the beginning of the array + $version = "Calendar eventfile 1.3\n"; + array_unshift($newfile,$version); + + // save the file + $result = file_put_contents($eventfile, $newfile); + + if($result ===FALSE) + { + $notice = "" . $plugin_tx['calendar']['error_file_not_writable'] . ""; + // $notice = "". $plugin_tx['calendar']['error_file_not_saved'].""; + } + else + { + $filename = $file? $file : "eventcalendar".$lang.".txt"; + $notice = "" . count($array) . " " + . $plugin_tx['calendar']['notice_number_of_events_saved_in_file'] . " \"" . $filename . "\""; + //Now change time/date of last edit of content, so that this date can be displayed on the website (many thanx to cmb for this line of code) + touch($pth['file']['content']); + } + + +} diff --git a/includes/simplemarkup.php b/includes/simplemarkup.php new file mode 100644 index 0000000..c9d9647 --- /dev/null +++ b/includes/simplemarkup.php @@ -0,0 +1,156 @@ +-type popups) + + for CMSimple calendar plugin + Transforms multiline simple text marked up with + "*","_","~" to HTML without

    + for use in table fields and pop-ups and vici versa + + 2/2012 by svasti www.svasti.de -- +****************************************************/ + + +$formatting_hints = '' + + . '' + . '' + . '' + . "\n" + + . '' + + . '' + . '' + . '' + . "\n" + + . '' + . '' + . '' + . "\n" + + . '' + . '' + . '' + . "\n" + + . '' + . '' + . '' + . "\n" + + . '' + . '' + . '' + . "\n" + + . '' + . '' + . '' + . "\n" + + . '' + . '' + . '' + . '
    abc\-def→' . tag('br') + . '→ abcdef' . tag('br') + . '      abc-' . tag('br') + . 'def
     
    ==abc== →     abc
    **abc**abc
    *abc*abc
    ++abc++abc
    _abc_abc
    __abc__abc
    \\**
    '; + + + +//converts text (formatted with *,_,#.~ and \n) to html for table data cells without paragraphs +function simpleMarkupToHtml($text) +{ + + // soft hyphens + $text = str_replace('\-','­',$text); + + $pattern = array( + '/==([^=]+)==/', //1 - ==big== + '/\*\*([^\*]+)\*\*/', //2 - **bold** + '/(? + ); + + $replacement = array( + '\1', //1 - big + '\1', //2 - bold + '\1', //3 - italic + '$1', //4 - red + '\1', //5 - underlined + '\1', //6 - small + '*', //7 - * + + '', //12- no empty lines at the end + "tag('br')" //13- replace line breaks by
    + ); + + $text = preg_replace($pattern, $replacement, $text); + + $text = str_replace(array(chr(10),chr(13),'\\\'','\\"','\\*'),array('','','\'','"','*'), $text); + +return $text; +} + +//converts simple html without linebreaks+paragraphs to plain text formatted with *,_,# and linebreaks +function htmlToSimpleMarkup($text) +{ + $text = str_replace( + array( + '

    ', + 'strong>', + 'em>', + '­', //soft hyphen + '', + '' + ), + array( + '
    ', + 'b>', + 'i>', + '\-', + '', + '' + ), + $text + ); + + $text = preg_replace( + array( + '/\*/', //1 - * + '/([\S+|\S+\s]+)<\/span>/U', //2 - big + '/([\S+|\S+\s]+)<\/b>/U', //3 - bold + '/([^_]+)<\/i>/U', //4 - italic + '/([\S+|\S+\s]+)<\/span>/U', //5 - red + '/([\S+|\S+\s]+)<\/u>/U', //6 - underlined + '/([^_]+)<\/small>/U', //7 - small + '//' //8 - line break + ), + array( + '\\*', //1 - escaped * + '==\1==', //2 - ==big== + '**\1**', //3 - **bold** + '*\1*', //4 - *italic* + '++\1++', //5 - ++red++ + '_\1_', //6 - _underlined_ + '__\1__', //7 - __small__ + chr(10), //8 - new line + ), + $text + ); + +return $text; +} diff --git a/index.php b/index.php new file mode 100644 index 0000000..04e1fc4 --- /dev/null +++ b/index.php @@ -0,0 +1,423 @@ + +// /* */ +// \n"; +} +// CMB END //erased calls which caused problems for the addition "stop on mouse over", svasti for calendar 1.4 + +function nextevent($number='',$file='',$addfile='',$checkcontents=''){ + global $pth,$plugin; + $plugin=basename(dirname(__FILE__),"/"); + include ($pth['folder']['plugins'].'calendar/includes/nextevent.php'); + return $o; +} +function nextevent12() { + global $plugin_cf; + return nextevent('','',$plugin_cf['calendar']['second-calendar_filename']); +} + +//================================================================================================// +// ********************************************************************************************** // +// * * // +// * B A C K E N D, editing the event file * // +// * * // +// ********************************************************************************************** // +//================================================================================================// + + +function eventForm($events,$saving_notice='',$file='',$standardmode,$calendar2='') +{ + global $pth; include_once ($pth['folder']['plugins'].'calendar/includes/eventform.php'); + return $o; +} +function editevents($file='',$standardmode=1,$calendar2='') +{ + global $pth; include_once ($pth['folder']['plugins'].'calendar/includes/editevents.php'); + return $o; +} +function editevents2() +{ + global $plugin_cf; + return editevents($plugin_cf['calendar']['second-calendar_filename'],1,1); +} +function loadEventFile($file='') +{ + global $pth,$plugin; + $plugin=basename(dirname(__FILE__),"/"); + include_once ($pth['folder']['plugins'].'calendar/includes/loadeventfile.php'); + return $event_array; +} +function saveEventFile($array,$file,$standardmode) +{ + global $pth,$plugin; + $plugin=basename(dirname(__FILE__),"/"); + include_once ($pth['folder']['plugins'].'calendar/includes/saveeventfile.php'); + return $notice; +} + +// preloading files for tinymce +if ($calendareditor =='tinymce'){ + include_once($pth['folder']['plugins'].'tinymce/links.php'); + include_once($pth['folder']['plugins'].'tinymce/init.php'); +} + +// preloading simple markup +include_once ($pth['folder']['plugins'].'calendar/includes/simplemarkup.php'); + + +//===================================== +// finds internal URL of site pagenames +//===================================== +function pagenameToUrl($pagename) +{ + global $u, $cf; + $urlarray = array(); + if(substr($pagename, 0,1)=='?' || substr($pagename, 0,1)=='/' || substr($pagename, 0,1)=='.') { + if (!strpos($pagename,'%') && !preg_match('!&.+=!', $pagename)) { + + list($start,$end) = explode('?',$pagename,2); + $end = str_replace('&', '&',$end); + $endarray = explode($cf['uri']['seperator'],$end); + foreach ($endarray as $key=>$value) { + $endarray[$key] = uenc($value); + } + $end = implode($cf['uri']['seperator'],$endarray); + $pagename = $start.'?'.$end; + } + return $pagename; + } + + $pagename = preg_replace('#&(?!amp;)#', '&',$pagename); + $pagename = uenc($pagename); + for ($i = 0; $i < count ($u); $i++) { + $name = ''; + $divider = strrpos($u[$i],$cf['uri']['seperator']) ? strrpos($u[$i],$cf['uri']['seperator'])+1 : 0; + $name = substr($u[$i],$divider); + // checking all pagenames in case a name occurs more than once + if ($name == $pagename) array_push($urlarray, $u[$i]); + } + + if (count($urlarray)==1) $url = $urlarray[0]; + // if the name occurs more than once, FALSE is returned + if (count($urlarray)>1) $url = FALSE; + // if the name doesn't occur, 0 is returned + if (count($urlarray)==0) $url = 0; + + return $url; +} + + +//========================================= +// converts internal URL to simple pagename +//========================================= +function urlToPagename($url) +{ + global $cf; + if(substr($url, 0,1)=='?' || substr($url, 0,1)=='/') { + if (strpos($url,'%')!==false) { + list($start,$end) = explode('?',$url,2); + $end = urldecode($end); + $url = $start.'?'.$end; + } + } else { + $url = urldecode($url); + $divider = strrpos($url,$cf['uri']['seperator']) ? strrpos($url,$cf['uri']['seperator'])+1 : 0; + $url = substr($url,$divider); + } + $pagename = str_replace('_',' ',$url); + return $pagename; +} + + +//=============================================== +// Determines the link type: www, page, pdf, doc +//=============================================== +function findLinkType($url) +{ + // checking does the name end in .pdf? -> external or internal downloads pdf link + if(preg_match('!.+\..+\/.+\.pdf$!',$url)) return "pfx:"; elseif(preg_match('!\.pdf$!',$url)) return "pdf:"; + + // checking does the name end in .doc or .docx? + if(preg_match('!\.doc(x?)$!',$url)) return "doc:"; + + // does the name start with "?" + if(substr($url,0,1)=='?' || substr($url,0,1)=='/') return "in?:"; + + // checking is the name a pagename? + if(pagenameToUrl($url)) { + $result = 'int:'; + // checking is the name a pagenam which occurs twice + } elseif (pagenameToUrl($url)===FALSE) { + $result = 'er2:' ; + // checing if the name has characteristics of external URL + } elseif (strstr($url,'.') && !strstr($url,' ')){ + $result = 'ext:' ; + } else $result = 'err:'; + + return $result; +} + + +//======================================================================================= +// Chronological sorting of events, function by manu, given via posting in CMSimple Forum +//======================================================================================= +function dateSort($a, $b){ + $pattern = '!(.*)\\'.dpSeperator().'(.*)\\'.dpSeperator().'(.*)!'; + $replace = '\3\2\1'; + $a_i = $a['weekday'] . preg_replace($pattern,$replace,$a['datestart']).$a['starttime']; + $b_i = $b['weekday'] . preg_replace($pattern,$replace,$b['datestart']).$b['starttime']; + if ($a_i == $b_i) return 0; + return ($a_i < $b_i) ? -1 : 1; +} + + +?> diff --git a/jscolor/arrow.gif b/jscolor/arrow.gif new file mode 100644 index 0000000..246478a Binary files /dev/null and b/jscolor/arrow.gif differ diff --git a/jscolor/calendarcolor.js b/jscolor/calendarcolor.js new file mode 100644 index 0000000..4e8a0f7 --- /dev/null +++ b/jscolor/calendarcolor.js @@ -0,0 +1,926 @@ +/** + * jscolor, JavaScript Color Picker + * + * @version 1.3.11 + * @license GNU Lesser General Public License, http://www.gnu.org/copyleft/lesser.html + * @author Jan Odvarko, http://odvarko.cz + * @created 2008-06-15 + * @updated 2011-11-07 + * @link http://jscolor.com + */ + + +var jscolor = { + + + dir : '', // location of jscolor directory (leave empty to autodetect) + bindClass : 'calcolor', // class name + binding : true, // automatic binding via + preloading : true, // use image preloading? + + + install : function() { + jscolor.addEvent(window, 'load', jscolor.init); + }, + + + init : function() { + if(jscolor.binding) { + jscolor.bind(); + } + if(jscolor.preloading) { + jscolor.preload(); + } + }, + + + getDir : function() { + if(!jscolor.dir) { + var detected = jscolor.detectDir(); + jscolor.dir = detected!==false ? detected : 'jscolor/'; + } + return jscolor.dir; + }, + + + detectDir : function() { + var base = location.href; + + var e = document.getElementsByTagName('base'); + for(var i=0; i vs[a] ? + (-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) : + tp[a], + -vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ? + (-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) : + (tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c) + ]; + } + drawPicker(pp[a], pp[b]); + } + }; + + + this.importColor = function() { + if(!valueElement) { + this.exportColor(); + } else { + if(!this.adjust) { + if(!this.fromString(valueElement.value, leaveValue)) { + styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor; + styleElement.style.color = styleElement.jscStyle.color; + this.exportColor(leaveValue | leaveStyle); + } + } else if(!this.required && /^\s*$/.test(valueElement.value)) { + valueElement.value = ''; + styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor; + styleElement.style.color = styleElement.jscStyle.color; + this.exportColor(leaveValue | leaveStyle); + + } else if(this.fromString(valueElement.value)) { + // OK + } else { + this.exportColor(); + } + } + }; + + + this.exportColor = function(flags) { + if(!(flags & leaveValue) && valueElement) { + var value = this.toString(); + if(this.caps) { value = value.toUpperCase(); } + if(this.hash) { value = '#'+value; } + valueElement.value = value; + } + if(!(flags & leaveStyle) && styleElement) { + styleElement.style.backgroundColor = + '#'+this.toString(); + styleElement.style.color = + 0.213 * this.rgb[0] + + 0.715 * this.rgb[1] + + 0.072 * this.rgb[2] + < 0.5 ? '#FFF' : '#000'; + } + if(!(flags & leavePad) && isPickerOwner()) { + redrawPad(); + } + if(!(flags & leaveSld) && isPickerOwner()) { + redrawSld(); + } + }; + + + this.fromHSV = function(h, s, v, flags) { // null = don't change + h<0 && (h=0) || h>6 && (h=6); + s<0 && (s=0) || s>1 && (s=1); + v<0 && (v=0) || v>1 && (v=1); + this.rgb = HSV_RGB( + h===null ? this.hsv[0] : (this.hsv[0]=h), + s===null ? this.hsv[1] : (this.hsv[1]=s), + v===null ? this.hsv[2] : (this.hsv[2]=v) + ); + this.exportColor(flags); + }; + + + this.fromRGB = function(r, g, b, flags) { // null = don't change + r<0 && (r=0) || r>1 && (r=1); + g<0 && (g=0) || g>1 && (g=1); + b<0 && (b=0) || b>1 && (b=1); + var hsv = RGB_HSV( + r===null ? this.rgb[0] : (this.rgb[0]=r), + g===null ? this.rgb[1] : (this.rgb[1]=g), + b===null ? this.rgb[2] : (this.rgb[2]=b) + ); + if(hsv[0] !== null) { + this.hsv[0] = hsv[0]; + } + if(hsv[2] !== 0) { + this.hsv[1] = hsv[1]; + } + this.hsv[2] = hsv[2]; + this.exportColor(flags); + }; + + + this.fromString = function(hex, flags) { + var m = hex.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i); + if(!m) { + return false; + } else { + if(m[1].length === 6) { // 6-char notation + this.fromRGB( + parseInt(m[1].substr(0,2),16) / 255, + parseInt(m[1].substr(2,2),16) / 255, + parseInt(m[1].substr(4,2),16) / 255, + flags + ); + } else { // 3-char notation + this.fromRGB( + parseInt(m[1].charAt(0)+m[1].charAt(0),16) / 255, + parseInt(m[1].charAt(1)+m[1].charAt(1),16) / 255, + parseInt(m[1].charAt(2)+m[1].charAt(2),16) / 255, + flags + ); + } + return true; + } + }; + + + this.toString = function() { + return ( + (0x100 | Math.round(255*this.rgb[0])).toString(16).substr(1) + + (0x100 | Math.round(255*this.rgb[1])).toString(16).substr(1) + + (0x100 | Math.round(255*this.rgb[2])).toString(16).substr(1) + ); + }; + + + function RGB_HSV(r, g, b) { + var n = Math.min(Math.min(r,g),b); + var v = Math.max(Math.max(r,g),b); + var m = v - n; + if(m === 0) { return [ null, 0, v ]; } + var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m); + return [ h===6?0:h, m/v, v ]; + } + + + function HSV_RGB(h, s, v) { + if(h === null) { return [ v, v, v ]; } + var i = Math.floor(h); + var f = i%2 ? h-i : 1-(h-i); + var m = v * (1 - s); + var n = v * (1 - s*f); + switch(i) { + case 6: + case 0: return [v,n,m]; + case 1: return [n,v,m]; + case 2: return [m,v,n]; + case 3: return [m,n,v]; + case 4: return [n,m,v]; + case 5: return [v,m,n]; + } + } + + + function removePicker() { + delete jscolor.picker.owner; + document.getElementsByTagName('body')[0].removeChild(jscolor.picker.boxB); + } + + + function drawPicker(x, y) { + if(!jscolor.picker) { + jscolor.picker = { + box : document.createElement('div'), + boxB : document.createElement('div'), + pad : document.createElement('div'), + padB : document.createElement('div'), + padM : document.createElement('div'), + sld : document.createElement('div'), + sldB : document.createElement('div'), + sldM : document.createElement('div'), + btn : document.createElement('div'), + btnS : document.createElement('span'), + btnT : document.createTextNode(THIS.pickerCloseText) + }; + for(var i=0,segSize=4; i + preloading : true, // use image preloading? + + + install : function() { + jscolor.addEvent(window, 'load', jscolor.init); + }, + + + init : function() { + if(jscolor.binding) { + jscolor.bind(); + } + if(jscolor.preloading) { + jscolor.preload(); + } + }, + + + getDir : function() { + if(!jscolor.dir) { + var detected = jscolor.detectDir(); + jscolor.dir = detected!==false ? detected : 'jscolor/'; + } + return jscolor.dir; + }, + + + detectDir : function() { + var base = location.href; + + var e = document.getElementsByTagName('base'); + for(var i=0; i vs[a] ? + (-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) : + tp[a], + -vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ? + (-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) : + (tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c) + ]; + } + drawPicker(pp[a], pp[b]); + } + }; + + + this.importColor = function() { + if(!valueElement) { + this.exportColor(); + } else { + if(!this.adjust) { + if(!this.fromString(valueElement.value, leaveValue)) { + styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor; + styleElement.style.color = styleElement.jscStyle.color; + this.exportColor(leaveValue | leaveStyle); + } + } else if(!this.required && /^\s*$/.test(valueElement.value)) { + valueElement.value = ''; + styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor; + styleElement.style.color = styleElement.jscStyle.color; + this.exportColor(leaveValue | leaveStyle); + + } else if(this.fromString(valueElement.value)) { + // OK + } else { + this.exportColor(); + } + } + }; + + + this.exportColor = function(flags) { + if(!(flags & leaveValue) && valueElement) { + var value = this.toString(); + if(this.caps) { value = value.toUpperCase(); } + if(this.hash) { value = '#'+value; } + valueElement.value = value; + } + if(!(flags & leaveStyle) && styleElement) { + styleElement.style.backgroundColor = + '#'+this.toString(); + styleElement.style.color = + 0.213 * this.rgb[0] + + 0.715 * this.rgb[1] + + 0.072 * this.rgb[2] + < 0.5 ? '#FFF' : '#000'; + } + if(!(flags & leavePad) && isPickerOwner()) { + redrawPad(); + } + if(!(flags & leaveSld) && isPickerOwner()) { + redrawSld(); + } + }; + + + this.fromHSV = function(h, s, v, flags) { // null = don't change + h<0 && (h=0) || h>6 && (h=6); + s<0 && (s=0) || s>1 && (s=1); + v<0 && (v=0) || v>1 && (v=1); + this.rgb = HSV_RGB( + h===null ? this.hsv[0] : (this.hsv[0]=h), + s===null ? this.hsv[1] : (this.hsv[1]=s), + v===null ? this.hsv[2] : (this.hsv[2]=v) + ); + this.exportColor(flags); + }; + + + this.fromRGB = function(r, g, b, flags) { // null = don't change + r<0 && (r=0) || r>1 && (r=1); + g<0 && (g=0) || g>1 && (g=1); + b<0 && (b=0) || b>1 && (b=1); + var hsv = RGB_HSV( + r===null ? this.rgb[0] : (this.rgb[0]=r), + g===null ? this.rgb[1] : (this.rgb[1]=g), + b===null ? this.rgb[2] : (this.rgb[2]=b) + ); + if(hsv[0] !== null) { + this.hsv[0] = hsv[0]; + } + if(hsv[2] !== 0) { + this.hsv[1] = hsv[1]; + } + this.hsv[2] = hsv[2]; + this.exportColor(flags); + }; + + + this.fromString = function(hex, flags) { + var m = hex.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i); + if(!m) { + return false; + } else { + if(m[1].length === 6) { // 6-char notation + this.fromRGB( + parseInt(m[1].substr(0,2),16) / 255, + parseInt(m[1].substr(2,2),16) / 255, + parseInt(m[1].substr(4,2),16) / 255, + flags + ); + } else { // 3-char notation + this.fromRGB( + parseInt(m[1].charAt(0)+m[1].charAt(0),16) / 255, + parseInt(m[1].charAt(1)+m[1].charAt(1),16) / 255, + parseInt(m[1].charAt(2)+m[1].charAt(2),16) / 255, + flags + ); + } + return true; + } + }; + + + this.toString = function() { + return ( + (0x100 | Math.round(255*this.rgb[0])).toString(16).substr(1) + + (0x100 | Math.round(255*this.rgb[1])).toString(16).substr(1) + + (0x100 | Math.round(255*this.rgb[2])).toString(16).substr(1) + ); + }; + + + function RGB_HSV(r, g, b) { + var n = Math.min(Math.min(r,g),b); + var v = Math.max(Math.max(r,g),b); + var m = v - n; + if(m === 0) { return [ null, 0, v ]; } + var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m); + return [ h===6?0:h, m/v, v ]; + } + + + function HSV_RGB(h, s, v) { + if(h === null) { return [ v, v, v ]; } + var i = Math.floor(h); + var f = i%2 ? h-i : 1-(h-i); + var m = v * (1 - s); + var n = v * (1 - s*f); + switch(i) { + case 6: + case 0: return [v,n,m]; + case 1: return [n,v,m]; + case 2: return [m,v,n]; + case 3: return [m,n,v]; + case 4: return [n,m,v]; + case 5: return [v,m,n]; + } + } + + + function removePicker() { + delete jscolor.picker.owner; + document.getElementsByTagName('body')[0].removeChild(jscolor.picker.boxB); + } + + + function drawPicker(x, y) { + if(!jscolor.picker) { + jscolor.picker = { + box : document.createElement('div'), + boxB : document.createElement('div'), + pad : document.createElement('div'), + padB : document.createElement('div'), + padM : document.createElement('div'), + sld : document.createElement('div'), + sldB : document.createElement('div'), + sldM : document.createElement('div'), + btn : document.createElement('div'), + btnS : document.createElement('span'), + btnT : document.createTextNode(THIS.pickerCloseText) + }; + for(var i=0,segSize=4; ifckeditor\" or \"html\" (for plain HTML)."; + $plugin_tx['calendar']['cf_editor_deletes_empty_lines_at_the_end']="\"1\" means yes. Useful setting, as in the editors it is invisible, if one has added involuntarily an empty line at the end of one's text."; + $plugin_tx['calendar']['cf_editor_height']="The height of the editor area in px. Enter only the number, not px."; + + $plugin_tx['calendar']['cf_eventlist_template']="Left empty the event list will be in spreadsheet table style. If you enter the name of an event-list template here, this template will be used to style the event list."; + + $plugin_tx['calendar']['cf_filepath_calendar_background_images']="The path to the calendar background images. Relative starting address is the calendar stylesheet.css, since this path will be written into it. E.g. using the normal image folder would need the following address: \"../../../images/\"."; + $plugin_tx['calendar']['cf_filepath_data']="The path to the calendar event files. Without entry it will be set to \"./plugins/calendar/content/\". If you enter a different path, start the path with dot and slash."; + + $plugin_tx['calendar']['cf_same-event-calendar_for_all_subsites']="Setting for multi language sites! By default every language has its own calendarevent-file. Entering \"1\" makes Calendar use the same event file calendarevent.txt for all languages.  I M P O R T A N T  if set to \"1\": Add Images to your Calendar only in your main language as the image path is different in secondary languages."; + + $plugin_tx['calendar']['cf_second-calendar_filename']="If you enter a file name of your choice here (file doesn't have to exist!), under which you want a second independent calendar to save event dates, a second calendar will be activated and additional menu options will appear."; + $plugin_tx['calendar']['cf_second-calendar_eventpage']="Enter here the pagename of the page to which the second calendar should link. Without entry there will be no links. Pagename can be entered as simple name (the name should not occur twice) or as URL starting with \"?\", e.g.\"?Start:News\"."; + + $plugin_tx['calendar']['cf_style_headline_eventtype']="If there are weekly events, a headline will announce them and a similar headline will announce the other events. Here the styling of these headlines can be entered. The headline text is represented by the placeholder \"%s\"."; + $plugin_tx['calendar']['cf_style_headline_year']="If left empty, the month/year headline of year and multiple months in columns will be styled as h4. Alternatively you can enter h1 up to h6 or p as style, or enter HTML-code with %s as placeholder for the year/month, e.g. ‹h5»%s‹/h5»"; + + $plugin_tx['calendar']['cf_z-index']="If other plugins obscure the pop-ups of calendar, you can enter a number (e.g.: from 5 - 100000) to raise calendar in the staking order."; + + $plugin_tx['calendar']['cf_input-field_entry1_as_textarea']="Enter a height value like \"2.6em\" to have field 1 as textarea instead of as simple input line."; + $plugin_tx['calendar']['cf_input-field_entry3_as_textarea']="Enter a height value like \"2.6em\" to have field 3 as textarea instead of as simple input line."; + $plugin_tx['calendar']['cf_input-field_entry1_show_in_input_always']="\"1\" will show field 1 -- even when switched off in eventlist config -- still in the input. Thus entry 1 can be used specially for marquee without appearing in the event list."; + $plugin_tx['calendar']['cf_input-field_additional_days_as_textarea']="Enter a height value like \"2.6em\" to have the field for the additional dates as textarea. Practical if you have many additional dates."; + $plugin_tx['calendar']['cf_input-field_mainentry_as_textarea']="Enter a height value like \"2.6em\" to have the input for the main field as textarea instead of as simple line."; + + + $plugin_tx['calendar']['error_event_page_occurs_more_than_once']="occurs as page name more than once. Therefore it is unclear which page should serve as event-list page."; + $plugin_tx['calendar']['error_event_page_not_found']="event-list page doesn't exist"; + $plugin_tx['calendar']['error_file_name_wrong']="Error: file name contains spaces or not allowed characters"; + $plugin_tx['calendar']['error_settings_name_wrong']="Error: settings name contains spaces or not allowed characters"; + $plugin_tx['calendar']['error_file_not_saved']="Error: could not save event data"; + $plugin_tx['calendar']['error_file_not_writable']="Error: file not writable, probably protected"; + $plugin_tx['calendar']['error_link_unclear']="link not found"; + $plugin_tx['calendar']['error_links_unclear']="links not found"; + $plugin_tx['calendar']['error_pagename_double']="linked pagename occurs more than once"; + $plugin_tx['calendar']['error_pagenames_double']="linked pagenames occur more than once"; + $plugin_tx['calendar']['error_settings_not_saved']="Error: could not save settings data"; + $plugin_tx['calendar']['error_occured']="Some error occured"; + $plugin_tx['calendar']['error_could_not_change_css_file']="Couldn't change css file"; + $plugin_tx['calendar']['error_could_not_change_config_file']="Couldn't change config file"; + $plugin_tx['calendar']['error_could_not_change_language_file']="Couldn't change language file"; + $plugin_tx['calendar']['error_do_not_edit_from_subsite']="WARNING: You are on a subsite and have enabled same calendar on all subsites. Images and internal links entered from here will not work on the main site. Enter images and internal links from the main site. For internal Links to subsite pages use the URL beginning with \"/\"."; + $plugin_tx['calendar']['error_cant_combine_eventfiles_of_different_versions']="ERROR: cannot combine event files from different Calendar versions"; + + $plugin_tx['calendar']['event_date']="Date"; + $plugin_tx['calendar']['event_date_till_date']="till"; + $plugin_tx['calendar']['event_daily']="daily"; + $plugin_tx['calendar']['event_description']="Additional description"; + $plugin_tx['calendar']['event_end_date']="End date"; + $plugin_tx['calendar']['event_end']="End"; + $plugin_tx['calendar']['event_info_icon']="Info tooltip icon"; + $plugin_tx['calendar']['event_info_text']="Info text"; + $plugin_tx['calendar']['event_other_link']="Other Link"; + $plugin_tx['calendar']['event_widepopup']="+ wide popup"; + $plugin_tx['calendar']['event_link_etc']="Info"; + $plugin_tx['calendar']['event_link_icon']="Link icon"; + $plugin_tx['calendar']['event_icon']="Icon"; + $plugin_tx['calendar']['event_link_text']="Link text"; + $plugin_tx['calendar']['event_main_entry']="Speaker"; + $plugin_tx['calendar']['event_entry3']="Subject"; + $plugin_tx['calendar']['event_entry1']="Location"; + $plugin_tx['calendar']['event_not_on_marquee']="not in marquee"; + $plugin_tx['calendar']['event_start']="Beginning"; + $plugin_tx['calendar']['event_start_date']="Start date"; + $plugin_tx['calendar']['event_time']="Time"; + $plugin_tx['calendar']['event_time_till_time']="-"; + $plugin_tx['calendar']['event_times_are_daily']="daily times"; + $plugin_tx['calendar']['event_same_on_other_days']="same short event on above days"; + $plugin_tx['calendar']['event_additional_days']="additional days"; + $plugin_tx['calendar']['event_weekly']="weekly"; + $plugin_tx['calendar']['event_additional']="additionally"; + $plugin_tx['calendar']['event_except']="except"; + $plugin_tx['calendar']['event_exceptions']="weekly/ long event exceptions"; + $plugin_tx['calendar']['event_weekly_starting_on']="starting"; + $plugin_tx['calendar']['event_weekly_ongoing']="every week"; + $plugin_tx['calendar']['event_yearly_with_age_calculation']="yearly + age calc."; + $plugin_tx['calendar']['event_yearly']="yearly"; + $plugin_tx['calendar']['event_booked_out']="Booked out"; + $plugin_tx['calendar']['event_has_ended']="Has ended"; + $plugin_tx['calendar']['event_multiple']="multiple"; + $plugin_tx['calendar']['event_border_marked']="marked with border in calendar"; + $plugin_tx['calendar']['event_mark2']="border marked"; + + $plugin_tx['calendar']['headline_weekly_events']="Weekly Events"; + $plugin_tx['calendar']['headline_single_events']="Single Events"; + $plugin_tx['calendar']['headline_yearly_events']="Yearly Events"; + $plugin_tx['calendar']['headline_multiple_events']="Multiple Events"; + $plugin_tx['calendar']['headline_started_earlier']="Started before the listed period"; + + $plugin_tx['calendar']['hint_event_formatting']="Formatting"; + $plugin_tx['calendar']['hint_external_links']="External links: site name"; + $plugin_tx['calendar']['hint_formattable_fields']="Simple markup works in:"; + $plugin_tx['calendar']['hint_how_to_enter_links']="How to enter links:"; + $plugin_tx['calendar']['hint_icon_add']="Add new event under this entry"; + $plugin_tx['calendar']['hint_icon_copy']="Copy this event"; + $plugin_tx['calendar']['hint_icon_delete']="Delete this event"; + $plugin_tx['calendar']['hint_icon_ok']="Save all events"; + $plugin_tx['calendar']['hint_internal_links']="Internal links: options list. Other links: next line. Separate multiple links with |. Separate link texts for multiple links also with |."; + $plugin_tx['calendar']['hint_blog_links']="Links to blogentries: URL starting with ?"; + $plugin_tx['calendar']['hint_subsite_links']="Links to subsite pages: URL starting with /"; + $plugin_tx['calendar']['hint_file_links']="PDF/ Word-files in download folder: just the file name (case-sensitive)"; + $plugin_tx['calendar']['hint_links']="Links"; + $plugin_tx['calendar']['hint_mouseover_in_calendar']="(Mouse over date => details, click => event list)"; + + $plugin_tx['calendar']['holiday_name']="Holiday name"; + $plugin_tx['calendar']['holiday_date_calculation']="Date calculation"; + + $plugin_tx['calendar']['holydays']="1.1,New Year's Day;easter -2 day,Good Friday;easter,Easter;easter + 1 day,Easter Monday;24.12,Christmas Eve;25.12,Christmas Day;26.12,Boxing Day"; + + $plugin_tx['calendar']['link-button_next_month']="Next Month"; + $plugin_tx['calendar']['link-button_prev_month']="Previous Month"; + $plugin_tx['calendar']['link-button_prev_year']="Previous Year"; + $plugin_tx['calendar']['link-button_next_year']="Next Year"; + $plugin_tx['calendar']['link_to_present_month']="reset list to present month"; + + $plugin_tx['calendar']['menu_apply_preset']="apply preset"; + $plugin_tx['calendar']['menu_preset_backup']="backup"; + $plugin_tx['calendar']['menu_backup']="Backup"; + $plugin_tx['calendar']['menu_credits']="Credits"; + $plugin_tx['calendar']['menu_css']="CSS"; + $plugin_tx['calendar']['menu_eventlistconfig']="Event-List Config"; + $plugin_tx['calendar']['menu_marquee']="Marquee"; + $plugin_tx['calendar']['menu_holidays']="Holidays"; + $plugin_tx['calendar']['menu_settings_backupname']="backupname"; + $plugin_tx['calendar']['menu_test']="test"; + $plugin_tx['calendar']['menu_config']="Config"; + $plugin_tx['calendar']['menu_help']="Help"; + $plugin_tx['calendar']['menu_language']="Language"; + $plugin_tx['calendar']['menu_main']="Edit Events"; + $plugin_tx['calendar']['menu_save_config']="apply settings"; + $plugin_tx['calendar']['menu_show_calendar']="Calendar"; + $plugin_tx['calendar']['menu_test_event_list']="Event List"; + + $plugin_tx['calendar']['names_of_days']="Su,Mo,Tu,We,Th,Fr,Sa"; + $plugin_tx['calendar']['names_of_months']="January,February,March,April,May,June,July,August,September,Oktober,November,December"; + $plugin_tx['calendar']['names_of_days_longform']="Sundays,Mondays,Tuesdays,Wednesdays,Thursdays,Fridays,Saturdays"; + + $plugin_tx['calendar']['notice_backup_setting']="Backups"; + $plugin_tx['calendar']['notice_event_entries']="entries"; + $plugin_tx['calendar']['notice_file_not_yet_saved']="Changes not yet saved"; + $plugin_tx['calendar']['notice_no_eventlist_page']="event-list page not set"; + $plugin_tx['calendar']['notice_no_eventlist2_page']="Calendar2 event-list page not set"; + $plugin_tx['calendar']['notice_no_next_event_scheduled']="Presently no events scheduled"; + $plugin_tx['calendar']['notice_number_of_events_saved_in_file']="event entries saved in"; + $plugin_tx['calendar']['notice_preset_applied']="Preset \"%s\" has been loaded"; + $plugin_tx['calendar']['notice_settings_data_saved']="settings saved as \"%s\" in calendar/templates/"; + $plugin_tx['calendar']['notice_telling_period_of_events']="Events in the period from"; + $plugin_tx['calendar']['notice_telling_month_of_events']="Events in"; + $plugin_tx['calendar']['notice_today']="today"; + + $plugin_tx['calendar']['config_additional']="additional"; + $plugin_tx['calendar']['config_additional_dates_bookedout']="(year + * = booked out)"; + $plugin_tx['calendar']['config_all_same_color']="color picker acting on all fields"; + $plugin_tx['calendar']['config_articlestyle']="template"; + $plugin_tx['calendar']['config_background']="background"; + $plugin_tx['calendar']['config_background_or_color']="background or color"; + $plugin_tx['calendar']['config_background_color']="background color"; + $plugin_tx['calendar']['config_background_image']="background image"; + $plugin_tx['calendar']['config_bigcalendar']="Big Calendar"; + $plugin_tx['calendar']['config_birthday']="birthday"; + $plugin_tx['calendar']['config_birthday_image']="birthday background image"; + $plugin_tx['calendar']['config_birthday_age']="Age (birthday)"; + $plugin_tx['calendar']['config_birthday_color']="birthday special color"; + $plugin_tx['calendar']['config_birthday_in_dayfield']="birthdaycolor inside dayfield"; + $plugin_tx['calendar']['config_border_color_width']="border color + width"; + $plugin_tx['calendar']['config_border_color']="border color"; + $plugin_tx['calendar']['config_border_width']="border width"; + $plugin_tx['calendar']['config_calendar_template']="test template"; + $plugin_tx['calendar']['config_color']="color"; + $plugin_tx['calendar']['config_day_border_spacing']="space between days"; + $plugin_tx['calendar']['config_day_field_height']="day field height"; + $plugin_tx['calendar']['config_day_name_color']="color of weekday names"; + $plugin_tx['calendar']['config_day_names_more_css']="more weekday name css"; + $plugin_tx['calendar']['config_event_on_holidays']="event on holidays"; + $plugin_tx['calendar']['config_event_on_workdays']="event on workdays"; + $plugin_tx['calendar']['config_eventlist_standard']="standard style"; + $plugin_tx['calendar']['config_eventlist_table_selected']="table-style display"; + $plugin_tx['calendar']['config_fontfamily']="font"; + $plugin_tx['calendar']['config_fontsize']="size"; + $plugin_tx['calendar']['config_headline_style']="headline color + style"; + $plugin_tx['calendar']['config_headline_more_css']="more headline css"; + $plugin_tx['calendar']['config_in_title_label']="if tiny pop-ups, include"; + $plugin_tx['calendar']['config_input_fields']="input fields"; + $plugin_tx['calendar']['config_long_event']="long event"; + $plugin_tx['calendar']['config_margin-top']="margin-top"; + $plugin_tx['calendar']['config_month']="month view"; + $plugin_tx['calendar']['config_month_fontsize']="month etc."; + $plugin_tx['calendar']['config_more']="more"; + $plugin_tx['calendar']['config_no_image']="no image"; + $plugin_tx['calendar']['config_no_special_font']="no special font"; + $plugin_tx['calendar']['config_one_line_per_entry']="1 line per event"; + $plugin_tx['calendar']['config_opacity_no_event']="opacity no event day"; + $plugin_tx['calendar']['config_popup']="Pop-up"; + $plugin_tx['calendar']['config_popup_in_small_calendar']="big pop-ups instead of tiny"; + $plugin_tx['calendar']['config_small_calendar']="Small Calendar"; + $plugin_tx['calendar']['config_subhead_fontsize']="subhead"; + $plugin_tx['calendar']['config_tablestyle']="table"; + $plugin_tx['calendar']['config_template']="template"; + $plugin_tx['calendar']['config_textarea']="big input area"; + $plugin_tx['calendar']['config_today']="today"; + $plugin_tx['calendar']['config_today_background']="today color/background"; + $plugin_tx['calendar']['config_use_default_template']="standard template"; + $plugin_tx['calendar']['config_year']="year view"; + $plugin_tx['calendar']['config_bold']="bold"; + $plugin_tx['calendar']['config_date']="date field"; + $plugin_tx['calendar']['config_event']="event field"; + $plugin_tx['calendar']['config_event_list_period']="%sAnnounce event-list period.   Show %smonths + %spast months  %spast events in grey  %sno past events"; + $plugin_tx['calendar']['config_exceptions']="exceptions"; + $plugin_tx['calendar']['config_hint']="hint under calendar"; + $plugin_tx['calendar']['config_indented']="indented: %scell(s)"; + $plugin_tx['calendar']['config_list_page']="event-list page"; + $plugin_tx['calendar']['config_name']="name"; + $plugin_tx['calendar']['config_no_event_list_page']="No event-list page"; + $plugin_tx['calendar']['config_on']="field on?"; + $plugin_tx['calendar']['config_presets']="Presets"; + $plugin_tx['calendar']['config_roundcorners']="round corners"; + $plugin_tx['calendar']['config_select']="Please select"; + $plugin_tx['calendar']['config_shadow']="shadow"; + $plugin_tx['calendar']['config_time_on']="time on?"; + $plugin_tx['calendar']['config_width']="width"; + $plugin_tx['calendar']['config_lineheight']="line hight"; + $plugin_tx['calendar']['config_normalday']="normal day"; + $plugin_tx['calendar']['config_weekend']="weekend"; + $plugin_tx['calendar']['config_holiday']="holiday"; + $plugin_tx['calendar']['config_eventday']="event 1st day/background"; + $plugin_tx['calendar']['config_underline_longevent']="underline long events or %ssame as 1st day"; + $plugin_tx['calendar']['config_mark2']="border for border marked entries"; + $plugin_tx['calendar']['config_weekdaynames_padding']="top/bottom padding weekday names"; + $plugin_tx['calendar']['config_dayfield_border']="day field border"; + $plugin_tx['calendar']['config_dayfield_padding']="left padding"; + $plugin_tx['calendar']['config_line_between_events_in_bigcalendar']="line between events"; + $plugin_tx['calendar']['config_symbol_when_no_time_is_given']="Symbol for entries without time data"; + $plugin_tx['calendar']['config_select_internal_link']="Select internal link"; + + + $plugin_tx['calendar']['marquee_1stline']="1st line below date"; + $plugin_tx['calendar']['marquee_2ndline']="2nd line below date"; + $plugin_tx['calendar']['marquee_age']="Age is displayed in"; + $plugin_tx['calendar']['marquee_contents']="Contents of the marquee"; + $plugin_tx['calendar']['marquee_dateline']="Dateline"; + $plugin_tx['calendar']['marquee_dateline_height']="marquee dateline height (number)"; + $plugin_tx['calendar']['marquee_emptyline']="Nothing"; + $plugin_tx['calendar']['marquee_height']="marquee height (just a number)"; + $plugin_tx['calendar']['marquee_height_unit']="unit for marquee heights"; + $plugin_tx['calendar']['marquee_not_in_marquee']="Not displayed"; + $plugin_tx['calendar']['marquee_number_of_events_shown']="number of events shown in marquee"; + $plugin_tx['calendar']['marquee_speed']="speed of marquee (px per 0.01 sec)"; + $plugin_tx['calendar']['marquee_use_jquery']="use jQuery to run marquee"; + + $plugin_tx['calendar']['help_config_jquery_marquee']="The Effect of changing the jQuery setting shows only after clicking \"apply settings\" and reselecting \"Marquee\" in the plugin's menu. (The complete plug-in has to be reloaded.)

    Without jQuery the standard Microsoft Marquee funktion is used.
    If you don't use marquee, you may want to deselect \"jQuery\" to avoid loading unnecessary jQuery Calendar Marquee files."; + $plugin_tx['calendar']['help_config_roundcorners']="Enter 4 values of corner radius in px: left-top-corner   right-top right-buttom left-buttom"; + $plugin_tx['calendar']['help_config_shadow']="Enter 3 values in px + 1 color-code: right-displacement bottom-displacement diffusion color"; + $plugin_tx['calendar']['help_config_presets']="Presets contain some values for event list or for calendar (month view). You can save your own settings as presets. Preset-files can be edited in menu «Backup etc.»"; + $plugin_tx['calendar']['help_config_topmargin']="Enter number + unit of measurement, e.g. 50px or 10em, to get more space above the headline for the background image."; + $plugin_tx['calendar']['help_config_padweekdaynames']="Enter number + unit of measurement, for padding space above and below the row of weekday names."; + $plugin_tx['calendar']['help_holiday_date_calculation']="

      +
    • Fixed holidays => day.month (Instead of dot use hyphen or slash if your date delimiter is set to this.)
    • +
    • Movable holidays depending on the Easter date => easter + x day or - x day e.g. Good Friday: easter - 2 day
    • +
    • Movable holidays on a fixed weekday: +
        +
      • First Monday in May: monday 1.5
      • +
      • Last Monday in May (= Monday before 1st of June): -1 monday 1.6
      • +
      • 11 days before the 1st sunday after 26.11: -11 days 1 sunday 26.11
      • +
      • 4th sunday after 26.11: 4 sunday 26.11
      • +
      +
    • +
    " +?> diff --git a/languages/cs.php b/languages/cs.php new file mode 100644 index 0000000..4dc857d --- /dev/null +++ b/languages/cs.php @@ -0,0 +1,281 @@ +\"tinymce\" = uses TinyMCE which comes with CMSimple_XH 1.5 onward.
    \"ckeditor\" = uses CKeditor when this editor is also selected as main editor in CMSimple_XH 1.5 onward.
    \"fckeditor\" = this editor is included in Calendar. Useful setting for older CMSimple_XH Versions.
    No entry means plain HTML will be shown in the input field."; +$plugin_tx['calendar']['cf_editor_deletes_empty_lines_at_the_end']="\"1\" značí ano. Užitečné nastavení, pokud editor přidal nedobrovolně prázdný řádek na konec textu, řádek bude odstraněn."; +$plugin_tx['calendar']['cf_editor_height']="Výška pole editoru v pixelech. Zadávejte pouze číslo, ne px."; +$plugin_tx['calendar']['cf_eventlist_template']="Pokud nebude zadán název šablony, seznam událostí bude ve stylu tabulky. Pokud zadáte název šablony, události se zobrazí v této šabloně.."; +$plugin_tx['calendar']['cf_filepath_calendar_background_images']="Cesta k obrázkům kalendářních pozadí. Relativní počáteční adresa je kalendářní stylesheet.css, tato cesta bude nastavena do něj. Např. v porovnání s běžnou složku obrazu bude potřebovat následující adresu: \"../../../images/\"."; +$plugin_tx['calendar']['cf_filepath_data']="Cesta k souborům kalendářních událostí. Bez zadání bude nastaven na \"./plugins/calendar/content/\". Zadáte-li jinou cestu, cestu začněte s tečkou a lomítkem."; +$plugin_tx['calendar']['cf_same-event-calendar_for_all_subsites']="\"1\" bude používat stejný soubor pro všechny jazyky kalendáře událostí. Ve výchozím nastavení má každý jazyk svůj vlastní kalendář akcí. DŮLEŽITÉ: je-li nastaveno \"1\": přidá obrázky do kalendáře jen v hlavním jazyce, cesta k obrázkům se liší v sekundárních jazycích."; +$plugin_tx['calendar']['cf_second-calendar_filename']="Pokud zadáte název souboru vlastního výběru zde (soubor nemusí existovat!), kterým definujete druhý nezávislý kalendář událostí pro uložení dat, bude druhý kalendářní aktivován a objeví se nabídka nastavení."; +$plugin_tx['calendar']['cf_second-calendar_eventpage']="Zde zadejte \"pagename\", na které se zobrazí druhý kalendář. Bez názvu nebude nic zobrazeno. Pagenamemůže být jen jako jako jednoduchý název (jméno by nemělo být 2x), nebo jako URL začínající \"?\", např. \"?Start:News\"."; +$plugin_tx['calendar']['cf_style_headline_eventtype']="Pokud existují akce, bude titulek je anoncuje a podobným titulkem uvede další akce. Styl je zde možno definovat. Titulek je reprezentován proměnnou \"%s\"."; +$plugin_tx['calendar']['cf_style_headline_year']="Nadpis úrovně H1 ... H6 měsíc/rok. Titulek sloupcového kalendáře."; +$plugin_tx['calendar']['cf_z-index']="Pokud ostatní pluginy přikryjou pop-up okna kalendáře, můžete nastavit (např. 100000) a tím změnit pořadí překrývání."; +$plugin_tx['calendar']['cf_input-field_entry1_as_textarea']="Enter \"1\" or a height value like \"2.6em\" to have field 1 as textarea instead of as simple input line."; +$plugin_tx['calendar']['cf_input-field_entry3_as_textarea']="Same as for the other textarea options \"1\" transforms the input field into a textarea with hight as defined in calendar stylesheet.css. If you enter a hight value instead, e.g. 8em, this hight will be applied to the text-area."; +$plugin_tx['calendar']['cf_input-field_entry1_show_in_input_always']="\"1\" will show field 1 -- even when switched off in eventlist config -- still in the input. Thus entry 1 can be used specially for marquee without appearing in the event list."; +$plugin_tx['calendar']['cf_input-field_additional_days_as_textarea']="Enter \"1\" or a height value like \"2.6em\" to have the field for the additional dates as textarea, if you have many additional dates, instead of as simple input line."; +$plugin_tx['calendar']['cf_input-field_mainentry_as_textarea']="Enter \"1\" or a height value like \"2.6em\" to have the input for the main field as textarea instead of as simple line."; +$plugin_tx['calendar']['error_event_page_occurs_more_than_once']="se vyskytuje jako název stránky více než jednou. Proto není zřejmé, která strana by měla sloužit jako seznam událostí na stránce."; +$plugin_tx['calendar']['error_event_page_not_found']="stránka událostí není definována"; +$plugin_tx['calendar']['error_file_name_wrong']="Chyba: název souboru obsahuje mezery nebo znaky které nejsou povoleny"; +$plugin_tx['calendar']['error_settings_name_wrong']="Chyba: Název nastavení obsahuje mezery nebo znaky které nejsou povoleny"; +$plugin_tx['calendar']['error_file_not_saved']="Chyba: nelze uložit datový soubor událostí"; +$plugin_tx['calendar']['error_file_not_writable']="Chyba: soubor není zapisovatelný, pravděpodobně je chráněn"; +$plugin_tx['calendar']['error_link_unclear']="odkaz nenalezen"; +$plugin_tx['calendar']['error_links_unclear']="odkazy nenalezeny"; +$plugin_tx['calendar']['error_pagename_double']="odlazovaný název stránky se vyskytuje vícekrát"; +$plugin_tx['calendar']['error_pagenames_double']="odlazované názevy stránek se vyskytuje vícekrát"; +$plugin_tx['calendar']['error_settings_not_saved']="Chyba: nelze uložit nastavení"; +$plugin_tx['calendar']['error_occured']="Nějaká chyba"; +$plugin_tx['calendar']['error_could_not_change_css_file']="Nemohu změnit soubor css"; +$plugin_tx['calendar']['error_could_not_change_config_file']="Nemohu změnit konfigurační soubor"; +$plugin_tx['calendar']['error_could_not_change_language_file']="Nemohu změnit jazykový soubor"; +$plugin_tx['calendar']['error_do_not_edit_from_subsite']="VAROVÁNÍ: Nyní jste na podřízeném webu a umožnili jste stejný kalendář na všech podřízených webech. Obrázky a vnitřní odkazy zadané zde nebude fungovat na hlavní stránce. Zadejte obrazy a interní odkazy z hlavní stránky."; +$plugin_tx['calendar']['error_cant_combine_eventfiles_of_different_versions']="CHYBA: nelze ckombinovat soubory událostí z různých verzí kalendáře"; +$plugin_tx['calendar']['event_date']="Datum"; +$plugin_tx['calendar']['event_date_till_date']="až"; +$plugin_tx['calendar']['event_daily']="denně"; +$plugin_tx['calendar']['event_description']="Přídavný popis"; +$plugin_tx['calendar']['event_end_date']="Koncové datum"; +$plugin_tx['calendar']['event_end']="Konec"; +$plugin_tx['calendar']['event_info_icon']="Ikona vyskakovací informace"; +$plugin_tx['calendar']['event_info_text']="Info text"; +$plugin_tx['calendar']['event_other_link']="Ostatní odkazy"; +$plugin_tx['calendar']['event_widepopup']="+ široký popup"; +$plugin_tx['calendar']['event_link_etc']="Info"; +$plugin_tx['calendar']['event_link_icon']="Ikona odkazu"; +$plugin_tx['calendar']['event_icon']="Ikona"; +$plugin_tx['calendar']['event_link_text']="Text odkazu"; +$plugin_tx['calendar']['event_main_entry']="Událost"; +$plugin_tx['calendar']['event_entry3']="Popis události"; +$plugin_tx['calendar']['event_entry1']="Lokace"; +$plugin_tx['calendar']['event_not_on_marquee']="Nezobrazovat v boxu marquee"; +$plugin_tx['calendar']['event_start']="Začátek"; +$plugin_tx['calendar']['event_start_date']="Počáteční datum"; +$plugin_tx['calendar']['event_time']="Čas"; +$plugin_tx['calendar']['event_time_till_time']="-"; +$plugin_tx['calendar']['event_times_are_daily']="v denní době"; +$plugin_tx['calendar']['event_same_on_other_days']="stejný (1 den) akce na více dní"; +$plugin_tx['calendar']['event_additional_days']="další dny"; +$plugin_tx['calendar']['event_weekly']="týdně"; +$plugin_tx['calendar']['event_additional']="další"; +$plugin_tx['calendar']['event_except']="mimo"; +$plugin_tx['calendar']['event_exceptions']="týdně/ vyjímky dlouhých událostí"; +$plugin_tx['calendar']['event_weekly_starting_on']="start"; +$plugin_tx['calendar']['event_weekly_ongoing']="každý týden"; +$plugin_tx['calendar']['event_yearly_with_age_calculation']="ročně + výpočet věku"; +$plugin_tx['calendar']['event_yearly']="ročně"; +$plugin_tx['calendar']['event_booked_out']="Obsazeno"; +$plugin_tx['calendar']['event_has_ended']="Bylo ukončeno"; +$plugin_tx['calendar']['event_multiple']="násobek"; +$plugin_tx['calendar']['event_border_marked']="orámovat událost v kalendáři"; +$plugin_tx['calendar']['event_mark2']="ohraničení v kalendáři"; +$plugin_tx['calendar']['headline_weekly_events']="Týdenní události"; +$plugin_tx['calendar']['headline_single_events']="Jednorázové události"; +$plugin_tx['calendar']['headline_yearly_events']="Roční události"; +$plugin_tx['calendar']['headline_multiple_events']="Ostatní opakující se události"; +$plugin_tx['calendar']['headline_started_earlier']="Právě probíhající událost"; +$plugin_tx['calendar']['hint_event_formatting']="Formátování"; +$plugin_tx['calendar']['hint_external_links']="Externí odkaz: adresa stránky"; +$plugin_tx['calendar']['hint_formattable_fields']="Tyto položky mohou být formátovány takto"; +$plugin_tx['calendar']['hint_how_to_enter_links']="Jak používat odkazy:"; +$plugin_tx['calendar']['hint_icon_add']="Přidat novou událost"; +$plugin_tx['calendar']['hint_icon_copy']="Kopírovat událost"; +$plugin_tx['calendar']['hint_icon_delete']="Vymazat událost"; +$plugin_tx['calendar']['hint_icon_ok']="Uložit událost"; +$plugin_tx['calendar']['hint_internal_links']="Interní odkazy: seznam možností. Další odkazy: další řádek. Oddělte více odkazů znakem |. Samostatné odkazy pro více linků také znakem |"; +$plugin_tx['calendar']['hint_blog_links']="Odkazy do blogu: URL začínající ?"; +$plugin_tx['calendar']['hint_subsite_links']="Odkaz na podstránky: URL začíná /"; +$plugin_tx['calendar']['hint_file_links']="PDF/Word soubory ve složce download: pouze název (rozliují se malá a velká písmena)"; +$plugin_tx['calendar']['hint_links']="Odkazy"; +$plugin_tx['calendar']['hint_mouseover_in_calendar']="Myší na datum => detaily"; +$plugin_tx['calendar']['holiday_name']="Nazev svátku"; +$plugin_tx['calendar']['holiday_date_calculation']="Výpočet datumu"; +$plugin_tx['calendar']['holydays']="1.1,Nový rok;easter -2 day,Velký Pátek;easter,Velikonoční neděle;easter + 1 day,Velikonoční pondělí;24.12,Štědrý den;25.12,Boží hod;26.12,Druhý svátek vánoční"; +$plugin_tx['calendar']['link-button_next_month']=">>"; +$plugin_tx['calendar']['link-button_prev_month']="<<"; +$plugin_tx['calendar']['link-button_prev_year']="Předchozí rok"; +$plugin_tx['calendar']['link-button_next_year']="Další rok"; +$plugin_tx['calendar']['link_to_present_month']="do měsíce"; +$plugin_tx['calendar']['menu_apply_preset']="použít nastavení"; +$plugin_tx['calendar']['menu_preset_backup']="záloha"; +$plugin_tx['calendar']['menu_backup']="Záloha"; +$plugin_tx['calendar']['menu_credits']="O pluginu"; +$plugin_tx['calendar']['menu_css']="Styl"; +$plugin_tx['calendar']['menu_eventlistconfig']="Konfigurace eventlistu"; +$plugin_tx['calendar']['menu_marquee']="Marquee"; +$plugin_tx['calendar']['menu_holidays']="Svátky "; +$plugin_tx['calendar']['menu_settings_backupname']="název nastavení"; +$plugin_tx['calendar']['menu_test']="test"; +$plugin_tx['calendar']['menu_config']="Konfigurace"; +$plugin_tx['calendar']['menu_help']="Pomoc"; +$plugin_tx['calendar']['menu_language']="Jazyk"; +$plugin_tx['calendar']['menu_main']="Události"; +$plugin_tx['calendar']['menu_save_config']="použít nastavení"; +$plugin_tx['calendar']['menu_show_calendar']="Kalendář"; +$plugin_tx['calendar']['menu_test_event_list']="Kalendáře"; +$plugin_tx['calendar']['names_of_days']="Ne,Po,Út,St,Čt,Pá,So"; +$plugin_tx['calendar']['names_of_months']="Leden,Únor,Březen,Duben,Květen,Červen,Červenec,Srpen,Září,Říjen,Listopad,Prosinec"; +$plugin_tx['calendar']['names_of_days_longform']="Neděle,Pondělí,Úterý,Středa,Čtvrtek,Pátek,Sobota"; +$plugin_tx['calendar']['notice_backup_setting']="Zálohy"; +$plugin_tx['calendar']['notice_event_entries']="záznamů"; +$plugin_tx['calendar']['notice_file_not_yet_saved']="Změny neuloženy"; +$plugin_tx['calendar']['notice_no_eventlist_page']="stránka událostí není nastavena"; +$plugin_tx['calendar']['notice_no_eventlist2_page']="Kalendář2 nemá nastavenu stránku událostí"; +$plugin_tx['calendar']['notice_no_next_event_scheduled']="V současnosti se žádná akce nekoná"; +$plugin_tx['calendar']['notice_number_of_events_saved_in_file']="položky událostí uloženy v"; +$plugin_tx['calendar']['notice_preset_applied']="Nastavení \"%s\" je nyní načteno"; +$plugin_tx['calendar']['notice_settings_data_saved']="nastavení \"%s\" uloženo v adresáři plugin content"; +$plugin_tx['calendar']['notice_telling_period_of_events']="Události v období"; +$plugin_tx['calendar']['notice_telling_month_of_events']="Události v"; +$plugin_tx['calendar']['notice_today']="dnes"; +$plugin_tx['calendar']['notice_commercial']="Komerční použití?"; +$plugin_tx['calendar']['notice_commercial_licence']="This plugin is free for private and commercial use.
    You can however buy a licence at a price of your choice to support the programmer. Simply send an e-mail to the programmer for a licence plus invoice."; +$plugin_tx['calendar']['config_additional']="další"; +$plugin_tx['calendar']['config_additional_dates_bookedout']="(rok + * = obsazeno)"; +$plugin_tx['calendar']['config_all_same_color']="všechna pole v této barvě"; +$plugin_tx['calendar']['config_articlestyle']="šablona"; +$plugin_tx['calendar']['config_background']="pozadí"; +$plugin_tx['calendar']['config_background_or_color']="pozadí nebo barva"; +$plugin_tx['calendar']['config_background_color']="barva pozadí"; +$plugin_tx['calendar']['config_background_image']="obrázek na pozadí"; +$plugin_tx['calendar']['config_bigcalendar']="Velký kalendář"; +$plugin_tx['calendar']['config_birthday']="narozeniny"; +$plugin_tx['calendar']['config_birthday_image']="birthday background image"; +$plugin_tx['calendar']['config_birthday_age']="Věk (narozeniny)"; +$plugin_tx['calendar']['config_birthday_color']="speciální barva pro narozeniny"; +$plugin_tx['calendar']['config_birthday_in_dayfield']="barva narozenin uvnitř pole dne"; +$plugin_tx['calendar']['config_border_color_width']="barva orámování + šířka"; +$plugin_tx['calendar']['config_border_color']="barva okraje"; +$plugin_tx['calendar']['config_border_width']="šířka okraje"; +$plugin_tx['calendar']['config_calendar_template']="test template"; +$plugin_tx['calendar']['config_color']="barva"; +$plugin_tx['calendar']['config_day_border_spacing']="mezera mezi dny"; +$plugin_tx['calendar']['config_day_field_height']="výška pole den"; +$plugin_tx['calendar']['config_day_name_color']="barva weekday names"; +$plugin_tx['calendar']['config_day_names_more_css']="more weekday name css"; +$plugin_tx['calendar']['config_event_on_holidays']="události ve dnech volna"; +$plugin_tx['calendar']['config_event_on_workdays']="události v pracovních dnech"; +$plugin_tx['calendar']['config_eventlist_standard']="standardní styl"; +$plugin_tx['calendar']['config_eventlist_table_selected']="styl zobrazení tabulky"; +$plugin_tx['calendar']['config_fontfamily']="font"; +$plugin_tx['calendar']['config_fontsize']="velikost"; +$plugin_tx['calendar']['config_headline_style']="titulek barva + styl"; +$plugin_tx['calendar']['config_headline_more_css']="více titulkového css"; +$plugin_tx['calendar']['config_in_title_label']="pokud malé popup okno, vložit"; +$plugin_tx['calendar']['config_input_fields']="vstupní pole"; +$plugin_tx['calendar']['config_long_event']="dlouhá událost"; +$plugin_tx['calendar']['config_margin-top']="margin-top (horní okraj)"; +$plugin_tx['calendar']['config_month']="zobrazit měsíce"; +$plugin_tx['calendar']['config_month_fontsize']="měsíc apod."; +$plugin_tx['calendar']['config_more']="více"; +$plugin_tx['calendar']['config_no_image']="žádný obrázek"; +$plugin_tx['calendar']['config_no_special_font']="žádný specialní font"; +$plugin_tx['calendar']['config_one_line_per_entry']="1 řádek pro událost"; +$plugin_tx['calendar']['config_opacity_no_event']="průhlednost nedefinovaných událostí"; +$plugin_tx['calendar']['config_popup']="Pop-up"; +$plugin_tx['calendar']['config_popup_in_small_calendar']="velké popup okno"; +$plugin_tx['calendar']['config_small_calendar']="Malý kalendář"; +$plugin_tx['calendar']['config_subhead_fontsize']="podtitulek"; +$plugin_tx['calendar']['config_tablestyle']="tabulka"; +$plugin_tx['calendar']['config_template']="šablona"; +$plugin_tx['calendar']['config_textarea']="velké vstupní pole"; +$plugin_tx['calendar']['config_today']="dnes"; +$plugin_tx['calendar']['config_today_background']="barva dneška/pozadí"; +$plugin_tx['calendar']['config_use_default_template']="standardní template"; +$plugin_tx['calendar']['config_year']="roční zobrazení"; +$plugin_tx['calendar']['config_bold']="bold"; +$plugin_tx['calendar']['config_date']="pole datum"; +$plugin_tx['calendar']['config_event']="pole událostí"; +$plugin_tx['calendar']['config_event_list_period']="%sZobrazení událostí.   Zobrazit%směsíců + %suplynulých měsíců  %suplynulé šedě  %snezobrazovat uplynulé"; +$plugin_tx['calendar']['config_exceptions']="vyjímky"; +$plugin_tx['calendar']['config_hint']="hint under calendar"; +$plugin_tx['calendar']['config_indented']="odsadit: %sbuněk"; +$plugin_tx['calendar']['config_list_page']="stránka událostí"; +$plugin_tx['calendar']['config_name']="název"; +$plugin_tx['calendar']['config_no_event_list_page']="Žádná stránka událostí"; +$plugin_tx['calendar']['config_on']="pole zapnout?"; +$plugin_tx['calendar']['config_presets']="zobrazení"; +$plugin_tx['calendar']['config_roundcorners']="zaoblení rohů"; +$plugin_tx['calendar']['config_select']="Vyberte prosím"; +$plugin_tx['calendar']['config_shadow']="stínování"; +$plugin_tx['calendar']['config_time_on']="nastavit čas?"; +$plugin_tx['calendar']['config_width']="šířka"; +$plugin_tx['calendar']['config_lineheight']="výška linky"; +$plugin_tx['calendar']['config_normalday']="normal day"; +$plugin_tx['calendar']['config_weekend']="víkend"; +$plugin_tx['calendar']['config_holiday']="prázdniny"; +$plugin_tx['calendar']['config_eventday']="1 den události/pozadí"; +$plugin_tx['calendar']['config_underline_longevent']="underline long events or %ssame as 1st day"; +$plugin_tx['calendar']['config_mark2']="border for border marked entries"; +$plugin_tx['calendar']['config_weekdaynames_padding']="top/bottom padding weekday names"; +$plugin_tx['calendar']['config_dayfield_border']="ohraničení pole dnů"; +$plugin_tx['calendar']['config_dayfield_padding']="levé odsazení"; +$plugin_tx['calendar']['config_line_between_events_in_bigcalendar']="linka mezi událostmi"; +$plugin_tx['calendar']['config_symbol_when_no_time_is_given']="Symbol pro položky bez časových údajů"; +$plugin_tx['calendar']['config_select_internal_link']="Vyberte interní odkaz"; +$plugin_tx['calendar']['marquee_1stline']="První řádek zobrazení"; +$plugin_tx['calendar']['marquee_2ndline']="Druhý řádek zobrazení"; +$plugin_tx['calendar']['marquee_age']="Věk zobrazit v"; +$plugin_tx['calendar']['marquee_contents']="Obsah v marquee"; +$plugin_tx['calendar']['marquee_dateline']="Řádek s datem"; +$plugin_tx['calendar']['marquee_dateline_height']="marquee výška titulku (pouze číslo)"; +$plugin_tx['calendar']['marquee_emptyline']="Nic"; +$plugin_tx['calendar']['marquee_height']="výška marquee (pouze číslo)"; +$plugin_tx['calendar']['marquee_height_unit']="výška marquee v jednotkách"; +$plugin_tx['calendar']['marquee_not_in_marquee']="Nezobrazit"; +$plugin_tx['calendar']['marquee_number_of_events_shown']="počet zobrazovaných událostí v marquee"; +$plugin_tx['calendar']['marquee_speed']="rychlost marquee (px za 0.01 sec)"; +$plugin_tx['calendar']['marquee_use_jquery']="použít jQuery pro zobrazení marquee"; +$plugin_tx['calendar']['help_config_jquery_marquee']="Vliv změny jQuery nastavení zobrazí pouze po kliknutí na \"použít nastavení\" a reselecting Marquee in the plugin's menu.

    Bez jQuery bude použit standardní Microsoft Marquee funkce."; +$plugin_tx['calendar']['help_config_roundcorners']="vlož 4 hodnoty v pixelech pro zaoblené rohy: levý-horní-roh   pravý-horní pravý-dolní levý-dolní"; +$plugin_tx['calendar']['help_config_shadow']="vlož 3 hodnoty v pixelech + 1 kód barvy: pravý-posun dolní-posun pro definici stínu"; +$plugin_tx['calendar']['help_config_presets']="Předvolby obsahují některé hodnoty pro zobrazení seznamu událostí nebo kalendáře v zobrazení měsíce). Můžete si uložit vlastní nastavení jako přednastavení. Přednastavené soubory je možné upravovat v nabídce menu«Zálohy atd.»"; +$plugin_tx['calendar']['help_config_topmargin']="Zadej číslo + jednotky pro nastavení, např. 50px nebo 10em, pro více místa nad titulkem na pozadí obrázku."; +$plugin_tx['calendar']['help_config_padweekdaynames']="Zadej číslo + jednotky pro definování prostoru nad a pod názvem dnů."; +$plugin_tx['calendar']['help_holiday_date_calculation']="
      \r\n
    • Pevné svátky => day.month (Můžete použít tečku nebo lomítko, pokud podle nvašeho nastavení data.)
    • \r\n
    • Pohyblivé svátky v závislosti na datu Velikonoc => velikonoce + x dní nebo - x dní např. Velký pátek: velikonoce - 2 dny
    • \r\n
    • Pohyblivé svátky závislé na víkendech:\r\n
        \r\n
      • První pondělí v květnu: pondělí 1.5
      • \r\n
      • Poslední pondělí v květnu (= Pondělí do 1. června): -1 pondělí 1.6
      • \r\n
      • 11 dnů před 1. nedělí po 26.11: -11 dní 1 neděle 26.11
      • \r\n
      • 4. neděle po 26.11: 4 neděle 26.11
      • \r\n
      \r\n
    • \r\n
    "; + +?> diff --git a/languages/da.php b/languages/da.php new file mode 100644 index 0000000..eb786a5 --- /dev/null +++ b/languages/da.php @@ -0,0 +1,63 @@ + diff --git a/languages/de.php b/languages/de.php new file mode 100644 index 0000000..d677a28 --- /dev/null +++ b/languages/de.php @@ -0,0 +1,285 @@ +fckeditor\" oder \"html\" eingeben."; +$plugin_tx['calendar']['cf_editor_deletes_empty_lines_at_the_end']="\"1\" bedeutet, dass alle leeren Zeilen am Ende des Feldes \"zusätzliche Beschreibung\" gelöscht werden. Praktische Einstellung, da man das Vorhanensein von leeren Zeilen nicht im Editor sehen kann."; +$plugin_tx['calendar']['cf_editor_height']="Höhe des Editorfeldes in Pixel. Nur eine Zahl eingeben, nicht die Maßeinheit px."; +$plugin_tx['calendar']['cf_eventlist_start_moves_with_clicked_event']="Die angezeigte Periode der Eventliste wird hier beeinflusst. Kein Eintrag bedeutet, dass man bei Klick auf ein Kalenderevent zur Eventliste mit voreingestellter Anzeigeperiode gelangt, solange das angeklickte Event innerhalt dieser Periode liegt. Liegt es außerhalb, wird die Periode entsprechend erweitert. Bei Eingabe von \"1\" wird die Periode stattdessen zum Monat des angeklicken Events hin verschoben und das angeklickte Event erscheint somit ziemlich am Anfang der Eventliste. Gleichzeitig gibt es am Anfang einen Link um die angezeigte Periode wieder auf Normal zu stellen. "; +$plugin_tx['calendar']['cf_eventlist_template']="Gibt es hier keinen Eintrag, wird die Eventliste im Tabellenstil dargestellt, Wenn hier der Name einer Templatedatei eingetragen wird, bestimmt diese das Aussehen der Eventliste."; +$plugin_tx['calendar']['cf_filepath_calendar_background_images']="Pfad zu den Hintergrundbildern des Kalenders, eine relative Adresse die beim Calendar Style Sheet anfängt wird benötigt, da sie in das Style Sheet eingefügt wird. Bei Nutzung des normalen Bilderspeichers eingeben:.\"../../../images/\"."; +$plugin_tx['calendar']['cf_filepath_data']="Der Weg zum Verzeichnis, in dem Calendar seine Eventdateien speichert. Ohne Angabe gilt \"./plugins/calendar/content/\". Alternativen Pfad mit Punkt Schrägstrich anfangen."; +$plugin_tx['calendar']['cf_input-field_additional_days_as_textarea']="Bei Eintrag eines Wertes für die Höhe wie \"2.6em\" wird das Eingabefeld von zusätzlichen Eventdaten eine textarea statt einfacher Eingabezeile. Praktisch für viele zusätzliceh Daten."; +$plugin_tx['calendar']['cf_input-field_entry1_as_textarea']="Bei Eintrag eines Wertes für die Höhe wie \"2.6em\" wird das Eingabefeld von Feld1 eine textarea statt einfacher Eingabezeile."; +$plugin_tx['calendar']['cf_input-field_entry1_show_in_input_always']="Bei Eintrag von \"1\" wird Feld 1, selbst wenn in der Eventliste ausgeschaltet, trotzdem im Eingabebereich angezeigt. Diese Eingaben können z.B. für den Lauftext genutzt werden."; +$plugin_tx['calendar']['cf_input-field_entry3_as_textarea']="Bei Eintrag eines Wertes für die Höhe wie \"2.6em\" wird das Eingabefeld von Feld3 eine textarea statt einfacher Eingabezeile."; +$plugin_tx['calendar']['cf_input-field_mainentry_as_textarea']="Bei Eintrag eines Wertes für die Höhe wie \"2.6em\" wird das Eingabefeld des Hauptfeldes eine textarea statt einfacher Eingabezeile."; +$plugin_tx['calendar']['cf_popup_direction_big_calendar']="Richtung, in der die Pop-ups beim großen Kalendar erscheinen: \"right\"=rechts, \"down\"=unten, keine Einstellung = links."; +$plugin_tx['calendar']['cf_popup_direction_small_calendar']="Richtung, in der die Pop-ups beim kleinen Kalendar erscheinen: \"right\"=rechts, \"down\"=unten, keine Einstellung = links."; +$plugin_tx['calendar']['cf_same-event-calendar_for_all_subsites']="Speziell für mehrsprachigen Websites! Mit \"1\" wird eine sprachunspezifische Kalenderdatei calendarevent.txt angelegt, die für alle Sprachversionen genutzt wird. WICHTIG: Wenn diese Option eingestellt ist, Bilder nur von der Basissprache aus in den Kalender einfügen, da Bilder in den Sekundärsprachen einen anderen Adresspfad haben."; +$plugin_tx['calendar']['cf_second-calendar_eventpage']="Hier den Namen der Seite eingeben, zu der der 2. Kalender verlinken soll. Ohne Eintrag bleibt der 2. Kalnder ohne Links. Der Eintrag kann der einfache Seitenname sein (Name darf nicht mehrmals vorkommen) oder der URL-Teil ab \"?\", z.B.: \"?Start:News\"."; +$plugin_tx['calendar']['cf_second-calendar_filename']="Hier kann ein beliebiger Name als Dateiname für die Eventdaten eines zweiten Calendars eingeben werden. Die Eingabe aktiviert drei zusätzliche Menüeintrage für den zweiten Kalendaer im Pluginmenü."; +$plugin_tx['calendar']['cf_style_headline_eventtype']="Wenn es wöchentliche Events gibt, erscheit darüber eine Überschrift, deren Aussehen hier bestimmt wird. Eine ähnliche Überschrift kündigt anschließend die folgenden Einzelevents an."; +$plugin_tx['calendar']['cf_style_headline_year']="Wenn leer wird für die Überschrift Jahr/Monat über Jahrkalendar / Kalendar in Spalten der Stil h4 genutzt. Alternativ hier einen Stil von h1 bis h6 oder p eintragen, oder HTML-Code mit %s als Platzhalter für Jahr/Monat, z.B. ‹h5› %s ‹/h5›;"; +$plugin_tx['calendar']['cf_z-index']="Falls andere Plugins die Popups von Kalendar überdecken, kann man hier eine hohe Zahl (z.B. 100000) eintragen um den Kalender auf eine höhere Anordnungsebene zu bringen"; +$plugin_tx['calendar']['config_additional']="zusätzlich"; +$plugin_tx['calendar']['config_additional_dates_bookedout']="(Jahr + * = Ausgebucht)"; +$plugin_tx['calendar']['config_all_same_color']="Farbwähler, der auf alle Felder wirkt"; +$plugin_tx['calendar']['config_articlestyle']="Template"; +$plugin_tx['calendar']['config_background']="Hintergrund"; +$plugin_tx['calendar']['config_background_color']="Hintergrundfarbe"; +$plugin_tx['calendar']['config_background_image']="Hintergrundbild"; +$plugin_tx['calendar']['config_background_or_color']="Hintergrundbild oder Farbe"; +$plugin_tx['calendar']['config_bigcalendar']="Großer Kalender"; +$plugin_tx['calendar']['config_birthday']="Geburtstag"; +$plugin_tx['calendar']['config_birthday_age']="Alter (Geburtstag)"; +$plugin_tx['calendar']['config_birthday_color']="besondere Farbe bei Geburtstag"; +$plugin_tx['calendar']['config_birthday_image']="Hintergrundbild Geburtstag"; +$plugin_tx['calendar']['config_birthday_in_dayfield']="Geburtstagsfeld im Tagesfeld"; +$plugin_tx['calendar']['config_bold']="fett"; +$plugin_tx['calendar']['config_border_color']="Randfarbe"; +$plugin_tx['calendar']['config_border_color_width']="Randfarbe + Breite"; +$plugin_tx['calendar']['config_border_width']="Randbreite"; +$plugin_tx['calendar']['config_calendar_template']="Test-Template"; +$plugin_tx['calendar']['config_color']="Farbe"; +$plugin_tx['calendar']['config_date']="Datumsfeld"; +$plugin_tx['calendar']['config_day_border_spacing']="Abstand der Tagesfelder"; +$plugin_tx['calendar']['config_day_field_height']="Tagesfeldhöhe"; +$plugin_tx['calendar']['config_day_name_color']="Wochentagsnamenfarbe"; +$plugin_tx['calendar']['config_day_names_more_css']="zusätzl. Wochentagsnamen-Css"; +$plugin_tx['calendar']['config_dayfield_border']="Tagesfeldumrandung"; +$plugin_tx['calendar']['config_dayfield_padding']="Tagesfeldinnenrand"; +$plugin_tx['calendar']['config_event']="Eventfeld"; +$plugin_tx['calendar']['config_event_list_period']="%sTerminzeitraum als Überschrift.  Zeitraum = %sMonate + %svergangene Monate  %sabgelaufene Events in grau  %skeine abgelaufenen Events zeigen"; +$plugin_tx['calendar']['config_event_on_holidays']="Event feiertags"; +$plugin_tx['calendar']['config_event_on_workdays']="Event werktags"; +$plugin_tx['calendar']['config_eventday']="Event 1.Tag Vordergrund/Hintergrund"; +$plugin_tx['calendar']['config_eventlist_standard']="Standardeinstellung"; +$plugin_tx['calendar']['config_eventlist_table_selected']="Tabellenstil"; +$plugin_tx['calendar']['config_exceptions']="Ausnahmen"; +$plugin_tx['calendar']['config_fontfamily']="Font"; +$plugin_tx['calendar']['config_fontsize']="Größe"; +$plugin_tx['calendar']['config_headline_more_css']="zusätzl. Überschrift-Css"; +$plugin_tx['calendar']['config_headline_style']="Überschrift Zeichenfarbe + Stil"; +$plugin_tx['calendar']['config_hint']="Hinweis"; +$plugin_tx['calendar']['config_holiday']="Feiertage"; +$plugin_tx['calendar']['config_in_title_label']="Bei kleinem Pop-up dazunehmen"; +$plugin_tx['calendar']['config_indented']="eingerückt: %s Feld(er)"; +$plugin_tx['calendar']['config_input_fields']="Eingabefelder"; +$plugin_tx['calendar']['config_line_between_events_in_bigcalendar']="Zwischenlinien"; +$plugin_tx['calendar']['config_lineheight']="Zeilenhöhe"; +$plugin_tx['calendar']['config_list_page']="Seite mit Event-Liste"; +$plugin_tx['calendar']['config_long_event']="Mehrtagesevent"; +$plugin_tx['calendar']['config_margin-top']="Abstand über Überschrift"; +$plugin_tx['calendar']['config_mark2']="Rand für als umrandet markierte Events"; +$plugin_tx['calendar']['config_month']="Monatsansicht"; +$plugin_tx['calendar']['config_month_fontsize']="Monat usw."; +$plugin_tx['calendar']['config_more']="mehr"; +$plugin_tx['calendar']['config_name']="Name"; +$plugin_tx['calendar']['config_no_event_list_page']="Keine Event-Liste"; +$plugin_tx['calendar']['config_no_image']="Kein Bild"; +$plugin_tx['calendar']['config_no_special_font']="kein spezieller Font"; +$plugin_tx['calendar']['config_normalday']="normaler Tag"; +$plugin_tx['calendar']['config_on']="Feld an?"; +$plugin_tx['calendar']['config_one_line_per_entry']="nur 1 Zeile pro Eintrag"; +$plugin_tx['calendar']['config_opacity_no_event']="Opazität wenn kein Event"; +$plugin_tx['calendar']['config_popup']="Pop-up"; +$plugin_tx['calendar']['config_popup_in_small_calendar']="Großes Pop-up statt kleines"; +$plugin_tx['calendar']['config_presets']="Presets"; +$plugin_tx['calendar']['config_roundcorners']="runde Ecken"; +$plugin_tx['calendar']['config_select']="Bitte auswählen"; +$plugin_tx['calendar']['config_select_internal_link']="Internen Link auswählen"; +$plugin_tx['calendar']['config_shadow']="Schatten"; +$plugin_tx['calendar']['config_small_calendar']="Kleiner Kalender"; +$plugin_tx['calendar']['config_subhead_fontsize']="Feldüberschriften"; +$plugin_tx['calendar']['config_symbol_when_no_time_is_given']="Symbol wenn keine Zeitangabe"; +$plugin_tx['calendar']['config_tablestyle']="Tabelle"; +$plugin_tx['calendar']['config_template']="Template"; +$plugin_tx['calendar']['config_textarea']="großer Eingabebereich"; +$plugin_tx['calendar']['config_time_on']="Zeitfeld?"; +$plugin_tx['calendar']['config_today']="Heutiger Tag"; +$plugin_tx['calendar']['config_today_background']="Heutiges Datum Vordergrund/Hintergrund"; +$plugin_tx['calendar']['config_underline_longevent']="Unterstreichung Folge-Eventtage oder %s Darstellung wie 1.Tag"; +$plugin_tx['calendar']['config_use_default_template']="Standard-Template"; +$plugin_tx['calendar']['config_weekdaynames_padding']="oben/unten Raum Wochentagsnamen"; +$plugin_tx['calendar']['config_weekend']="Wochenende"; +$plugin_tx['calendar']['config_width']="Breite"; +$plugin_tx['calendar']['config_year']="Jahresansicht"; +$plugin_tx['calendar']['error_cant_combine_eventfiles_of_different_versions']="FEHLER: Dateien unterschiedlicher Calendar-Versionen können nicht kombiniert werden."; +$plugin_tx['calendar']['error_could_not_change_config_file']="Konnte Konfig-Datei nicht ändern"; +$plugin_tx['calendar']['error_could_not_change_css_file']="Konnte Css-Datei nicht ändern/"; +$plugin_tx['calendar']['error_could_not_change_language_file']="Konnte Sprach-Datei nicht ändern"; +$plugin_tx['calendar']['error_do_not_edit_from_subsite']="WARNUNG: Sie haben \"Dieselbe Event-Datei für alle Sprachen\" eingestellt. Nur wenn sie Events von der Seite mit der Hauptsprache bearbeiten, werden Bilder und interne Links richtig verknüpft. P.S. Interne Links zu Seiten der Zweitsprache als URL beginnend mit / und Subsitekürzel eingeben."; +$plugin_tx['calendar']['error_event_page_not_found']="als Seite für Eventliste nicht gefunden"; +$plugin_tx['calendar']['error_event_page_occurs_more_than_once']="kommt als Seitenname mehr als einmal vor. Bitte korrigieren."; +$plugin_tx['calendar']['error_file_name_wrong']="Fehler: Dateiname beinhaltet nicht erlaubte Zeichen"; +$plugin_tx['calendar']['error_file_not_saved']="Fehler: Änderungen nicht gespeichert"; +$plugin_tx['calendar']['error_file_not_writable']="Fehler: Datei nicht schreibbar, wahrscheinlich schreibgeschützt"; +$plugin_tx['calendar']['error_link_unclear']="Link uneindeutig"; +$plugin_tx['calendar']['error_links_unclear']="Links uneindeutig"; +$plugin_tx['calendar']['error_occured']="Ein Fehler ist aufgetreten"; +$plugin_tx['calendar']['error_pagename_double']="verlinkter Seitenname kommt mehrmals vor"; +$plugin_tx['calendar']['error_pagenames_double']="verlinkte Seitennamen kommen mehrmals vor"; +$plugin_tx['calendar']['error_settings_name_wrong']="Fehler: Name der Einstellungen enthält Leerzeichen oder nicht erlaubte Zeichen"; +$plugin_tx['calendar']['error_settings_not_saved']="Fehler, Daten konnen nicht gespeichert werden"; +$plugin_tx['calendar']['event_additional']="zusätzlich"; +$plugin_tx['calendar']['event_additional_days']="zusätzliche Tage"; +$plugin_tx['calendar']['event_booked_out']="Ausgebucht"; +$plugin_tx['calendar']['event_border_marked']="umrandet im Kalender"; +$plugin_tx['calendar']['event_daily']="tägl."; +$plugin_tx['calendar']['event_date']="Datum"; +$plugin_tx['calendar']['event_date_till_date']="bis"; +$plugin_tx['calendar']['event_description']="zusätzliche Beschreibung"; +$plugin_tx['calendar']['event_end']="Ende"; +$plugin_tx['calendar']['event_end_date']="Enddatum"; +$plugin_tx['calendar']['event_entry1']="Ort"; +$plugin_tx['calendar']['event_entry3']="Referent"; +$plugin_tx['calendar']['event_except']="außer"; +$plugin_tx['calendar']['event_exceptions']="Termin-Ausnahmen"; +$plugin_tx['calendar']['event_has_ended']="Beendet"; +$plugin_tx['calendar']['event_icon']="Icon"; +$plugin_tx['calendar']['event_info_icon']="Info Tooltip Icon"; +$plugin_tx['calendar']['event_info_text']="Info-Text"; +$plugin_tx['calendar']['event_link_etc']="Info"; +$plugin_tx['calendar']['event_link_icon']="Link Icon"; +$plugin_tx['calendar']['event_link_text']="Link-Text"; +$plugin_tx['calendar']['event_main_entry']="Thema"; +$plugin_tx['calendar']['event_mark2']="umrandet"; +$plugin_tx['calendar']['event_multiple']="mehrfach"; +$plugin_tx['calendar']['event_not_on_marquee']="nicht im Lauftext"; +$plugin_tx['calendar']['event_other_link']="Weiterer Link"; +$plugin_tx['calendar']['event_same_on_other_days']="gleiches Tagesevent an obigen Tagen"; +$plugin_tx['calendar']['event_start']="Anfang"; +$plugin_tx['calendar']['event_start_date']="Startdatum"; +$plugin_tx['calendar']['event_time']="Uhrzeit"; +$plugin_tx['calendar']['event_time_till_time']="-"; +$plugin_tx['calendar']['event_times_are_daily']="tägliche Zeiten?"; +$plugin_tx['calendar']['event_weekly']="jede Woche"; +$plugin_tx['calendar']['event_weekly_ongoing']="jede Woche"; +$plugin_tx['calendar']['event_weekly_starting_on']="Beginn"; +$plugin_tx['calendar']['event_widepopup']="+ breites Popup"; +$plugin_tx['calendar']['event_yearly']="jährlich"; +$plugin_tx['calendar']['event_yearly_with_age_calculation']="jährlich + Alter"; +$plugin_tx['calendar']['headline_multiple_events']="Mehrfachveranstaltungen"; +$plugin_tx['calendar']['headline_single_events']="Einzelveranstaltungen"; +$plugin_tx['calendar']['headline_started_earlier']="Früher begonnen"; +$plugin_tx['calendar']['headline_weekly_events']="Wöchentliche Veranstaltungen"; +$plugin_tx['calendar']['headline_yearly_events']="Jährliche Events"; +$plugin_tx['calendar']['help_config_jquery_marquee']="Die Auswirkung einer Änderung der jQuery-Einstellung sind nur sichtbar, wenn man nach Klicken auf \"Änderungen anwenden\" den Menüpunkt Lauftext im Pluginmenü neu anwählt. (Das ganze Calendar-Plugin muss neu geladen werden)

    Ohne jQuery wird für den Lauftext die Microsoft Marquee Funktion genutzt."; +$plugin_tx['calendar']['help_config_padweekdaynames']="Zahl und Maßeinheit (px, em) für Leerraum über und unter Wochentagsnahmen eingeben"; +$plugin_tx['calendar']['help_config_presets']="Presets können alle oder einen Teil der Werte für die Eventliste oder den Kalendar enthalten. Eigene Einstellungen können gespeichert werden und im Menü 'Backup etc.' bearbeitet werden."; +$plugin_tx['calendar']['help_config_roundcorners']="4 Werte für Eckradium in px angeben: linksoben rechtsoben rechtsunten linksunten"; +$plugin_tx['calendar']['help_config_shadow']="3 Werte in px und 1 Farbcode: Rechtsverschiebung Verschiebung-nach-unten Verlauf Farbe"; +$plugin_tx['calendar']['help_config_topmargin']="Zahl und Maßeinheit (z.B. 50px, 10em) für zusätzlichen Leerraum über der Überschrift, so dass mehr vom HIntergrundbild zu sehen ist"; +$plugin_tx['calendar']['help_holiday_date_calculation']="
      \r\n
    • Feste Feiertage => Tag.Monat (Bindestrich oder Schrägstrich statt Punkt nehmen, wenn dies als Datumstrenner eingestellt ist.)
    • \r\n
    • Bewegliche Feiertage, die vom Osterdatum abhängen => easter + x day oder - x day z.B. Karfreitag: easter - 2 day
    • \r\n
    • Bewegliche Feiertage, die auf festen Wochentag fallen:\r\n
        \r\n
      • Erster Montag im Mai: monday 1.5
      • \r\n
      • Letzter Montag im Mai (= Montag vor dem 1.6.): -1 monday 1.6
      • \r\n
      • 11 Tage vor dem 1. Sonntag nach dem 26.11 (Buß- u. Bettag): -11 days 1 sunday 26.11
      • \r\n
      • 4. Sonntag nach dem 26.11 (4. Advent): 4 sunday 26.11
      • \r\n
      \r\n
    • \r\n
    "; +$plugin_tx['calendar']['hint_blog_links']="Interne Links zu Blogeinträgen: URL ab ?"; +$plugin_tx['calendar']['hint_event_formatting']="Formatierung"; +$plugin_tx['calendar']['hint_external_links']="Links zu fremden Seiten"; +$plugin_tx['calendar']['hint_file_links']="Links zu PDF/ Word-Dateien im Download-Ordner: nur Dateiname (Groß-/Kleinschr. beachten)"; +$plugin_tx['calendar']['hint_formattable_fields']="Formatierbare Felder"; +$plugin_tx['calendar']['hint_how_to_enter_links']="Wie man Links eingibt:"; +$plugin_tx['calendar']['hint_icon_add']="Neue Eventzeile hierunter anfügen"; +$plugin_tx['calendar']['hint_icon_copy']="Diese Veranstaltung kopieren"; +$plugin_tx['calendar']['hint_icon_delete']="Diese Veranstaltung löschen"; +$plugin_tx['calendar']['hint_icon_ok']="Alle Einträge speichern"; +$plugin_tx['calendar']['hint_internal_links']="Links zu eigenen Seiten aus Auswahlliste auswählen. Weitere Links im Feld darunter eintragen. Bei mehreren Links diese durch | trennen. Linktexte bei mehreren Links ebenfalls durch | trennen."; +$plugin_tx['calendar']['hint_links']="Links"; +$plugin_tx['calendar']['hint_mouseover_in_calendar']="Maus auf Datum zeigt Details – Klick führt zur Eventliste"; +$plugin_tx['calendar']['hint_subsite_links']="Links zu Seiten einer Subsite: URL ab /"; +$plugin_tx['calendar']['holiday_date_calculation']="Datumsberechnung"; +$plugin_tx['calendar']['holiday_name']="Feiertagsname"; +$plugin_tx['calendar']['holydays']="1.1,Neujahr;6.1,Hl. Drei Könige;1.5,Tag der Arbeit;easter - 48 day,Rosenmontag;easter -2 day,Karfreitag;easter,Ostern;easter + 1 day,Ostermontag;easter + 39 day,Himmelfahrt;easter + 49 day,Pfingsten;easter + 50 day,Pfingstmontag;easter + 60 day,Fronleichnam;15.8,Mariä Himmelfahrt;3.10,Tag der Deutschen Einheit;31.10,Reformationstag;1.11,Allerheiligen;-11 days 1 sunday 26.11,Buß- u. Bettag;1 sunday 26.11,1. Advent;2 sunday 26.11,2. Advent;3 sunday 26.11,3. Advent;4 sunday 26.11,4. Advent;24.12,Heiligabend;25.12,1. Weihnachtstag;26.12,2. Weihnachtstag;31.12,Silvester"; +$plugin_tx['calendar']['link-button_next_month']="Nächster Monat"; +$plugin_tx['calendar']['link-button_next_year']="Nächstes Jahr"; +$plugin_tx['calendar']['link-button_prev_month']="Vorheriger Monat"; +$plugin_tx['calendar']['link-button_prev_year']="Vorheriges Jahr"; +$plugin_tx['calendar']['link_to_present_month']="» Liste zurücksetzen auf aktuellen Monat"; +$plugin_tx['calendar']['marquee_1stline']="1. Zeile unter Datum"; +$plugin_tx['calendar']['marquee_2ndline']="2. Zeile unter Datum"; +$plugin_tx['calendar']['marquee_age']="Altersanzeige bei Geburtstag in"; +$plugin_tx['calendar']['marquee_contents']="Inhalt des Lauftextes"; +$plugin_tx['calendar']['marquee_dateline']="Datumszeile"; +$plugin_tx['calendar']['marquee_dateline_height']="Höhe der Überschrift im Lauftext (nur Zahl)"; +$plugin_tx['calendar']['marquee_emptyline']="Nichts"; +$plugin_tx['calendar']['marquee_height']="Gesamthöhe des Lauftextbereichs (nur Zahl)"; +$plugin_tx['calendar']['marquee_height_unit']="Einheit für obige Angaben"; +$plugin_tx['calendar']['marquee_not_in_marquee']="Keine Anzeige"; +$plugin_tx['calendar']['marquee_number_of_events_shown']="Anzahl der angezeigten Events"; +$plugin_tx['calendar']['marquee_speed']="Geschwindigkeit (in px/0,01 sec)"; +$plugin_tx['calendar']['marquee_use_jquery']="Lauftext von jQuery gesteuert"; +$plugin_tx['calendar']['menu_apply_preset']="Preset anwenden"; +$plugin_tx['calendar']['menu_backup']="Backup"; +$plugin_tx['calendar']['menu_config']="Konfig"; +$plugin_tx['calendar']['menu_credits']="Autoren"; +$plugin_tx['calendar']['menu_css']="CSS"; +$plugin_tx['calendar']['menu_eventlistconfig']="Einstell."; +$plugin_tx['calendar']['menu_help']="Hilfe"; +$plugin_tx['calendar']['menu_holidays']="Feiertage"; +$plugin_tx['calendar']['menu_language']="Sprachdatei"; +$plugin_tx['calendar']['menu_main']="Events bearbeiten"; +$plugin_tx['calendar']['menu_marquee']="Lauftext"; +$plugin_tx['calendar']['menu_preset_backup']="Backup"; +$plugin_tx['calendar']['menu_save_config']="Änderungen anwenden"; +$plugin_tx['calendar']['menu_settings_backupname']="Backupname"; +$plugin_tx['calendar']['menu_show_calendar']="Kalender"; +$plugin_tx['calendar']['menu_test']="Testen"; +$plugin_tx['calendar']['menu_test_event_list']="Eventliste"; +$plugin_tx['calendar']['names_of_days']="So,Mo,Di,Mi,Do,Fr,Sa"; +$plugin_tx['calendar']['names_of_days_longform']="Sonntags,Montags,Dienstags,Mittwochs,Donnerstags,Freitags,Samstags"; +$plugin_tx['calendar']['names_of_months']="Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember"; +$plugin_tx['calendar']['notice_backup_setting']="Backups"; +$plugin_tx['calendar']['notice_commercial']="Kommerzielle Nutzung?"; +$plugin_tx['calendar']['notice_commercial_licence']="Dieses Plugin ist kostenlos.
    Sie können trotzdem eine Lizenz erwerben zu einem beliebigen Betrag, um den Programmierer zu unterstützen. Senden Sie einfach eine E-Mail an den Programmierer um die Lizenz und eine Rechnung zu erhalten."; +$plugin_tx['calendar']['notice_event_entries']="Event-Einträge"; +$plugin_tx['calendar']['notice_file_not_yet_saved']="Änderungen noch nicht gespeichert"; +$plugin_tx['calendar']['notice_no_eventlist2_page']="Kalendar2 Eventlist-Seite nicht angegeben"; +$plugin_tx['calendar']['notice_no_eventlist_page']="Eventlist-Seite nicht angegeben"; +$plugin_tx['calendar']['notice_no_next_event_scheduled']="Zurzeit keine Veranstaltungsankündigungen"; +$plugin_tx['calendar']['notice_number_of_events_saved_in_file']="Events in"; +$plugin_tx['calendar']['notice_preset_applied']="Preset \"%s\" geladen"; +$plugin_tx['calendar']['notice_settings_data_saved']="Einstellung als \"%s\" in calendar/templates/ gespeichert"; +$plugin_tx['calendar']['notice_telling_month_of_events']="Veranstaltungen im"; +$plugin_tx['calendar']['notice_telling_period_of_events']="Termine für den Zeitraum"; +$plugin_tx['calendar']['notice_today']="heute"; +$plugin_tx['calendar']['notice_copied']="1 Event kopiert, "; +$plugin_tx['calendar']['notice_changed']="1 Event gesichert/geändert, "; +$plugin_tx['calendar']['notice_added']="1 Leer-Event zugefügt, "; +$plugin_tx['calendar']['notice_deleted']="1 Event gelöscht, "; + +?> diff --git a/languages/default.php b/languages/default.php new file mode 100644 index 0000000..11bbb65 --- /dev/null +++ b/languages/default.php @@ -0,0 +1,328 @@ +fckeditor\" or \"html\" (for plain HTML)."; + $plugin_tx['calendar']['cf_editor_deletes_empty_lines_at_the_end']="\"1\" means yes. Useful setting, as in the editors it is invisible, if one has added involuntarily an empty line at the end of one's text."; + $plugin_tx['calendar']['cf_editor_height']="The height of the editor area in px. Enter only the number, not px."; + + $plugin_tx['calendar']['cf_eventlist_template']="Left empty the event list will be in spreadsheet table style. If you enter the name of an event-list template here, this template will be used to style the event list."; + + $plugin_tx['calendar']['cf_filepath_calendar_background_images']="The path to the calendar background images. Relative starting address is the calendar stylesheet.css, since this path will be written into it. E.g. using the normal image folder would need the following address: \"../../../images/\"."; + $plugin_tx['calendar']['cf_filepath_data']="The path to the calendar event files. Without entry it will be set to \"./plugins/calendar/content/\". If you enter a different path, start the path with dot and slash."; + + $plugin_tx['calendar']['cf_same-event-calendar_for_all_subsites']="Setting for multi language sites! By default every language has its own calendarevent-file. Entering \"1\" makes Calendar use the same event file calendarevent.txt for all languages.  I M P O R T A N T  if set to \"1\": Add Images to your Calendar only in your main language as the image path is different in secondary languages."; + + $plugin_tx['calendar']['cf_second-calendar_filename']="If you enter a file name of your choice here (file doesn't have to exist!), under which you want a second independent calendar to save event dates, a second calendar will be activated and additional menu options will appear."; + $plugin_tx['calendar']['cf_second-calendar_eventpage']="Enter here the pagename of the page to which the second calendar should link. Without entry there will be no links. Pagename can be entered as simple name (the name should not occur twice) or as URL starting with \"?\", e.g.\"?Start:News\"."; + + $plugin_tx['calendar']['cf_style_headline_eventtype']="If there are weekly events, a headline will announce them and a similar headline will announce the other events. Here the styling of these headlines can be entered. The headline text is represented by the placeholder \"%s\"."; + $plugin_tx['calendar']['cf_style_headline_year']="If left empty, the month/year headline of year and multiple months in columns will be styled as h4. Alternatively you can enter h1 up to h6 or p as style, or enter HTML-code with %s as placeholder for the year/month, e.g. ‹h5»%s‹/h5»"; + + $plugin_tx['calendar']['cf_z-index']="If other plugins obscure the pop-ups of calendar, you can enter a number (e.g.: from 5 - 100000) to raise calendar in the staking order."; + + $plugin_tx['calendar']['cf_input-field_entry1_as_textarea']="Enter a height value like \"2.6em\" to have field 1 as textarea instead of as simple input line."; + $plugin_tx['calendar']['cf_input-field_entry3_as_textarea']="Enter a height value like \"2.6em\" to have field 3 as textarea instead of as simple input line."; + $plugin_tx['calendar']['cf_input-field_entry1_show_in_input_always']="\"1\" will show field 1 -- even when switched off in eventlist config -- still in the input. Thus entry 1 can be used specially for marquee without appearing in the event list."; + $plugin_tx['calendar']['cf_input-field_additional_days_as_textarea']="Enter a height value like \"2.6em\" to have the field for the additional dates as textarea. Practical if you have many additional dates."; + $plugin_tx['calendar']['cf_input-field_mainentry_as_textarea']="Enter a height value like \"2.6em\" to have the input for the main field as textarea instead of as simple line."; + + + $plugin_tx['calendar']['error_event_page_occurs_more_than_once']="occurs as page name more than once. Therefore it is unclear which page should serve as event-list page."; + $plugin_tx['calendar']['error_event_page_not_found']="event-list page doesn't exist"; + $plugin_tx['calendar']['error_file_name_wrong']="Error: file name contains spaces or not allowed characters"; + $plugin_tx['calendar']['error_settings_name_wrong']="Error: settings name contains spaces or not allowed characters"; + $plugin_tx['calendar']['error_file_not_saved']="Error: could not save event data"; + $plugin_tx['calendar']['error_file_not_writable']="Error: file not writable, probably protected"; + $plugin_tx['calendar']['error_link_unclear']="link not found"; + $plugin_tx['calendar']['error_links_unclear']="links not found"; + $plugin_tx['calendar']['error_pagename_double']="linked pagename occurs more than once"; + $plugin_tx['calendar']['error_pagenames_double']="linked pagenames occur more than once"; + $plugin_tx['calendar']['error_settings_not_saved']="Error: could not save settings data"; + $plugin_tx['calendar']['error_occured']="Some error occured"; + $plugin_tx['calendar']['error_could_not_change_css_file']="Couldn't change css file"; + $plugin_tx['calendar']['error_could_not_change_config_file']="Couldn't change config file"; + $plugin_tx['calendar']['error_could_not_change_language_file']="Couldn't change language file"; + $plugin_tx['calendar']['error_do_not_edit_from_subsite']="WARNING: You are on a subsite and have enabled same calendar on all subsites. Images and internal links entered from here will not work on the main site. Enter images and internal links from the main site. For internal Links to subsite pages use the URL beginning with \"/\"."; + $plugin_tx['calendar']['error_cant_combine_eventfiles_of_different_versions']="ERROR: cannot combine event files from different Calendar versions"; + + $plugin_tx['calendar']['event_date']="Date"; + $plugin_tx['calendar']['event_date_till_date']="till"; + $plugin_tx['calendar']['event_daily']="daily"; + $plugin_tx['calendar']['event_description']="Additional description"; + $plugin_tx['calendar']['event_end_date']="End date"; + $plugin_tx['calendar']['event_end']="End"; + $plugin_tx['calendar']['event_info_icon']="Info tooltip icon"; + $plugin_tx['calendar']['event_info_text']="Info text"; + $plugin_tx['calendar']['event_other_link']="Other Link"; + $plugin_tx['calendar']['event_widepopup']="+ wide popup"; + $plugin_tx['calendar']['event_link_etc']="Info"; + $plugin_tx['calendar']['event_link_icon']="Link icon"; + $plugin_tx['calendar']['event_icon']="Icon"; + $plugin_tx['calendar']['event_link_text']="Link text"; + $plugin_tx['calendar']['event_main_entry']="Speaker"; + $plugin_tx['calendar']['event_entry3']="Subject"; + $plugin_tx['calendar']['event_entry1']="Location"; + $plugin_tx['calendar']['event_not_on_marquee']="not in marquee"; + $plugin_tx['calendar']['event_start']="Beginning"; + $plugin_tx['calendar']['event_start_date']="Start date"; + $plugin_tx['calendar']['event_time']="Time"; + $plugin_tx['calendar']['event_time_till_time']="-"; + $plugin_tx['calendar']['event_times_are_daily']="daily times"; + $plugin_tx['calendar']['event_same_on_other_days']="same short event on above days"; + $plugin_tx['calendar']['event_additional_days']="additional days"; + $plugin_tx['calendar']['event_weekly']="weekly"; + $plugin_tx['calendar']['event_additional']="additionally"; + $plugin_tx['calendar']['event_except']="except"; + $plugin_tx['calendar']['event_exceptions']="weekly/ long event exceptions"; + $plugin_tx['calendar']['event_weekly_starting_on']="starting"; + $plugin_tx['calendar']['event_weekly_ongoing']="every week"; + $plugin_tx['calendar']['event_yearly_with_age_calculation']="yearly + age calc."; + $plugin_tx['calendar']['event_yearly']="yearly"; + $plugin_tx['calendar']['event_booked_out']="Booked out"; + $plugin_tx['calendar']['event_has_ended']="Has ended"; + $plugin_tx['calendar']['event_multiple']="multiple"; + $plugin_tx['calendar']['event_border_marked']="marked with border in calendar"; + $plugin_tx['calendar']['event_mark2']="border marked"; + + $plugin_tx['calendar']['headline_weekly_events']="Weekly Events"; + $plugin_tx['calendar']['headline_single_events']="Single Events"; + $plugin_tx['calendar']['headline_yearly_events']="Yearly Events"; + $plugin_tx['calendar']['headline_multiple_events']="Multiple Events"; + $plugin_tx['calendar']['headline_started_earlier']="Started before the listed period"; + + $plugin_tx['calendar']['hint_event_formatting']="Formatting"; + $plugin_tx['calendar']['hint_external_links']="External links: site name"; + $plugin_tx['calendar']['hint_formattable_fields']="Simple markup works in:"; + $plugin_tx['calendar']['hint_how_to_enter_links']="How to enter links:"; + $plugin_tx['calendar']['hint_icon_add']="Add new event under this entry"; + $plugin_tx['calendar']['hint_icon_copy']="Copy this event"; + $plugin_tx['calendar']['hint_icon_delete']="Delete this event"; + $plugin_tx['calendar']['hint_icon_ok']="Save only this event"; + $plugin_tx['calendar']['hint_icon_save_new_name']="Save under new name"; + $plugin_tx['calendar']['hint_internal_links']="Internal links: options list. Other links: next line. Separate multiple links with |. Separate link texts for multiple links also with |."; + $plugin_tx['calendar']['hint_blog_links']="Links to blogentries: URL starting with ?"; + $plugin_tx['calendar']['hint_subsite_links']="Links to subsite pages: URL starting with /"; + $plugin_tx['calendar']['hint_file_links']="PDF/ Word-files in download folder: just the file name (case-sensitive)"; + $plugin_tx['calendar']['hint_external_pdf_links']="External PDF: [www.]website.xx/.../x.pdf"; + $plugin_tx['calendar']['hint_links']="Links"; + $plugin_tx['calendar']['hint_mouseover_in_calendar']="(Mouse over date => details, click => event list)"; + + $plugin_tx['calendar']['holiday_name']="Holiday name"; + $plugin_tx['calendar']['holiday_date_calculation']="Date calculation"; + + $plugin_tx['calendar']['holydays']="1.1,New Year's Day;easter -2 day,Good Friday;easter,Easter;easter + 1 day,Easter Monday;24.12,Christmas Eve;25.12,Christmas Day;26.12,Boxing Day"; + + $plugin_tx['calendar']['link-button_next_month']="Next Month"; + $plugin_tx['calendar']['link-button_prev_month']="Previous Month"; + $plugin_tx['calendar']['link-button_prev_year']="Previous Year"; + $plugin_tx['calendar']['link-button_next_year']="Next Year"; + $plugin_tx['calendar']['link_to_present_month']="reset list to present month"; + + $plugin_tx['calendar']['menu_apply_preset']="apply preset"; + $plugin_tx['calendar']['menu_preset_backup']="backup"; + $plugin_tx['calendar']['menu_backup']="Backup"; + $plugin_tx['calendar']['menu_credits']="Credits"; + $plugin_tx['calendar']['menu_css']="CSS"; + $plugin_tx['calendar']['menu_eventlistconfig']="Event-List Config"; + $plugin_tx['calendar']['menu_marquee']="Marquee"; + $plugin_tx['calendar']['menu_holidays']="Holidays"; + $plugin_tx['calendar']['menu_settings_backupname']="backupname"; + $plugin_tx['calendar']['menu_test']="test"; + $plugin_tx['calendar']['menu_config']="Config"; + $plugin_tx['calendar']['menu_help']="Help"; + $plugin_tx['calendar']['menu_language']="Language"; + $plugin_tx['calendar']['menu_main']="Edit Events"; + $plugin_tx['calendar']['menu_save_config']="apply settings"; + $plugin_tx['calendar']['menu_show_calendar']="Calendar"; + $plugin_tx['calendar']['menu_test_event_list']="Event List"; + + $plugin_tx['calendar']['names_of_days']="Su,Mo,Tu,We,Th,Fr,Sa"; + $plugin_tx['calendar']['names_of_months']="January,February,March,April,May,June,July,August,September,Oktober,November,December"; + $plugin_tx['calendar']['names_of_days_longform']="Sundays,Mondays,Tuesdays,Wednesdays,Thursdays,Fridays,Saturdays"; + + $plugin_tx['calendar']['notice_backup_setting']="Backups"; + $plugin_tx['calendar']['notice_event_entries']="entries"; + $plugin_tx['calendar']['notice_file_not_yet_saved']="Changes not yet saved"; + $plugin_tx['calendar']['notice_no_eventlist_page']="event-list page not set"; + $plugin_tx['calendar']['notice_no_eventlist2_page']="Calendar2 event-list page not set"; + $plugin_tx['calendar']['notice_no_next_event_scheduled']="Presently no events scheduled"; + $plugin_tx['calendar']['notice_number_of_events_saved_in_file']="events in"; + $plugin_tx['calendar']['notice_preset_applied']="Preset \"%s\" has been loaded"; + $plugin_tx['calendar']['notice_settings_data_saved']="settings saved as \"%s\" in calendar/templates/"; + $plugin_tx['calendar']['notice_telling_period_of_events']="Events in the period from"; + $plugin_tx['calendar']['notice_telling_month_of_events']="Events in"; + $plugin_tx['calendar']['notice_today']="today"; + $plugin_tx['calendar']['notice_copied']="1 event copied, "; + $plugin_tx['calendar']['notice_changed']="1 event saved/changed, "; + $plugin_tx['calendar']['notice_added']="1 empty event added, "; + $plugin_tx['calendar']['notice_deleted']="1 event deleted, "; + + $plugin_tx['calendar']['config_additional']="additional"; + $plugin_tx['calendar']['config_additional_dates_bookedout']="(year + * = booked out)"; + $plugin_tx['calendar']['config_all_same_color']="color picker acting on all fields"; + $plugin_tx['calendar']['config_articlestyle']="template"; + $plugin_tx['calendar']['config_background']="background"; + $plugin_tx['calendar']['config_background_or_color']="background or color"; + $plugin_tx['calendar']['config_background_color']="background color"; + $plugin_tx['calendar']['config_background_image']="background image"; + $plugin_tx['calendar']['config_bigcalendar']="Big Calendar"; + $plugin_tx['calendar']['config_birthday']="birthday"; + $plugin_tx['calendar']['config_birthday_image']="birthday background image"; + $plugin_tx['calendar']['config_birthday_age']="Age (birthday)"; + $plugin_tx['calendar']['config_birthday_color']="birthday special color"; + $plugin_tx['calendar']['config_birthday_in_dayfield']="birthdaycolor inside dayfield"; + $plugin_tx['calendar']['config_border_color_width']="border color + width"; + $plugin_tx['calendar']['config_border_color']="border color"; + $plugin_tx['calendar']['config_border_width']="border width"; + $plugin_tx['calendar']['config_calendar_template']="test template"; + $plugin_tx['calendar']['config_color']="color"; + $plugin_tx['calendar']['config_day_border_spacing']="space between days"; + $plugin_tx['calendar']['config_day_field_height']="day field height"; + $plugin_tx['calendar']['config_day_name_color']="color of weekday names"; + $plugin_tx['calendar']['config_day_names_more_css']="more weekday name css"; + $plugin_tx['calendar']['config_event_on_holidays']="event on holidays"; + $plugin_tx['calendar']['config_event_on_workdays']="event on workdays"; + $plugin_tx['calendar']['config_eventlist_standard']="standard style"; + $plugin_tx['calendar']['config_eventlist_table_selected']="table-style display"; + $plugin_tx['calendar']['config_fontfamily']="font"; + $plugin_tx['calendar']['config_fontsize']="size"; + $plugin_tx['calendar']['config_headline_style']="headline color + style"; + $plugin_tx['calendar']['config_headline_more_css']="more headline css"; + $plugin_tx['calendar']['config_in_title_label']="if tiny pop-ups, include"; + $plugin_tx['calendar']['config_input_fields']="input fields"; + $plugin_tx['calendar']['config_long_event']="long event"; + $plugin_tx['calendar']['config_margin-top']="margin-top"; + $plugin_tx['calendar']['config_month']="month view"; + $plugin_tx['calendar']['config_month_fontsize']="month etc."; + $plugin_tx['calendar']['config_more']="more"; + $plugin_tx['calendar']['config_no_image']="no image"; + $plugin_tx['calendar']['config_no_special_font']="no special font"; + $plugin_tx['calendar']['config_one_line_per_entry']="1 line per event"; + $plugin_tx['calendar']['config_opacity_no_event']="opacity no event day"; + $plugin_tx['calendar']['config_popup']="Pop-up"; + $plugin_tx['calendar']['config_popup_in_small_calendar']="big pop-ups instead of tiny"; + $plugin_tx['calendar']['config_small_calendar']="Small Calendar"; + $plugin_tx['calendar']['config_subhead_fontsize']="subhead"; + $plugin_tx['calendar']['config_tablestyle']="table"; + $plugin_tx['calendar']['config_template']="template"; + $plugin_tx['calendar']['config_textarea']="big input area"; + $plugin_tx['calendar']['config_today']="today"; + $plugin_tx['calendar']['config_today_background']="today color/background"; + $plugin_tx['calendar']['config_use_default_template']="standard template"; + $plugin_tx['calendar']['config_year']="year view"; + $plugin_tx['calendar']['config_bold']="bold"; + $plugin_tx['calendar']['config_date']="date field"; + $plugin_tx['calendar']['config_event']="event field"; + $plugin_tx['calendar']['config_event_list_period']="%sAnnounce event-list period.   Show %smonths + %spast months  %spast events in grey  %sno past events"; + $plugin_tx['calendar']['config_exceptions']="exceptions"; + $plugin_tx['calendar']['config_hint']="hint under calendar"; + $plugin_tx['calendar']['config_indented']="indented: %scell(s)"; + $plugin_tx['calendar']['config_list_page']="event-list page"; + $plugin_tx['calendar']['config_name']="name"; + $plugin_tx['calendar']['config_no_event_list_page']="No event-list page"; + $plugin_tx['calendar']['config_on']="field on?"; + $plugin_tx['calendar']['config_presets']="Presets"; + $plugin_tx['calendar']['config_roundcorners']="round corners"; + $plugin_tx['calendar']['config_select']="Please select"; + $plugin_tx['calendar']['config_shadow']="shadow"; + $plugin_tx['calendar']['config_time_on']="time on?"; + $plugin_tx['calendar']['config_width']="width"; + $plugin_tx['calendar']['config_lineheight']="line hight"; + $plugin_tx['calendar']['config_normalday']="normal day"; + $plugin_tx['calendar']['config_weekend']="weekend"; + $plugin_tx['calendar']['config_holiday']="holiday"; + $plugin_tx['calendar']['config_eventday']="event 1st day/background"; + $plugin_tx['calendar']['config_underline_longevent']="underline long events or %ssame as 1st day"; + $plugin_tx['calendar']['config_mark2']="border for border marked entries"; + $plugin_tx['calendar']['config_weekdaynames_padding']="top/bottom padding weekday names"; + $plugin_tx['calendar']['config_dayfield_border']="day field border"; + $plugin_tx['calendar']['config_dayfield_padding']="left padding"; + $plugin_tx['calendar']['config_line_between_events_in_bigcalendar']="line between events"; + $plugin_tx['calendar']['config_symbol_when_no_time_is_given']="Symbol for entries without time data"; + $plugin_tx['calendar']['config_select_internal_link']="Select internal link"; + + + $plugin_tx['calendar']['marquee_1stline']="1st line below date"; + $plugin_tx['calendar']['marquee_2ndline']="2nd line below date"; + $plugin_tx['calendar']['marquee_age']="Age is displayed in"; + $plugin_tx['calendar']['marquee_contents']="Contents of the marquee"; + $plugin_tx['calendar']['marquee_dateline']="Dateline"; + $plugin_tx['calendar']['marquee_dateline_height']="marquee dateline height (number)"; + $plugin_tx['calendar']['marquee_emptyline']="Nothing"; + $plugin_tx['calendar']['marquee_height']="marquee height (just a number)"; + $plugin_tx['calendar']['marquee_height_unit']="unit for marquee heights"; + $plugin_tx['calendar']['marquee_not_in_marquee']="Not displayed"; + $plugin_tx['calendar']['marquee_number_of_events_shown']="number of events shown in marquee"; + $plugin_tx['calendar']['marquee_speed']="speed of marquee (px per 0.01 sec)"; + $plugin_tx['calendar']['marquee_use_jquery']="use jQuery to run marquee"; + + $plugin_tx['calendar']['help_config_jquery_marquee']="The Effect of changing the jQuery setting shows only after clicking \"apply settings\" and reselecting \"Marquee\" in the plugin's menu. (The complete plug-in has to be reloaded.)

    Without jQuery the standard Microsoft Marquee funktion is used.
    If you don't use marquee, you may want to deselect \"jQuery\" to avoid loading unnecessary jQuery Calendar Marquee files."; + $plugin_tx['calendar']['help_config_roundcorners']="Enter 4 values of corner radius in px: left-top-corner   right-top right-buttom left-buttom"; + $plugin_tx['calendar']['help_config_shadow']="Enter 3 values in px + 1 color-code: right-displacement bottom-displacement diffusion color"; + $plugin_tx['calendar']['help_config_presets']="Presets contain some values for event list or for calendar (month view). You can save your own settings as presets. Preset-files can be edited in menu «Backup etc.»"; + $plugin_tx['calendar']['help_config_topmargin']="Enter number + unit of measurement, e.g. 50px or 10em, to get more space above the headline for the background image."; + $plugin_tx['calendar']['help_config_padweekdaynames']="Enter number + unit of measurement, for padding space above and below the row of weekday names."; + $plugin_tx['calendar']['help_holiday_date_calculation']="
      +
    • Fixed holidays => day.month (Instead of dot use hyphen or slash if your date delimiter is set to this.)
    • +
    • Movable holidays depending on the Easter date => easter + x day or - x day e.g. Good Friday: easter - 2 day
    • +
    • Movable holidays on a fixed weekday: +
        +
      • First Monday in May: monday 1.5
      • +
      • Last Monday in May (= Monday before 1st of June): -1 monday 1.6
      • +
      • 11 days before the 1st sunday after 26.11: -11 days 1 sunday 26.11
      • +
      • 4th sunday after 26.11: 4 sunday 26.11
      • +
      +
    • +
    " +?> diff --git a/languages/en.php b/languages/en.php new file mode 100644 index 0000000..393d02f --- /dev/null +++ b/languages/en.php @@ -0,0 +1,11 @@ + diff --git a/languages/fr.php b/languages/fr.php new file mode 100644 index 0000000..3e25f88 --- /dev/null +++ b/languages/fr.php @@ -0,0 +1,41 @@ + diff --git a/languages/it.php b/languages/it.php new file mode 100644 index 0000000..09cd144 --- /dev/null +++ b/languages/it.php @@ -0,0 +1,37 @@ + diff --git a/languages/nl.php b/languages/nl.php new file mode 100644 index 0000000..3a99b58 --- /dev/null +++ b/languages/nl.php @@ -0,0 +1,39 @@ + diff --git a/languages/sk.php b/languages/sk.php new file mode 100644 index 0000000..a3a61c1 --- /dev/null +++ b/languages/sk.php @@ -0,0 +1,37 @@ + + diff --git a/languages/yogaschool.php b/languages/yogaschool.php new file mode 100644 index 0000000..8165033 --- /dev/null +++ b/languages/yogaschool.php @@ -0,0 +1,322 @@ +fckeditor\" or \"html\" (for plain HTML)."; + $plugin_tx['calendar']['cf_editor_deletes_empty_lines_at_the_end']="\"1\" means yes. Useful setting, as in the editors it is invisible, if one has added involuntarily an empty line at the end of one's text."; + $plugin_tx['calendar']['cf_editor_height']="The height of the editor area in px. Enter only the number, not px."; + + $plugin_tx['calendar']['cf_eventlist_template']="Left empty the event list will be in spreadsheet table style. If you enter the name of an event-list template here, this template will be used to style the event list."; + + $plugin_tx['calendar']['cf_filepath_calendar_background_images']="The path to the calendar background images. Relative starting address is the calendar stylesheet.css, since this path will be written into it. E.g. using the normal image folder would need the following address: \"../../../images/\"."; + $plugin_tx['calendar']['cf_filepath_data']="The path to the calendar event files. Without entry it will be set to \"./plugins/calendar/content/\". If you enter a different path, start the path with dot and slash."; + + $plugin_tx['calendar']['cf_same-event-calendar_for_all_subsites']="Setting for multi language sites! By default every language has its own calendarevent-file. Entering \"1\" makes Calendar use the same event file calendarevent.txt for all languages.  I M P O R T A N T  if set to \"1\": Add Images to your Calendar only in your main language as the image path is different in secondary languages."; + + $plugin_tx['calendar']['cf_second-calendar_filename']="If you enter a file name of your choice here (file doesn't have to exist!), under which you want a second independent calendar to save event dates, a second calendar will be activated and additional menu options will appear."; + $plugin_tx['calendar']['cf_second-calendar_eventpage']="Enter here the pagename of the page to which the second calendar should link. Without entry there will be no links. Pagename can be entered as simple name (the name should not occur twice) or as URL starting with \"?\", e.g.\"?Start:News\"."; + + $plugin_tx['calendar']['cf_style_headline_eventtype']="If there are weekly events, a headline will announce them and a similar headline will announce the other events. Here the styling of these headlines can be entered. The headline text is represented by the placeholder \"%s\"."; + $plugin_tx['calendar']['cf_style_headline_year']="If left empty, the month/year headline of year and multiple months in columns will be styled as h4. Alternatively you can enter h1 up to h6 or p as style, or enter HTML-code with %s as placeholder for the year/month, e.g. ‹h5»%s‹/h5»"; + + $plugin_tx['calendar']['cf_z-index']="If other plugins obscure the pop-ups of calendar, you can enter a number (e.g.: from 5 - 100000) to raise calendar in the staking order."; + + $plugin_tx['calendar']['cf_input-field_entry1_as_textarea']="Enter a height value like \"2.6em\" to have field 1 as textarea instead of as simple input line."; + $plugin_tx['calendar']['cf_input-field_entry3_as_textarea']="Enter a height value like \"2.6em\" to have field 3 as textarea instead of as simple input line."; + $plugin_tx['calendar']['cf_input-field_entry1_show_in_input_always']="\"1\" will show field 1 -- even when switched off in eventlist config -- still in the input. Thus entry 1 can be used specially for marquee without appearing in the event list."; + $plugin_tx['calendar']['cf_input-field_additional_days_as_textarea']="Enter a height value like \"2.6em\" to have the field for the additional dates as textarea. Practical if you have many additional dates."; + $plugin_tx['calendar']['cf_input-field_mainentry_as_textarea']="Enter a height value like \"2.6em\" to have the input for the main field as textarea instead of as simple line."; + + + $plugin_tx['calendar']['error_event_page_occurs_more_than_once']="occurs as page name more than once. Therefore it is unclear which page should serve as event-list page."; + $plugin_tx['calendar']['error_event_page_not_found']="event-list page doesn't exist"; + $plugin_tx['calendar']['error_file_name_wrong']="Error: file name contains spaces or not allowed characters"; + $plugin_tx['calendar']['error_settings_name_wrong']="Error: settings name contains spaces or not allowed characters"; + $plugin_tx['calendar']['error_file_not_saved']="Error: could not save event data"; + $plugin_tx['calendar']['error_file_not_writable']="Error: file not writable, probably protected"; + $plugin_tx['calendar']['error_link_unclear']="link not found"; + $plugin_tx['calendar']['error_links_unclear']="links not found"; + $plugin_tx['calendar']['error_pagename_double']="linked pagename occurs more than once"; + $plugin_tx['calendar']['error_pagenames_double']="linked pagenames occur more than once"; + $plugin_tx['calendar']['error_settings_not_saved']="Error: could not save settings data"; + $plugin_tx['calendar']['error_occured']="Some error occured"; + $plugin_tx['calendar']['error_could_not_change_css_file']="Couldn't change css file"; + $plugin_tx['calendar']['error_could_not_change_config_file']="Couldn't change config file"; + $plugin_tx['calendar']['error_could_not_change_language_file']="Couldn't change language file"; + $plugin_tx['calendar']['error_do_not_edit_from_subsite']="WARNING: You are on a subsite and have enabled same calendar on all subsites. Images and internal links entered from here will not work on the main site. Enter images and internal links from the main site. For internal Links to subsite pages use the URL beginning with \"/\"."; + $plugin_tx['calendar']['error_cant_combine_eventfiles_of_different_versions']="ERROR: cannot combine event files from different Calendar versions"; + + $plugin_tx['calendar']['event_date']="Date"; + $plugin_tx['calendar']['event_date_till_date']="till"; + $plugin_tx['calendar']['event_daily']="daily"; + $plugin_tx['calendar']['event_description']="Additional description"; + $plugin_tx['calendar']['event_end_date']="End date"; + $plugin_tx['calendar']['event_end']="End"; + $plugin_tx['calendar']['event_info_icon']="Info tooltip icon"; + $plugin_tx['calendar']['event_info_text']="Info text"; + $plugin_tx['calendar']['event_other_link']="Other Link"; + $plugin_tx['calendar']['event_widepopup']="+ wide popup"; + $plugin_tx['calendar']['event_link_etc']="Info"; + $plugin_tx['calendar']['event_link_icon']="Link icon"; + $plugin_tx['calendar']['event_icon']="Icon"; + $plugin_tx['calendar']['event_link_text']="Link text"; + $plugin_tx['calendar']['event_main_entry']="Speaker"; + $plugin_tx['calendar']['event_entry3']="Subject"; + $plugin_tx['calendar']['event_entry1']="Location"; + $plugin_tx['calendar']['event_not_on_marquee']="not in marquee"; + $plugin_tx['calendar']['event_start']="Beginning"; + $plugin_tx['calendar']['event_start_date']="Start date"; + $plugin_tx['calendar']['event_time']="Time"; + $plugin_tx['calendar']['event_time_till_time']="-"; + $plugin_tx['calendar']['event_times_are_daily']="daily times"; + $plugin_tx['calendar']['event_same_on_other_days']="same short event on above days"; + $plugin_tx['calendar']['event_additional_days']="additional days"; + $plugin_tx['calendar']['event_weekly']="weekly"; + $plugin_tx['calendar']['event_additional']="additionally"; + $plugin_tx['calendar']['event_except']="except"; + $plugin_tx['calendar']['event_exceptions']="weekly/ long event exceptions"; + $plugin_tx['calendar']['event_weekly_starting_on']="starting"; + $plugin_tx['calendar']['event_weekly_ongoing']="every week"; + $plugin_tx['calendar']['event_yearly_with_age_calculation']="yearly + age calc."; + $plugin_tx['calendar']['event_yearly']="yearly"; + $plugin_tx['calendar']['event_booked_out']="Booked out"; + $plugin_tx['calendar']['event_has_ended']="Has ended"; + $plugin_tx['calendar']['event_multiple']="multiple"; + $plugin_tx['calendar']['event_border_marked']="marked with border in calendar"; + $plugin_tx['calendar']['event_mark2']="border marked"; + + $plugin_tx['calendar']['headline_weekly_events']="Weekly Events"; + $plugin_tx['calendar']['headline_single_events']="Single Events"; + $plugin_tx['calendar']['headline_yearly_events']="Yearly Events"; + $plugin_tx['calendar']['headline_multiple_events']="Multiple Events"; + $plugin_tx['calendar']['headline_started_earlier']="Started before the listed period"; + + $plugin_tx['calendar']['hint_event_formatting']="Formatting"; + $plugin_tx['calendar']['hint_external_links']="External links: site name"; + $plugin_tx['calendar']['hint_formattable_fields']="Simple markup works in:"; + $plugin_tx['calendar']['hint_how_to_enter_links']="How to enter links:"; + $plugin_tx['calendar']['hint_icon_add']="Add new event under this entry"; + $plugin_tx['calendar']['hint_icon_copy']="Copy this event"; + $plugin_tx['calendar']['hint_icon_delete']="Delete this event"; + $plugin_tx['calendar']['hint_icon_ok']="Save all events"; + $plugin_tx['calendar']['hint_internal_links']="Internal links: options list. Other links: next line. Separate multiple links with |. Separate link texts for multiple links also with |."; + $plugin_tx['calendar']['hint_blog_links']="Links to blogentries: URL starting with ?"; + $plugin_tx['calendar']['hint_subsite_links']="Links to subsite pages: URL starting with /"; + $plugin_tx['calendar']['hint_file_links']="PDF/ Word-files in download folder: just the file name (case-sensitive)"; + $plugin_tx['calendar']['hint_links']="Links"; + $plugin_tx['calendar']['hint_mouseover_in_calendar']="(Mouse over date => details, click => event list)"; + + $plugin_tx['calendar']['holiday_name']="Holiday name"; + $plugin_tx['calendar']['holiday_date_calculation']="Date calculation"; + + $plugin_tx['calendar']['holydays']="1.1,New Year's Day;easter -2 day,Good Friday;easter,Easter;easter + 1 day,Easter Monday;24.12,Christmas Eve;25.12,Christmas Day;26.12,Boxing Day"; + + $plugin_tx['calendar']['link-button_next_month']="Next Month"; + $plugin_tx['calendar']['link-button_prev_month']="Previous Month"; + $plugin_tx['calendar']['link-button_prev_year']="Previous Year"; + $plugin_tx['calendar']['link-button_next_year']="Next Year"; + $plugin_tx['calendar']['link_to_present_month']="reset list to present month"; + + $plugin_tx['calendar']['menu_apply_preset']="apply preset"; + $plugin_tx['calendar']['menu_preset_backup']="backup"; + $plugin_tx['calendar']['menu_backup']="Backup"; + $plugin_tx['calendar']['menu_credits']="Credits"; + $plugin_tx['calendar']['menu_css']="CSS"; + $plugin_tx['calendar']['menu_eventlistconfig']="Event-List Config"; + $plugin_tx['calendar']['menu_marquee']="Marquee"; + $plugin_tx['calendar']['menu_holidays']="Holidays"; + $plugin_tx['calendar']['menu_settings_backupname']="backupname"; + $plugin_tx['calendar']['menu_test']="test"; + $plugin_tx['calendar']['menu_config']="Config"; + $plugin_tx['calendar']['menu_help']="Help"; + $plugin_tx['calendar']['menu_language']="Language"; + $plugin_tx['calendar']['menu_main']="Edit Events"; + $plugin_tx['calendar']['menu_save_config']="apply settings"; + $plugin_tx['calendar']['menu_show_calendar']="Calendar"; + $plugin_tx['calendar']['menu_test_event_list']="Event List"; + + $plugin_tx['calendar']['names_of_days']="Su,Mo,Tu,We,Th,Fr,Sa"; + $plugin_tx['calendar']['names_of_months']="January,February,March,April,May,June,July,August,September,Oktober,November,December"; + $plugin_tx['calendar']['names_of_days_longform']="Sundays,Mondays,Tuesdays,Wednesdays,Thursdays,Fridays,Saturdays"; + + $plugin_tx['calendar']['notice_backup_setting']="Backups"; + $plugin_tx['calendar']['notice_event_entries']="entries"; + $plugin_tx['calendar']['notice_file_not_yet_saved']="Changes not yet saved"; + $plugin_tx['calendar']['notice_no_eventlist_page']="event-list page not set"; + $plugin_tx['calendar']['notice_no_eventlist2_page']="Calendar2 event-list page not set"; + $plugin_tx['calendar']['notice_no_next_event_scheduled']="Presently no events scheduled"; + $plugin_tx['calendar']['notice_number_of_events_saved_in_file']="event entries saved in"; + $plugin_tx['calendar']['notice_preset_applied']="Preset \"%s\" has been loaded"; + $plugin_tx['calendar']['notice_settings_data_saved']="settings saved as \"%s\" in calendar/templates/"; + $plugin_tx['calendar']['notice_telling_period_of_events']="Events in the period from"; + $plugin_tx['calendar']['notice_telling_month_of_events']="Events in"; + $plugin_tx['calendar']['notice_today']="today"; + + $plugin_tx['calendar']['config_additional']="additional"; + $plugin_tx['calendar']['config_additional_dates_bookedout']="(year + * = booked out)"; + $plugin_tx['calendar']['config_all_same_color']="color picker acting on all fields"; + $plugin_tx['calendar']['config_articlestyle']="template"; + $plugin_tx['calendar']['config_background']="background"; + $plugin_tx['calendar']['config_background_or_color']="background or color"; + $plugin_tx['calendar']['config_background_color']="background color"; + $plugin_tx['calendar']['config_background_image']="background image"; + $plugin_tx['calendar']['config_bigcalendar']="Big Calendar"; + $plugin_tx['calendar']['config_birthday']="birthday"; + $plugin_tx['calendar']['config_birthday_image']="birthday background image"; + $plugin_tx['calendar']['config_birthday_age']="Age (birthday)"; + $plugin_tx['calendar']['config_birthday_color']="birthday special color"; + $plugin_tx['calendar']['config_birthday_in_dayfield']="birthdaycolor inside dayfield"; + $plugin_tx['calendar']['config_border_color_width']="border color + width"; + $plugin_tx['calendar']['config_border_color']="border color"; + $plugin_tx['calendar']['config_border_width']="border width"; + $plugin_tx['calendar']['config_calendar_template']="test template"; + $plugin_tx['calendar']['config_color']="color"; + $plugin_tx['calendar']['config_day_border_spacing']="space between days"; + $plugin_tx['calendar']['config_day_field_height']="day field height"; + $plugin_tx['calendar']['config_day_name_color']="color of weekday names"; + $plugin_tx['calendar']['config_day_names_more_css']="more weekday name css"; + $plugin_tx['calendar']['config_event_on_holidays']="event on holidays"; + $plugin_tx['calendar']['config_event_on_workdays']="event on workdays"; + $plugin_tx['calendar']['config_eventlist_standard']="standard style"; + $plugin_tx['calendar']['config_eventlist_table_selected']="table-style display"; + $plugin_tx['calendar']['config_fontfamily']="font"; + $plugin_tx['calendar']['config_fontsize']="size"; + $plugin_tx['calendar']['config_headline_style']="headline color + style"; + $plugin_tx['calendar']['config_headline_more_css']="more headline css"; + $plugin_tx['calendar']['config_in_title_label']="if tiny pop-ups, include"; + $plugin_tx['calendar']['config_input_fields']="input fields"; + $plugin_tx['calendar']['config_long_event']="long event"; + $plugin_tx['calendar']['config_margin-top']="margin-top"; + $plugin_tx['calendar']['config_month']="month view"; + $plugin_tx['calendar']['config_month_fontsize']="month etc."; + $plugin_tx['calendar']['config_more']="more"; + $plugin_tx['calendar']['config_no_image']="no image"; + $plugin_tx['calendar']['config_no_special_font']="no special font"; + $plugin_tx['calendar']['config_one_line_per_entry']="1 line per event"; + $plugin_tx['calendar']['config_opacity_no_event']="opacity no event day"; + $plugin_tx['calendar']['config_popup']="Pop-up"; + $plugin_tx['calendar']['config_popup_in_small_calendar']="big pop-ups instead of tiny"; + $plugin_tx['calendar']['config_small_calendar']="Small Calendar"; + $plugin_tx['calendar']['config_subhead_fontsize']="subhead"; + $plugin_tx['calendar']['config_tablestyle']="table"; + $plugin_tx['calendar']['config_template']="template"; + $plugin_tx['calendar']['config_textarea']="big input area"; + $plugin_tx['calendar']['config_today']="today"; + $plugin_tx['calendar']['config_today_background']="today color/background"; + $plugin_tx['calendar']['config_use_default_template']="standard template"; + $plugin_tx['calendar']['config_year']="year view"; + $plugin_tx['calendar']['config_bold']="bold"; + $plugin_tx['calendar']['config_date']="date field"; + $plugin_tx['calendar']['config_event']="event field"; + $plugin_tx['calendar']['config_event_list_period']="%sAnnounce event-list period.   Show %smonths + %spast months  %spast events in grey  %sno past events"; + $plugin_tx['calendar']['config_exceptions']="exceptions"; + $plugin_tx['calendar']['config_hint']="hint under calendar"; + $plugin_tx['calendar']['config_indented']="indented: %scell(s)"; + $plugin_tx['calendar']['config_list_page']="event-list page"; + $plugin_tx['calendar']['config_name']="name"; + $plugin_tx['calendar']['config_no_event_list_page']="No event-list page"; + $plugin_tx['calendar']['config_on']="field on?"; + $plugin_tx['calendar']['config_presets']="Presets"; + $plugin_tx['calendar']['config_roundcorners']="round corners"; + $plugin_tx['calendar']['config_select']="Please select"; + $plugin_tx['calendar']['config_shadow']="shadow"; + $plugin_tx['calendar']['config_time_on']="time on?"; + $plugin_tx['calendar']['config_width']="width"; + $plugin_tx['calendar']['config_lineheight']="line hight"; + $plugin_tx['calendar']['config_normalday']="normal day"; + $plugin_tx['calendar']['config_weekend']="weekend"; + $plugin_tx['calendar']['config_holiday']="holiday"; + $plugin_tx['calendar']['config_eventday']="event 1st day/background"; + $plugin_tx['calendar']['config_underline_longevent']="underline long events or %ssame as 1st day"; + $plugin_tx['calendar']['config_mark2']="border for border marked entries"; + $plugin_tx['calendar']['config_weekdaynames_padding']="top/bottom padding weekday names"; + $plugin_tx['calendar']['config_dayfield_border']="day field border"; + $plugin_tx['calendar']['config_dayfield_padding']="left padding"; + $plugin_tx['calendar']['config_line_between_events_in_bigcalendar']="line between events"; + $plugin_tx['calendar']['config_symbol_when_no_time_is_given']="Symbol for entries without time data"; + $plugin_tx['calendar']['config_select_internal_link']="Select internal link"; + + + $plugin_tx['calendar']['marquee_1stline']="1st line below date"; + $plugin_tx['calendar']['marquee_2ndline']="2nd line below date"; + $plugin_tx['calendar']['marquee_age']="Age is displayed in"; + $plugin_tx['calendar']['marquee_contents']="Contents of the marquee"; + $plugin_tx['calendar']['marquee_dateline']="Dateline"; + $plugin_tx['calendar']['marquee_dateline_height']="marquee dateline height (number)"; + $plugin_tx['calendar']['marquee_emptyline']="Nothing"; + $plugin_tx['calendar']['marquee_height']="marquee height (just a number)"; + $plugin_tx['calendar']['marquee_height_unit']="unit for marquee heights"; + $plugin_tx['calendar']['marquee_not_in_marquee']="Not displayed"; + $plugin_tx['calendar']['marquee_number_of_events_shown']="number of events shown in marquee"; + $plugin_tx['calendar']['marquee_speed']="speed of marquee (px per 0.01 sec)"; + $plugin_tx['calendar']['marquee_use_jquery']="use jQuery to run marquee"; + + $plugin_tx['calendar']['help_config_jquery_marquee']="The Effect of changing the jQuery setting shows only after clicking \"apply settings\" and reselecting \"Marquee\" in the plugin's menu. (The complete plug-in has to be reloaded.)

    Without jQuery the standard Microsoft Marquee funktion is used.
    If you don't use marquee, you may want to deselect \"jQuery\" to avoid loading unnecessary jQuery Calendar Marquee files."; + $plugin_tx['calendar']['help_config_roundcorners']="Enter 4 values of corner radius in px: left-top-corner   right-top right-buttom left-buttom"; + $plugin_tx['calendar']['help_config_shadow']="Enter 3 values in px + 1 color-code: right-displacement bottom-displacement diffusion color"; + $plugin_tx['calendar']['help_config_presets']="Presets contain some values for event list or for calendar (month view). You can save your own settings as presets. Preset-files can be edited in menu «Backup etc.»"; + $plugin_tx['calendar']['help_config_topmargin']="Enter number + unit of measurement, e.g. 50px or 10em, to get more space above the headline for the background image."; + $plugin_tx['calendar']['help_config_padweekdaynames']="Enter number + unit of measurement, for padding space above and below the row of weekday names."; + $plugin_tx['calendar']['help_holiday_date_calculation']="
      +
    • Fixed holidays => day.month (Instead of dot use hyphen or slash if your date delimiter is set to this.)
    • +
    • Movable holidays depending on the Easter date => easter + x day or - x day e.g. Good Friday: easter - 2 day
    • +
    • Movable holidays on a fixed weekday: +
        +
      • First Monday in May: monday 1.5
      • +
      • Last Monday in May (= Monday before 1st of June): -1 monday 1.6
      • +
      • 11 days before the 1st sunday after 26.11: -11 days 1 sunday 26.11
      • +
      • 4th sunday after 26.11: 4 sunday 26.11
      • +
      +
    • +
    " +?> diff --git a/licence.txt b/licence.txt new file mode 100644 index 0000000..9233ad2 --- /dev/null +++ b/licence.txt @@ -0,0 +1,20 @@ +Licence for Calendar_XH for CMSimple_XH + +No licence conditions were found from the programmers of the old Calendar for CMSimple plugin, which inspired this work. +The code has been completely rewritten by svasti (Frank Ziesing) and Holger (Holger Irmler). +Although the original idea is still followed and the old function calls and content files still work, no code lines from the old plugin remain. + +In line with the work of the former authors the present code is released under a creative commons Attribution-Share Alike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/) + +You must credit Calendar_XH in any derivative work. You are not allowed to delete or ommit the changelog file nor this licence file. You may however state your own contribution in these files. + +You are free: + +* to Share — to copy, distribute and transmit the work +* to Remix — to adapt the work + +Under the following conditions: + +* Attribution — You must attribute the work in the manner specified by the authors (but not in any way that suggests that they endorse you or your use of the work). +* Share Alike — If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible licence. + diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..0168925 --- /dev/null +++ b/readme.txt @@ -0,0 +1,92 @@ +Instructions: help/help_en.htm + + +Updating +=============== +1.4.4 –> 1.4.5 +Exchange: + + admin.php + includes/... + + version.nfo + changelog.txt + help/... + readme.txt + + +1.4.0 –> 1.4.5 +Exchange: + + admin.php + index.php + includes/... + editorconfigs/... + languages/... + + version.nfo + readme.txt + changelog.txt + help/... + + +1.4 beta –> 1.4.5 +- Save old settings through Presets>backup for Event-list config and also Calendar config. +- Keep your calendar/content folder, the calendar/templates/ folder + and your config file (calendar/config/config.php) in case you have changed some config settings. +- Replace the remaining files. +- Activate your old presets by choosing Presets>backupname for the event-list and the calendar. +- If you have kept your old config file, you need to add the line: + $plugin_cf['calendar']['eventlist_start_moves_with_clicked_event']="1"; + +1.3.9 –> 1.4.5 +- Re-use old content files +- Old function calls should still work. +- Link-entry of internal pages has changed: enter the page name and nothing else. +- Birthday-entry has changed: check the "yearly" check box. + +================= + + +v 1.4 (2012) by svasti +v 1.3 (05-11/2011) by svasti +v 1.2 (04/2011) by Holger +v 1.1 (03/2011) by svasti +v 0.6-1.0 by Tory +unnamed by Bob +v 0.1-0.5 by Michael Svarrer + +================= + +Depending on server configuration you may have +to give writing permissions (chmod 646) + +CMSimple root ++ cmsimple ++ content ++ downloads ++ images ++ plugins + + pluginloader + + calendar + + backgroundimages + + config + - config.php (chmod 646) + - config2.php (chmod 646) + + content (chmod 646) + - *.* (chmod 646) + + css + - stylesheet.css (chmod 646) + + dp + * fckeditor + + help + + images + + includes + + jscolor + + languages + - *.php (chmod 646) + - admin.php + - index.php + + templates (chmod 646) + ++ templates diff --git a/templates/blue_nebula.calendar.php b/templates/blue_nebula.calendar.php new file mode 100644 index 0000000..35637f1 --- /dev/null +++ b/templates/blue_nebula.calendar.php @@ -0,0 +1,79 @@ + diff --git a/templates/boxes.tpl b/templates/boxes.tpl new file mode 100644 index 0000000..b23d3ba --- /dev/null +++ b/templates/boxes.tpl @@ -0,0 +1,93 @@ +CMSimple Calendar 1.4 Event-List Template + +=== + +

    %period% %start% %till% %end%

    + +=== + +

    %weekly%

    + +=== + +

    %longweekday%

    + +=== + +
    +
    %bookedout%
    +

    %mainfield%

    +

    %field3%

    +

    %shortweekday% %time%
    %date% %field1% %infolink%

    +
    %description%
    +
    +
    + +=== + +
    +

    %ended%

    +

    %mainfield%

    +

    %field3%

    +

    %shortweekday% %time% %date% %field1% %infolink%

    +
    + +=== + +

    %single%

    + +=== + +



    %month% %year%

    + +=== + +
    +
    %bookedout%
    +

    %mainfield%

    +
    %age%
    +

    %field3%

    +

    %date%
    %time% %field1% %infolink%

    +
    %description%
    +
    +
    + +=== + +
    +
    %bookedout%
    +

    %mainfield%

    +

    %field3%

    +

    %date%
    %time% %field1% %infolink%

    +
    %description%
    +
    +
    + +=== + +
    +

    %ended%

    +

    %mainfield%

    +

    %field3% %age%

    +

    %date% %time% %field1% %infolink%

    +
    + +=== + +
    +
    %bookedout%
    +

    %mainfield%

    +

    %field3%

    +

    %date%
    %time% %field1% %infolink%

    +
    %description%
    +
    +
    + +=== + +
    +

    %ended%

    +

    %mainfield%

    +

    %field3%

    +

    %date% %time% %field1% %infolink%

    +
    diff --git a/templates/brown_nebula.calendar.php b/templates/brown_nebula.calendar.php new file mode 100644 index 0000000..b38e824 --- /dev/null +++ b/templates/brown_nebula.calendar.php @@ -0,0 +1,79 @@ + diff --git a/templates/clean.calendar.php b/templates/clean.calendar.php new file mode 100644 index 0000000..b9ee8ca --- /dev/null +++ b/templates/clean.calendar.php @@ -0,0 +1,66 @@ + diff --git a/templates/colorful.eventlist.php b/templates/colorful.eventlist.php new file mode 100644 index 0000000..b8d3fb7 --- /dev/null +++ b/templates/colorful.eventlist.php @@ -0,0 +1,43 @@ + diff --git a/templates/flower.calendar.php b/templates/flower.calendar.php new file mode 100644 index 0000000..4fc4e1e --- /dev/null +++ b/templates/flower.calendar.php @@ -0,0 +1,83 @@ + details'; + +?> diff --git a/templates/green.eventlist.php b/templates/green.eventlist.php new file mode 100644 index 0000000..48d2fb9 --- /dev/null +++ b/templates/green.eventlist.php @@ -0,0 +1,42 @@ + diff --git a/templates/minimum.eventlist.php b/templates/minimum.eventlist.php new file mode 100644 index 0000000..6e36e9d --- /dev/null +++ b/templates/minimum.eventlist.php @@ -0,0 +1,46 @@ + diff --git a/templates/oldnema.tpl b/templates/oldnema.tpl new file mode 100644 index 0000000..08823fe --- /dev/null +++ b/templates/oldnema.tpl @@ -0,0 +1,89 @@ +CMSimple Calendar 1.4 Event-List Template +=== +

    %start%  %till%  %end%

    +=== +
    %weekly%
    +=== +

    %longweekday%

    +=== +
    +

    %infolink% %field1%

    +

    %shortweekday% %time%     %date%

    +

    %mainfield%

    +
    %bookedout%
    +

    %field3%

    +
    %description%
    +
    +
    +=== +
    +

    %ended%

    +

    %mainfield%

    +

    %field3%

    +

    %shortweekday% %time% %date% %field1% %infolink%

    +
    +=== +
    %single%
    +=== +

    %month% %year%

    +=== +
    +

    %age%

    +

    %infolink% %field1%

    +

    %date%   %time%

    +

    %mainfield%

    +
    %bookedout%
    +

    %field3%

    +
    %description%
    +
    +
    +=== +
    +

    %infolink% %field1%

    +

    %date%   %time%

    +

    %mainfield%

    +
    %bookedout%
    +

    %field3%

    +
    %description%
    +
    +
    +=== +

    %ended%: %date%, %time%, %mainfield% %field3% %field1% %infolink%

    +

    ––––––––––––––––––

    +=== +
    +

    %infolink% %field1%

    +

    %date%   %time%

    +

    %mainfield%

    +
    %bookedout%
    +

    %field3%

    +
    %description%
    +
    +
    +=== +

    %ended%: %date%, %time%, %mainfield% %field3% %field1% %infolink%

    +

    ––––––––––––––––––

    diff --git a/templates/oldstylecolors.eventlist.php b/templates/oldstylecolors.eventlist.php new file mode 100644 index 0000000..31b9b14 --- /dev/null +++ b/templates/oldstylecolors.eventlist.php @@ -0,0 +1,42 @@ + diff --git a/templates/simple.tpl b/templates/simple.tpl new file mode 100644 index 0000000..cd4967d --- /dev/null +++ b/templates/simple.tpl @@ -0,0 +1,47 @@ +CMSimple Calendar 1.4 Event-List Template +=== +

    %start%  %till%  %end%

    +=== +
    %weekly%
    +=== +

    %longweekday%

    +=== +
    %mainfield% %field3% +%bookedout%
    +

    %longweekday% %time% %infolink%
    %date% %field1%

    +
    %description%
    +

    ––––––––––––––––––

    +=== +

    %ended%: %shortweekday% %time%, %date% %mainfield% %field3% %field1% %infolink%

    +

    ––––––––––––––––––

    +=== +
    %single%
    +=== +

    %month% %year%

    +=== +
    %mainfield% %field3% %age% +%bookedout%
    +

    %date% %time% %infolink% %field1%

    +
    %description%
    +
    +

    ––––––––––––––––––

    +=== +
    %mainfield% %field3% +%bookedout%
    +

    %date% %time% %infolink% %field1%

    +
    %description%
    +
    +

    ––––––––––––––––––

    +=== +

    %ended%: %date%, %time%, %mainfield% %field3% %field1% %infolink%

    +

    ––––––––––––––––––

    +=== +
    %mainfield% %field3% +%bookedout%
    +

    %date% %time% %infolink% %field1%

    +
    %description%
    +
    +

    ––––––––––––––––––

    +=== +

    %ended%: %date%, %time%, %mainfield% %field3% %field1% %infolink%

    +

    ––––––––––––––––––

    diff --git a/version.nfo b/version.nfo new file mode 100644 index 0000000..3c1bf88 --- /dev/null +++ b/version.nfo @@ -0,0 +1 @@ +Calendar,1.4.6,1.4.6,,,http://frankziesing.de/cmsimple/?Start:Calendar,http://frankziesing.de/cmsimple/downloads/versioninfo/calendar_version.nfo